diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua
index 1c9f2a48ff28ac0c30042a069336bea2241c694c..bf672e6da54230ee05bc3ba58ee65b5ec9bbb07f 100644
--- a/builtin/common/misc_helpers.lua
+++ b/builtin/common/misc_helpers.lua
@@ -159,6 +159,7 @@ function dump(o, indent, nested, level)
 	return "{"..table.concat(t, ", ").."}"
 end
 
+--------------------------------------------------------------------------------
 function string.split(str, delim, include_empty, max_splits, sep_is_pattern)
 	delim = delim or ","
 	max_splits = max_splits or -1
@@ -183,10 +184,23 @@ function string.split(str, delim, include_empty, max_splits, sep_is_pattern)
 	return items
 end
 
+--------------------------------------------------------------------------------
+function table.indexof(list, val)
+	for i = 1, #list do
+		if list[i] == val then
+			return i
+		end
+	end
+	return -1
+end
+
+assert(table.indexof({"foo", "bar"}, "foo") == 1)
+assert(table.indexof({"foo", "bar"}, "baz") == -1)
+
 --------------------------------------------------------------------------------
 function file_exists(filename)
 	local f = io.open(filename, "r")
-	if f==nil then
+	if f == nil then
 		return false
 	else
 		f:close()
diff --git a/builtin/mainmenu/textures.lua b/builtin/mainmenu/textures.lua
index 56992c0c5cca0fe1ff857894377b1a222a2901ea..700bdb5cc05a0caa957cc1cd12723000c0dffd26 100644
--- a/builtin/mainmenu/textures.lua
+++ b/builtin/mainmenu/textures.lua
@@ -129,7 +129,7 @@ function mm_texture.set_generic(identifier)
 end
 
 --------------------------------------------------------------------------------
-function mm_texture.set_game(identifier,gamedetails)
+function mm_texture.set_game(identifier, gamedetails)
 	
 	if gamedetails == nil then
 		return false
@@ -137,15 +137,33 @@ function mm_texture.set_game(identifier,gamedetails)
 
 	if mm_texture.texturepack ~= nil then
 		local path = mm_texture.texturepack .. DIR_DELIM ..
-						gamedetails.id .. "_menu_" .. identifier .. ".png"
-		if core.set_background(identifier,path) then
+			gamedetails.id .. "_menu_" .. identifier .. ".png"
+		if core.set_background(identifier, path) then
 			return true
 		end
 	end
 	
-	local path = gamedetails.path .. DIR_DELIM .."menu" ..
-									 DIR_DELIM .. identifier .. ".png"
-	if core.set_background(identifier,path) then
+	-- Find out how many randomized textures the subgame provides
+	local n, filename
+	local menu_files = core.get_dir_list(gamedetails.path .. DIR_DELIM .. "menu", false)
+	for i = 1, #menu_files do
+		local filename = identifier .. "." .. i .. ".png"
+		if table.indexof(menu_files, filename) == -1 then
+			n = i - 1
+			break
+		end
+	end
+	-- Select random texture, 0 means standard texture
+	n = math.random(0, n)
+	if n == 0 then
+		filename = identifier .. ".png"
+	else
+		filename = identifier .. "." .. n .. ".png"
+	end
+
+	local path = gamedetails.path .. DIR_DELIM .. "menu" ..
+		DIR_DELIM .. filename
+	if core.set_background(identifier, path) then
 		return true
 	end