diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 622d292c4f7297193bc29b16d34463a125e8d74d..5920b97a0909d33a423c4fd3299cd6f15d84db1f 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -1123,7 +1123,7 @@ minetest.get_mapgen_object(objectname)
 ^ Return requested mapgen object if available (see Mapgen objects)
 minetest.set_mapgen_params(MapgenParams)
 ^ Set map generation parameters
-^ Function can *only* be called within a minetest.on_mapgen_init() callback
+^ Function cannot be called after the registration period; only initialization and on_mapgen_init
 ^ Takes a table as an argument with the fields mgname, seed, water_level, flags, and flagmask.
 ^ Leave field unset to leave that parameter unchanged
 ^ flagmask field must be set to all mapgen flags that are being modified
diff --git a/src/emerge.cpp b/src/emerge.cpp
index 09a58149d38f3e2a9fb7709db2807393f6c11664..c0560ba3bd9b2d11711e5681c0382591d4d85a3a 100644
--- a/src/emerge.cpp
+++ b/src/emerge.cpp
@@ -59,9 +59,9 @@ EmergeManager::EmergeManager(IGameDef *gamedef) {
 	this->biomedef = new BiomeDefManager();
 	this->params   = NULL;
 	
-	this->luaoverride_params = NULL;
+	this->luaoverride_params          = NULL;
 	this->luaoverride_params_modified = 0;
-	this->luaoverride_flagmask = 0;
+	this->luaoverride_flagmask        = 0;
 	
 	mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
 
diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp
index 02cafc0d5cbb5fcc157af850a8eea1287b3cb0f4..89ba9798a8fe21e3420bf9a19f50043131edc434 100644
--- a/src/script/lua_api/l_env.cpp
+++ b/src/script/lua_api/l_env.cpp
@@ -579,6 +579,8 @@ int ModApiEnvMod::l_get_mapgen_object(lua_State *L)
 
 	EmergeManager *emerge = getServer(L)->getEmergeManager();
 	Mapgen *mg = emerge->getCurrentMapgen();
+	if (!mg)
+		return 0;
 	
 	size_t maplen = mg->csize.X * mg->csize.Z;
 	
@@ -614,7 +616,7 @@ int ModApiEnvMod::l_get_mapgen_object(lua_State *L)
 			}
 			break; }
 		case MGOBJ_BIOMEMAP: {
-			if (!mg->heightmap)
+			if (!mg->biomemap)
 				return 0;
 			
 			lua_newtable(L);
@@ -625,6 +627,9 @@ int ModApiEnvMod::l_get_mapgen_object(lua_State *L)
 			break; }
 		case MGOBJ_HEATMAP: { // Mapgen V7 specific objects
 		case MGOBJ_HUMIDMAP:
+			if (strcmp(emerge->params->mg_name.c_str(), "v7"))
+				return 0;
+			
 			MapgenV7 *mgv7 = (MapgenV7 *)mg;
 
 			float *arr = (mgobj == MGOBJ_HEATMAP) ? 
diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp
index f753f5f27425c7e301f4496b8b4e9d5b36dec3be..8bf65a5557d224f417e18541f78a20529ec79147 100644
--- a/src/script/lua_api/l_vmanip.cpp
+++ b/src/script/lua_api/l_vmanip.cpp
@@ -88,7 +88,7 @@ int LuaVoxelManip::l_set_data(lua_State *L)
 	int volume = vm->m_area.getVolume();
 	for (int i = 0; i != volume; i++) {
 		lua_rawgeti(L, 2, i + 1);
-		content_t c = lua_tonumber(L, -1);
+		content_t c = lua_tointeger(L, -1);
 		
 		vm->m_data[i].setContent(c);
 
@@ -224,7 +224,11 @@ int LuaVoxelManip::create_object(lua_State *L)
 {
 	NO_MAP_LOCK_REQUIRED;
 	
-	Map *map = &(get_scriptapi(L)->getEnv()->getMap());
+	Environment *env = get_scriptapi(L)->getEnv();
+	if (!env)
+		return 0;
+		
+	Map *map = &(env->getMap());
 	LuaVoxelManip *o = new LuaVoxelManip(map);
 	
 	*(void **)(lua_newuserdata(L, sizeof(void *))) = o;