diff --git a/mods/MAPGEN/mcl_mapgen_core/api.lua b/mods/MAPGEN/mcl_mapgen_core/api.lua
index 60c3c69f9..ef63605b1 100644
--- a/mods/MAPGEN/mcl_mapgen_core/api.lua
+++ b/mods/MAPGEN/mcl_mapgen_core/api.lua
@@ -7,19 +7,6 @@ local logging = minetest.settings:get_bool("mcl_logging_mapgen", false)
 local log_timing = minetest.settings:get_bool("mcl_logging_mapgen_timing", false) -- detailed, for performance debugging
 local seed = minetest.get_mapgen_setting("seed")
 
-local function run_generators(minp, maxp, blockseed)
-	if nodes == 0 then return end
-	for _, rec in ipairs(registered_generators) do
-		if rec.nf then
-			local gt1 = os.clock()
-			rec.nf(vector.copy(minp), vector.copy(maxp), blockseed) -- defensive copies against some generator changing the vectors
-			if log_timing then
-				minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", rec.id, minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt1)*1000))
-			end
-		end
-	end
-end
-
 minetest.register_on_generated(function(minp, maxp, blockseed)
 	local t1 = os.clock()
 	if lvm > 0 then
@@ -32,12 +19,12 @@ minetest.register_on_generated(function(minp, maxp, blockseed)
 		end
 
 		local lvm_used, shadow, deco_used, deco_table, ore_used, ore_table = false, false, false, false, false, false
-		for _, rec in ipairs(registered_generators) do
-			if rec.vf then
+		for _, gen in ipairs(registered_generators) do
+			if gen.vf then
 				local gt1 = os.clock()
 				local p1, p2 = vector.copy(minp), vector.copy(maxp) -- defensive copies against some generator changing the vectors
 				local e1, e2 = vector.copy(emin), vector.copy(emax) -- defensive copies against some generator changing the vectors
-				local lvm_used0, shadow0, deco, ore = rec.vf(vm, data, data2, e1, e2, area, p1, p2, blockseed)
+				local lvm_used0, shadow0, deco, ore = gen.vf(vm, data, data2, e1, e2, area, p1, p2, blockseed)
 				lvm_used = lvm_used or lvm_used0
 				shadow = shadow or shadow0
 				if deco and type(deco) == "table" then
@@ -51,7 +38,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed)
 					ore_used = true
 				end
 				if log_timing then
-					minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", rec.id, minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt1)*1000))
+					minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", gen.id, minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt1)*1000))
 				end
 			end
 		end
@@ -64,7 +51,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed)
 				minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", "set_data", minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt1)*1000))
 			end
 			local gt2 = os.clock()
-			if deco_table then
+			if deco_table and #deco_table > 0 then
 				minetest.generate_decorations(vm,vector.new(minp.x,deco_table.min,minp.z),vector.new(maxp.x,deco_table.max,maxp.z))
 			elseif deco_used then
 				minetest.generate_decorations(vm)
@@ -73,7 +60,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed)
 				minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", "decorations", minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt2)*1000))
 			end
 			local gt3 = os.clock()
-			if ore_table then
+			if ore_table and #ore_table > 0 then
 				minetest.generate_ores(vm,vector.new(minp.x,ore_table.min,minp.z),vector.new(maxp.x,ore_table.max,maxp.z))
 			elseif ore_used then
 				minetest.generate_ores(vm)
@@ -91,7 +78,17 @@ minetest.register_on_generated(function(minp, maxp, blockseed)
 		end
 	end
 
-	run_generators(minp, maxp, blockseed)
+	if nodes > 0 then
+		for _, gen in ipairs(registered_generators) do
+			if gen.nf then
+				local gt1 = os.clock()
+				gen.nf(vector.copy(minp), vector.copy(maxp), blockseed) -- defensive copies against some generator changing the vectors
+				if log_timing then
+					minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", gen.id, minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt1)*1000))
+				end
+			end
+		end
+	end
 
 	if logging then
 		minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", "Generating chunk", minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - t1)*1000))
diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua
index 1c52386a7..591bfe083 100644
--- a/mods/MAPGEN/mcl_mapgen_core/init.lua
+++ b/mods/MAPGEN/mcl_mapgen_core/init.lua
@@ -1,6 +1,4 @@
 mcl_mapgen_core = {}
-local registered_generators = {}
-
 local modname = minetest.get_current_modname()
 local modpath = minetest.get_modpath(modname)
 
@@ -118,8 +116,6 @@ elseif mg_name == "fractal" then
 	mg_flags.caverns = true
 end
 
-
-
 local mg_flags_str = ""
 for k,v in pairs(mg_flags) do
 	if v == false then
@@ -211,12 +207,12 @@ end
 local function set_layers(data, area, content_id, check, min, max, minp, maxp, pr)
 	if maxp.y < min or minp.y > max then return false end
 	local lvm_used = false
-	if check == nil then
+	if not check then
 		for p_pos in area:iter(minp.x, math.max(min, minp.y), minp.z, maxp.x, math.min(max, maxp.y), maxp.z) do
 			data[p_pos] = content_id
 			lvm_used = true
 		end
-	elseif check and type(check) == "function" then
+	elseif type(check) == "function" then
 		-- slow path, needs vector coordinates (bedrock uses y only)
 		for p_pos in area:iter(minp.x, math.max(min, minp.y), minp.z, maxp.x, math.min(max, maxp.y), maxp.z) do
 			if check(area:position(p_pos), data[p_pos], pr) then