diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 280eafd85ae..2f6ebba8a44 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -211,7 +211,7 @@
else if(success)
user << "You put some things in [S]."
else
- user << "You fail to pick anything up with [S]."
+ user << "You fail to pick anything up with \the [S]."
else if(S.can_be_inserted(src))
S.handle_item_insertion(src)
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 70caa6ba36f..8a9c00ce3bd 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -225,7 +225,7 @@
/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0)
if(!istype(W)) return //Not an item
- if(!usr.canUnEquip(W))
+ if(usr.isEquipped(W) && !usr.canUnEquip(W))
return 0
if(src.loc == W)
@@ -235,6 +235,9 @@
usr << "[src] is full, make some space."
return 0 //Storage item is full
+ if(W.anchored)
+ return 0
+
if(can_hold.len)
if(!is_type_in_list(W, can_hold))
if(!stop_messages && ! istype(W, /obj/item/weapon/hand_labeler))
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 8a80e2f440b..e1061b09958 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -186,19 +186,20 @@ var/list/slot_equipment_priority = list( \
wear_mask = null
update_inv_wear_mask(0)
return
+
+/mob/proc/isEquipped(obj/item/I)
+ if(!I)
+ return 0
+ return get_inventory_slot(I) != 0
/mob/proc/canUnEquip(obj/item/I)
if(!I) //If there's nothing to drop, the drop is automatically successful.
return 1
var/slot = get_inventory_slot(I)
- if(slot && !I.mob_can_unequip(src, slot))
- return 0
-
- drop_from_inventory(I)
- return 1
+ return slot && I.mob_can_unequip(src, slot)
/mob/proc/get_inventory_slot(obj/item/I)
- var/slot
+ var/slot = 0
for(var/s in slot_back to slot_tie) //kind of worries me
if(get_equipped_item(s) == I)
slot = s