diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c
index 0b5d41c4f57015db09b996107fb3e54f1d14778c..897288da2aa485a2e42203b2eeeabcb0275ddde4 100644
--- a/src/hardware/hw_main.c
+++ b/src/hardware/hw_main.c
@@ -3606,6 +3606,8 @@ static void HWR_DrawDropShadow(mobj_t *thing, fixed_t scale)
 
 	scalemul = FixedMul(FRACUNIT - floordiff/640, scale);
 	scalemul = FixedMul(scalemul, (thing->radius*2) / gpatch->height);
+	if ((thing->scale != thing->old_scale) && (thing->scale >= FRACUNIT/1024)) // Interpolate shadows when scaling mobjs
+		scalemul = FixedMul(scalemul, FixedDiv(interp.scale, thing->scale));
 
 	fscale = FIXED_TO_FLOAT(scalemul);
 	fx = FIXED_TO_FLOAT(interp.x);
diff --git a/src/r_things.c b/src/r_things.c
index 916a7ee4ba85f8cf35fe07237cdba3c526045da4..89b9fe07ef89ddd0307317ca0933608b7cbdf7ff 100644
--- a/src/r_things.c
+++ b/src/r_things.c
@@ -1324,6 +1324,8 @@ static void R_ProjectDropShadow(mobj_t *thing, vissprite_t *vis, fixed_t scale,
 	if (trans >= 9) return;
 
 	scalemul = FixedMul(FRACUNIT - floordiff/640, scale);
+	if ((thing->scale != thing->old_scale) && (thing->scale >= FRACUNIT/1024)) // Interpolate shadows when scaling mobjs
+		scalemul = FixedMul(scalemul, FixedDiv(interp.scale, thing->scale));
 
 	patch = W_CachePatchName("DSHADOW", PU_SPRITE);
 	xscale = FixedDiv(projection, tz);