diff --git a/game/engines/default/engine/Tiles.lua b/game/engines/default/engine/Tiles.lua
index 5ca9e78f1b1d43b9942b5691bc7aa18dde3dbebc..1ab346662cfaca51c3c690206bc9a3f0718ac46f 100644
--- a/game/engines/default/engine/Tiles.lua
+++ b/game/engines/default/engine/Tiles.lua
@@ -88,7 +88,7 @@ function _M:get(char, fr, fg, fb, br, bg, bb, image, alpha, do_outline, allow_ti
 	else
 		local s, sw, sh
 		local is_image = false
-		if (self.use_images or not dochar) and image then
+		if (self.use_images or not dochar) and image and #image > 4 then
 			if allow_tileset and self.texture then
 				local ts, fx, fy, tsx, tsy = self:checkTileset(self.prefix..image)
 				if ts then
diff --git a/game/modules/tome/data/achievements/events.lua b/game/modules/tome/data/achievements/events.lua
new file mode 100644
index 0000000000000000000000000000000000000000..433d77ec6ce72e75a0359393a4e8a411fefe4c15
--- /dev/null
+++ b/game/modules/tome/data/achievements/events.lua
@@ -0,0 +1,60 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+newAchievement{
+	name = "The sky is falling!", id = "EVENT_METEOR",
+	show = "name",
+	desc = [[See a huge meteor falling down the sky.]],
+}
+
+newAchievement{
+	name = "Demonic Invasion", id = "EVENT_FEARSCAPE",
+	show = "name",
+	desc = [[Stop a demonic invasion by closing their portal.]],
+}
+
+newAchievement{
+	name = "Invasion from the Depths", id = "EVENT_NAGA",
+	show = "name",
+	desc = [[Stop a naga invasion by closing their portal.]],
+}
+
+newAchievement{
+	name = "The Restless Dead", id = "EVENT_OLDBATTLEFIELD",
+	show = "name",
+	desc = [[Disturb an old battle field and survive the consequences.]],
+}
+
+newAchievement{
+	name = "The Rat Lich", id = "EVENT_RATLICH",
+	show = "name",
+	desc = [[Killed the terrible Rat Lich]],
+}
+
+newAchievement{
+	name = "Shasshhiy'Kaish", id = "EVENT_CULTISTS",
+	show = "name",
+	desc = [[Killed Shasshhiy'Kaish after letting her grow as powerful as possible.]],
+}
+
+newAchievement{
+	name = "Bringer of Doom", id = "EVENT_PEDESTALS",
+	show = "name",
+	desc = [[Killed a Bringer of Doom.]],
+}
diff --git a/game/modules/tome/data/general/events/cultists.lua b/game/modules/tome/data/general/events/cultists.lua
index cb6beef589efbe489c5e31d4a2d1fae9754d6b37..ca69cc6f1a44e476df3d1015c2fd70bd1fa96fc0 100644
--- a/game/modules/tome/data/general/events/cultists.lua
+++ b/game/modules/tome/data/general/events/cultists.lua
@@ -111,8 +111,8 @@ for i, p in ipairs(list) do
 			if not game.level.turn_counter then
 				game.level.event_cultists.queen_x = self.monolith_x
 				game.level.event_cultists.queen_y = self.monolith_y
-				game.level.turn_counter = 10 * 150
-				game.level.max_turn_counter = 10 * 150
+				game.level.turn_counter = 10 * 210
+				game.level.max_turn_counter = 10 * 210
 				require("engine.ui.Dialog"):simplePopup("Cultist", "The cultist soul seems to be absorbed by the strange stone he was guarding. You feel like something is about to happen...")
 			end
 		end,
@@ -135,6 +135,8 @@ game.zone.on_turn = function()
 		if game.level.turn_counter < 0 then
 			game.level.turn_counter = nil
 
+			local scale = (7 - game.level.event_cultists.kill) / 6
+
 			local m = mod.class.NPC.new{
 				type = "demon", subtype = "major",
 				display = 'U',
@@ -168,7 +170,7 @@ game.zone.on_turn = function()
 
 				combat = { dam=resolvers.levelup(resolvers.mbonus(86, 20), 1, 1.4), atk=50, apr=30, dammod={str=1.1} },
 
-				resolvers.drops{chance=100, nb=5, {tome_drops="boss"} },
+				resolvers.drops{chance=100, nb=math.ceil(5 * scale), {tome_drops="boss"} },
 
 				resolvers.talents{
 					[Talents.T_METEOR_RAIN]={base=4, every=5, max=7},
@@ -183,9 +185,11 @@ game.zone.on_turn = function()
 
 				inc_damage = {all=90},
 			}
+			if game.level.event_cultists.kill == 1 then
+				m.on_die = function(self) world:gainAchievement("EVENT_CULTISTS", game:getPlayer(true)) end
+			end
 			m:resolve() m:resolve(nil, true)
 
-			local scale = (7 - game.level.event_cultists.kill) / 6
 			local o = mod.class.Object.new{
 				define_as = "METEORIC_CROWN",
 				slot = "HEAD",
@@ -225,14 +229,14 @@ game.zone.on_turn = function()
 				game.zone:addEntity(game.level, o, "object")
 				m:addObject(m:getInven("INVEN"), o)
 
-				game.zone:addEntity(game.level, m, "actor", x, y) 
-				require("engine.ui.Dialog"):simplePopup("Cultist", "A terrible shout thunders across the level: 'Come my darling, come, I will be ssssooo *nice* to you!'")
+				game.zone:addEntity(game.level, m, "actor", x, y)
+				require("engine.ui.Dialog"):simpleLongPopup("Cultist", "A terrible shout thunders across the level: 'Come my darling, come, I will be ssssooo *nice* to you!'\nYou should flee from this level!", 400)
 			end
-		elseif  game.level.turn_counter == 10 * 130 or
-			game.level.turn_counter == 10 * 110 or
+		elseif  game.level.turn_counter == 10 * 180 or
+			game.level.turn_counter == 10 * 150 or
+			game.level.turn_counter == 10 * 120 or
 			game.level.turn_counter == 10 * 90 or
-			game.level.turn_counter == 10 * 70 or
-			game.level.turn_counter == 10 * 50 or
+			game.level.turn_counter == 10 * 60 or
 			game.level.turn_counter == 10 * 30 then
 			local cultists = {}
 			for uid, e in pairs(game.level.entities) do if e.is_cultist_event then cultists[#cultists+1] = e end end
diff --git a/game/modules/tome/data/general/events/fearscape-portal.lua b/game/modules/tome/data/general/events/fearscape-portal.lua
index fc7b8f91fd01d9ae4c42b1a355da3543e95f62d7..4506069dd6e3477e4439ebdab1fa6cf5a2350660 100644
--- a/game/modules/tome/data/general/events/fearscape-portal.lua
+++ b/game/modules/tome/data/general/events/fearscape-portal.lua
@@ -68,7 +68,7 @@ local changer = function(id)
 			actor = {
 				class = "mod.class.generator.actor.Random",
 				nb_npc = {12, 12},
-				guardian = {random_elite={life_rating=function(v) return v * 1.5 + 4 end, nb_rares=4, name_scheme="#rng# the Invader"}},
+				guardian = {random_elite={life_rating=function(v) return v * 1.5 + 4 end, nb_rares=4, name_scheme="#rng# the Invader", on_die=function(self) world:gainAchievement("EVENT_FEARSCAPE", game:getPlayer(true)) end}},
 			},
 			object = {
 				class = "engine.generator.object.Random",
diff --git a/game/modules/tome/data/general/events/meteor.lua b/game/modules/tome/data/general/events/meteor.lua
index c1893ba08b4f6d9655afcd486914e12972ebabd3..7875b7b855c07f6f97bbd0b46637bd0d0fe77118 100644
--- a/game/modules/tome/data/general/events/meteor.lua
+++ b/game/modules/tome/data/general/events/meteor.lua
@@ -84,6 +84,7 @@ game.zone.on_turn = function()
 			game.nicer_tiles:updateAround(game.level, i, j)
 		end end
 
+		world:gainAchievement("EVENT_METEOR", game:getPlayer(true))
 		require("engine.ui.Dialog"):simplePopup("Meteor!", "As you walk you notice a huge rock falling from the sky, it crashes right near you!")
 	end
 end
diff --git a/game/modules/tome/data/general/events/naga-portal.lua b/game/modules/tome/data/general/events/naga-portal.lua
index 32ea5839be3966c36d92c3001d53c7f48cc74a00..2d1a26d2acbbd64ca234b682dd79fce3d9b597a5 100644
--- a/game/modules/tome/data/general/events/naga-portal.lua
+++ b/game/modules/tome/data/general/events/naga-portal.lua
@@ -75,7 +75,7 @@ local changer = function(id)
 			actor = {
 				class = "mod.class.generator.actor.Random",
 				nb_npc = {12, 12},
-				guardian = {random_elite={life_rating=function(v) return v * 1.5 + 4 end, nb_rares=4, name_scheme="#rng# the Tidebender"}},
+				guardian = {random_elite={life_rating=function(v) return v * 1.5 + 4 end, nb_rares=4, name_scheme="#rng# the Tidebender", on_die=function(self) world:gainAchievement("EVENT_NAGA", game:getPlayer(true)) end}},
 			},
 			object = {
 				class = "engine.generator.object.Random",
diff --git a/game/modules/tome/data/general/events/old-battle-field.lua b/game/modules/tome/data/general/events/old-battle-field.lua
index 2d65d50b680ab0b7832bd9ca727d81af1962c9a7..49cb001b654fc6a21846dc273cbdbc927c5d13fb 100644
--- a/game/modules/tome/data/general/events/old-battle-field.lua
+++ b/game/modules/tome/data/general/events/old-battle-field.lua
@@ -90,6 +90,7 @@ if tries < 100 then
 							nb = nb - 1
 						end
 
+						world:gainAchievement("EVENT_OLDBATTLEFIELD", game:getPlayer(true))
 						require("engine.ui.Dialog"):simpleLongPopup("Onslaught", "You have survived the onslaught of undeads, you notice a way to climb up you had not seen before in a wall nearby.", 400)
 					elseif game.level.turn_counter % 50 == 0 then
 						for i = 1, math.floor(game.level.nb_pop) do
diff --git a/game/modules/tome/data/general/events/weird-pedestals.lua b/game/modules/tome/data/general/events/weird-pedestals.lua
index a707c0e260f53945af72b1ea99faf23d406d66d4..eec9f692a880ccfdbebf1251b3e5eab05e15c318 100644
--- a/game/modules/tome/data/general/events/weird-pedestals.lua
+++ b/game/modules/tome/data/general/events/weird-pedestals.lua
@@ -99,6 +99,7 @@ for i = 1, 3 do
 										loot_quantity = 0,
 										no_loot_randart = true,
 										name_scheme = "#rng# the Bringer of Doom",
+										on_die = function(self) world:gainAchievement("EVENT_PEDESTALS", game:getPlayer(true)) end,
 								}}, nil, true)
 								local i, j = util.findFreeGrid(x, y, 5, true, {[engine.Map.ACTOR]=true})
 								if i then
diff --git a/game/modules/tome/data/general/npcs/undead-rat.lua b/game/modules/tome/data/general/npcs/undead-rat.lua
index c89e3a0e60f804315a42d3f79a75dd9ca29cedeb..55d116b2d772b1f5c2ac249dc4c97ee596533bf7 100644
--- a/game/modules/tome/data/general/npcs/undead-rat.lua
+++ b/game/modules/tome/data/general/npcs/undead-rat.lua
@@ -204,7 +204,7 @@ newEntity{ base = "BASE_NPC_UNDEAD_RAT", define_as="RATLICH",
 
 	combat_spellpower = resolvers.mbonus(20, 10),
 	combat_spellcrit = resolvers.mbonus(5, 5),
-	
+
 	combat_mindpower = resolvers.mbonus(20, 10),
 	combat_mindcrit = resolvers.mbonus(5, 5),
 
@@ -260,11 +260,13 @@ newEntity{ base = "BASE_NPC_UNDEAD_RAT", define_as="RATLICH",
 		[Talents.T_FEAR_THE_NIGHT]={base=2, every=7, max=5},
 		--Anorithil
 		[Talents.T_MOONLIGHT_RAY]={base=2, every=6, max=7},
-		[Talents.T_SHADOW_BLAST]={base=1, every=7, max=5},	
+		[Talents.T_SHADOW_BLAST]={base=1, every=7, max=5},
 	},
 	resolvers.sustains_at_birth(),
 	resolvers.drops{chance=100, nb=3, {tome_drops="boss"} },
 	resolvers.drops{chance=100, nb=1, {defined="RATLICH_SKULL"} },
 
 	emote_random = {chance=1, "*squeak*", "Squeak!", "Squeak??", "SQUEAK!!!!!", '"Squeak" I say, yes .. "Squeak!"'},
+
+	on_die = function(self) world:gainAchievement("EVENT_RATLICH", game:getPlayer(true)) end,
 }
diff --git a/game/modules/tome/data/zones/ancient-elven-ruins/events.lua b/game/modules/tome/data/zones/ancient-elven-ruins/events.lua
index c1771c4df067cd40f2c729130e5025c7f34bcd08..bfdcdb52251ec93cc4483e3f85cd1edd7d41f746 100644
--- a/game/modules/tome/data/zones/ancient-elven-ruins/events.lua
+++ b/game/modules/tome/data/zones/ancient-elven-ruins/events.lua
@@ -19,4 +19,5 @@
 
 return { one_per_level=true,
 	{group="majeyal-generic"},
+	{name="cultists", percent=10},
 }
diff --git a/game/modules/tome/data/zones/daikara/events.lua b/game/modules/tome/data/zones/daikara/events.lua
index edaf3b854421b349204a0b71c486221f4f8b505a..5fff105c7e7ee32fe2c2443eb5ea8c41578b5c66 100644
--- a/game/modules/tome/data/zones/daikara/events.lua
+++ b/game/modules/tome/data/zones/daikara/events.lua
@@ -21,4 +21,5 @@ return { one_per_level=true,
 	{group="outdoor-majeyal-gloomy"},
 	{group="outdoor-majeyal-generic"},
 	{group="majeyal-generic"},
+	{name="cultists", percent=10},
 }
diff --git a/game/modules/tome/data/zones/mark-spellblaze/events.lua b/game/modules/tome/data/zones/mark-spellblaze/events.lua
index edaf3b854421b349204a0b71c486221f4f8b505a..5fff105c7e7ee32fe2c2443eb5ea8c41578b5c66 100644
--- a/game/modules/tome/data/zones/mark-spellblaze/events.lua
+++ b/game/modules/tome/data/zones/mark-spellblaze/events.lua
@@ -21,4 +21,5 @@ return { one_per_level=true,
 	{group="outdoor-majeyal-gloomy"},
 	{group="outdoor-majeyal-generic"},
 	{group="majeyal-generic"},
+	{name="cultists", percent=10},
 }
diff --git a/game/modules/tome/data/zones/reknor/events.lua b/game/modules/tome/data/zones/reknor/events.lua
index e13e24a2a5a140ca36e7406e48d3314c4dc4314e..669b720af05ceb69b5c49387f3314d1a03bf00ab 100644
--- a/game/modules/tome/data/zones/reknor/events.lua
+++ b/game/modules/tome/data/zones/reknor/events.lua
@@ -20,4 +20,5 @@
 return { one_per_level=true,
 	{group="fareast-generic", percent_factor=1.5},
 	{group="majeyal-generic", percent_factor=1.5},
+	{name="cultists", percent=10},
 }