diff --git a/src/r_things.c b/src/r_things.c
index f17b4ec52a997c8baa58d68ad8eb7e5acdc91cf9..6cb5bac6a5ce0225bff90e185b1771538ccafb37 100644
--- a/src/r_things.c
+++ b/src/r_things.c
@@ -1256,6 +1256,7 @@ static void R_ProjectSprite(mobj_t *thing)
 
 	if (1) // (flatsprite)
 	{
+		fixed_t yscale1;
 		fixed_t yscale2;
 		INT32 range;
 
@@ -1264,7 +1265,7 @@ static void R_ProjectSprite(mobj_t *thing)
 		gxt = FixedMul(tr_x, viewcos);
 		gyt = -FixedMul(tr_y, viewsin);
 		tz = gxt-gyt;
-		yscale = FixedDiv(projectiony, tz);
+		yscale1 = FixedDiv(projectiony, tz);
 
 		leftoffset += spritecachedinfo[lump].width;
 		tr_x = thing->x + FixedMul(leftoffset, FINECOSINE(ang>>ANGLETOFINESHIFT)) - viewx;
@@ -1274,11 +1275,20 @@ static void R_ProjectSprite(mobj_t *thing)
 		tz = gxt-gyt;
 		yscale2 = FixedDiv(projectiony, tz);
 
+		if (ang >= ANGLE_180)
+		{
+			fixed_t temp = yscale2;
+			yscale2 = yscale1;
+			yscale1 = temp;
+		}
+
 		if (x2 > x1)
 			range = (x2 - x1);
 		else
 			range = 1;
-		scalestep = (yscale2 - yscale)/range;
+		scalestep = (yscale2 - yscale1)/range;
+		yscale = yscale1;
+		//this_scale = FixedMul(this_scale, FixedDiv(yscale, yscale1));
 	}
 
 	xscale = FixedMul(xscale, ang_scale);