diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
index 5576bd6168b..fd134d51f8f 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
@@ -171,31 +171,40 @@
icon_state = "stickyweb2"
/obj/structure/spider/terrorweb/CanPass(atom/movable/mover, turf/target)
- if(istype(mover, /mob/living/simple_animal/hostile/poison/terror_spider))
- return 1
+ if(isterrorspider(mover))
+ return TRUE
if(istype(mover, /obj/item/projectile/terrorqueenspit))
- return 1
+ return TRUE
if(isliving(mover))
var/mob/living/M = mover
if(M.lying)
- return 1
- if(prob(80))
- to_chat(mover, "You get stuck in [src] for a moment.")
- M.Stun(4) // 8 seconds.
- M.Weaken(4) // 8 seconds.
- if(iscarbon(mover))
- var/mob/living/carbon/C = mover
- web_special_ability(C)
- spawn(70)
- if(C.loc == loc)
- qdel(src)
- return 1
- else
- return 0
+ return TRUE
+ return prob(80)
if(istype(mover, /obj/item/projectile))
return prob(20)
return ..()
+/obj/structure/spider/terrorweb/Crossed(atom/movable/AM, oldloc)
+ ..()
+ if(isliving(AM) && !isterrorspider(AM))
+ var/mob/living/M = AM
+ to_chat(M, "You get stuck in [src] for a moment.")
+ M.Stun(4) // 8 seconds.
+ M.Weaken(4) // 8 seconds.
+ if(iscarbon(M))
+ web_special_ability(M)
+ addtimer(CALLBACK(src, .proc/after_carbon_crossed, M), 0.7 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
+
+/**
+ * Called some time after a carbon mob crossed the terror web.
+ *
+ * Arguments:
+ * * C - The carbon mob.
+ */
+/obj/structure/spider/terrorweb/proc/after_carbon_crossed(mob/living/carbon/C)
+ if(!QDELETED(C) && C.loc == loc)
+ qdel(src)
+
/obj/structure/spider/terrorweb/bullet_act(obj/item/projectile/Proj)
if(Proj.damage_type != BRUTE && Proj.damage_type != BURN)
visible_message("[src] is undamaged by [Proj]!")