diff --git a/code/modules/smithing/machinery/casting_basin.dm b/code/modules/smithing/machinery/casting_basin.dm
index 24f8c1b1be5..12e5708ece0 100644
--- a/code/modules/smithing/machinery/casting_basin.dm
+++ b/code/modules/smithing/machinery/casting_basin.dm
@@ -115,13 +115,14 @@
to_chat(user, "[used] does not fit in [src]'s cast slot.")
return
- if(cast)
- to_chat(user, "[src] already has a cast inserted.")
- return
-
if(used.flags & NODROP || !user.transfer_item_to(used, src))
to_chat(user, "[used] is stuck to your hand!")
return ITEM_INTERACT_COMPLETE
+ if(cast)
+ user.put_in_active_hand(cast)
+ to_chat(user, "You swap [used] with [cast] in [src].")
+ else
+ to_chat(user, "You insert [used] into [src].")
cast = used
update_icon(UPDATE_OVERLAYS)
return ITEM_INTERACT_COMPLETE
diff --git a/code/modules/smithing/smith_machinery.dm b/code/modules/smithing/smith_machinery.dm
index 6e5e4dbdee3..d01456bec2c 100644
--- a/code/modules/smithing/smith_machinery.dm
+++ b/code/modules/smithing/smith_machinery.dm
@@ -52,14 +52,16 @@
return FINISH_ATTACK
if(istype(used, /obj/item/smithed_item/component))
- if(working_component)
- to_chat(user, "There is already a component in the machine!")
- return ITEM_INTERACT_COMPLETE
-
if(used.flags & NODROP || !user.drop_item() || !used.forceMove(src))
to_chat(user, "[used] is stuck to your hand!")
return ITEM_INTERACT_COMPLETE
+ if(working_component)
+ user.put_in_active_hand(working_component)
+ to_chat(user, "You swap [used] with [working_component] in [src].")
+ else
+ to_chat(user, "You insert [used] into [src].")
+
working_component = used
return ITEM_INTERACT_COMPLETE
return ..()