diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index 3e8592e9d0c..d5f65385bf2 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -27,16 +27,20 @@ var/list/holder_mob_icon_cache = list()
..()
/obj/item/weapon/holder/process()
+ update_state()
+/obj/item/weapon/holder/dropped()
+ ..()
+ spawn(1)
+ update_state()
+
+/obj/item/weapon/proc/update_state()
if(istype(loc,/turf) || !(contents.len))
-
for(var/mob/M in contents)
-
var/atom/movable/mob_container
mob_container = M
mob_container.forceMove(get_turf(src))
M.reset_view()
-
qdel(src)
/obj/item/weapon/holder/proc/sync(var/mob/living/M)
@@ -79,17 +83,23 @@ var/list/holder_mob_icon_cache = list()
//Mob procs and vars for scooping up
/mob/living/var/holder_type
-/mob/living/proc/get_scooped(var/mob/living/carbon/grabber)
+/mob/living/proc/get_scooped(var/mob/living/carbon/grabber, var/self_grab)
+
if(!holder_type || buckled || pinned.len)
return
- var/obj/item/weapon/holder/H = new holder_type(loc)
- src.loc = H
- H.name = loc.name
- H.attack_hand(grabber)
+ var/obj/item/weapon/holder/H = new holder_type(get_turf(src))
+ src.forceMove(H)
+ grabber.put_in_hands(H)
+
+ if(self_grab)
+ grabber << "\The [src] clambers onto you!"
+ src << "You climb up onto \the [grabber]!"
+ grabber.equip_to_slot_if_possible(H, slot_back, 0, 1)
+ else
+ grabber << "You scoop up \the [src]!"
+ src << "\The [grabber] scoops you up!"
- grabber << "You scoop up [src]."
- src << "[grabber] scoops you up."
grabber.status_flags |= PASSEMOTES
H.sync(src)
return H
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 4495ed41756..17fe2df713d 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1372,8 +1372,8 @@
/mob/living/carbon/human/MouseDrop(var/atom/over_object)
var/mob/living/carbon/human/H = over_object
- if(holder_type && a_intent == "help" && istype(H) && H.a_intent == "help" && !issmall(H) && Adjacent(H))
- get_scooped(H)
+ if(holder_type && istype(H) && !H.lying && !issmall(H) && Adjacent(H))
+ get_scooped(H, (usr == src))
return
return ..()
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index e19795b6413..5b79cde5de6 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -274,9 +274,6 @@
O.owner = H
/datum/species/proc/hug(var/mob/living/carbon/human/H,var/mob/living/target)
- if (target.holder_type && target.a_intent == "help" && H.a_intent == "help")
- target.get_scooped(H)
- return
var/t_him = "them"
switch(target.gender)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 579ec2e6d61..f2974d8a161 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -413,8 +413,8 @@
return 0
// Handle being picked up.
-/mob/living/silicon/pai/get_scooped(var/mob/living/carbon/grabber)
- var/obj/item/weapon/holder/H = ..()
+/mob/living/silicon/pai/get_scooped(var/mob/living/carbon/grabber, var/self_drop)
+ var/obj/item/weapon/holder/H = ..(grabber, self_drop)
if(!istype(H))
return
H.icon_state = "pai-[icon_state]"
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 7c25296a5ef..c55939e6aee 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -135,11 +135,6 @@
else
return ..()
-/mob/living/simple_animal/cat/get_scooped(var/mob/living/carbon/grabber)
- if (stat >= DEAD)
- return //since the holder icon looks like a living cat
- ..()
-
//Basic friend AI
/mob/living/simple_animal/cat/fluff
var/mob/living/carbon/human/friend
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 0ea2a05dd42..37630abdb6d 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -89,11 +89,6 @@
else
return ..()
-/mob/living/simple_animal/mouse/get_scooped(var/mob/living/carbon/grabber)
- if (stat >= DEAD)
- return
- ..()
-
/mob/living/simple_animal/mouse/start_pulling(var/atom/movable/AM)//Prevents mouse from pulling things
src << "You are too small to pull anything."
return