Index: code/weapon/swarm.cpp
===================================================================
--- code/weapon/swarm.cpp	(revision 6091)
+++ code/weapon/swarm.cpp	(working copy)
@@ -37,26 +37,9 @@
 #define SWARM_USED						(1<<0)
 #define SWARM_POSITIVE_PATH			(1<<1)
 
-typedef struct swarm_info {
-	int		flags;
-	int		change_timestamp;
-	vec3d	original_target;
-	vec3d	new_target;
-	vec3d	circle_rvec, circle_uvec;
-	vec3d	last_offset;
-	uint		change_count;		
-	int		path_num;			// which path swarm missile is currently following
-	int		homing_objnum;		// object number that swarm missile is homing on, -1 if not homing
-	int		change_time;		// when swarm missile should next update direction, based on missile speed
-	float		angle_offset;
-	float		last_dist;			// last distance to target
-} swarm_info;
 
-
-#define MAX_SWARM_MISSILES	100
 swarm_info	Swarm_missiles[MAX_SWARM_MISSILES];
 
-#define MAX_TURRET_SWARM_INFO	100
 turret_swarm_info Turret_swarm_info[MAX_TURRET_SWARM_INFO];
 
 int Turret_swarm_validity_next_check_time;
Index: code/weapon/swarm.h
===================================================================
--- code/weapon/swarm.h	(revision 6091)
+++ code/weapon/swarm.h	(working copy)
@@ -12,6 +12,8 @@
 #ifndef __FREESPACE_SWARM_H__
 #define __FREESPACE_SWARM_H__
 
+#include "globalincs/pstypes.h"
+
 struct object;
 struct ship_subsys;
 
@@ -29,8 +31,29 @@
 	int				weapon_num;
 } turret_swarm_info;
 
+typedef struct swarm_info {
+	int		flags;
+	int		change_timestamp;
+	vec3d	original_target;
+	vec3d	new_target;
+	vec3d	circle_rvec, circle_uvec;
+	vec3d	last_offset;
+	uint		change_count;		
+	int		path_num;			// which path swarm missile is currently following
+	int		homing_objnum;		// object number that swarm missile is homing on, -1 if not homing
+	int		change_time;		// when swarm missile should next update direction, based on missile speed
+	float		angle_offset;
+	float		last_dist;			// last distance to target
+} swarm_info;
+
 #define SWARM_DEFAULT_NUM_MISSILES_FIRED					4		// number of swarm missiles that launch when fired
 
+#define MAX_SWARM_MISSILES	100
+extern swarm_info	Swarm_missiles[MAX_SWARM_MISSILES];
+
+#define MAX_TURRET_SWARM_INFO	100
+extern turret_swarm_info Turret_swarm_info[MAX_TURRET_SWARM_INFO];
+
 void	swarm_level_init();
 void	swarm_delete(int index);
 int	swarm_create();
Index: code/weapon/weapons.cpp
===================================================================
--- code/weapon/weapons.cpp	(revision 6091)
+++ code/weapon/weapons.cpp	(working copy)
@@ -5090,7 +5090,15 @@
 			//if the child inherits parent target, do it only if the parent weapon was locked to begin with
 			if ((child_wip->wi_flags2 & WIF2_INHERIT_PARENT_TARGET) && (wp->homing_object != &obj_used_list))
 			{
-				weapon_set_tracking_info(weapon_objnum, parent_num, wp->target_num, 1, wp->homing_subsys);
+				//Deal with swarm weapons
+				if (wp->swarm_index >= 0) {
+					swarm_info	*swarmp;
+					swarmp = &Swarm_missiles[wp->swarm_index];
+
+					weapon_set_tracking_info(weapon_objnum, parent_num, swarmp->homing_objnum, 1, wp->homing_subsys);
+				} else {
+					weapon_set_tracking_info(weapon_objnum, parent_num, wp->target_num, 1, wp->homing_subsys);
+				}
 			}
 
     		//	Assign a little randomness to lifeleft so they don't all disappear at the same time.
