diff --git a/AngryWorldQuests.toc b/AngryWorldQuests.toc
index b365136..92a0056 100644
--- a/AngryWorldQuests.toc
+++ b/AngryWorldQuests.toc
@@ -2,7 +2,7 @@
 ## Title: Angry World Quests
 ## Notes: Adds World Quests to the quest list
 ## Author: Ermad
-## SavedVariables: AngryWorldQuests_Config
+## SavedVariables: AngryWorldQuests_Config, AngryWorldQuests_ignored_quests
 ## SavedVariablesPerCharacter: AngryWorldQuests_CharacterConfig
 ## X-Curse-Packaged-Version: v0.15.8
 ## X-Curse-Project-Name: Angry World Quests
diff --git a/Config.lua b/Config.lua
index dfd4a51..537f54e 100644
--- a/Config.lua
+++ b/Config.lua
@@ -440,6 +440,7 @@ end
 function Config:Startup()
 	if AngryWorldQuests_Config == nil then AngryWorldQuests_Config = {} end
   if AngryWorldQuests_CharacterConfig == nil then AngryWorldQuests_CharacterConfig = {} end
+  if AngryWorldQuests_ignored_quests == nil then AngryWorldQuests_ignored_quests = {} end
 
 	if not AngryWorldQuests_Config['__version'] then
 		AngryWorldQuests_Config['__version'] = configVersion
