diff --git a/game/engines/default/engine/Zone.lua b/game/engines/default/engine/Zone.lua
index f6bc779049af3d486899d94981a0c364e5dbc2f0..02b0a5c64e6000531be85ce645e6121ce308fe1e 100644
--- a/game/engines/default/engine/Zone.lua
+++ b/game/engines/default/engine/Zone.lua
@@ -328,7 +328,7 @@ function _M:makeEntityByName(level, type, name, force_unique)
 	local forced = false
 	if e.unique and game.uniques[e.__CLASSNAME.."/"..e.unique] then
 		if not force_unique then
-			print("Refused unique by name", e.name, e.__CLASSNAME.."/"..e.unique)
+			forceprint("Refused unique by name", e.name, e.__CLASSNAME.."/"..e.unique)
 			return nil
 		else
 			forced = true
diff --git a/game/modules/tome/resolvers.lua b/game/modules/tome/resolvers.lua
index 5d7d539f70766bb26e88f237fac4af76a50ad2f7..8ca2e884adf3edeaf853414b45355c9099278e1f 100644
--- a/game/modules/tome/resolvers.lua
+++ b/game/modules/tome/resolvers.lua
@@ -125,7 +125,13 @@ function resolvers.calc.drops(t, e)
 		if not filter.defined then
 			o = game.zone:makeEntity(game.level, "object", filter, nil, true)
 		else
-			o = game.zone:makeEntityByName(game.level, "object", filter.defined)
+			local forced
+			o, forced = game.zone:makeEntityByName(game.level, "object", filter.defined, filter.random_art_replace and true or false)
+			-- If we forced the generation this means it was already found
+			if forced then
+				print("Serving unique "..o.name.." but forcing replacement drop")
+				filter.random_art_replace.chance = 100
+			end
 		end
 		if o then
 			print("Zone made us a drop according to filter!", o:getName())