diff --git a/src/objects/instawhip.c b/src/objects/instawhip.c
index c5b6683fae26c6bceda56af2ba7adcb7b328be5b..859eeac5729f89b3b8aed39ab62ef78829d2db77 100644
--- a/src/objects/instawhip.c
+++ b/src/objects/instawhip.c
@@ -59,14 +59,11 @@ void Obj_InstaWhipThink (mobj_t *whip)
 
 void Obj_SpawnInstaWhipRecharge(player_t *player, angle_t angleOffset)
 {
-	mobj_t *x = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_INSTAWHIP_RECHARGE);
-
-	// This was previously used to delay the visual, back when this was VFX for a cooldown
-	// instead of VFX for a charge. We want to instantly bail out of that state now.
-	x->tics = 1;
+	mobj_t *x = P_SpawnMobjFromMobj(player->mo, 0, 0, player->mo->height / 2, MT_INSTAWHIP_RECHARGE);
 	x->renderflags |= RF_SLOPESPLAT | RF_NOSPLATBILLBOARD;
 
 	P_SetTarget(&recharge_target(x), player->mo);
+	P_InstaScale(x, x->target->scale * 2);
 	recharge_offset(x) = angleOffset;
 }
 
@@ -81,7 +78,8 @@ void Obj_InstaWhipRechargeThink(mobj_t *x)
 	}
 
 	P_MoveOrigin(x, target->x, target->y, target->z + (target->height / 2));
-	P_InstaScale(x, 2 * target->scale);
+	if (x->scale != target->scale * 2)
+		P_InstaScale(x, target->scale * 2);
 	x->angle = target->angle + recharge_offset(x);
 
 	// Flickers every other frame