Index: fred2/shipeditordlg.cpp
===================================================================
--- fred2/shipeditordlg.cpp	(revision 5691)
+++ fred2/shipeditordlg.cpp	(working copy)
@@ -1004,6 +1004,7 @@
 	char *str, old_name[255];
 	object *ptr;
 	int i, z, wing;
+	size_t t;
 	CSingleLock sync(&CS_cur_object_index), sync2(&CS_update);
 
 	nprintf(("Fred routing", "Ship dialog save\n"));
@@ -1069,7 +1070,39 @@
 				UpdateData(FALSE);
 			}
 
-		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_ship_name, Iff_info[i].iff_name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This ship name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_ship_name = _T(Wings[cur_wing].name);
+				UpdateData(FALSE);
+			}
+
+			for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_ship_name, Ai_tp_list[t].name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This ship name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_ship_name = _T(Ships[single_ship].ship_name);
+				UpdateData(FALSE);
+			}
+
+			for (i=0; i<MAX_WAYPOINT_LISTS; i++)
 			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_ship_name)) {
 				if (bypass_errors)
 					return 0;
Index: fred2/waypointpathdlg.cpp
===================================================================
--- fred2/waypointpathdlg.cpp	(revision 5691)
+++ fred2/waypointpathdlg.cpp	(working copy)
@@ -21,6 +21,7 @@
 #include "ai/aigoals.h"
 #include "starfield/starfield.h"
 #include "jumpnode/jumpnode.h"
+#include "iff_defs/iff_defs.h"
 
 #define ID_JUMP_NODE_MENU	8000
 #define ID_WAYPOINT_MENU	9000
@@ -147,6 +148,7 @@
 	char *str, old_name[255];
 	int i, z;
 	object *ptr;
+	size_t t;
 
 	if (!GetSafeHwnd())
 		return 0;
@@ -178,7 +180,7 @@
 
 		ptr = GET_FIRST(&obj_used_list);
 		while (ptr != END_OF_LIST(&obj_used_list)) {
-			if (ptr->type == OBJ_SHIP) {
+			if ((ptr->type == OBJ_SHIP) || (ptr->type == OBJ_START)) {
 				if (!stricmp(m_name, Ships[ptr->instance].ship_name)) {
 					if (bypass_errors)
 						return 1;
@@ -198,6 +200,38 @@
 			ptr = GET_NEXT(ptr);
 		}
 
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_name, Iff_info[i].iff_name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This waypoint path name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_name = _T(Waypoint_lists[cur_waypoint_list].name);
+				UpdateData(FALSE);
+			}
+
+		for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_name, Ai_tp_list[t].name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This waypoint path name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_name = _T(Waypoint_lists[cur_waypoint_list].name);
+				UpdateData(FALSE);
+			}
+
 		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
 		{
 			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_name) && (i != cur_waypoint_list)) {
@@ -265,7 +299,7 @@
 
 		ptr = GET_FIRST(&obj_used_list);
 		while (ptr != END_OF_LIST(&obj_used_list)) {
-			if (ptr->type == OBJ_SHIP) {
+			if ((ptr->type == OBJ_SHIP) || (ptr->type == OBJ_START)) {
 				if (!stricmp(m_name, Ships[ptr->instance].ship_name)) {
 					if (bypass_errors)
 						return 1;
@@ -285,6 +319,38 @@
 			ptr = GET_NEXT(ptr);
 		}
 
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_name, Iff_info[i].iff_name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This jump node name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+					m_name = _T(jnp->get_name_ptr());
+				UpdateData(FALSE);
+			}
+
+		for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_name, Ai_tp_list[t].name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This jump node name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+					m_name = _T(jnp->get_name_ptr());
+				UpdateData(FALSE);
+			}
+
 		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
 		{
 			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_name)) {
Index: fred2/wing_editor.cpp
===================================================================
--- fred2/wing_editor.cpp	(revision 5691)
+++ fred2/wing_editor.cpp	(working copy)
@@ -22,6 +22,7 @@
 #include "jumpnode/jumpnode.h"
 #include "cfile/cfile.h"
 #include "restrictpaths.h"
+#include "iff_defs/iff_defs.h"
 
 #define ID_WING_MENU 9000
 
@@ -538,6 +539,7 @@
 {
 	char *str, old_name[255], buf[512];
 	int i, z;
+	size_t t;
 	object *ptr;
 
 	nprintf(("Fred routing", "Wing dialog save\n"));
@@ -569,7 +571,7 @@
 
 		ptr = GET_FIRST(&obj_used_list);
 		while (ptr != END_OF_LIST(&obj_used_list)) {
-			if (ptr->type == OBJ_SHIP) {
+			if ((ptr->type == OBJ_SHIP) || (ptr->type == OBJ_START)) {
 				if (!stricmp(m_wing_name, Ships[ptr->instance].ship_name)) {
 					if (bypass_errors)
 						return 1;
@@ -589,6 +591,38 @@
 			ptr = GET_NEXT(ptr);
 		}
 
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_wing_name, Iff_info[i].iff_name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This wing name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_wing_name = _T(Wings[cur_wing].name);
+				UpdateData(FALSE);
+			}
+
+			for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_wing_name, Ai_tp_list[t].name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This wing name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_wing_name = _T(Wings[cur_wing].name);
+				UpdateData(FALSE);
+			}
+
 		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
 			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_wing_name)) {
 				if (bypass_errors)
