diff --git a/builtin/mainmenu_helper.lua b/builtin/mainmenu_helper.lua
deleted file mode 100644
index 1bdd33cc66aa77f8ce21932b30beed4e3929f141..0000000000000000000000000000000000000000
--- a/builtin/mainmenu_helper.lua
+++ /dev/null
@@ -1,165 +0,0 @@
---------------------------------------------------------------------------------
-function dump(o, dumped)
-	dumped = dumped or {}
-	if type(o) == "number" then
-		return tostring(o)
-	elseif type(o) == "string" then
-		return string.format("%q", o)
-	elseif type(o) == "table" then
-		if dumped[o] then
-			return "<circular reference>"
-		end
-		dumped[o] = true
-		local t = {}
-		for k,v in pairs(o) do
-			t[#t+1] = "" .. k .. " = " .. dump(v, dumped)
-		end
-		return "{" .. table.concat(t, ", ") .. "}"
-	elseif type(o) == "boolean" then
-		return tostring(o)
-	elseif type(o) == "function" then
-		return "<function>"
-	elseif type(o) == "userdata" then
-		return "<userdata>"
-	elseif type(o) == "nil" then
-		return "nil"
-	else
-		error("cannot dump a " .. type(o))
-		return nil
-	end
-end
-
---------------------------------------------------------------------------------
-function string:split(sep)
-	local sep, fields = sep or ",", {}
-	local pattern = string.format("([^%s]+)", sep)
-	self:gsub(pattern, function(c) fields[#fields+1] = c end)
-	return fields
-end
-
---------------------------------------------------------------------------------
-function string:trim()
-	return (self:gsub("^%s*(.-)%s*$", "%1"))
-end
-
---------------------------------------------------------------------------------
-engine.get_game = function(index)
-	local games = game.get_games()
-	
-	if index > 0 and index <= #games then
-		return games[index]
-	end
-	
-	return nil
-end
-
---------------------------------------------------------------------------------
-function fs_escape_string(text)
-	if text ~= nil then
-		while (text:find("\r\n") ~= nil) do
-			local newtext = text:sub(1,text:find("\r\n")-1)
-			newtext = newtext .. " " .. text:sub(text:find("\r\n")+3)
-			
-			text = newtext
-		end
-		
-		while (text:find("\n") ~= nil) do
-			local newtext = text:sub(1,text:find("\n")-1)
-			newtext = newtext .. " " .. text:sub(text:find("\n")+1)
-			
-			text = newtext
-		end
-		
-		while (text:find("\r") ~= nil) do
-			local newtext = text:sub(1,text:find("\r")-1)
-			newtext = newtext .. " " .. text:sub(text:find("\r")+1)
-			
-			text = newtext
-		end
-		
-		text = string.gsub(text,"\\","\\\\")
-		text = string.gsub(text,"%]","\\]")
-		text = string.gsub(text,"%[","\\[")
-		text = string.gsub(text,";","\\;")
-		text = string.gsub(text,",","\\,")
-	end
-	return text
-end
-
---------------------------------------------------------------------------------
-function explode_textlist_event(text)
-	
-	local retval = {}
-	retval.typ = "INV"
-	
-	local parts = text:split(":")
-				
-	if #parts == 2 then
-		retval.typ = parts[1]:trim()
-		retval.index= tonumber(parts[2]:trim())
-		
-		if type(retval.index) ~= "number" then
-			retval.typ = "INV"
-		end
-	end
-	
-	return retval
-end
-
---------------------------------------------------------------------------------
-function get_last_folder(text,count)
-	local parts = text:split(DIR_DELIM)
-	
-	if count == nil then
-		return parts[#parts]
-	end
-	
-	local retval = ""
-	for i=1,count,1 do
-		retval = retval .. parts[#parts - (count-i)] .. DIR_DELIM
-	end
-	
-	return retval
-end
-
---------------------------------------------------------------------------------
-function cleanup_path(temppath)
-	
-	local parts = temppath:split("-")
-	temppath = ""	
-	for i=1,#parts,1 do
-		if temppath ~= "" then
-			temppath = temppath .. "_"
-		end
-		temppath = temppath .. parts[i]
-	end
-	
-	parts = temppath:split(".")
-	temppath = ""	
-	for i=1,#parts,1 do
-		if temppath ~= "" then
-			temppath = temppath .. "_"
-		end
-		temppath = temppath .. parts[i]
-	end
-	
-	parts = temppath:split("'")
-	temppath = ""	
-	for i=1,#parts,1 do
-		if temppath ~= "" then
-			temppath = temppath .. ""
-		end
-		temppath = temppath .. parts[i]
-	end
-	
-	parts = temppath:split(" ")
-	temppath = ""	
-	for i=1,#parts,1 do
-		if temppath ~= "" then
-			temppath = temppath
-		end
-		temppath = temppath .. parts[i]
-	end
-	
-	return temppath
-end
\ No newline at end of file
diff --git a/builtin/misc_helpers.lua b/builtin/misc_helpers.lua
index 0439415b1b140bc260074bf8efb9602cf790e013..0f49bc3a6bd5f81876c577898d74f3198697ecb3 100644
--- a/builtin/misc_helpers.lua
+++ b/builtin/misc_helpers.lua
@@ -1,5 +1,6 @@
 -- Minetest: builtin/misc_helpers.lua
 
+--------------------------------------------------------------------------------
 function basic_dump2(o)
 	if type(o) == "number" then
 		return tostring(o)
@@ -19,6 +20,7 @@ function basic_dump2(o)
 	end
 end
 
+--------------------------------------------------------------------------------
 function dump2(o, name, dumped)
 	name = name or "_"
 	dumped = dumped or {}
@@ -44,6 +46,7 @@ function dump2(o, name, dumped)
 	end
 end
 
+--------------------------------------------------------------------------------
 function dump(o, dumped)
 	dumped = dumped or {}
 	if type(o) == "number" then
@@ -74,6 +77,7 @@ function dump(o, dumped)
 	end
 end
 
+--------------------------------------------------------------------------------
 function string:split(sep)
 	local sep, fields = sep or ",", {}
 	local pattern = string.format("([^%s]+)", sep)
@@ -81,16 +85,16 @@ function string:split(sep)
 	return fields
 end
 
+--------------------------------------------------------------------------------
 function string:trim()
 	return (self:gsub("^%s*(.-)%s*$", "%1"))
 end
 
 assert(string.trim("\n \t\tfoo bar\t ") == "foo bar")
 
-function minetest.pos_to_string(pos)
-	return "(" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ")"
-end
 
+
+--------------------------------------------------------------------------------
 function math.hypot(x, y)
 	local t
 	x = math.abs(x)
@@ -102,3 +106,138 @@ function math.hypot(x, y)
 	return x * math.sqrt(1 + t * t)
 end
 
+--------------------------------------------------------------------------------
+function explode_textlist_event(text)
+	
+	local retval = {}
+	retval.typ = "INV"
+	
+	local parts = text:split(":")
+				
+	if #parts == 2 then
+		retval.typ = parts[1]:trim()
+		retval.index= tonumber(parts[2]:trim())
+		
+		if type(retval.index) ~= "number" then
+			retval.typ = "INV"
+		end
+	end
+	
+	return retval
+end
+
+--------------------------------------------------------------------------------
+function get_last_folder(text,count)
+	local parts = text:split(DIR_DELIM)
+	
+	if count == nil then
+		return parts[#parts]
+	end
+	
+	local retval = ""
+	for i=1,count,1 do
+		retval = retval .. parts[#parts - (count-i)] .. DIR_DELIM
+	end
+	
+	return retval
+end
+
+--------------------------------------------------------------------------------
+function cleanup_path(temppath)
+	
+	local parts = temppath:split("-")
+	temppath = ""	
+	for i=1,#parts,1 do
+		if temppath ~= "" then
+			temppath = temppath .. "_"
+		end
+		temppath = temppath .. parts[i]
+	end
+	
+	parts = temppath:split(".")
+	temppath = ""	
+	for i=1,#parts,1 do
+		if temppath ~= "" then
+			temppath = temppath .. "_"
+		end
+		temppath = temppath .. parts[i]
+	end
+	
+	parts = temppath:split("'")
+	temppath = ""	
+	for i=1,#parts,1 do
+		if temppath ~= "" then
+			temppath = temppath .. ""
+		end
+		temppath = temppath .. parts[i]
+	end
+	
+	parts = temppath:split(" ")
+	temppath = ""	
+	for i=1,#parts,1 do
+		if temppath ~= "" then
+			temppath = temppath
+		end
+		temppath = temppath .. parts[i]
+	end
+	
+	return temppath
+end
+
+--------------------------------------------------------------------------------
+-- mainmenu only functions
+--------------------------------------------------------------------------------
+if engine ~= nil then
+	engine.get_game = function(index)
+		local games = game.get_games()
+		
+		if index > 0 and index <= #games then
+			return games[index]
+		end
+		
+		return nil
+	end
+	
+	--------------------------------------------------------------------------------
+	function fs_escape_string(text)
+		if text ~= nil then
+			while (text:find("\r\n") ~= nil) do
+				local newtext = text:sub(1,text:find("\r\n")-1)
+				newtext = newtext .. " " .. text:sub(text:find("\r\n")+3)
+				
+				text = newtext
+			end
+			
+			while (text:find("\n") ~= nil) do
+				local newtext = text:sub(1,text:find("\n")-1)
+				newtext = newtext .. " " .. text:sub(text:find("\n")+1)
+				
+				text = newtext
+			end
+			
+			while (text:find("\r") ~= nil) do
+				local newtext = text:sub(1,text:find("\r")-1)
+				newtext = newtext .. " " .. text:sub(text:find("\r")+1)
+				
+				text = newtext
+			end
+			
+			text = string.gsub(text,"\\","\\\\")
+			text = string.gsub(text,"%]","\\]")
+			text = string.gsub(text,"%[","\\[")
+			text = string.gsub(text,";","\\;")
+			text = string.gsub(text,",","\\,")
+		end
+		return text
+	end
+end
+
+--------------------------------------------------------------------------------
+-- core only fct
+--------------------------------------------------------------------------------
+if minetest ~= nil then
+	--------------------------------------------------------------------------------
+	function minetest.pos_to_string(pos)
+		return "(" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ")"
+	end
+end
diff --git a/src/guiEngine.cpp b/src/guiEngine.cpp
index 2324dba16bcf7a1ff7e407db8648110eb86664b5..4c5d0189d393b42eb88220361348035cdaeb2f5c 100644
--- a/src/guiEngine.cpp
+++ b/src/guiEngine.cpp
@@ -151,7 +151,7 @@ GUIEngine::GUIEngine(	irr::IrrlichtDevice* dev,
 
 	std::string builtin_helpers
 		= porting::path_share + DIR_DELIM + "builtin"
-			+ DIR_DELIM + "mainmenu_helper.lua";
+			+ DIR_DELIM + "misc_helpers.lua";
 
 	if (!runScript(builtin_helpers)) {
 		errorstream