diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index 2a85984094e..a7df1f0adab 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -162,27 +162,28 @@
if(user.incapacitated() || !user.Adjacent(src))
return FALSE
return TRUE
-
-/obj/item/rcd/attackby(obj/item/W, mob/user, params)
- if(!istype(W, /obj/item/rcd_ammo))
- return ..()
-
- var/obj/item/rcd_ammo/R = W
- if((matter + R.ammoamt) > max_matter)
+/**
+*Tries to load ammo into an RCD, borgs will not use this.
+* Arguments:
+* * cart - the compressed matter catridge to insert
+* * user - the user to display the chat messages to
+*/
+/obj/item/rcd/proc/load(obj/item/rcd_ammo/cart, mob/living/user)
+ if(matter == max_matter)
to_chat(user, "The RCD can't hold any more matter-units.")
- return
-
- if(!user.unEquip(R))
- to_chat(user, "[R] is stuck to your hand!")
- return
-
- matter += R.ammoamt
- qdel(R)
+ return FALSE
+ matter = clamp((matter + cart.ammoamt), 0, 100)
+ qdel(cart)
playsound(loc, 'sound/machines/click.ogg', 50, 1)
to_chat(user, "The RCD now holds [matter]/[max_matter] matter-units.")
update_icon(UPDATE_OVERLAYS)
SStgui.update_uis(src)
+/obj/item/rcd/attackby(obj/item/W, mob/user, params)
+ if(!istype(W, /obj/item/rcd_ammo))
+ return ..()
+ var/obj/item/rcd_ammo/R = W
+ load(R, user)
/**
* Creates and displays a radial menu to a user when they trigger the `attack_self` of the RCD.
*
@@ -690,6 +691,12 @@
materials = list(MAT_METAL=16000, MAT_GLASS=8000)
var/ammoamt = 20
+/obj/item/rcd_ammo/attackby(obj/item/I, mob/user)
+ if(!istype(I, /obj/item/rcd) || issilicon(user))
+ return ..()
+ var/obj/item/rcd/R = I
+ R.load(src, user)
+
/obj/item/rcd_ammo/large
ammoamt = 100