Index: code/mission/missioncampaign.cpp
===================================================================
--- code/mission/missioncampaign.cpp	(revision 9679)
+++ code/mission/missioncampaign.cpp	(working copy)
@@ -1309,14 +1309,42 @@
 			sexp_unmark_persistent(Campaign.missions[i].formula);		// free any sexpression nodes used by campaign.
 		}
 
+		memset(Campaign.missions[i].briefing_cutscene, 0, NAME_LENGTH);
+		Campaign.missions[i].formula = 0;
 		Campaign.missions[i].completed = 0;
 		Campaign.missions[i].num_goals = 0;
 		Campaign.missions[i].num_events = 0;
 		Campaign.missions[i].num_variables = 0;	// Goober5000
+		Campaign.missions[i].mission_loop_formula = 0;
+		Campaign.missions[i].level = 0;
+		Campaign.missions[i].pos = 0;
+		Campaign.missions[i].flags = 0;
 		Campaign.missions[i].main_hall.clear();
+		Campaign.missions[i].debrief_persona_index = 0;
+		init_scoring_element(&Campaign.missions[i].stats);
 	}
 
+	memset(Campaign.name, 0, NAME_LENGTH);
+	memset(Campaign.filename, 0, MAX_FILENAME_LEN);
+	Campaign.type = 0;
+	Campaign.flags = 0;
 	Campaign.num_missions = 0;
+	Campaign.num_missions_completed = 0;
+	Campaign.current_mission = -1;
+	Campaign.next_mission = -1;
+	Campaign.prev_mission = -1;
+	Campaign.loop_enabled = 0;
+	Campaign.loop_mission = CAMPAIGN_LOOP_MISSION_UNINITIALIZED;
+	Campaign.loop_reentry = 0;
+	Campaign.realign_required = 0;
+	Campaign.num_players = 0;
+	memset( Campaign.ships_allowed, 0, sizeof(Campaign.ships_allowed) );
+	memset( Campaign.weapons_allowed, 0, sizeof(Campaign.weapons_allowed) );
+	Campaign.num_variables = 0;
+	if (Campaign.variables != NULL) {
+		vm_free(Campaign.variables);
+		Campaign.variables = NULL;
+	}
 }
 
 /**
