diff --git a/src/r_things.c b/src/r_things.c
index 7892dbb7bec2113b8a0efc6e11665958ce52feec..3d84813bb2ac9094ca2034fe5c9a54aab0b19191 100644
--- a/src/r_things.c
+++ b/src/r_things.c
@@ -1117,8 +1117,9 @@ static void R_ProjectSprite(mobj_t *thing)
 
 	angle_t ang;
 	fixed_t iscale;
-	fixed_t scalestep = 0; // toast '16
-	fixed_t offset;
+	fixed_t scalestep; // toast '16
+	fixed_t offset, offset2;
+	boolean flatsprite = true; //(thing->flags2 & MF2_PAPER);
 
 	//SoM: 3/17/2000
 	fixed_t gz, gzt;
@@ -1198,13 +1199,11 @@ static void R_ProjectSprite(mobj_t *thing)
 		I_Error("R_ProjectSprite: sprframes NULL for sprite %d\n", thing->sprite);
 #endif
 
-	if (1) //(sprframe->rotate != SRF_SINGLE || flatsprite)
-		ang = R_PointToAngle (thing->x, thing->y) - thing->angle;
-
-	if (1) //(flatsprite)
+	if (sprframe->rotate != SRF_SINGLE || flatsprite)
 	{
-		ang_scale = abs(FINESINE(ang>>ANGLETOFINESHIFT));
-		//scalestep = (FINECOSINE(ang>>ANGLETOFINESHIFT));
+		ang = R_PointToAngle (thing->x, thing->y) - thing->angle;
+		if (flatsprite)
+			ang_scale = abs(FINESINE(ang>>ANGLETOFINESHIFT));
 	}
 
 	if (sprframe->rotate == SRF_SINGLE)
@@ -1241,25 +1240,34 @@ static void R_ProjectSprite(mobj_t *thing)
 		offset = spritecachedinfo[lump].offset - spritecachedinfo[lump].width;
 	else
 		offset = -spritecachedinfo[lump].offset;
-	tx += FixedMul(offset, FixedMul(this_scale, ang_scale));
+	offset = FixedMul(offset, this_scale);
+	tx += FixedMul(offset, ang_scale);
 	x1 = (centerxfrac + FixedMul (tx,xscale)) >>FRACBITS;
 
 	// off the right side?
 	if (x1 > viewwidth)
 		return;
 
-	tx += FixedMul(spritecachedinfo[lump].width, FixedMul(this_scale, ang_scale));
+	offset2 = FixedMul(spritecachedinfo[lump].width, this_scale);
+	tx += FixedMul(offset2, ang_scale);
 	x2 = ((centerxfrac + FixedMul (tx,xscale)) >>FRACBITS) - 1;
 
 	// off the left side
 	if (x2 < 0)
 		return;
 
-	if (1) // (flatsprite)
+	if (flatsprite)
 	{
 		fixed_t yscale2;
 		INT32 range;
 
+		if (ang >= ANGLE_180)
+		{
+			offset *= -1;
+			offset2 *= -1;
+		}
+		offset2 += offset;
+
 		tr_x = thing->x + FixedMul(offset, FINECOSINE(thing->angle>>ANGLETOFINESHIFT)) - viewx;
 		tr_y = thing->y + FixedMul(offset, FINESINE(thing->angle>>ANGLETOFINESHIFT)) - viewy;
 		gxt = FixedMul(tr_x, viewcos);
@@ -1268,28 +1276,23 @@ static void R_ProjectSprite(mobj_t *thing)
 		yscale = FixedDiv(projectiony, tz);
 		if (yscale < 64) return; // Fix some funky visuals
 
-		offset += spritecachedinfo[lump].width;
-		tr_x = thing->x + FixedMul(offset, FINECOSINE(thing->angle>>ANGLETOFINESHIFT)) - viewx;
-		tr_y = thing->y + FixedMul(offset, FINESINE(thing->angle>>ANGLETOFINESHIFT)) - viewy;
+		tr_x = thing->x + FixedMul(offset2, FINECOSINE(thing->angle>>ANGLETOFINESHIFT)) - viewx;
+		tr_y = thing->y + FixedMul(offset2, FINESINE(thing->angle>>ANGLETOFINESHIFT)) - viewy;
 		gxt = FixedMul(tr_x, viewcos);
 		gyt = -FixedMul(tr_y, viewsin);
 		tz = gxt-gyt;
 		yscale2 = FixedDiv(projectiony, tz);
 		if (yscale2 < 64) return; // Fix some funky visuals
 
-		if (ang >= ANGLE_180)
-		{
-			fixed_t temp = yscale2;
-			yscale2 = yscale;
-			yscale = temp;
-		}
-
 		if (x2 > x1)
 			range = (x2 - x1);
 		else
 			range = 1;
+
 		scalestep = (yscale2 - yscale)/range;
 	}
+	else
+		scalestep = 0;
 
 	xscale = FixedMul(xscale, ang_scale);