diff --git a/builtin/init.lua b/builtin/init.lua
index 6b27cf76e16d99694165da80d2a3eddb4f4c68ff..4400a19d61b1ca5a0a2c6a806e63250d18468095 100644
--- a/builtin/init.lua
+++ b/builtin/init.lua
@@ -12,7 +12,7 @@ if core.print then
 	-- Override native print and use
 	-- terminal if that's turned on
 	function print(...)
-		local n, t = select("#", ...), { ... }
+		local n, t = select("#", ...), {...}
 		for i = 1, n do
 			t[i] = tostring(t[i])
 		end
@@ -25,26 +25,26 @@ os.setlocale("C", "numeric")
 minetest = core
 
 -- Load other files
-local scriptdir = core.get_builtin_path()..DIR_DELIM
-local gamepath = scriptdir.."game"..DIR_DELIM
-local commonpath = scriptdir.."common"..DIR_DELIM
-local asyncpath = scriptdir.."async"..DIR_DELIM
+local scriptdir = core.get_builtin_path() .. DIR_DELIM
+local gamepath = scriptdir .. "game" .. DIR_DELIM
+local commonpath = scriptdir .. "common" .. DIR_DELIM
+local asyncpath = scriptdir .. "async" .. DIR_DELIM
 
-dofile(commonpath.."strict.lua")
-dofile(commonpath.."serialize.lua")
-dofile(commonpath.."misc_helpers.lua")
+dofile(commonpath .. "strict.lua")
+dofile(commonpath .. "serialize.lua")
+dofile(commonpath .. "misc_helpers.lua")
 
 if INIT == "game" then
-	dofile(gamepath.."init.lua")
+	dofile(gamepath .. "init.lua")
 elseif INIT == "mainmenu" then
 	local mainmenuscript = core.setting_get("main_menu_script")
 	if mainmenuscript ~= nil and mainmenuscript ~= "" then
 		dofile(mainmenuscript)
 	else
-		dofile(core.get_mainmenu_path()..DIR_DELIM.."init.lua")
+		dofile(core.get_mainmenu_path() .. DIR_DELIM .. "init.lua")
 	end
 elseif INIT == "async" then
-	dofile(asyncpath.."init.lua")
+	dofile(asyncpath .. "init.lua")
 else
 	error(("Unrecognized builtin initialization type %s!"):format(tostring(INIT)))
 end
diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua
index 69536630dc393b7446b70f9065c20d35a05ce2d8..6dd345ff476c1ca43f74a6c6519b4e02246b769f 100644
--- a/builtin/mainmenu/init.lua
+++ b/builtin/mainmenu/init.lua
@@ -37,23 +37,29 @@ dofile(menupath .. DIR_DELIM .. "common.lua")
 dofile(menupath .. DIR_DELIM .. "gamemgr.lua")
 dofile(menupath .. DIR_DELIM .. "modmgr.lua")
 dofile(menupath .. DIR_DELIM .. "store.lua")
+dofile(menupath .. DIR_DELIM .. "textures.lua")
+
 dofile(menupath .. DIR_DELIM .. "dlg_config_world.lua")
-dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
-dofile(menupath .. DIR_DELIM .. "tab_mods.lua")
-dofile(menupath .. DIR_DELIM .. "tab_settings.lua")
 dofile(menupath .. DIR_DELIM .. "dlg_settings_advanced.lua")
 if PLATFORM ~= "Android" then
 	dofile(menupath .. DIR_DELIM .. "dlg_create_world.lua")
 	dofile(menupath .. DIR_DELIM .. "dlg_delete_mod.lua")
 	dofile(menupath .. DIR_DELIM .. "dlg_delete_world.lua")
 	dofile(menupath .. DIR_DELIM .. "dlg_rename_modpack.lua")
-	dofile(menupath .. DIR_DELIM .. "tab_multiplayer.lua")
-	dofile(menupath .. DIR_DELIM .. "tab_server.lua")
-	dofile(menupath .. DIR_DELIM .. "tab_singleplayer.lua")
-	dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua")
-	dofile(menupath .. DIR_DELIM .. "textures.lua")
+end
+
+local tabs = {}
+
+tabs.settings = dofile(menupath .. DIR_DELIM .. "tab_settings.lua")
+tabs.mods = dofile(menupath .. DIR_DELIM .. "tab_mods.lua")
+tabs.credits = dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
+if PLATFORM == "Android" then
+	tabs.simple_main = dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua")
 else
-	dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua")
+	tabs.singleplayer = dofile(menupath .. DIR_DELIM .. "tab_singleplayer.lua")
+	tabs.multiplayer = dofile(menupath .. DIR_DELIM .. "tab_multiplayer.lua")
+	tabs.server = dofile(menupath .. DIR_DELIM .. "tab_server.lua")
+	tabs.texturepacks = dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua")
 end
 
 --------------------------------------------------------------------------------
