diff --git a/src/game/campaign.cpp b/src/game/campaign.cpp
index 54284be47..9bc8a08ed 100644
--- a/src/game/campaign.cpp
+++ b/src/game/campaign.cpp
@@ -210,9 +210,7 @@ local SCM CclDefineCampaign(SCM list)
     CampaignChapter* chapter;
     CampaignChapter** tail;
     int i;
-    int found;
 
-    found=0;
     //
     //	Campaign name
     //
@@ -222,43 +220,18 @@ local SCM CclDefineCampaign(SCM list)
     if( Campaigns ) {
 	for( i=0; i<NumCampaigns; ++i ) {
 	    if( !strcmp(Campaigns[i].Ident, ident) ) {
-		found=1;
-		break;
+		free(ident);
+		return SCM_UNSPECIFIED;
 	    }
 	}
-	if( found ) {
-	    campaign=Campaigns+i;
-	} else {
-	    Campaigns=realloc(Campaigns,sizeof(Campaign)*(NumCampaigns+1));
-	    campaign=Campaigns+NumCampaigns;
-	    NumCampaigns++;
-	}
+	Campaigns=realloc(Campaigns,sizeof(Campaign)*(NumCampaigns+1));
+	campaign=Campaigns+NumCampaigns;
+	NumCampaigns++;
     } else {
 	campaign=Campaigns=malloc(sizeof(Campaign));
 	NumCampaigns++;
     }
 
-    if( found ) {
-	CampaignChapter* ptr;
-	ptr=campaign->Chapters;
-	while( ptr ) {
-	    chapter=ptr->Next;
-	    if( ptr->Type==ChapterShowPicture ) {
-		free(ptr->d.picture.Act);
-		free(ptr->d.picture.Title);
-	    }
-	    else if( ptr->Type==ChapterPlayLevel ) {
-		free(ptr->d.level.Name);
-	    }
-	    free(ptr);
-	    ptr=chapter;
-	}
-	free(campaign->Ident);
-	free(campaign->Name);
-	free(campaign->File);
-    }
-
-
     memset(campaign,0,sizeof(Campaign));
     campaign->Ident=ident;
     campaign->Players=1;