diff --git a/game/engine/Zone.lua b/game/engine/Zone.lua
index 2a2fb35b7fd8c5c089c880572e54527121e18c6e..ceca40adab364a08fb9396b96b104f933f892610 100644
--- a/game/engine/Zone.lua
+++ b/game/engine/Zone.lua
@@ -465,6 +465,7 @@ function _M:getLevel(game, lev, old_lev, no_close)
 end
 
 function _M:getGenerator(what, level, spots)
+	print("[GENERATOR] requiring", what, level.data.generator and level.data.generator[what] and level.data.generator[what].class)
 	return require(level.data.generator[what].class).new(
 			self,
 			level.map,
@@ -508,19 +509,19 @@ function _M:newLevel(level_data, lev, old_lev, game)
 	level.spots = spots
 
 	-- Generate objects
-	if level_data.generator.object then
+	if level_data.generator.object and level_data.generator.object.class then
 		local generator = self:getGenerator("object", level, spots)
 		generator:generate()
 	end
 
 	-- Generate traps
-	if level_data.generator.trap then
+	if level_data.generator.trap and level_data.generator.trap.class then
 		local generator = self:getGenerator("trap", level, spots)
 		generator:generate()
 	end
 
 	-- Generate actors
-	if level_data.generator.actor then
+	if level_data.generator.actor and level_data.generator.actor.class then
 		local generator = self:getGenerator("actor", level, spots)
 		generator:generate()
 	end
diff --git a/game/engine/generator/map/Roomer.lua b/game/engine/generator/map/Roomer.lua
index 7b2d83aa05235e3e7bdb3c94c0c654920ce0f3ad..f86ecb334a88690dda5894632da8d178dfa101ef 100644
--- a/game/engine/generator/map/Roomer.lua
+++ b/game/engine/generator/map/Roomer.lua
@@ -79,6 +79,8 @@ function _M:roomAlloc(room, id, lev, old_lev)
 		room = room(self, id, lev, old_lev)
 	end
 	print("alloc", room.name)
+	-- Sanity check
+	if self.map.w - 2 - room.w < 2 or self.map.h - 2 - room.h < 2 then return false end
 
 	local tries = 100
 	while tries > 0 do
@@ -164,11 +166,12 @@ end
 
 --- Tunnel from x1,y1 to x2,y2
 function _M:tunnel(x1, y1, x2, y2, id)
+	if x1 == x2 and y1 == y2 then return end
 	-- Disable the many prints of tunnelling
 	local print = function()end
 
 	local xdir, ydir = self:tunnelDir(x1, y1, x2, y2)
-	print("tunneling from",x1, y1, "to", x2, y2, "initial dir", xdir, ydir)
+--	print("tunneling from",x1, y1, "to", x2, y2, "initial dir", xdir, ydir)
 
 	local startx, starty = x1, y1
 	local tun = {}