diff --git a/src/r_data.c b/src/r_data.c
index c24cca91b7ba711fdb4f03dd227a4f5fbfa6729a..bb12f916f83871e497a8b9e80e06418490d0c3eb 100644
--- a/src/r_data.c
+++ b/src/r_data.c
@@ -317,6 +317,18 @@ INT32 R_GetTextureNum(INT32 texnum)
 	return texturetranslation[texnum];
 }
 
+//
+// R_CheckTextureCache
+//
+// Use this if you need to make sure the texture is cached before R_GetColumn calls
+// e.g.: midtextures and FOF walls
+//
+void R_CheckTextureCache(INT32 tex)
+{
+	if (!texturecache[tex])
+		R_GenerateTexture(tex);
+}
+
 //
 // R_GetColumn
 //
diff --git a/src/r_data.h b/src/r_data.h
index 68af0325f039e47def7346718308d8f3748b3f92..1e9e0eb5edce620cfa9b4bd3a9123bc18f95c231 100644
--- a/src/r_data.h
+++ b/src/r_data.h
@@ -66,6 +66,7 @@ void R_LoadTextures(void);
 void R_FlushTextureCache(void);
 
 INT32 R_GetTextureNum(INT32 texnum);
+void R_CheckTextureCache(INT32 tex);
 
 // Retrieve column data for span blitting.
 UINT8 *R_GetColumn(fixed_t tex, INT32 col);
diff --git a/src/r_segs.c b/src/r_segs.c
index e0a081374f0d8bf70afd0b23b471c66b4c674afc..ab5010824d1a69a1e43602b4d230befd093e25df 100644
--- a/src/r_segs.c
+++ b/src/r_segs.c
@@ -344,6 +344,9 @@ void R_RenderMaskedSegRange(drawseg_t *ds, INT32 x1, INT32 x2)
 	rw_scalestep = ds->scalestep;
 	spryscale = ds->scale1 + (x1 - ds->x1)*rw_scalestep;
 
+	// Texture must be cached before setting colfunc_2s,
+	// otherwise texture[texnum]->holes may be false when it shouldn't be
+	R_CheckTextureCache(texnum);
 	// handle case where multipatch texture is drawn on a 2sided wall, multi-patch textures
 	// are not stored per-column with post info in SRB2
 	if (textures[texnum]->holes)
@@ -968,6 +971,9 @@ void R_RenderThickSideRange(drawseg_t *ds, INT32 x1, INT32 x2, ffloor_t *pfloor)
 
 	dc_texturemid += offsetvalue;
 
+	// Texture must be cached before setting colfunc_2s,
+	// otherwise texture[texnum]->holes may be false when it shouldn't be
+	R_CheckTextureCache(texnum);
 	//faB: handle case where multipatch texture is drawn on a 2sided wall, multi-patch textures
 	//     are not stored per-column with post info anymore in Doom Legacy
 	if (textures[texnum]->holes)