diff --git a/src/p_enemy.c b/src/p_enemy.c
index d943f9e78b480956a372f6da7dca327583cb6974..30157981243294d01e86697bcfe855653a069d2b 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -5165,7 +5165,7 @@ static boolean PIT_MinusCarry(mobj_t *thing)
 	if (abs(thing->z - minus->z) > minus->height)
 		return true;
 
-	minus->tracer = thing;
+	P_SetTarget(&minus->tracer, thing);
 	minus->tracer->flags &= ~MF_PUSHABLE;
 
 	return true;
@@ -5251,7 +5251,7 @@ void A_MinusDigging(mobj_t *actor)
 		if (P_TryMove(actor->tracer, actor->x, actor->y, false))
 			actor->tracer->z = mz;
 		else
-			actor->tracer = NULL;
+			P_SetTarget(&actor->tracer, NULL);
 	}
 }
 
@@ -12934,8 +12934,8 @@ void A_DustDevilThink(mobj_t *actor)
 			layer->extravalue1 = TICRATE * 3;
 
 			//Chain them
-			layer->tracer = actor->tracer;
-			actor->tracer = layer;
+			P_SetTarget(&layer->tracer, actor->tracer);
+			P_SetTarget(&actor->tracer, layer);
 		}
 	}
 
@@ -13312,14 +13312,14 @@ void A_SnapperSpawn(mobj_t *actor)
 
 	// It spawns 1 head.
 	seg = P_SpawnMobj(actor->x, actor->y, actor->z, headtype);
-	ptr->tracer = seg;
+	P_SetTarget(&ptr->tracer, seg);
 	ptr = seg;
 
 	// It spawns 4 legs which will be handled in the thinker function.
 	for (i = 1; i <= 4; i++)
 	{
 		seg = P_SpawnMobj(actor->x, actor->y, actor->z, legtype);
-		ptr->tracer = seg;
+		P_SetTarget(&ptr->tracer, seg);
 		ptr = seg;
 
 		// The legs' base offsets are stored as extravalues, as relative coordinates in xy space.