diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 7855c4e87b..c1aed96d61 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -142,7 +142,8 @@
// Can most things breathe?
if(trace_gases)
continue
- if(A.get_moles(/datum/gas/oxygen) >= 16)
+ var/oxy_moles = A.get_moles(/datum/gas/oxygen)
+ if(oxy_moles < 16 || oxy_moles > 50)
continue
if(A.get_moles(/datum/gas/plasma))
continue
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
index 0dd9cf6bea..a6380a81b2 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
@@ -62,13 +62,24 @@
/datum/action/innate/heretic_shatter/IsAvailable()
if(IS_HERETIC(holder) || IS_HERETIC_MONSTER(holder))
- return TRUE
+ return ..()
else
return FALSE
/datum/action/innate/heretic_shatter/Activate()
if(do_after(holder,10, target = holder))
- var/turf/safe_turf = find_safe_turf(zlevels = sword.z, extended_safety_checks = TRUE)
+ if(!sword || QDELETED(sword))
+ return
+ if(!IsAvailable()) //Never trust the user.
+ return
+ var/swordz = (get_turf(sword))?.z //SHOULD usually have a turf but if it doesn't better be prepared.
+ if(!swordz)
+ to_chat(holder, "[sword] flickers but remains in place, as do you...")
+ return
+ var/turf/safe_turf = find_safe_turf(zlevels = swordz, extended_safety_checks = TRUE)
+ if(!safe_turf)
+ to_chat(holder, "[sword] flickers but remains in place, as do you...")
+ return
do_teleport(holder,safe_turf,forceMove = TRUE,channel=TELEPORT_CHANNEL_MAGIC)
to_chat(holder,"You feel a gust of energy flow through your body... the Rusted Hills heard your call...")
qdel(sword)