diff --git a/QuestFrame.lua b/QuestFrame.lua
index 713dffa..87fc1ae 100644
--- a/QuestFrame.lua
+++ b/QuestFrame.lua
@@ -16,9 +16,9 @@ local MAPID_ORDER = { [MAPID_SURAMAR] = 1, [MAPID_AZSUNA] = 2, [MAPID_VALSHARAH]
 
 local CURRENCYID_RESOURCES = 1220
 
-local FILTER_COUNT = 14
-local FILTER_ICONS = { "achievement_reputation_01", "inv_7xp_inscription_talenttome01", "inv_misc_lockboxghostiron", "inv_orderhall_orderresources", "inv_misc_coin_01", "inv_box_01", "ability_bossmagistrix_timewarp2", "achievement_reputation_06", "pvpcurrency-honor-horde", "inv_misc_note_01", "tracking_wildpet", "", "inv_misc_map_01", "icon_treasuremap" }
-local FILTER_NAMES = { BOUNTY_BOARD_LOCKED_TITLE, ARTIFACT_POWER, BONUS_ROLL_REWARD_ITEM, "Order Resources", BONUS_ROLL_REWARD_MONEY, ITEMS, CLOSES_IN, FACTION, PVP, TRADE_SKILLS, SHOW_PET_BATTLES_ON_MAP_TEXT, RAID_FRAME_SORT_LABEL, TRACKING, ZONE }
+local FILTER_COUNT = 15
+local FILTER_ICONS = { "achievement_reputation_01", "inv_7xp_inscription_talenttome01", "inv_misc_lockboxghostiron", "inv_orderhall_orderresources", "inv_misc_coin_01", "inv_box_01", "ability_bossmagistrix_timewarp2", "achievement_reputation_06", "pvpcurrency-honor-horde", "inv_misc_note_01", "tracking_wildpet", "", "inv_misc_map_01", "icon_treasuremap", nil }
+local FILTER_NAMES = { BOUNTY_BOARD_LOCKED_TITLE, ARTIFACT_POWER, BONUS_ROLL_REWARD_ITEM, "Order Resources", BONUS_ROLL_REWARD_MONEY, ITEMS, CLOSES_IN, FACTION, PVP, TRADE_SKILLS, SHOW_PET_BATTLES_ON_MAP_TEXT, RAID_FRAME_SORT_LABEL, TRACKING, ZONE, "Ignored" }
 local FILTER_EMISSARY = 1
 local FILTER_ARTIFACT_POWER = 2
 local FILTER_LOOT = 3
@@ -33,7 +33,8 @@ local FILTER_PETBATTLE = 11
 local FILTER_SORT = 12
 local FILTER_TRACKED = 13
 local FILTER_ZONE = 14
-local FILTER_ORDER = { FILTER_EMISSARY, FILTER_TIME, FILTER_ZONE, FILTER_TRACKED, FILTER_FACTION, FILTER_ARTIFACT_POWER, FILTER_LOOT, FILTER_ORDER_RESOURCES, FILTER_GOLD, FILTER_ITEMS, FILTER_PVP, FILTER_PROFESSION, FILTER_PETBATTLE, FILTER_SORT }
+local FILTER_IGNORED = 15
+local FILTER_ORDER = { FILTER_IGNORED, FILTER_EMISSARY, FILTER_TIME, FILTER_ZONE, FILTER_TRACKED, FILTER_FACTION, FILTER_ARTIFACT_POWER, FILTER_LOOT, FILTER_ORDER_RESOURCES, FILTER_GOLD, FILTER_ITEMS, FILTER_PVP, FILTER_PROFESSION, FILTER_PETBATTLE, FILTER_SORT }
 QF.FilterNames = FILTER_NAMES
 QF.FilterOrder = FILTER_ORDER
 local FILTER_TIME_VALUES = { 1, 3, 6, 12, 24 }
@@ -96,6 +97,43 @@ local function ArtifactPowerTruncate(power)
 	end
 end
 
+function MakeIgnoredIdentifier(id)
+	local rewards = {}
+	for i = 1, GetNumQuestLogRewards(id) do
+		local name, texture, numItems, quality, isUsable, itemID = GetQuestLogRewardInfo(i, id)
+		table.insert (rewards, {name = name, texture = texture, numItems = numItems, quality = quality, isUsable = isUsable, itemID = itemID})
+	end
+	for i = 1, GetNumQuestLogRewardCurrencies(id) do
+		local name, texture, numItems = GetQuestLogRewardCurrencyInfo(i, id)
+		table.insert (rewards, {name = name, texture = texture, numItems = numItems})
+	end
+	table.insert (rewards, {gold = GetQuestLogRewardMoney(id)})
+	return {id = id, rewards = rewards}
+end
+
+local function equivalent(a,b) -- shamelessly copied from stackoverflow
+	if type(a) ~= 'table' then return a == b end
+
+	local counta, countb = 0, 0
+
+	for k,va in pairs(a) do
+		if not equivalent(va, b[k]) then return false end
+		counta = counta + 1
+	end
+
+	for _,_ in pairs(b) do countb = countb + 1 end
+
+	return counta == countb
+end
+
+local function IsQuestIgnored(id)
+	local is_ignored = false
+	for _, ignored_quest in ipairs(AngryWorldQuests_ignored_quests) do
+		is_ignored = is_ignored or equivalent (ignored_quest, MakeIgnoredIdentifier(id))
+	end
+	return is_ignored
+end
+
 -- =================
 --  Event Functions
 -- =================
@@ -215,9 +253,16 @@ local function TitleButton_OnClick(self, button)
 			-- ChatEdit_InsertLink( string.format("|cffffff00|Hquest:%d:110|h[%s]|h|r", self.questID, title) )
 			ChatEdit_InsertLink( string.format("[%s]", title) )
 		elseif ( button == "RightButton" ) then
+			if IsShiftKeyDown() then
+				if not IsQuestIgnored (self.QuestID) then
+					table.insert (AngryWorldQuests_ignored_quests, MakeIgnoredIdentifier (self.questID))
+					QF:FrameUpdate()
+				end
+			else
 				if ( self.mapID ) then
 					SetMapByID(self.mapID)
 				end
+			end
 		else
 			if IsShiftKeyDown() then
 				if IsWorldQuestHardWatched(self.questID) or (IsWorldQuestWatched(self.questID) and GetSuperTrackedQuestID() == self.questID) then
@@ -649,6 +694,28 @@ local function TaskPOI_IsFiltered(self, bounties, hasFilters, selectedFilters)
 			end
 		end
 
+		if selectedFilters[FILTER_IGNORED] then
+			local has_any_other_filters = false
+			for filter, filtered in ipairs(selectedFilters) do
+				has_any_other_filters = has_any_other_filters or (filtered and filter ~= FILTER_IGNORED)
+			end
+
+			local is_ignored = IsQuestIgnored (self.questID)
+
+			if has_any_other_filters then
+				-- isFiltered may be true or false (some filter hit)
+				if not isFiltered then
+					isFiltered = is_ignored
+				end
+			else
+				-- isFiltered == true since no other filter hit
+				if not is_ignored then
+					isFiltered = false
+				end
+			end
+
+		end
+
 	end
 
 	return isFiltered
