Index: code/ship/ship.cpp
===================================================================
--- code/ship/ship.cpp	(revision 8412)
+++ code/ship/ship.cpp	(working copy)
@@ -4964,6 +4964,10 @@
 
 	// corkscrew missile stuff
 	shipp->next_corkscrew_fire = 1;
+	
+	// Missile bank indexes to avoid firing different swarm/corkscrew missiles
+	shipp->swarm_misile_bank = -1;
+	shipp->corkscrew_missile_bank = -1;
 
 	// field for score
 	shipp->score = sip->score;
@@ -10645,6 +10649,7 @@
 		} else {
 			shipp->num_swarm_missiles_to_fire += wip->swarm_count;
 		}
+		shipp->swarm_misile_bank = shipp->weapons.current_secondary_bank;
 		return 1;		//	Note: Missiles didn't get fired, but the frame interval code will fire them.
 	}
 
@@ -10652,7 +10657,8 @@
 	if ( (wip->wi_flags & WIF_CORKSCREW) && !allow_swarm ) {
 		//phreak 11-9-02 
 		//changed this from 4 to custom number defined in tables
-		shipp->num_corkscrew_to_fire = (ubyte)(shipp->num_corkscrew_to_fire + (ubyte)wip->cs_num_fired);		
+		shipp->num_corkscrew_to_fire = (ubyte)(shipp->num_corkscrew_to_fire + (ubyte)wip->cs_num_fired);
+		shipp->corkscrew_missile_bank = shipp->weapons.current_secondary_bank;
 		return 1;		//	Note: Missiles didn't get fired, but the frame interval code will fire them.
 	}	
 
Index: code/ship/ship.h
===================================================================
--- code/ship/ship.h	(revision 8412)
+++ code/ship/ship.h	(working copy)
@@ -504,6 +504,7 @@
 	char targeting_laser_bank;						// -1 if not firing, index into polymodel gun points if it _is_ firing
 	// corkscrew missile stuff
 	ubyte num_corkscrew_to_fire;						// # of corkscrew missiles lef to fire
+	int corkscrew_missile_bank;
 	// END PACK
 
 	// targeting laser info
@@ -610,6 +611,7 @@
 	int	next_swarm_fire;					// timestamp of next swarm missile to fire
 	int	next_swarm_path;					// next path number for swarm missile to take
 	int	num_turret_swarm_info;			// number of turrets in process of launching swarm
+	int swarm_misile_bank;				// The missilebank the swarm was originally launched from
 
 	int	group;								// group ship is in, or -1 if none.  Fred thing
 	int	death_roll_snd;					// id of death roll sound, may need to be stopped early	
Index: code/weapon/corkscrew.cpp
===================================================================
--- code/weapon/corkscrew.cpp	(revision 8412)
+++ code/weapon/corkscrew.cpp	(working copy)
@@ -85,15 +85,25 @@
 	swp = &sp->weapons;
 	if ( swp->current_secondary_bank == -1 ) {
 		sp->num_corkscrew_to_fire = 0;
+		sp->corkscrew_missile_bank = -1;
 		return;
 	}
 
+	// If the missile bank is a different one then stop firing the corkscrew
+	if (swp->current_secondary_bank != sp->corkscrew_missile_bank)
+	{
+		sp->num_corkscrew_to_fire = 0;
+		sp->corkscrew_missile_bank = -1;
+		return;
+	}
+
 	weapon_info_index = swp->secondary_bank_weapons[swp->current_secondary_bank];
 	Assert( weapon_info_index >= 0 && weapon_info_index < MAX_WEAPON_TYPES );
 
 	// if current secondary bank is not a corkscrew missile, return
 	if ( !(Weapon_info[weapon_info_index].wi_flags & WIF_CORKSCREW) ) {
 		sp->num_corkscrew_to_fire = 0;
+		sp->corkscrew_missile_bank = -1;
 		return;
 	}
 
Index: code/weapon/swarm.cpp
===================================================================
--- code/weapon/swarm.cpp	(revision 8412)
+++ code/weapon/swarm.cpp	(working copy)
@@ -102,15 +102,25 @@
 	swp = &sp->weapons;
 	if ( swp->current_secondary_bank == -1 ) {
 		sp->num_swarm_missiles_to_fire = 0;
+		sp->swarm_misile_bank = -1;
 		return;
 	}
 
+	// If the missile bank is a different one then stop firing the corkscrew
+	if (swp->current_secondary_bank != sp->swarm_misile_bank)
+	{
+		sp->num_swarm_missiles_to_fire = 0;
+		sp->swarm_misile_bank = -1;
+		return;
+	}
+
 	weapon_info_index = swp->secondary_bank_weapons[swp->current_secondary_bank];
 	Assert( weapon_info_index >= 0 && weapon_info_index < MAX_WEAPON_TYPES );
 
 	// if current secondary bank is not a swarm missile, return
 	if ( !(Weapon_info[weapon_info_index].wi_flags & WIF_SWARM) ) {
 		sp->num_swarm_missiles_to_fire = 0;
+		sp->swarm_misile_bank = -1;
 		return;
 	}
 
