diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c
index 3cdb48058d0fbe2ea99c168820dc7d5507a6f67c..f23209379809603634a36cb5aa2c0efa65b5dc6d 100644
--- a/src/hardware/hw_main.c
+++ b/src/hardware/hw_main.c
@@ -5380,8 +5380,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) - mobjangle;
+	ang = R_PointToAngle (thing->x, thing->y) - mobjangle;
 
 	if (sprframe->rotate == SRF_SINGLE)
 	{
@@ -5390,7 +5389,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) - mobjangle < ANGLE_180))
+		if (papersprite && ang < ANGLE_180)
 		{
 			if (flip)
 				flip = 0;
@@ -5411,6 +5410,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)
@@ -5418,16 +5425,8 @@ static void HWR_ProjectSprite(mobj_t *thing)
 
 	if (papersprite)
 	{
-		if (flip && sprframe->rotate != SRF_SINGLE)
-		{
-			rightsin = FIXED_TO_FLOAT(FINESINE((mobjangle+ANGLE_180)>>ANGLETOFINESHIFT));
-			rightcos = FIXED_TO_FLOAT(FINECOSINE((mobjangle+ANGLE_180)>>ANGLETOFINESHIFT));
-		}
-		else
-		{
-			rightsin = FIXED_TO_FLOAT(FINESINE((mobjangle)>>ANGLETOFINESHIFT));
-			rightcos = FIXED_TO_FLOAT(FINECOSINE((mobjangle)>>ANGLETOFINESHIFT));
-		}
+		rightsin = FIXED_TO_FLOAT(FINESINE((mobjangle)>>ANGLETOFINESHIFT));
+		rightcos = FIXED_TO_FLOAT(FINECOSINE((mobjangle)>>ANGLETOFINESHIFT));
 	}
 	else
 	{