diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c
index 343fa43bf8757b4ac32283ea18030205df6acee4..6e72145713cef2f164b2bdb495aea24859908776 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 2916482fb2064a06583d524215c1e5671db5896e..62d97ff3305dfb56af2e8a5541e3b22b839edbb8 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);