diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c
index 72c487565c8f533815e79bba28e663350b8161cf..2f49ed7d1d47796e132f5cd8f7fb0a5e882961c6 100644
--- a/src/hardware/hw_main.c
+++ b/src/hardware/hw_main.c
@@ -5248,8 +5248,7 @@ static void HWR_ProjectSprite(mobj_t *thing)
 		I_Error("sprframes NULL for sprite %d\n", thing->sprite);
 #endif
 
-	if (sprframe->rotate != SRF_SINGLE)
-		ang = R_PointToAngle (thing->x, thing->y) - thing->angle;
+	ang = R_PointToAngle (thing->x, thing->y) - thing->angle;
 
 	if (sprframe->rotate == SRF_SINGLE)
 	{
@@ -5258,7 +5257,7 @@ static void HWR_ProjectSprite(mobj_t *thing)
 		lumpoff = sprframe->lumpid[0];     //Fab: see note above
 		flip = sprframe->flip; // Will only be 0x00 or 0xFF
 
-		if (papersprite && (R_PointToAngle (thing->x, thing->y) - thing->angle < ANGLE_180))
+		if (papersprite && ang < ANGLE_180)
 		{
 			if (flip)
 				flip = 0;
@@ -5279,6 +5278,14 @@ static void HWR_ProjectSprite(mobj_t *thing)
 		//Fab: lumpid is the index for spritewidth,spriteoffset... tables
 		lumpoff = sprframe->lumpid[rot];
 		flip = sprframe->flip & (1<<rot);
+
+		if (papersprite && ang < ANGLE_180)
+		{
+			if (flip)
+				flip = 0;
+			else
+				flip = 1<<rot;
+		}
 	}
 
 	if (thing->skin && ((skin_t *)thing->skin)->flags & SF_HIRES)
@@ -5286,16 +5293,8 @@ static void HWR_ProjectSprite(mobj_t *thing)
 
 	if (papersprite)
 	{
-		if (flip && sprframe->rotate != SRF_SINGLE)
-		{
-			rightsin = FIXED_TO_FLOAT(FINESINE((thing->angle+ANGLE_180)>>ANGLETOFINESHIFT));
-			rightcos = FIXED_TO_FLOAT(FINECOSINE((thing->angle+ANGLE_180)>>ANGLETOFINESHIFT));
-		}
-		else
-		{
-			rightsin = FIXED_TO_FLOAT(FINESINE((thing->angle)>>ANGLETOFINESHIFT));
-			rightcos = FIXED_TO_FLOAT(FINECOSINE((thing->angle)>>ANGLETOFINESHIFT));
-		}
+		rightsin = FIXED_TO_FLOAT(FINESINE((thing->angle)>>ANGLETOFINESHIFT));
+		rightcos = FIXED_TO_FLOAT(FINECOSINE((thing->angle)>>ANGLETOFINESHIFT));
 	}
 	else
 	{