diff --git a/src/p_inter.c b/src/p_inter.c
index bd3c15a456f06d61978ec7aadf95de70d5c6b1ee..907388a8c555b34afbcd175731e28a0fd250bbc9 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -798,6 +798,17 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
 				boolean prevCollected;
 				const boolean isServer = ((player - players) == serverplayer);
 
+				if ((special->flags2 & MF2_NIGHTSPULL)
+					&& (toucher == special->tracer))
+				{
+					// Since collecting may not remove the object,
+					// we need to manually stop it from chasing.
+					P_SetTarget(&special->tracer, NULL);
+					special->flags2 &= ~MF2_NIGHTSPULL;
+					special->movefactor = 0;
+					special->momx = special->momy = special->momz = 0;
+				}
+
 				if (!P_CanPickupEmblem(player, special->health - 1))
 				{
 					return;