diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 9e678a4c6211a434526a412425ae409651aa09e6..380512a54367166a91f9b0c69b83790ea6c9e591 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -828,7 +828,8 @@ function _M:setupCommands()
 		end end,
 		[{"_g","ctrl"}] = function() if config.settings.cheat then
 --			self.nicer_tiles:postProcessLevelTiles(self.level)
-			self:registerDialog(require("mod.dialogs.Donation").new(self.player))
+			local m = game.zone:makeEntityByName(game.level, "actor", "NPC_COLD_DRAKE")
+			game.zone:addEntity(game.level, m, "actor", game.player.x + 1, game.player.y + 1)
 		end end,
 	}
 
diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua
index c3bf21efbcca93aca124ff6eb6e0beca010c39df..9ce4cd25caca8e18f390c3abb29da9bdd795de98 100644
--- a/game/modules/tome/data/damage_types.lua
+++ b/game/modules/tome/data/damage_types.lua
@@ -695,6 +695,30 @@ newDamageType{
 	end,
 }
 
+-- Inferno: fire and maybe remove suff
+newDamageType{
+	name = "inferno", type = "INFERNO",
+	projector = function(src, x, y, type, dam)
+		local realdam = DamageType:get(DamageType.FIRE).projector(src, x, y, DamageType.FIRE, dam)
+		local target = game.level.map(x, y, Map.ACTOR)
+		if target and src:attr("cleansing_flames") then
+			local effs = {}
+			local status = (src:reactionToward(target) >= 0) and "detrimental" or "beneficial"
+			for eff_id, p in pairs(target.tmp) do
+				local e = target.tempeffect_def[eff_id]
+				if e.status == status and (e.type == "magical" or e.type == "physical" or e.type == "curse" or e.type == "hex") then
+					effs[#effs+1] = {"effect", eff_id}
+				end
+			end
+			if #effs > 0 then
+				local eff = rng.tableRemove(effs)
+				target:removeEffect(eff[2])
+			end
+		end
+		return realdam
+	end,
+}
+
 -- Spydric poison: prevents movement
 newDamageType{
 	name = "spydric poison", type = "SPYDRIC_POISON",
@@ -1082,6 +1106,7 @@ newDamageType{
 	projector = function(src, x, y, type, dam)
 		DamageType:get(DamageType.PHYSICAL).projector(src, x, y, DamageType.PHYSICAL, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
+		if not target then return end
 		if target:checkHit(src:combatSpellpower(), target:combatPhysicalResist(), 0, 95, 20) and target:canBe("pin") then
 			target:setEffect(target.EFF_PINNED, 2, {}, true)
 		else
diff --git a/game/modules/tome/data/general/npcs/bird.lua b/game/modules/tome/data/general/npcs/bird.lua
index 2c51b1d26610713db865fd2f786755cadc08701f..6f48f26af98331b8c8cef8b2a119621556672bb1 100644
--- a/game/modules/tome/data/general/npcs/bird.lua
+++ b/game/modules/tome/data/general/npcs/bird.lua
@@ -73,7 +73,7 @@ newEntity{ base="BASE_NPC_BIRD", define_as = "NPC_PHOENIX",
 		[Talents.T_HEAT]=5,
 		[Talents.T_WILDFIRE]=5,
 		[Talents.T_WING_BUFFET]=5,
-		[Talents.T_DANCING_FIRES]=5,
+		[Talents.T_BURNING_WAKE]=5,
 		[Talents.T_FLAME]=5,
 		[Talents.T_INFERNO]=5,
 		[Talents.T_BLASTWAVE]=5,
diff --git a/game/modules/tome/data/general/npcs/cold-drake.lua b/game/modules/tome/data/general/npcs/cold-drake.lua
index 3c2cd34ad4d8ea1007a2e03ce9c92412cd02febd..40d6a6bbff14881912f9b437017a26b3262f8a82 100644
--- a/game/modules/tome/data/general/npcs/cold-drake.lua
+++ b/game/modules/tome/data/general/npcs/cold-drake.lua
@@ -60,8 +60,14 @@ newEntity{ base = "BASE_NPC_COLD_DRAKE",
 	},
 }
 
-newEntity{ base = "BASE_NPC_COLD_DRAKE",
+newEntity{ base = "BASE_NPC_COLD_DRAKE", define_as = "NPC_COLD_DRAKE",
 	name = "cold drake", color=colors.SLATE, display="D",
+--	quadrant_image = {
+--		[0] = {[0] = "npc/cold_drake7.png",[1] = "npc/cold_drake1.png",},
+--		[1] = {[0] = "npc/cold_drake9.png",[1] = "npc/cold_drake3.png",},
+--	},
+--	msize_w = 2,
+--	msize_h = 2,
 	desc = [[A mature cold drake, armed with a deadly breath weapon and nasty claws.]],
 	level_range = {14, nil}, exp_worth = 1,
 	rarity = 3,
@@ -77,7 +83,7 @@ newEntity{ base = "BASE_NPC_COLD_DRAKE",
 	},
 
 	resolvers.talents{
-		[Talents.T_SUMMON]=1,
+--		[Talents.T_SUMMON]=1,
 		[Talents.T_ICE_CLAW]=2,
 		[Talents.T_ICE_BREATH]=3,
 	},
diff --git a/game/modules/tome/data/general/npcs/orc-vor.lua b/game/modules/tome/data/general/npcs/orc-vor.lua
index 51294e596545ab4baa20f5317804c69ac830f1a6..eb4a5c8b61b6949a965493754ac8b821ab2195b3 100644
--- a/game/modules/tome/data/general/npcs/orc-vor.lua
+++ b/game/modules/tome/data/general/npcs/orc-vor.lua
@@ -90,8 +90,7 @@ newEntity{ base = "BASE_NPC_ORC_VOR",
 		[Talents.T_FIREFLASH]=5,
 		[Talents.T_INFERNO]=5,
 		[Talents.T_BLASTWAVE]=5,
-		[Talents.T_DANCING_FIRES]=5,
-		[Talents.T_COMBUST]=5,
+		[Talents.T_BURNING_WAKE]=5,
 		[Talents.T_SPELL_SHAPING]=5,
 		[Talents.T_ESSENCE_OF_SPEED]=1,
 	},
diff --git a/game/modules/tome/data/general/objects/boss-artifacts.lua b/game/modules/tome/data/general/objects/boss-artifacts.lua
index 58fc02b091ffbe8a0ba8437c0b52e520804f4d56..4c937a4cec928b86ef7e7ea0dcec0a40219db817 100644
--- a/game/modules/tome/data/general/objects/boss-artifacts.lua
+++ b/game/modules/tome/data/general/objects/boss-artifacts.lua
@@ -791,8 +791,8 @@ newEntity{ base = "BASE_GEM", define_as = "CRYSTAL_FOCUS",
 			o.wielder.combat_spellpower = 12
 			o.wielder.combat_dam = 12
 			o.wielder.inc_stats = o.wielder.inc_stats or {}
-			o.wielder.inc_stats[Stats.STAT_WIL] = 3
-			o.wielder.inc_stats[Stats.STAT_CON] = 3
+			o.wielder.inc_stats[engine.interface.ActorStats.STAT_WIL] = 3
+			o.wielder.inc_stats[engine.interface.ActorStats.STAT_CON] = 3
 			o.wielder.inc_damage = o.wielder.inc_damage or {}
 			o.wielder.inc_damage[engine.DamageType.ARCANE] = 10
 			who:sortInven()
diff --git a/game/modules/tome/data/talents/spells/fire.lua b/game/modules/tome/data/talents/spells/fire.lua
index ff42305f9e42563704a34ff303149e6deb561808..c830bd42e9e6814473d84dac0f86f79d6d8ebc34 100644
--- a/game/modules/tome/data/talents/spells/fire.lua
+++ b/game/modules/tome/data/talents/spells/fire.lua
@@ -36,13 +36,28 @@ newTalent{
 		if self:getTalentLevel(t) >= 5 then tg.type = "beam" end
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
+		local grids = nil
 		if self:getTalentLevel(t) < 5 then
-			self:projectile(tg, x, y, DamageType.FIREBURN, self:spellCrit(t.getDamage(self, t)), {type="flame"})
+			grids = self:projectile(tg, x, y, DamageType.FIREBURN, self:spellCrit(t.getDamage(self, t)), function(self, tg, x, y, grids)
+				game.level.map:particleEmitter(x, y, 1, "flame")
+				if self:attr("burning_wake") then
+					game.level.map:addEffect(self, x, y, 4, engine.DamageType.INFERNO, self:attr("burning_wake"), 0, 5, nil, {type="inferno"}, nil, self:spellFriendlyFire())
+				end
+			end)
 		else
-			self:project(tg, x, y, DamageType.FIREBURN, self:spellCrit(t.getDamage(self, t)))
+			grids = self:project(tg, x, y, DamageType.FIREBURN, self:spellCrit(t.getDamage(self, t)))
 			local _ _, x, y = self:canProject(tg, x, y)
 			game.level.map:particleEmitter(self.x, self.y, tg.radius, "flamebeam", {tx=x-self.x, ty=y-self.y})
 		end
+
+		if self:attr("burning_wake") and grids then
+			for px, ys in pairs(grids) do
+				for py, _ in pairs(ys) do
+					game.level.map:addEffect(self, px, py, 4, engine.DamageType.INFERNO, self:attr("burning_wake"), 0, 5, nil, {type="inferno"}, nil, self:spellFriendlyFire())
+				end
+			end
+		end
+
 		game:playSoundNear(self, "talents/fire")
 		return true
 	end,
@@ -73,6 +88,21 @@ newTalent{
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		self:project(tg, x, y, DamageType.FLAMESHOCK, {dur=t.getStunDuration(self, t), dam=self:spellCrit(t.getDamage(self, t))})
+
+		if self:attr("burning_wake") then
+			local l = line.new(self.x, self.y, x, y)
+			local lx, ly = l()
+			local dir = lx and coord_to_dir[lx - self.x][ly - self.y] or 6
+
+			game.level.map:addEffect(self,
+				self.x, self.y, 4,
+				DamageType.INFERNO, self:attr("burning_wake"),
+				tg.radius,
+				dir, 55,
+				{type="inferno"},
+				nil, self:spellFriendlyFire()
+			)
+		end
 		game.level.map:particleEmitter(self.x, self.y, tg.radius, "breath_fire", {radius=tg.radius, tx=x-self.x, ty=y-self.y})
 		game:playSoundNear(self, "talents/fire")
 		return true
@@ -107,6 +137,16 @@ newTalent{
 		if not x or not y then return nil end
 		self:projectile(tg, x, y, DamageType.FIRE, self:spellCrit(t.getDamage(self, t)), function(self, tg, x, y, grids)
 			game.level.map:particleEmitter(x, y, tg.radius, "fireflash", {radius=tg.radius, tx=x, ty=y})
+			if self:attr("burning_wake") then
+				game.level.map:addEffect(self,
+					x, y, 4,
+					engine.DamageType.INFERNO, self:attr("burning_wake"),
+					tg.radius,
+					5, nil,
+					{type="inferno"},
+					nil, self:spellFriendlyFire()
+				)
+			end
 		end)
 		game:playSoundNear(self, "talents/fireflash")
 		return true
@@ -143,7 +183,7 @@ newTalent{
 		-- Add a lasting map effect
 		game.level.map:addEffect(self,
 			x, y, t.getDuration(self, t),
-			DamageType.FIRE, t.getDamage(self, t),
+			DamageType.INFERNO, t.getDamage(self, t),
 			radius,
 			5, nil,
 			{type="inferno"},
diff --git a/game/modules/tome/data/talents/spells/wildfire.lua b/game/modules/tome/data/talents/spells/wildfire.lua
index 50c4c01c6b5cbac8f9368a1989c326ede9ee21f5..0b354783452baf88912963fec7d94a41f5aa3d45 100644
--- a/game/modules/tome/data/talents/spells/wildfire.lua
+++ b/game/modules/tome/data/talents/spells/wildfire.lua
@@ -33,6 +33,16 @@ newTalent{
 		local tg = {type="ball", range=0, radius=self:getTalentRange(t), friendlyfire=false, talent=t}
 		local grids = self:project(tg, self.x, self.y, DamageType.FIREKNOCKBACK, {dist=3, dam=self:spellCrit(t.getDamage(self, t))})
 		game.level.map:particleEmitter(self.x, self.y, tg.radius, "ball_fire", {radius=tg.radius})
+		if self:attr("burning_wake") then
+			game.level.map:addEffect(self,
+				self.x, self.y, 4,
+				DamageType.INFERNO, self:attr("burning_wake"),
+				tg.radius,
+				5, nil,
+				{type="inferno"},
+				nil, self:spellFriendlyFire()
+			)
+		end
 		game:playSoundNear(self, "talents/fire")
 		return true
 	end,
@@ -44,82 +54,46 @@ newTalent{
 }
 
 newTalent{
-	name = "Dancing Fires",
+	name = "Burning Wake",
 	type = {"spell/wildfire",2},
 	require = spells_req_high2,
+	mode = "sustained",
 	points = 5,
-	mana = 35,
-	cooldown = 16,
-	tactical = { ATTACKAREA = 2 },
-	range = 10,
-	requires_target = true,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 240) end,
-	getTargetCount = function(self, t) return math.ceil(self:getTalentLevel(t) + 2) end,
-	action = function(self, t)
-		local max = t.getTargetCount(self, t)
-		for i, act in ipairs(self.fov.actors_dist) do
-			if self:reactionToward(act) < 0 then
-				local tg = {type="hit", friendlyfire=false, talent=t}
-				local grids = self:project(tg, act.x, act.y, DamageType.FIREBURN, {dur=8, initial=0, dam=self:spellCrit(t.getDamage(self, t))})
-				game.level.map:particleEmitter(act.x, act.y, tg.radius, "ball_fire", {radius=1})
-
-				max = max - 1
-				if max <= 0 then break end
-			end
-		end
+	sustain_mana = 40,
+	cooldown = 30,
+	tactical = { BUFF=2, ATTACKAREA = 1 },
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 55) end,
+	activate = function(self, t)
 		game:playSoundNear(self, "talents/fire")
+		local cft = self:getTalentFromId(self.T_CLEANSING_FLAMES)
+		return {
+			bw = self:addTemporaryValue("burning_wake", t.getDamage(self, t)),
+			cf = self:addTemporaryValue("cleansing_flames", cft.getChance(self, cft)),
+		}
+	end,
+	deactivate = function(self, t, p)
+		self:removeTemporaryValue("burning_wake", p.bw)
+		self:removeTemporaryValue("cleansing_flames", p.cf)
 		return true
 	end,
 	info = function(self, t)
 		local damage = t.getDamage(self, t)
-		local targetcount = t.getTargetCount(self, t)
-		return ([[Surround yourself in flames, setting all those in your line of sight ablaze and doing %0.2f fire damage over 8 turns.
-		At most it will affect %d foes.
-		The damage will increase with the Magic stat]]):format(damDesc(self, DamageType.FIRE, damage), targetcount)
+		return ([[Your Flame, Flameshock, Fireflash and Blastwave spells leave a burning wake on the ground, burning all for %0.2f fire damage for 4 turns.
+		The damage will increase with the Magic stat]]):format(damDesc(self, DamageType.FIRE, damage))
 	end,
 }
 
 newTalent{
-	name = "Combust",
+	name = "Cleansing Flames",
 	type = {"spell/wildfire",3},
 	require = spells_req_high3,
+	mode = "passive",
 	points = 5,
-	mana = 40,
-	cooldown = 14,
-	tactical = { ATTACKAREA = 1 },
-	range = 7,
-	requires_target = true,
-	getMultiplier = function(self, t) return self:combatTalentWeaponDamage(t, 0.5, 1.5) end,
-	action = function(self, t)
-		local tg = {type="ball", range=self:getTalentRange(t), radius=2, friendlyfire=self:spellFriendlyFire(), talent=t}
-		local x, y = self:getTarget(tg)
-		if not x or not y then return nil end
-
-		local mult = t.getMultiplier(self, t)
-
-		self:project(tg, x, y, function(tx, ty)
-			local target = game.level.map(tx, ty, Map.ACTOR)
-			if not target then return end
-			if not target:hasEffect(target.EFF_BURNING) then return end
-			local p = target:hasEffect(target.EFF_BURNING)
-			local dam = p.dur * p.power
-			target:removeEffect(target.EFF_BURNING)
-
-			-- Kaboom!
-			dam = dam * mult
-			DamageType:get(DamageType.FIRE).projector(self, tx, ty, DamageType.FIRE, dam)
-		end)
-
-		local _ _, x, y = self:canProject(tg, x, y)
-		game.level.map:particleEmitter(x, y, tg.radius, "fireflash", {radius=tg.radius, tx=x, ty=y})
-
-		game:playSoundNear(self, "talents/fireflash")
-		return true
-	end,
+	getChance = function(self, t) return self:getTalentLevelRaw(t) * 10 end,
 	info = function(self, t)
-		local mult = t.getMultiplier(self, t)
-		return ([[Disrupts all fires in a radius. All targets that were burning will combust, doing all the remaining burn damage instantly.
-		The combustion effect will deal %d%% of the normal burn damage.]]):format(mult * 100)
+		return ([[When your Burning Wake talent is active, your inferno and burning wake effects have %d%% chance each turn to remove a status effect(physical, magical, curse or hex) from the targets.
+		If the target is hostile it will remove a beneficial effect.
+		If the target is friendly it will remove a detrimental effect (but still burn).]]):format(t.getChance(self, t))
 	end,
 }
 
diff --git a/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua b/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua
index e377e9d44aef7acb3fb4b9ca725ae9de970db31e..e50c5b6d167f9c1ede726fc3785c9ce0268038fa 100644
--- a/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua
+++ b/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua
@@ -106,7 +106,7 @@ newEntity{ base = "BASE_NPC_MUMMY",
 
 newEntity{ base = "BASE_NPC_MUMMY",
 	allow_infinite_dungeon = true,
-	name = "animated mummy wrappings", color=colors.SLATE, display='[',
+	name = "animated mummy wrappings", color=colors.SLATE, display='[', image="object/mummy_wrappings.png",
 	desc = [[An animated set of mummy wrappings, without a corpse inside... It seems like it cannot move.]],
 	level_range = {7, nil}, exp_worth = 1,
 	rarity = 4,
diff --git a/game/modules/tome/data/zones/crypt-kryl-feijan/npcs.lua b/game/modules/tome/data/zones/crypt-kryl-feijan/npcs.lua
index e027c1d451cfb41b5320268d3ae276022bb98a96..b2fe96e14924d45e5e771da19471683e4d31ca88 100644
--- a/game/modules/tome/data/zones/crypt-kryl-feijan/npcs.lua
+++ b/game/modules/tome/data/zones/crypt-kryl-feijan/npcs.lua
@@ -60,7 +60,7 @@ newEntity{ base="BASE_NPC_MAJOR_DEMON", define_as = "KRYL_FEIJAN",
 		[Talents.T_SOUL_ROT]=5,
 		[Talents.T_BLOOD_BOIL]=5,
 		[Talents.T_FLAME]=5,
-		[Talents.T_DANCING_FIRES]=5,
+		[Talents.T_BURNING_WAKE]=5,
 		[Talents.T_WILDFIRE]=5,
 		[Talents.T_BLOOD_GRASP]=5,
 		[Talents.T_DARKNESS]=3,
diff --git a/game/modules/tome/data/zones/town-angolwen/npcs.lua b/game/modules/tome/data/zones/town-angolwen/npcs.lua
index aa808b4f319fa10676f14606e7b9a92c27f54d18..144c74179ef3ad99ec31d53bfeeb3a4ec96e67c5 100644
--- a/game/modules/tome/data/zones/town-angolwen/npcs.lua
+++ b/game/modules/tome/data/zones/town-angolwen/npcs.lua
@@ -64,8 +64,8 @@ newEntity{ define_as = "SUPREME_ARCHMAGE_LINANIIL",
 		[Talents.T_WILDFIRE]=5,
 		[Talents.T_FLAME]=5,
 		[Talents.T_FLAMESHOCK]=5,
-		[Talents.T_DANCING_FIRES]=5,
-		[Talents.T_COMBUST]=5,
+		[Talents.T_BURNING_WAKE]=5,
+		[Talents.T_CLEANSING_FLAMES]=5,
 		[Talents.T_MANATHRUST]=5,
 		[Talents.T_ARCANE_POWER]=5,
 		[Talents.T_DISRUPTION_SHIELD]=5,
@@ -133,7 +133,7 @@ newEntity{ base = "BASE_NPC_ANGOLWEN_TOWN",
 		{type="armor", subtype="cloth", autoreq=true},
 	},
 	combat_armor = 2, combat_def = 0,
-	resolvers.talents{ [Talents.T_FLAME]=3, [Talents.T_WILDFIRE]=3, [Talents.T_DANCING_FIRES]=3, [Talents.T_BLASTWAVE]=3, },
+	resolvers.talents{ [Talents.T_FLAME]=3, [Talents.T_WILDFIRE]=3, [Talents.T_BURNING_WAKE]=3, [Talents.T_BLASTWAVE]=3, },
 }
 
 newEntity{ base = "BASE_NPC_ANGOLWEN_TOWN",
diff --git a/game/modules/tome/data/zones/vor-pride/npcs.lua b/game/modules/tome/data/zones/vor-pride/npcs.lua
index 39294307c18223bddab611adc71dfe93bc3d9ef3..3f51177b94f732f6700fe58cee2a8aab7cb86b5e 100644
--- a/game/modules/tome/data/zones/vor-pride/npcs.lua
+++ b/game/modules/tome/data/zones/vor-pride/npcs.lua
@@ -64,8 +64,8 @@ newEntity{ base="BASE_NPC_ORC_VOR", define_as = "VOR",
 		[Talents.T_FIREFLASH]=5,
 		[Talents.T_INFERNO]=5,
 		[Talents.T_BLASTWAVE]=5,
-		[Talents.T_DANCING_FIRES]=5,
-		[Talents.T_COMBUST]=5,
+		[Talents.T_CLEANSING_FLAMES]=5,
+		[Talents.T_BURNING_WAKE]=5,
 
 		[Talents.T_FREEZE]=5,
 		[Talents.T_ICE_STORM]=5,
diff --git a/ideas/spells.ods b/ideas/spells.ods
index e8cb0c01bd3765f7cb9849fa3422699f409f9529..2d7b17dc5cf60ce4ff2db07244ecb8df85050820 100644
Binary files a/ideas/spells.ods and b/ideas/spells.ods differ