diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js
index b2ced24f3d3cc17cb455a9a88cc17ad0a67d8f6c..130127c649794e9d904d9c6d173290c772005132 100644
--- a/src/js/itemAvailability.js
+++ b/src/js/itemAvailability.js
@@ -185,7 +185,21 @@ window.isProstheticAvailable = function(slave, prosthetic) {
  */
 window.addProsthetic = function(slave, prosthetic) {
 	if (!isProstheticAvailable(slave, prosthetic)) {
-		slave.readyProsthetics.push({id: prosthetic});
+		let limb = prostheticToLimb(prosthetic);
+		if (limb > 0) {
+			let p = {
+				id: prosthetic,
+				arm: {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()},
+				leg: {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}
+			};
+			p.arm.left.type = limb;
+			p.arm.right.type = limb;
+			p.leg.left.type = limb;
+			p.leg.right.type = limb;
+			slave.readyProsthetics.push(p);
+		} else {
+			slave.readyProsthetics.push({id: prosthetic});
+		}
 	}
 };
 
diff --git a/src/js/surgery.js b/src/js/surgery.js
index 3efd07bcafc20cc3c2c3194469b45c79861d7350..404641a3d100bab458a7e38df859d7296c4e0d9a 100644
--- a/src/js/surgery.js
+++ b/src/js/surgery.js
@@ -527,10 +527,19 @@ window.surgeryAmp = function(slave, part) {
  * @param {string} limb
  */
 window.removeLimbs = function(slave, limb) {
-	// TODO: add bodymod support for prosthetics
+	function remove(limb, side) {
+		const prosthetic = findProsthetic(slave, limbToProsthetic(slave[limb][side].type));
+
+		if (prosthetic) {
+			prosthetic[limb][side] = slave[limb][side];
+		}
+
+		slave[limb][side] = null;
+	}
+
 	switch (limb) {
 		case "left arm":
-			slave.arm.left = null;
+			remove("arm", "left");
 			delete slave.brand["left upper arm"];
 			delete slave.brand["left lower arm"];
 			delete slave.brand["left wrist"];
@@ -542,7 +551,7 @@ window.removeLimbs = function(slave, limb) {
 			}
 			break;
 		case "right arm":
-			slave.arm.right = null;
+			remove("arm", "right");
 			delete slave.brand["right upper arm"];
 			delete slave.brand["right lower arm"];
 			delete slave.brand["right wrist"];
@@ -554,7 +563,7 @@ window.removeLimbs = function(slave, limb) {
 			}
 			break;
 		case "left leg":
-			slave.leg.left = null;
+			remove("leg", "left");
 			delete slave.brand["left thigh"];
 			delete slave.brand["left calf"];
 			delete slave.brand["left ankle"];
@@ -568,7 +577,7 @@ window.removeLimbs = function(slave, limb) {
 			}
 			break;
 		case "right leg":
-			slave.leg.right = null;
+			remove("leg", "right");
 			delete slave.brand["right thigh"];
 			delete slave.brand["right calf"];
 			delete slave.brand["right ankle"];
@@ -601,23 +610,29 @@ window.removeLimbs = function(slave, limb) {
  * @param {number} id
  */
 window.attachLimbs = function(slave, limb, id) {
-	// TODO: add support for body mods
+	function attach(limb, side) {
+		let prosthetic = findProsthetic(slave, limbToProsthetic(id));
+
+		if (prosthetic) {
+			slave[limb][side] = prosthetic[limb][side];
+		} else {
+			slave[limb][side] = new App.Entity.LimbState();
+			slave[limb][side].type = id;
+		}
+	}
+
 	switch (limb) {
 		case "left arm":
-			slave.arm.left = new App.Entity.LimbState();
-			slave.arm.left.type = id;
+			attach("arm", "left");
 			break;
 		case "right arm":
-			slave.arm.right = new App.Entity.LimbState();
-			slave.arm.right.type = id;
+			attach("arm", "right");
 			break;
 		case "left leg":
-			slave.leg.left = new App.Entity.LimbState();
-			slave.leg.left.type = id;
+			attach("leg", "left");
 			break;
 		case "right leg":
-			slave.leg.right = new App.Entity.LimbState();
-			slave.leg.right.type = id;
+			attach("leg", "right");
 			break;
 		case "all":
 			attachLimbs(slave, "left arm", id);