diff --git a/game/engines/default/engine/class.lua b/game/engines/default/engine/class.lua
index 9d97e0ebc6f5a9a48e342a882ebab4edb6c7b20b..d2a8a622abe9c663b0a0b6c2cbe4d0a8dd0b84df 100644
--- a/game/engines/default/engine/class.lua
+++ b/game/engines/default/engine/class.lua
@@ -169,16 +169,16 @@ function _M:clone(t)
 end
 
 local function clonerecursfull(clonetable, d, noclonecall, use_saveinstead)
+	if use_saveinstead and d.__CLASSNAME and d.__SAVEINSTEAD then
+		d = d.__SAVEINSTEAD
+		if clonetable[d] then return d, 1 end
+	end
+
 	local nb = 0
 	local add
 	local n = {}
 	clonetable[d] = n
 
-	if use_saveinstead and d.__CLASSNAME and d.__SAVEINSTEAD then
-		d = d.__SAVEINSTEAD
-		if clonetable[d] then return d, nb + 1 end
-	end
-
 	local k, e = next(d)
 	while k do
 		local nk, ne = k, e
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 8a55752cef47ce74ca1e1205978924a1a2a2f81e..78179c4e6c19e0bae399d613b3c3f91a09284129 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -255,8 +255,8 @@ function _M:newGame()
 			-- Generate
 			if self.player.__game_difficulty then self:setupDifficulty(self.player.__game_difficulty) end
 			self:setupPermadeath(self.player)
-			--self:changeLevel(1, "test")
-			self:changeLevel(self.player.starting_level or 1, self.player.starting_zone, {force_down=self.player.starting_level_force_down})
+			self:changeLevel(1, "test")
+			-- self:changeLevel(self.player.starting_level or 1, self.player.starting_zone, {force_down=self.player.starting_level_force_down})
 			
 			print("[PLAYER BIRTH] resolve...")
 			self.player:resolve()
diff --git a/game/modules/tome/class/NicerTiles.lua b/game/modules/tome/class/NicerTiles.lua
index 72a61c127b6d87c573d77eb71821a98019aa8cd5..af2b1221240aa333e31eb51c703ac603405cd06c 100644
--- a/game/modules/tome/class/NicerTiles.lua
+++ b/game/modules/tome/class/NicerTiles.lua
@@ -30,6 +30,14 @@ function _M:init()
 	self.edits = {}
 end
 
+local function doclone(g, full)
+	local saveinstead = g.__SAVEINSTEAD
+	if full then g = g:cloneFull()
+	else g = g:clone() end
+	g.__SAVEINSTEAD = saveinstead
+	return g
+end
+
 function _M:getTile(name)
 	if not name then return end
 
@@ -46,7 +54,7 @@ function _M:getTile(name)
 		e = self.repo[name]
 	end
 	if e and e.force_clone then
-		e = e:cloneFull()
+		e = doclone(e)
 	end
 	return e
 end
@@ -73,7 +81,8 @@ function _M:handle(level, i, j, use_ntl)
 
 			if g.define_as and not g.__SAVEINSTEAD then
 				local cg
-				if self.saveinstead_store[g] then cg = self.saveinstead_store[g]
+				if self.saveinstead_store[g] then
+					cg = self.saveinstead_store[g]
 				else
 					cg = g:cloneFull()
 					cg.__ntl = true
@@ -114,13 +123,13 @@ function _M:replaceAll(level)
 		local g = level.map(i, j, Map.TERRAIN)
 		if g.__nice_tile_base then
 			local base = g.__nice_tile_base
-			g = base:cloneFull()
+			g = doclone(base)
 			g:removeAllMOs()
 			g.__nice_tile_base = base
 		else
-			g = g:cloneFull()
+			g = doclone(g)
 			g:removeAllMOs()
-			g.__nice_tile_base = g:cloneFull()
+			g.__nice_tile_base = doclone(g)
 		end
 
 		local id = {g.name or "???"}
@@ -136,7 +145,7 @@ function _M:replaceAll(level)
 		-- Otherwise compute this new combo and store the entity
 		else
 			local cloned = false
-			if not g.force_clone or not self.edit_entity_store then g = g:cloneFull() g.force_clone = true cloned = true end
+			if not g.force_clone or not self.edit_entity_store then g = doclone(g, true) g.force_clone = true cloned = true end
 
 			g:removeAllMOs(true)