diff --git a/src/Mods/SecExp/buildings/secBarracks.tw b/src/Mods/SecExp/buildings/secBarracks.tw
index 3e46b03a25221d2aeb5aca886516c6c633c80d41..0fbe76bf1a140780ea578f17e03b84edec1c5da8 100644
--- a/src/Mods/SecExp/buildings/secBarracks.tw
+++ b/src/Mods/SecExp/buildings/secBarracks.tw
@@ -193,7 +193,7 @@ You are free to organize your menial slaves into fighting units. Currently you h
 	<br>
 	<<link "Form a new unit" "secBarracks">>
 		<<set _newUnit = {
-			ID: 0,
+			ID: App.SecExp.generateUnitID(),
 			platoonName: ordinalSuffix(++$createdSlavesUnits) + " slave platoon",
 			active: 1,
 			isDeployed: 0,
@@ -207,7 +207,6 @@ You are free to organize your menial slaves into fighting units. Currently you h
 			SF: 0,
 			commissars: 0,
 			battlesFought: 0}>>
-		<<generateUnitID _newUnit>>
 		<<set $slaveUnits.push(_newUnit)>>
 		<<set $menials -= _newUnit.troops>>
 	<</link>>
@@ -296,7 +295,7 @@ __Militia__
 		<br><br>
 		<<link "Form a new unit" "secBarracks">>
 			<<set _newUnit = {
-				ID: 0,
+				ID: App.SecExp.generateUnitID(),
 				platoonName: ordinalSuffix(++$createdMilitiaUnits) + " citizens' platoon",
 				active: 1,
 				isDeployed: 0,
@@ -310,7 +309,6 @@ __Militia__
 				SF: 0,
 				commissars: 0,
 				battlesFought: 0}>>
-			<<generateUnitID _newUnit>>
 			<<set $militiaUnits.push(_newUnit)>>
 			<<set $militiaFreeManpower -= _newUnit.troops>>
 		<</link>>
@@ -395,7 +393,7 @@ __Mercenaries__
 		<br><br>
 		<<link "Form a new unit" "secBarracks">>
 			<<set _newUnit = {
-				ID: 0,
+				ID: App.SecExp.generateUnitID(),
 				platoonName: ordinalSuffix(++$createdMercUnits) + " mercenary platoon",
 				active: 1,
 				isDeployed: 0,
@@ -409,7 +407,6 @@ __Mercenaries__
 				SF: 0,
 				commissars: 0,
 				battlesFought: 0}>>
-			<<generateUnitID _newUnit>>
 			<<set $mercUnits.push(_newUnit)>>
 			<<set $mercFreeManpower -= _newUnit.troops>>
 		<</link>>
diff --git a/src/Mods/SecExp/js/Unit.js b/src/Mods/SecExp/js/Unit.js
index 36c0c413185028c6c2d918ba44c283a67e4334cc..cd6bdfa02dc88a5f712005ff65046108295eee0e 100644
--- a/src/Mods/SecExp/js/Unit.js
+++ b/src/Mods/SecExp/js/Unit.js
@@ -1,3 +1,14 @@
+/** Generate a unit ID for a new unit
+ * @returns {number}
+ */
+App.SecExp.generateUnitID = function() {
+	return Math.max(
+		V.militiaUnits.reduce((acc, cur) => Math.max(acc, cur.ID), 0),
+		V.slaveUnits.reduce((acc, cur) => Math.max(acc, cur.ID), 0),
+		V.mercUnits.reduce((acc, cur) => Math.max(acc, cur.ID), 0)
+	) + 1;
+};
+
 /** Player unit factory - get a unit based on its type and index
  * @param {string} type - "Bots", "Militia", "Slaves", or "Mercs"
  * @param {number} [index] - must be supplied if type is not "Bots"
diff --git a/src/Mods/SecExp/widgets/miscSecExpWidgets.tw b/src/Mods/SecExp/widgets/miscSecExpWidgets.tw
index db9bddea9276f8d41ba7dbf20fc24ed804d7367f..77e99c5102c43d78eabfc7a00e534ff7145c178d 100644
--- a/src/Mods/SecExp/widgets/miscSecExpWidgets.tw
+++ b/src/Mods/SecExp/widgets/miscSecExpWidgets.tw
@@ -24,7 +24,7 @@
 		<</if>>
 		<<if ndef $militiaUnits[_i].ID>>
 			<br>Set militia missing ID
-			<<generateUnitID $militiaUnits[_i]>>
+			<<set $militiaUnits[_i].ID = App.SecExp.generateUnitID()>>
 		<</if>>
 		<<if ndef $militiaUnits[_i].cyber>>
 			<br>Set militia missing flag
@@ -55,7 +55,7 @@
 		<</if>>
 		<<if ndef $slaveUnits[_i].ID>>
 			<br>Set slave missing ID
-			<<generateUnitID $slaveUnits[_i]>>
+			<<set $slaveUnits[_i].ID = App.SecExp.generateUnitID()>>
 		<</if>>
 		<<if ndef $slaveUnits[_i].cyber>>
 			<br>Set slave missing flag
@@ -86,7 +86,7 @@
 		<</if>>
 		<<if ndef $mercUnits[_i].ID>>
 			<br>Set merc missing ID
-			<<generateUnitID $mercUnits[_i]>>
+			<<set $mercUnits[_i].ID = App.SecExp.generateUnitID()>>
 		<</if>>
 		<<if ndef $mercUnits[_i].cyber>>
 			<br>Set merc missing flag
diff --git a/src/Mods/SecExp/widgets/unitsWidgets.tw b/src/Mods/SecExp/widgets/unitsWidgets.tw
deleted file mode 100644
index 9cdc494ef7b54a3bff4d8cdc138d7408d0bc3489..0000000000000000000000000000000000000000
--- a/src/Mods/SecExp/widgets/unitsWidgets.tw
+++ /dev/null
@@ -1,25 +0,0 @@
-:: unitsWidgets [widget nobr]
-
-<<widget "generateUnitID">>
-	<<set _newID = 0>>
-
-	<<for _i = 0; _i < $militiaUnits.length; _i++>>
-		<<if $militiaUnits[_i].ID >= _newID>>
-			<<set _newID = $militiaUnits[_i].ID + 1>>
-		<</if>>
-	<</for>>
-
-	<<for _i = 0; _i < $slaveUnits.length; _i++>>
-		<<if $slaveUnits[_i].ID >= _newID>>
-			<<set _newID = $slaveUnits[_i].ID + 1>>
-		<</if>>
-	<</for>>
-
-	<<for _i = 0; _i < $mercUnits.length; _i++>>
-		<<if $mercUnits[_i].ID >= _newID>>
-			<<set _newID = $mercUnits[_i].ID + 1>>
-		<</if>>
-	<</for>>
-
-	<<set $args[0].ID = _newID>>
-<</widget>>
\ No newline at end of file