diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 14abd2e90da..423f42cdda1 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -479,14 +479,25 @@
/mob/living/blind_examine_check(atom/examined_thing)
//need to be next to something and awake
- if(!in_range(examined_thing, src) || incapacitated())
+ if(!Adjacent(examined_thing) || incapacitated())
to_chat(src, "Something is there, but you can't see it!")
return FALSE
- //also neeed an empty hand, and you can only initiate as many examines as you have hands
- if(LAZYLEN(do_afters) >= usable_hands || get_active_held_item())
+
+ //you can examine things you're holding directly, but you can't examine other things if your hands are full
+ /// the item in our active hand
+ var/active_item = get_active_held_item()
+ if(active_item && active_item != examined_thing)
+ to_chat(src, "Your hands are too full to examine this!")
+ return FALSE
+
+ //you can only initiate exaimines if you have a hand, it's not disabled, and only as many examines as you have hands
+ /// our active hand, to check if it's disabled/detatched
+ var/obj/item/bodypart/active_hand = has_active_hand()? get_active_hand() : null
+ if(!active_hand || active_hand.bodypart_disabled || LAZYLEN(do_afters) >= usable_hands)
to_chat(src, "You don't have a free hand to examine this!")
return FALSE
- //can only queue up one examine on something at a time
+
+ //you can only queue up one examine on something at a time
if(examined_thing in do_afters)
return FALSE
@@ -496,7 +507,7 @@
/// how long it takes for the blind person to find the thing they're examining
var/examine_delay_length = rand(1 SECONDS, 2 SECONDS)
if(client?.recent_examines && client?.recent_examines[examined_thing]) //easier to find things we just touched
- examine_delay_length = 0.5 SECONDS
+ examine_delay_length = 0.33 SECONDS
else if(isobj(examined_thing))
examine_delay_length *= 1.5
else if(ismob(examined_thing) && examined_thing != src)
@@ -510,7 +521,7 @@
/// our current intent, so we can go back to it after touching
var/previous_intent = a_intent
a_intent = INTENT_HELP
- examined_thing.attack_hand(src)
+ INVOKE_ASYNC(examined_thing, /atom/proc/attack_hand, src)
a_intent = previous_intent
return TRUE