diff --git a/src/d_main.c b/src/d_main.c
index 9475a77ae067d45e074c75e3a35462696f444578..9e00049eee976b47e469e54fb4e1fa1b75bff3e3 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -268,10 +268,6 @@ static void D_Display(void)
 			 && wipedefs[wipedefindex] != UINT8_MAX)
 			{
 				V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31);
-#ifdef HWRENDER
-				if(rendermode != render_soft)
-					HWR_PrepFadeToBlack();
-#endif
 				F_WipeEndScreen();
 				F_RunWipe(wipedefs[wipedefindex], gamestate != GS_TIMEATTACK);
 			}
diff --git a/src/f_wipe.c b/src/f_wipe.c
index fe740408f4443d790a5a14ee9aba5597c0674985..64d5cfeed5d76e16f65508df53413ef2aed6130f 100644
--- a/src/f_wipe.c
+++ b/src/f_wipe.c
@@ -288,8 +288,7 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu)
 		if (drawMenu)
 			M_Drawer(); // menu is drawn even on top of wipes
 
-		if (rendermode == render_soft)
-			I_FinishUpdate(); // page flip or blit buffer
+		I_FinishUpdate(); // page flip or blit buffer
 
 		if (moviemode)
 			M_SaveFrame();
diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c
index 05964351cc16e37857359166993a3089f90e41d5..c59cc28d81fd8bbc128c4bdb16019f2bfad3f688 100644
--- a/src/hardware/hw_main.c
+++ b/src/hardware/hw_main.c
@@ -5347,24 +5347,6 @@ void HWR_EndScreenWipe(void)
 	HWD.pfnEndScreenWipe();
 }
 
-// Prepare the screen for fading to black.
-void HWR_PrepFadeToBlack(void)
-{
-	FOutVector      v[4];
-	INT32 flags;
-	FSurfaceInfo Surf;
-
-	v[0].x = v[2].y = v[3].x = v[3].y = -1.0f;
-	v[0].y = v[1].x = v[1].y = v[2].x = 1.0f;
-	v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
-
-	flags = PF_Modulated | PF_Clip | PF_NoZClip | PF_NoDepthTest | PF_NoTexture;
-	Surf.FlatColor.s.red = Surf.FlatColor.s.green = Surf.FlatColor.s.blue = 0x00;
-	Surf.FlatColor.s.alpha = 0xff;
-
-	HWD.pfnDrawPolygon(&Surf, v, 4, flags);
-}
-
 void HWR_DrawIntermissionBG(void)
 {
 	HWD.pfnDrawIntermissionBG();
@@ -5372,14 +5354,15 @@ void HWR_DrawIntermissionBG(void)
 
 void HWR_DoScreenWipe(void)
 {
-	HWRWipeCounter -= 0.035f;
-
 	//CONS_Debug(DBG_RENDER, "In HWR_DoScreenWipe(). Alpha =%f\n", HWRWipeCounter);
 
 	HWD.pfnDoScreenWipe(HWRWipeCounter);
 
-	I_OsPolling();
-	I_FinishUpdate();
+	// This works for all the cases in vanilla until fade masks get done
+	HWRWipeCounter -= 0.05f; // Go less opaque after
+
+	if (HWRWipeCounter < 0)
+		HWRWipeCounter = 0;
 }
 
 #endif // HWRENDER
diff --git a/src/hardware/hw_main.h b/src/hardware/hw_main.h
index c93d4ea6bd6fc2994751d7cdcdfe1132142c64c9..8d8b69e60ee5e87aa7dea9f1015e1df947503401 100644
--- a/src/hardware/hw_main.h
+++ b/src/hardware/hw_main.h
@@ -64,7 +64,6 @@ void HWR_DoPostProcessor(player_t *player);
 void HWR_StartScreenWipe(void);
 void HWR_EndScreenWipe(void);
 void HWR_DoScreenWipe(void);
-void HWR_PrepFadeToBlack(void);
 void HWR_DrawIntermissionBG(void);
 
 // This stuff is put here so MD2's can use them
diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c
index c9a2f392d5be4aa3b5296bf023d94495df0408df..ded8d07670bd8a474e10f6d0cd98e997f4f4d0a0 100644
--- a/src/hardware/r_opengl/r_opengl.c
+++ b/src/hardware/r_opengl/r_opengl.c
@@ -2016,6 +2016,8 @@ EXPORT void HWRAPI(StartScreenWipe) (void)
 #ifndef KOS_GL_COMPATIBILITY
 	pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, texsize, texsize, 0);
 #endif
+
+	tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
 }
 
 // Create Screen to fade to
@@ -2043,6 +2045,8 @@ EXPORT void HWRAPI(EndScreenWipe)(void)
 #ifndef KOS_GL_COMPATIBILITY
 	pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, texsize, texsize, 0);
 #endif
+
+	tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
 }
 
 
@@ -2060,7 +2064,7 @@ EXPORT void HWRAPI(DrawIntermissionBG)(void)
 	xfix = 1/((float)(texsize)/((float)((screen_width))));
 	yfix = 1/((float)(texsize)/((float)((screen_height))));
 
-	//pglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+	pglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 
 	pglBindTexture(GL_TEXTURE_2D, screentexture);
 	pglBegin(GL_QUADS);
@@ -2083,6 +2087,8 @@ EXPORT void HWRAPI(DrawIntermissionBG)(void)
 		pglVertex3f(1.0f, -1.0f, 1.0f);
 
 	pglEnd();
+
+	tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
 }
 
 // Do screen fades!
@@ -2102,6 +2108,8 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha)
 
 	pglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 
+	SetBlend(PF_Modulated|PF_NoDepthTest|PF_Clip|PF_NoZClip);
+
 	// Draw the screen on bottom to fade to
 	pglBindTexture(GL_TEXTURE_2D, endScreenWipe);
 	pglBegin(GL_QUADS);
@@ -2124,6 +2132,8 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha)
 		pglVertex3f(1.0f, -1.0f, 1.0f);
 	pglEnd();
 
+	SetBlend(PF_Modulated|PF_Translucent|PF_NoDepthTest|PF_Clip|PF_NoZClip);
+
 	// Draw the screen on top that fades.
 	pglBindTexture(GL_TEXTURE_2D, startScreenWipe);
 	pglBegin(GL_QUADS);
@@ -2146,6 +2156,8 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha)
 		pglVertex3f(1.0f, -1.0f, 1.0f);
 
 	pglEnd();
+
+	tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
 }
 
 
@@ -2174,6 +2186,8 @@ EXPORT void HWRAPI(MakeScreenTexture) (void)
 #ifndef KOS_GL_COMPATIBILITY
 	pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, texsize, texsize, 0);
 #endif
+
+	tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
 }
 
 #endif //HWRENDER
diff --git a/src/p_setup.c b/src/p_setup.c
index 9b32d4a03545fbe277ca4d24b07168e8e0bdecea..64f67094aa3e826508719988fedb1431861c647e 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -2435,10 +2435,7 @@ noscript:
 	{
 		F_WipeStartScreen();
 		V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31);
-#ifdef HWRENDER
-		if(rendermode != render_soft)
-			HWR_PrepFadeToBlack();
-#endif
+
 		F_WipeEndScreen();
 		F_RunWipe(wipedefs[wipe_level_toblack], false);