diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index ffa80ec1583..b58a32988e5 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -71,6 +71,7 @@
src.add_fingerprint(usr)
if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter))
usr << "\blue You put [W] back to [src]."
+ user.drop_item()
del(W)
return
else if (istype(W, /obj/item/weapon/wrench))
diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm
index 164265e428c..7326f35ba23 100644
--- a/code/modules/detectivework/evidence.dm
+++ b/code/modules/detectivework/evidence.dm
@@ -11,35 +11,33 @@
if(!in_range(O,user))
return
- if(istype(O, /obj/item/weapon/storage) && O in user)
+ if(istype(O, /obj/item/weapon/storage))
return ..()
- if(!(O && istype(O)) || O.anchored == 1)
- user << "You can't put that inside \the [src]!"
+ if(!istype(O) || O.anchored == 1)
+ user << "You can't put that inside \the [src]!"
return ..()
if(istype(O, /obj/item/weapon/evidencebag))
- user << "You find putting an evidence bag in another evidence bag to be slightly absurd."
+ user << "You find putting an evidence bag in another evidence bag to be slightly absurd."
return
if(contents.len)
- user << "The [src] already has something inside it."
+ user << "\The [src] already has something inside it."
return ..()
- if(O in user) //If it is in their inventory, but not in their hands, don't grab it off of them.
- if(user.l_hand == O)
+ if(!isturf(O.loc)) //If it isn't on the floor. Do some checks to see if it's in our hands or a box. Otherwise give up.
+ if(istype(O.loc,/obj/item/weapon/storage)) //in a container.
+ var/obj/item/weapon/storage/U = O.loc
+ user.client.screen -= O
+ U.contents.Remove(O)
+ else if(user.l_hand == O) //in a hand
user.drop_l_hand()
- else if(user.r_hand == O)
+ else if(user.r_hand == O) //in a hand
user.drop_r_hand()
else
- user << "You are wearing that."
return
- else if(istype(O.loc,/obj/item/weapon/storage))
- var/obj/item/weapon/storage/U = O.loc
- user.client.screen -= O
- U.contents.Remove(O)
-
user.visible_message("\The [user] puts \a [O] into \a [src]", "You put \the [O] inside \the [src].",\
"You hear a rustle as someone puts something into a plastic bag.")
icon_state = "evidence"
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 804a969b50b..051fc498ad3 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -61,6 +61,8 @@
else if(put_in_inactive_hand(W)) return 1
else
W.loc = get_turf(src)
+ W.layer = initial(W.layer)
+ W.dropped()
return 0