diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua
index 457ad4024f058ac3e5d142517a67ef07ba83a75c..b6401b3fdb567fc40cedec34c81f41332425b502 100644
--- a/game/modules/tome/data/damage_types.lua
+++ b/game/modules/tome/data/damage_types.lua
@@ -2665,19 +2665,6 @@ newDamageType{
 	end,
 }
 
--- Warp damage that can destroy walls
-newDamageType{
-	name = "matter", type = "MATTER",
-	projector = function(src, x, y, type, dam, state)
-		state = state or {}
-		useImplicitCrit(src, state)
-		if src.isTalentActive and src:isTalentActive(src.T_DISINTEGRATION) then
-			DamageType:get(DamageType.DIG).projector(src, x, y, DamageType.DIG, src:callTalent(src.T_DISINTEGRATION, "getDigs"))
-		end
-		DamageType:get(DamageType.WARP).projector(src, x, y, DamageType.WARP, dam, state)
-	end,
-}
-
 -- Temporal/Darkness damage
 newDamageType{
 	name = "temporal darkness", type = "VOID", text_color = "#GREY#",
diff --git a/game/modules/tome/data/talents/chronomancy/matter.lua b/game/modules/tome/data/talents/chronomancy/matter.lua
index 5ae740aabdc53f0db8cdae8afcdc8a44b6218f98..ea7d53a703b3c241dc9557f12b0da97755b99ba2 100644
--- a/game/modules/tome/data/talents/chronomancy/matter.lua
+++ b/game/modules/tome/data/talents/chronomancy/matter.lua
@@ -42,11 +42,31 @@ newTalent{
 		local x, y, target = self:getTarget(tg)
 		if not x or not y then return nil end
 		
+		-- Check for digs
+		local digs = self:isTalentActive(self.T_DISINTEGRATION) and self:callTalent(self.T_DISINTEGRATION, "getDigs")
+		
+		-- Ashes to Ashes
 		if target and target == self then
 			tg = t.getAshes(self, t)
+			-- We do our digs seperatly and first so we can damage stuff on the other side
+			if digs then
+				game.level.map:addEffect(self,
+					self.x, self.y, 3,
+					DamageType.DIG, digs,
+					tg.radius,
+					5, nil,
+					nil,
+					function(e)
+						e.x = e.src.x
+						e.y = e.src.y
+						return true
+					end,
+					tg.selffire
+				)
+			end
 			game.level.map:addEffect(self,
 				self.x, self.y, 3,
-				DamageType.MATTER, self:spellCrit(t.getDamage(self, t)/3),
+				DamageType.WARP, self:spellCrit(t.getDamage(self, t)/3),
 				tg.radius,
 				5, nil,
 				engine.MapEffect.new{color_br=180, color_bg=100, color_bb=255, effect_shader="shader_images/magic_effect.png"},
@@ -59,8 +79,11 @@ newTalent{
 			)
 			
 			game:playSoundNear(self, "talents/cloud")
-		else		
-			self:project(tg, x, y, DamageType.MATTER, self:spellCrit(t.getDamage(self, t)))
+		else
+			-- and Dust to Dust
+			if digs then for i = 1, digs do self:project(tg, x, y, DamageType.DIG, 1) end end
+		
+			self:project(tg, x, y, DamageType.WARP, self:spellCrit(t.getDamage(self, t)))
 			local _ _, _, _, x, y = self:canProject(tg, x, y)
 			game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "matter_beam", {tx=x-self.x, ty=y-self.y})
 			game:playSoundNear(self, "talents/arcane")
@@ -183,7 +206,7 @@ newTalent{
 					end,
 					dig = function(src, x, y, old)
 						-- Explode!
-						local self = game.level.map(x, y, Map.TERRAIN)
+						local self = game.level.map(x, y, engine.Map.TERRAIN)
 						local t = self.summoner:getTalentFromId(self.summoner.T_MATERIALIZE_BARRIER)
 						local tg = {type="ball", range=0, radius = self.summoner:getTalentRadius(t), talent=t, x=self.x, y=self.y}
 						self.summoner.__project_source = self