diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 80fd177d84..7b5b234a90 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -27,6 +27,13 @@
return FALSE
return TRUE
+/*
+This proc gets called by upgrades after installing them. Use this for things that for example need to be moved into a specific borg module,
+as performing this in action() will cause the module to end up in the borg instead of its intended location due to forceMove() being called afterwards..
+*/
+/obj/item/borg/upgrade/proc/afterInstall(mob/living/silicon/robot/R, user = usr)
+ return
+
/obj/item/borg/upgrade/proc/deactivate(mob/living/silicon/robot/R, user = usr)
if (!(src in R.upgrades))
return FALSE
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 6143bde602..1eb308af00 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -454,10 +454,12 @@
if(U.action(src))
to_chat(user, "You apply the upgrade to [src].")
if(U.one_use)
+ U.afterInstall(src)
qdel(U)
else
U.forceMove(src)
upgrades += U
+ U.afterInstall(src)
else
to_chat(user, "Upgrade error.")
U.forceMove(drop_location())
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index c1f47ccd1a..438c000a1e 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -105,10 +105,20 @@
holds_charge = TRUE
unique_frequency = TRUE
+/obj/item/gun/energy/kinetic_accelerator/cyborg/Destroy()
+ for(var/obj/item/borg/upgrade/modkit/M in modkits)
+ M.uninstall(src)
+ return ..()
+
/obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg
holds_charge = TRUE
unique_frequency = TRUE
+/obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg/Destroy()
+ for(var/obj/item/borg/upgrade/modkit/M in modkits)
+ M.uninstall(src)
+ return ..()
+
/obj/item/gun/energy/kinetic_accelerator/minebot
trigger_guard = TRIGGER_GUARD_ALLOW_ALL
overheat_time = 20
@@ -284,11 +294,11 @@
else
..()
-/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R)
- . = ..()
- if (.)
- for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules)
- return install(H, usr)
+/obj/item/borg/upgrade/modkit/afterInstall(mob/living/silicon/robot/R)
+ for(var/obj/item/gun/energy/kinetic_accelerator/H in R.module.modules)
+ if(install(H, R)) //It worked
+ return
+ to_chat(R, "Upgrade error - Aborting Kinetic Accelerator linking.") //No applicable KA found, insufficient capacity, or some other problem.
/obj/item/borg/upgrade/modkit/proc/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user)
. = TRUE
@@ -323,12 +333,6 @@
to_chat(user, "You don't have room([KA.get_remaining_mod_capacity()]% remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits.")
. = FALSE
-/obj/item/borg/upgrade/modkit/deactivate(mob/living/silicon/robot/R, user = usr)
- . = ..()
- if (.)
- for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/KA in R.module.modules)
- uninstall(KA)
-
/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/gun/energy/kinetic_accelerator/KA, forcemove = TRUE)
KA.modkits -= src
if(forcemove)