Index: GridLocale-frFR.lua
===================================================================
--- GridLocale-frFR.lua	(révision 19621)
+++ GridLocale-frFR.lua	(copie de travail)
@@ -135,6 +135,8 @@
 	["Class Filter"] = "Filtre de classe",
 	["Show status for the selected classes."] = "Voir les statuts pour la classe selectionn\195\169e",
 	["Show on %s."] = "Voir pour %s",
+--	["Filter Abolished units"] = true,
+--	["Skip units that have an active Abolish buff."] = true,
 
 	--}}}
 	--{{{ GridStatusName
Index: GridLocale-deDE.lua
===================================================================
--- GridLocale-deDE.lua	(révision 19621)
+++ GridLocale-deDE.lua	(copie de travail)
@@ -135,6 +135,8 @@
 	["Class Filter"] = "Klassenfilter",
 	["Show status for the selected classes."] = "Zeige den Status f\195\188r die ausgw\195\164hlte Klasse",
 	["Show on %s."] = "Zeige %s.",
+--	["Filter Abolished units"] = true,
+--	["Skip units that have an active Abolish buff."] = true,
 
 	--}}}
 	--{{{ GridStatusName
Index: GridLocale-zhCN.lua
===================================================================
--- GridLocale-zhCN.lua	(révision 19621)
+++ GridLocale-zhCN.lua	(copie de travail)
@@ -136,6 +136,8 @@
 	["Class Filter"] = "职业过滤",
 	["Show status for the selected classes."] = "显示选定职业的状态",
 	["Show on %s."] = "在%s上显示",
+--	["Filter Abolished units"] = true,
+--	["Skip units that have an active Abolish buff."] = true,
 
 	--}}}
 	--{{{ GridStatusName
Index: GridLocale-enUS.lua
===================================================================
--- GridLocale-enUS.lua	(révision 19621)
+++ GridLocale-enUS.lua	(copie de travail)
@@ -154,6 +154,8 @@
 	["Class Filter"] = true,
 	["Show status for the selected classes."] = true,
 	["Show on %s."] = true,
+	["Filter Abolished units"] = true,
+	["Skip units that have an active Abolish buff."] = true,
 
 	--}}}
 	--{{{ GridStatusName
Index: GridStatusAuras.lua
===================================================================
--- GridStatusAuras.lua	(révision 19621)
+++ GridStatusAuras.lua	(copie de travail)
@@ -26,6 +26,7 @@
 
 GridStatusAuras.defaultDB = {
 	debug = false,
+	abolish = true,
 	["debuff_poison"] = {
 		["desc"] = L["Debuff type: "]..L["Poison"],
 		["text"] = L["Poison"],
@@ -101,11 +102,44 @@
 	},
 }
 
+local abolishMap = {
+	debuff_poison = BS["Abolish Poison"],
+	debuff_disease = BS["Abolish Disease"],
+}
 
+local function buildReverseAbolishMap()
+	--[[
+		we create and add the reverse map to abolishMap.
+		This is to speed up lookup in Unit_BuffGain and because it's not
+		possible to have a name collision between keys and values (well, as 
+		long as Blizzard does not start calling an Abolish buff "debuff_poison")
+	]]
+	local rev = {}
+	for k, v in pairs(abolishMap) do
+		rev[v] = k
+	end
+	for k, v in pairs(rev) do
+		abolishMap[k] = v
+	end
+end
+
 function GridStatusAuras:OnInitialize()
 	self.super.OnInitialize(self)
 
 	self:RegisterStatuses()
+	
+	self.options.args.abolish = {
+		type = "toggle",
+		name = L["Filter Abolished units"],
+		desc = L["Skip units that have an active Abolish buff."],
+		get = function() return GridStatusAuras.db.profile.abolish end,
+		set = function()
+			GridStatusAuras.db.profile.abolish = 
+				not GridStatusAuras.db.profile.abolish
+		end,
+		order = 180
+	}
+	buildReverseAbolishMap()
 end
 
 
@@ -281,17 +315,17 @@
 
 
 function GridStatusAuras:SpecialEvents_UnitDebuffGained(unit, debuff, apps, type, tex, rank, index)
+
+	if string.find(unit, "pet") then return end
+
 	-- check if this is a specific debuff or a debuff type
 	local debuffNameStatus = statusForSpell(debuff, false)
-	local debuffTypeStatus = "debuff_" .. strlower(type)
+	local debuffTypeStatus = type and "debuff_" .. strlower(type)
 	local settings, status
-
-	if string.find(unit, "pet") then return end
-
 	if self.db.profile[debuffNameStatus] then
 		settings = self.db.profile[debuffNameStatus]
 		status = debuffNameStatus
-	else
+	elseif debuffTypeStatus then
 		settings = self.db.profile[debuffTypeStatus]
 		status = debuffTypeStatus
 	end
@@ -303,6 +337,10 @@
 	-- ignore the event if we're skipping this class or if we don't have a valid
 	-- unit object
 	if not u or settings[strlower(u.class)] == false then return end
+	
+	local abolish = self.db.profile.abolish and abolishMap[debuffTypeStatus]
+	
+	if abolish and Aura:UnitHasBuff(unit, abolish) then return end
 
 	self:Debug(unit, "gained", status, debuffNameStatus, tex)
 
@@ -319,11 +357,11 @@
 
 
 function GridStatusAuras:SpecialEvents_UnitDebuffLost(unit, debuff, apps, type, tex, rank)
-	local debuffNameStatus = statusForSpell(debuff, false)
-	local debuffTypeStatus = "debuff_" .. strlower(type)
 
 	if string.find(unit, "pet") then return end
 
+	local debuffNameStatus = statusForSpell(debuff, false)
+	local debuffTypeStatus = type and "debuff_" .. strlower(type)
 	local name = UnitName(unit)
 
 	if self.db.profile[debuffNameStatus] then
@@ -333,7 +371,7 @@
 		end
 	end
 
-	if not Aura:UnitHasDebuffType(unit, type) then
+	if type and not Aura:UnitHasDebuffType(unit, type) then
 		self:Debug(unit, "lost", debuffTypeStatus, debuffNameStatus)
 		self.core:SendStatusLost(name, debuffTypeStatus)
 	end
@@ -341,12 +379,12 @@
 
 
 function GridStatusAuras:SpecialEvents_UnitBuffGained(unit, buff, index, apps, tex, rank)
+
+	if string.find(unit, "pet") then return end
+
 	local buffNameStatus = statusForSpell(buff, true)
 	local settings = self.db.profile[buffNameStatus]
 	if not (settings and settings.enable) then return end
-
-	if string.find(unit, "pet") then return end
-
 	local u = RL:GetUnitObjectFromUnit(unit)
 
 	-- ignore the event if we're skipping this class or if we don't have a valid
@@ -363,19 +401,52 @@
 			nil,
 			nil,
 			tex)
+	
+	if self.db.profile.abolish then
+		local debuffTypeStatus = abolishMap[buff]
+
+		if debuffTypeStatus and
+				self.db.profile[debuffTypeStatus] and 
+				Aura:UnitHasDebuffType(unit, string.sub(debuffTypeStatus, 8)) then
+			self.core:SendStatusLost(u.name, debuffTypeStatus)
+		end
+	end
 end
 
 
 function GridStatusAuras:SpecialEvents_UnitBuffLost(unit, buff, apps, type, tex, rank)
-	local buffNameStatus = statusForSpell(buff, true)
 
 	if string.find(unit, "pet") then return end
 
+	local buffNameStatus = statusForSpell(buff, true)
 	if self.db.profile[buffNameStatus] then
 		if not Aura:UnitHasBuff(unit, buff) then
 			self.core:SendStatusLost(UnitName(unit), buffNameStatus)
 		end
 	end
+	
+	if self.db.profile.abolish then
+		local debuffTypeStatus = abolishMap[buff]
+		
+
+		if debuffTypeStatus then
+			local settings = self.db.profile[debuffTypeStatus]
+			if not (settings and settings.enable) then return end
+			local index = Aura:UnitHasDebuffType(unit, string.sub(debuffTypeStatus, 8))
+			if index then
+				local name, _, tex = UnitDebuff("unit", index)
+				
+				self.core:SendStatusGained(name,
+					debuffTypeStatus, settings.priority,
+					(settings.range and 40),			
+					settings.color,
+					settings.text,
+					nil,
+					nil,
+					tex)
+			end
+		end
+	end
 end
 
 