diff --git a/src/sbbs3/prntfile.cpp b/src/sbbs3/prntfile.cpp
index 7349c03d3c7afaacd4c56619eee48447afaea348..8a9921d40f3c72ac752fc69a74c8e1cfd9f90a9d 100644
--- a/src/sbbs3/prntfile.cpp
+++ b/src/sbbs3/prntfile.cpp
@@ -304,9 +304,28 @@ bool sbbs_t::menu_exists(const char *code, const char* ext, char* path)
 		FULLPATH(path, prefix, MAX_PATH);
 		SAFECOPY(prefix, path);
 	}
-	safe_snprintf(path, MAX_PATH, "%s.%lucol.%s", prefix, cols, ext);
-	if(fexistcase(path))
-		return true;
+	glob_t g = {0};
+	safe_snprintf(path, MAX_PATH, "%s.*col.%s", prefix, ext);
+	if(globi(path, GLOB_NOESCAPE|GLOB_MARK, NULL, &g) == 0) {
+		char* p;
+		char term[MAX_PATH + 1];
+		safe_snprintf(term, sizeof(term), "col.%s", ext);
+		size_t skip = safe_snprintf(path, MAX_PATH, "%s.", prefix);
+		long max = 0;
+		for(size_t i = 0; i < g.gl_pathc; i++) {
+			long c = strtol(g.gl_pathv[i] + skip, &p, 10);
+			if(stricmp(p, term) != 0) // Some other weird pattern ending in col.<ext>
+				continue;
+			if(c <= cols && c > max) {
+				max = c;
+				safe_snprintf(path, MAX_PATH, "%s", g.gl_pathv[i]);
+			}
+		}
+		globfree(&g);
+		if(max > 0)
+			return true;
+	}
+
 	safe_snprintf(path, MAX_PATH, "%s.%s", prefix, ext);
 	return fexistcase(path) ? true : false;
 }