diff --git a/game/engines/default/engine/Zone.lua b/game/engines/default/engine/Zone.lua
index 247719c428f982279d7a4e823f98a611e768c356..ac7be4b08fc631a6d73b7fa349d06b65c9415b89 100644
--- a/game/engines/default/engine/Zone.lua
+++ b/game/engines/default/engine/Zone.lua
@@ -252,8 +252,13 @@ function _M:makeEntity(level, type, filter, force_level, prob_filter)
 	-- No filter
 	else
 		local list = level:getEntitiesList(type)
-		e = self:pickEntity(list)
-		if not e then return nil end
+		local tries = filter and filter.nb_tries or 50 -- A little crude here too but we only check 50 times, this is simply to prevent duplicate uniques
+		while tries > 0 do
+			e = self:pickEntity(list)
+			if e and self:checkFilter(e, nil) then break end
+			tries = tries - 1
+		end
+		if tries == 0 then return nil end
 	end
 
 	if filter then e.force_ego = filter.force_ego end