@@ -69,8 +75,19 @@ local function init_globals()
 	-- Init gamedata
 	gamedata.worldindex = 0
 
+	if PLATFORM == "Android" then
+		local world_list = core.get_worlds()
+		local world_index = table.indexof(world_list, "singleplayerworld")
 
-	if PLATFORM ~= "Android" then
+		if world_index == -1 then
+			core.create_world("singleplayerworld", 1)
+
+			world_list = core.get_worlds()
+			world_index = table.indexof(world_list, "singleplayerworld")
+		end
+
+		gamedata.worldindex = world_index
+	else
 		menudata.worldlist = filterlist.create(
 			core.get_worlds,
 			compare_worlds,
@@ -89,61 +106,34 @@ local function init_globals()
 
 		if not core.setting_get("menu_last_game") then
 			local default_game = core.setting_get("default_game") or "minetest"
-			core.setting_set("menu_last_game", default_game )
+			core.setting_set("menu_last_game", default_game)
 		end
 
 		mm_texture.init()
-	else
-		local world_list = core.get_worlds()
-
-		local found_singleplayerworld = false
-
-		for i,world in pairs(world_list) do
-			if world.name == "singleplayerworld" then
-				found_singleplayerworld = true
-				gamedata.worldindex = i
-				break
-			end
-		end
-
-		if not found_singleplayerworld then
-			core.create_world("singleplayerworld", 1)
-
-			local world_list = core.get_worlds()
-
-			for i,world in pairs(world_list) do
-				if world.name == "singleplayerworld" then
-					gamedata.worldindex = i
-					break
-				end
-			end
-		end
 	end
 
 	-- Create main tabview
-	local tv_main = tabview_create("maintab",{x=12,y=5.2},{x=0,y=0})
-	if PLATFORM ~= "Android" then
-		tv_main:set_autosave_tab(true)
-	end
-	if PLATFORM ~= "Android" then
-		tv_main:add(tab_singleplayer)
-		tv_main:add(tab_multiplayer)
-		tv_main:add(tab_server)
+	local tv_main = tabview_create("maintab", {x = 12, y = 5.2}, {x = 0, y = 0})
+
+	if PLATFORM == "Android" then
+		tv_main:add(tabs.simple_main)
+		tv_main:add(tabs.settings)
 	else
-		tv_main:add(tab_simple_main)
-	end
-	tv_main:add(tab_settings)
-	if PLATFORM ~= "Android" then
-		tv_main:add(tab_texturepacks)
+		tv_main:set_autosave_tab(true)
+		tv_main:add(tabs.singleplayer)
+		tv_main:add(tabs.multiplayer)
+		tv_main:add(tabs.server)
+		tv_main:add(tabs.settings)
+		tv_main:add(tabs.texturepacks)
 	end
-	tv_main:add(tab_mods)
-	tv_main:add(tab_credits)
 
-	tv_main:set_global_event_handler(main_event_handler)
+	tv_main:add(tabs.mods)
+	tv_main:add(tabs.credits)
 
+	tv_main:set_global_event_handler(main_event_handler)
 	tv_main:set_fixed_size(false)
 
-	if not (PLATFORM == "Android") then
+	if PLATFORM ~= "Android" then
 		tv_main:set_tab(core.setting_get("maintab_LAST"))
 	end
 	ui.set_default("maintab")
@@ -151,9 +141,9 @@ local function init_globals()
 
 	-- Create modstore ui
 	if PLATFORM == "Android" then
-		modstore.init({x=12, y=6}, 3, 2)
+		modstore.init({x = 12, y = 6}, 3, 2)
 	else
-		modstore.init({x=12, y=8}, 4, 3)
+		modstore.init({x = 12, y = 8}, 4, 3)
 	end
 
 	ui.update()
diff --git a/builtin/mainmenu/init_simple.lua b/builtin/mainmenu/init_simple.lua
index c3891d21cef5f7c7d42427237b57a20a6b91024a..298bd834e45e93723d2d8157eaff4a6bddfea252 100644
--- a/builtin/mainmenu/init_simple.lua
+++ b/builtin/mainmenu/init_simple.lua
@@ -1,4 +1,4 @@
 -- helper file to be able to debug the simple menu on PC
 -- without messing around with actual menu code!
-PLATFORM="Android"
+PLATFORM = "Android"
 dofile("builtin/mainmenu/init.lua")
diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua
index 5cb730b3811df4600f6a32742ac22d563a14edd3..822f64844227db2cfc84eca298c3706449a8458b 100644
--- a/builtin/mainmenu/tab_credits.lua
+++ b/builtin/mainmenu/tab_credits.lua
@@ -69,7 +69,7 @@ local previous_contributors = {
 	"Zefram <zefram@fysh.org>",
 }
 
-tab_credits = {
+return {
 	name = "credits",
 	caption = fgettext("Credits"),
 	cbf_formspec = function(tabview, name, tabdata)
diff --git a/builtin/mainmenu/tab_mods.lua b/builtin/mainmenu/tab_mods.lua
index af758f8dfb0c1fb48fca4b3102f9770d7d78b7ff..69027c015db06cee8b6b219b0b096f64475fb297 100644
--- a/builtin/mainmenu/tab_mods.lua
+++ b/builtin/mainmenu/tab_mods.lua
@@ -163,7 +163,7 @@ local function handle_buttons(tabview, fields, tabname, tabdata)
 end
 
 --------------------------------------------------------------------------------
-tab_mods = {
+return {
 	name = "mods",
 	caption = fgettext("Mods"),
 	cbf_formspec = get_formspec,
diff --git a/builtin/mainmenu/tab_multiplayer.lua b/builtin/mainmenu/tab_multiplayer.lua
index 2072f8c38cb9c9505af09c96a6bb8a91b5a9bdd6..06d8791f0fd634850bd79e936ed64ab30edea1d8 100644
--- a/builtin/mainmenu/tab_multiplayer.lua
+++ b/builtin/mainmenu/tab_multiplayer.lua
@@ -256,10 +256,10 @@ local function on_change(type,old_tab,new_tab)
 end
 
 --------------------------------------------------------------------------------
-tab_multiplayer = {
+return {
 	name = "multiplayer",
 	caption = fgettext("Client"),
 	cbf_formspec = get_formspec,
 	cbf_button_handler = main_button_handler,
 	on_change = on_change
-	}
+}
diff --git a/builtin/mainmenu/tab_server.lua b/builtin/mainmenu/tab_server.lua
index d08eecc21a104f951f8a2230edded5568d1b2c7b..6b96825a0fbd6b3f38255cba7ed80b44837a381c 100644
--- a/builtin/mainmenu/tab_server.lua
+++ b/builtin/mainmenu/tab_server.lua
@@ -186,10 +186,10 @@ local function main_button_handler(this, fields, name, tabdata)
 end
 
 --------------------------------------------------------------------------------
-tab_server = {
+return {
 	name = "server",
 	caption = fgettext("Server"),
 	cbf_formspec = get_formspec,
 	cbf_button_handler = main_button_handler,
 	on_change = nil
-	}
+}
diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua
index 6285968eb784521965fa71584b2bc12a0b83ecd3..2649a8a579f96ab401bb5666652672c9931a4ee4 100644
--- a/builtin/mainmenu/tab_settings.lua
+++ b/builtin/mainmenu/tab_settings.lua
@@ -384,7 +384,7 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
 	return ddhandled
 end
 
-tab_settings = {
+return {
 	name = "settings",
 	caption = fgettext("Settings"),
 	cbf_formspec = formspec,
diff --git a/builtin/mainmenu/tab_simple_main.lua b/builtin/mainmenu/tab_simple_main.lua
index 434113b5f662155b7bff60d59686b0b66668a1a0..b32418938d06ee33fe5841fc84141e21147b9d3d 100644
--- a/builtin/mainmenu/tab_simple_main.lua
+++ b/builtin/mainmenu/tab_simple_main.lua
@@ -196,10 +196,10 @@ local function on_activate(type,old_tab,new_tab)
 end
 
 --------------------------------------------------------------------------------
-tab_simple_main = {
+return {
 	name = "main",
 	caption = fgettext("Main"),
 	cbf_formspec = get_formspec,
 	cbf_button_handler = main_button_handler,
 	on_change = on_activate
-	}
+}
diff --git a/builtin/mainmenu/tab_singleplayer.lua b/builtin/mainmenu/tab_singleplayer.lua
index a40918af9548b4ae1991bb82a1a86117e175b365..05060cbc612d72c8950663364058dd12dda9d505 100644
--- a/builtin/mainmenu/tab_singleplayer.lua
+++ b/builtin/mainmenu/tab_singleplayer.lua
@@ -241,10 +241,10 @@ local function on_change(type, old_tab, new_tab)
 end
 
 --------------------------------------------------------------------------------
-tab_singleplayer = {
+return {
 	name = "singleplayer",
 	caption = fgettext("Singleplayer"),
 	cbf_formspec = get_formspec,
 	cbf_button_handler = main_button_handler,
 	on_change = on_change
-	}
+}
diff --git a/builtin/mainmenu/tab_texturepacks.lua b/builtin/mainmenu/tab_texturepacks.lua
index 2b0c77afcebbedef256151105c5c4c91ce31c758..a102fd61d67e2b9d20f90de65eb10c2c47aa1b3d 100644
--- a/builtin/mainmenu/tab_texturepacks.lua
+++ b/builtin/mainmenu/tab_texturepacks.lua
@@ -123,10 +123,10 @@ local function main_button_handler(tabview, fields, name, tabdata)
 end
 
 --------------------------------------------------------------------------------
-tab_texturepacks = {
+return {
 	name = "texturepacks",
 	caption = fgettext("Texturepacks"),
 	cbf_formspec = get_formspec,
 	cbf_button_handler = main_button_handler,
 	on_change = nil
-	}
+}