Quantcast

Testing new list approach, added readme

ckaotik [01-16-10 - 18:54]
Testing new list approach, added readme
Filename
Broker_Garbage.toc
Libs/CallbackHandler-1.0.lua
Libs/LibDataBroker-1.1.lua
Libs/LibQTip-1.0.lua
Libs/LibStub.lua
Libs/tekKonfig/tekKonfig.xml
Libs/tekKonfig/tekKonfigAboutPanel.lua
Libs/tekKonfig/tekKonfigButton.lua
Libs/tekKonfig/tekKonfigCheckbox.lua
Libs/tekKonfig/tekKonfigHeading.lua
Libs/tekKonfig/tekKonfigSlider.lua
core.lua
deDE.lua
enUS.lua
options.lua
readme.txt
diff --git a/Broker_Garbage.toc b/Broker_Garbage.toc
index e6dab94..58d716a 100644
--- a/Broker_Garbage.toc
+++ b/Broker_Garbage.toc
@@ -2,13 +2,13 @@
 ## Dependencies:
 ## OptionalDeps: Auctionator, AuctionLite, Auctioneer
 ## SavedVariables: BG_GlobalDB
-## SavedVariablesPerCharacter:
+## SavedVariablesPerCharacter: BG_LocalDB

 ## Title: Broker_Garbage
 ## Notes: Full bags no more! Find your least valuable item .. and destroy it!
 ## Notes-deDE: Endlich wieder Platz! Finde dein billigstes Item ... und zerstöre es.
 ## Author: ckaotik
-## Version: 3.3v8
+## Version: 3.3v9
 ## X-Category: Inventory
 ## X-Credits: GarbageFu, Tekkub

diff --git a/Libs/CallbackHandler-1.0.lua b/Libs/CallbackHandler-1.0.lua
index 5ad658f..fbf93cf 100644
--- a/Libs/CallbackHandler-1.0.lua
+++ b/Libs/CallbackHandler-1.0.lua
@@ -1,4 +1,4 @@
---[[ $Id: CallbackHandler-1.0.lua 60548 2008-02-07 11:04:06Z nevcairiel $ ]]
+--[[ $Id: CallbackHandler-1.0.lua 60548 2008-02-07 11:04:06Z nevcairiel $ ]]
 local MAJOR, MINOR = "CallbackHandler-1.0", 3
 local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR)

diff --git a/Libs/LibDataBroker-1.1.lua b/Libs/LibDataBroker-1.1.lua
index 6b10124..7382a8d 100644
--- a/Libs/LibDataBroker-1.1.lua
+++ b/Libs/LibDataBroker-1.1.lua
@@ -1,4 +1,4 @@
-
+
 assert(LibStub, "LibDataBroker-1.1 requires LibStub")
 assert(LibStub:GetLibrary("CallbackHandler-1.0", true), "LibDataBroker-1.1 requires CallbackHandler-1.0")

diff --git a/Libs/LibQTip-1.0.lua b/Libs/LibQTip-1.0.lua
index ed1ad56..aeae958 100644
--- a/Libs/LibQTip-1.0.lua
+++ b/Libs/LibQTip-1.0.lua
@@ -1,4 +1,4 @@
-local MAJOR = "LibQTip-1.0"
+local MAJOR = "LibQTip-1.0"
 local MINOR = 29 -- Should be manually increased
 assert(LibStub, MAJOR.." requires LibStub")

diff --git a/Libs/LibStub.lua b/Libs/LibStub.lua
index 0a41ac0..3c48e5e 100644
--- a/Libs/LibStub.lua
+++ b/Libs/LibStub.lua
@@ -1,4 +1,4 @@
--- LibStub is a simple versioning stub meant for use in Libraries.  http://www.wowace.com/wiki/LibStub for more info
+-- LibStub is a simple versioning stub meant for use in Libraries.  http://www.wowace.com/wiki/LibStub for more info
 -- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
 local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2  -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
 local LibStub = _G[LIBSTUB_MAJOR]
diff --git a/Libs/tekKonfig/tekKonfig.xml b/Libs/tekKonfig/tekKonfig.xml
index 0f5bfe2..313c6d6 100644
--- a/Libs/tekKonfig/tekKonfig.xml
+++ b/Libs/tekKonfig/tekKonfig.xml
@@ -1,4 +1,4 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
+<Ui xmlns="http://www.blizzard.com/wow/ui/">
 <Script file="LibStub.lua"/>
 <Script file="tekKonfigButton.lua"/>
 <Script file="tekKonfigCheckbox.lua"/>
diff --git a/Libs/tekKonfig/tekKonfigAboutPanel.lua b/Libs/tekKonfig/tekKonfigAboutPanel.lua
index f7ea166..2547979 100644
--- a/Libs/tekKonfig/tekKonfigAboutPanel.lua
+++ b/Libs/tekKonfig/tekKonfigAboutPanel.lua
@@ -1,4 +1,4 @@
-
+
 local lib, oldminor = LibStub:NewLibrary("tekKonfig-AboutPanel", 5)
 if not lib then return end

diff --git a/Libs/tekKonfig/tekKonfigButton.lua b/Libs/tekKonfig/tekKonfigButton.lua
index 812e0d0..4456258 100644
--- a/Libs/tekKonfig/tekKonfigButton.lua
+++ b/Libs/tekKonfig/tekKonfigButton.lua
@@ -1,4 +1,4 @@
-
+
 local lib, oldminor = LibStub:NewLibrary("tekKonfig-Button", 5)
 if not lib then return end
 oldminor = oldminor or 0
diff --git a/Libs/tekKonfig/tekKonfigCheckbox.lua b/Libs/tekKonfig/tekKonfigCheckbox.lua
index d03f108..180c9f0 100644
--- a/Libs/tekKonfig/tekKonfigCheckbox.lua
+++ b/Libs/tekKonfig/tekKonfigCheckbox.lua
@@ -1,4 +1,4 @@
-
+
 local lib, oldminor = LibStub:NewLibrary("tekKonfig-Checkbox", 1)
 if not lib then return end

diff --git a/Libs/tekKonfig/tekKonfigHeading.lua b/Libs/tekKonfig/tekKonfigHeading.lua
index 2c0dc1e..774bf80 100644
--- a/Libs/tekKonfig/tekKonfigHeading.lua
+++ b/Libs/tekKonfig/tekKonfigHeading.lua
@@ -1,4 +1,4 @@
-
+
 local lib, oldminor = LibStub:NewLibrary("tekKonfig-Heading", 1)
 if not lib then return end

diff --git a/Libs/tekKonfig/tekKonfigSlider.lua b/Libs/tekKonfig/tekKonfigSlider.lua
index 75abda7..98ec4cc 100644
--- a/Libs/tekKonfig/tekKonfigSlider.lua
+++ b/Libs/tekKonfig/tekKonfigSlider.lua
@@ -1,4 +1,4 @@
-
+
 local lib, oldminor = LibStub:NewLibrary("tekKonfig-Slider", 3)
 if not lib then return end
 oldminor = oldminor or 0
diff --git a/core.lua b/core.lua
index 9ba6e27..e790dcf 100644
--- a/core.lua
+++ b/core.lua
@@ -1,4 +1,4 @@
--- Broker_Garbage
+-- Broker_Garbage
 --   Author: Ckaotik (Raisa@EU-Die Todeskrallen)
 -- created to replace/update GarbageFu for 3.x and further provide LDB support
 _, BrokerGarbage = ...
@@ -17,24 +17,49 @@ LDB.OnEnter = function(...) BrokerGarbage:Tooltip(...) end
 LDB.OnMouseWheel = function(...) BrokerGarbage:OnScroll(...) end

 -- default saved variables
-BrokerGarbage.defaultSettings = {
-	dropQuality = 0,
+BrokerGarbage.defaultGlobalSettings = {
+	-- lists
 	exclude = {},
 	include = {},
-	forceVendorPrice = {},		-- TODO options
+	dropList = {},				-- TODO options
 	autoSellList = {},			-- TODO options
-	showMoney = 2,
+	forceVendorPrice = {},		-- TODO options, only global
+
+	-- behavior
 	autoSellToVendor = true,
-	showAutoSellIcon = true,
 	autoRepairAtVendor = true,
 	neverRepairGuildBank = false,
+	useTwoPartLists = true,		-- TODO options
+
+	-- default values
+	moneyLostByDeleting = 0,	-- total value
+	moneyEarned = 0,			-- total value
 	tooltipMaxHeight = 220,
-	tooltipNumItems = 10,
-	moneyLostByDeleting = 0,
+	tooltipNumItems = 9,
+	dropQuality = 0,
+	showMoney = 2,
+
+	-- display options
+	showAutoSellIcon = true,
 	showLost = true,
-	moneyEarned = 0,
 	showEarned = true,
 	showWarnings = true,		-- TODO options
+	showSource = false,
+}
+
+BrokerGarbage.defaultLocalSettings = {
+	-- lists
+	exclude = {},
+	include = {},
+	dropList = {},
+	autoSellList = {},
+
+	-- behavior
+	neverRepairGuildBank = false,
+
+	-- default values
+	moneyLostByDeleting = 0,
+	moneyEarned = 0,
 }

 -- internal locals
@@ -103,14 +128,19 @@ local function eventHandler(self, event, ...)

 		-- check for settings
 		if not BG_GlobalDB then BG_GlobalDB = {} end
-		for key, value in pairs(BrokerGarbage.defaultSettings) do
-			BrokerGarbage:Debug("Testing key, value", key, value)
+		for key, value in pairs(BrokerGarbage.defaultGlobalSettings) do
 			if BG_GlobalDB[key] == nil then
-				BrokerGarbage:Debug("key not existant", key)
 				BG_GlobalDB[key] = value
 			end
 		end

+		if not BG_LocalDB then BG_LocalDB = {} end
+		for key, value in pairs(BrokerGarbage.defaultLocalSettings) do
+			if BG_LocalDB[key] == nil then
+				BG_LocalDB[key] = value
+			end
+		end
+
 		if not locked and loaded then
 			warnings = BrokerGarbage:ScanInventory()
 		end
@@ -158,7 +188,7 @@ function MerchantFrame_UpdateRepairButtons(...)
 	if not _G["BrokerGarbage_SellIcon"] then
 		iconbutton = CreateFrame("Button", "BrokerGarbage_SellIcon", MerchantBuyBackItemItemButton)
 		iconbutton:SetWidth(36); iconbutton:SetHeight(36)
-		iconbutton:SetNormalTexture("Interface\\Icons\\achievement_bg_returnxflags_def_wsg")
+		iconbutton:SetNormalTexture("Interface\\Icons\\achievement_bg_returnxflags_def_wsg")	-- INV_Crate_05
 		iconbutton:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
 		iconbutton:SetScript("OnClick", BrokerGarbage.AutoSell)
 		iconbutton:SetScript("OnEnter", function(self)
@@ -289,6 +319,14 @@ function BrokerGarbage:ResetMoney(which)
 	end
 end

+function BrokerGarbage:ResetList(which)
+	if which == "exclude" then
+		BG_GlobalDB.exclude = {}
+	elseif which == "include" then
+		BG_GlobalDB.include = {}
+	end
+end
+
 function BrokerGarbage:CanDisenchant(itemLink)
 	if (itemLink) then
 		local _, _, quality, level, _, _, _, count, slot = GetItemInfo(itemLink)
@@ -298,7 +336,7 @@ function BrokerGarbage:CanDisenchant(itemLink)
 			string.find(slot, "INVTYPE") and not string.find(slot, "BAG")
 			and (not count or count == 1) then

-			-- can we DE ourselves?
+			-- can we DE ourself?
 			local enchanting = GetSpellInfo(7411)
 			if IsUsableSpell(enchanting) then
 				local skill
@@ -306,17 +344,31 @@ function BrokerGarbage:CanDisenchant(itemLink)
 					local name, _, _, skillRank, _, _, _, _, _, _, _, _, _ = GetSkillLineInfo(i)
 					if name == enchanting then
 						skill = skillRank
+						BrokerGarbage:Debug("DE Skill", skill)
 						break
 					end
 				end

-				local requiredSkill = 5*5*math.ceil(level/5)-100
-				-- fix low-level items
-				if requiredSkill <= 0 then
+				local requiredSkill = 0
+				if level <= 20 then
 					requiredSkill = 1
+				elseif level <= 60 then
+					requiredSkill = 5*5*math.ceil(level/5)-100
+				elseif level < 100 then		-- BC starts here
+					requiredSkill = 225
+				elseif level <= 115 then
+					requiredSkill = 275
+				elseif level <= 130 then
+					requiredSkill = 300
+				elseif level <= 200 and quality <= 3 then	-- WotLK starts here
+					requiredSkill = 325
+				else
+					requiredSkill = 375
 				end
+				BrokerGarbage:Debug("Required DE Skill", requiredSkill)

 				if skill >= requiredSkill then
+					BrokerGarbage:Debug("Can Diss.")
 					return true
 				end
 				-- if skill is too low, still check if we can send it
@@ -332,8 +384,11 @@ end
 -- basic functionality from here
 -- ---------------------------------------------------------
 function BrokerGarbage:Tooltip(wut)
-	-- Acquire a tooltip with 3 columns, respectively aligned to left, right and right
-	BrokerGarbage.tt = LibQTip:Acquire("BrokerGarbage_TT", 3, "LEFT", "RIGHT", "RIGHT")
+	if BG_GlobalDB.showSource then
+		BrokerGarbage.tt = LibQTip:Acquire("BrokerGarbage_TT", 4, "LEFT", "RIGHT", "RIGHT", "CENTER")
+	else
+		BrokerGarbage.tt = LibQTip:Acquire("BrokerGarbage_TT", 3, "LEFT", "RIGHT", "RIGHT")
+	end
 	BrokerGarbage.tt:Clear()

 	-- font settings
@@ -358,15 +413,16 @@ function BrokerGarbage:Tooltip(wut)
 	local lineNum
 	local cheapList = BrokerGarbage:GetCheapest(BG_GlobalDB.tooltipNumItems)
 	for i = 1, #cheapList do
-		-- adds lines: itemLink, count, itemPrice
+		-- adds lines: itemLink, count, itemPrice, source
 		lineNum = BrokerGarbage.tt:AddLine(
 			select(2,GetItemInfo(cheapList[i].itemID)),
 			cheapList[i].count,
-			BrokerGarbage:FormatMoney(cheapList[i].value))
+			BrokerGarbage:FormatMoney(cheapList[i].value),
+			(BG_GlobalDB.showSource and cheapList[i].source or nil))
 		BrokerGarbage.tt:SetLineScript(lineNum, "OnMouseDown", BrokerGarbage.OnClick, cheapList[i])
 	end
 	if lineNum == nil then
-		BrokerGarbage.tt:AddLine(BrokerGarbage.locale.noItems, '', '')
+		BrokerGarbage.tt:AddLine(BrokerGarbage.locale.noItems, '', BrokerGarbage.locale.increaseTreshold)
 	end

 	-- add useful(?) information
@@ -374,11 +430,11 @@ function BrokerGarbage:Tooltip(wut)
 		or (BG_GlobalDB.showEarned and BG_GlobalDB.moneyEarned ~= 0) then
 		BrokerGarbage.tt:AddSeparator(2)

-		if BG_GlobalDB.moneyLostByDeleting ~= 0 then
-			BrokerGarbage.tt:AddLine(BrokerGarbage.locale.moneyLost, '', BrokerGarbage:FormatMoney(BG_GlobalDB.moneyLostByDeleting))
+		if BG_LocalDB.moneyLostByDeleting ~= 0 then
+			BrokerGarbage.tt:AddLine(BrokerGarbage.locale.moneyLost, '', BrokerGarbage:FormatMoney(BG_LocalDB.moneyLostByDeleting))
 		end
-		if BG_GlobalDB.moneyEarned ~= 0 then
-			BrokerGarbage.tt:AddLine(BrokerGarbage.locale.moneyEarned, '', BrokerGarbage:FormatMoney(BG_GlobalDB.moneyEarned))
+		if BG_LocalDB.moneyEarned ~= 0 then
+			BrokerGarbage.tt:AddLine(BrokerGarbage.locale.moneyEarned, '', BrokerGarbage:FormatMoney(BG_LocalDB.moneyEarned))
 		end
 	end

@@ -386,7 +442,7 @@ function BrokerGarbage:Tooltip(wut)
 	BrokerGarbage.tt:SmartAnchorTo(wut)
 	BrokerGarbage.tt:SetAutoHideDelay(0.25, wut)

-	-- Show it, et voil !
+	-- Show it, et voilà !
 	BrokerGarbage.tt:Show()
 	BrokerGarbage.tt:UpdateScrolling(BG_GlobalDB.tooltipMaxHeight)
 end
@@ -408,10 +464,7 @@ function BrokerGarbage:OnScroll(self, direction)
 end

 -- onClick function for when you ... click
-function BrokerGarbage:OnClick(itemTable, button)
-	BrokerGarbage:Debug("Click!", button)
-	BrokerGarbage:Debug("Table", itemTable, itemTable.itemID)
-
+function BrokerGarbage:OnClick(itemTable, button)
 	-- handle LDB clicks seperately
 	if not itemTable.itemID or type(itemTable.itemID) ~= "number" then
 		itemTable = BrokerGarbage.cheapestItem
@@ -423,15 +476,16 @@ function BrokerGarbage:OnClick(itemTable, button)
 		BrokerGarbage:Debug("SHIFT-Click!")
 		BrokerGarbage:Delete(select(2,GetItemInfo(itemTable.itemID)), itemTable.bag, itemTable.slot)
 		BG_GlobalDB.moneyLostByDeleting = BG_GlobalDB.moneyLostByDeleting + itemTable.value
+		BG_LocalDB.moneyLostByDeleting = BG_GlobalDB.moneyLostByDeleting + itemTable.value
+
 		BrokerGarbage:ScanInventory()

 	elseif itemTable and IsControlKeyDown() then
 		-- add to exclude list
 		BrokerGarbage:Debug("CTRL-Click!")
-		BG_GlobalDB.exclude[itemTable.itemID] = true
+		BG_LocalDB.exclude[itemTable.itemID] = true
 		BrokerGarbage:Print(format(BrokerGarbage.locale.addedToSaveList, select(2,GetItemInfo(itemTable.itemID))))
 		BrokerGarbage:ScanInventory()
-		BrokerGarbage:Debug("CTRL-Click!", "Ende")

 	elseif button == "RightButton" then
 		-- open config
@@ -447,18 +501,26 @@ end
 -- calculates the value of a stack/partial stack of an item
 function BrokerGarbage:GetItemValue(itemLink, count)
 	local vendorPrice = select(11,GetItemInfo(itemLink))
-	local auctionPrice, disenchantPrice, temp
+	local auctionPrice, disenchantPrice, temp, source
+	local DE = false

 	if vendorPrice == 0 then vendorPrice = nil end
 	if not count then count = GetItemCount(itemLink, false, false) end

-	-- gray items on the AH / forced vendor price
-	if select(3,GetItemInfo(itemLink)) == 0 or BG_GlobalDB.forceVendorPrice[itemID] then
-		return vendorPrice and vendorPrice*count or nil
+	-- gray items on the AH / auto sell items have only vendor value (to not screw up moneyEarned/moneyLost)
+	if select(3,GetItemInfo(itemLink)) == 0
+		or BG_GlobalDB.autoSellList[itemID] or BG_LocalDB.autoSellList[itemID]
+		or BG_GlobalDB.forceVendorPrice[itemID] then
+
+		return vendorPrice and vendorPrice*count or nil, "|cFFF5DEB3V" -- orange
+	end
+
+	-- drop list items have a value of 0 copper
+	if BG_GlobalDB.dropList[itemID] or BG_LocalDB.dropList[itemID] then
+		return 0
 	end

 	-- calculate auction value
-	-- TODO: update/support more
 	if IsAddOnLoaded("Auctionator") then
 		auctionPrice = Atr_GetAuctionBuyout(itemLink)
 		disenchantPrice = Atr_GetDisenchantValue(itemLink)
@@ -488,29 +550,33 @@ function BrokerGarbage:GetItemValue(itemLink, count)
 	end

 	-- DE items might be worth more than auction selling
-	if BrokerGarbage:CanDisenchant(itemID) then
-		auctionPrice = (disenchantPrice > auctionPrice) and disenchantPrice or auctionPrice
+	if BrokerGarbage:CanDisenchant(itemLink) then
+		DE = true
+		--auctionPrice = (disenchantPrice > auctionPrice) and disenchantPrice or auctionPrice
 	end

 	if vendorPrice then
-		if auctionPrice and disenchantPrice then
+		if auctionPrice and disenchantPrice and DE then
 			if auctionPrice > disenchantPrice then
 				temp = auctionPrice
+				source = "|cFF9F9F5FA"	-- greenish
 			else
 				temp = disenchantPrice
+				source = "|cFF7171C6DE"	-- purple
 			end
 		elseif auctionPrice then
 			temp = auctionPrice
+			source = "|cFF9F9F5FA" -- greenish
 		else
 			temp = 0
 		end

 		-- return highest price found
 		if vendorPrice > temp then
-			return vendorPrice * count
+			return vendorPrice * count, "|cFFF5DEB3V" -- orange
 		else
-			return temp * count or 0
-		end
+			return temp * count or 0, source
+		end
 	end
 end

@@ -548,13 +614,17 @@ function BrokerGarbage:ScanInventory()
 						select(2,GetItemInfo(itemID))))
 				end

-				if quality and
-					(quality <= BG_GlobalDB.dropQuality or BG_GlobalDB.include[itemID])
-					and not BG_GlobalDB.exclude[itemID] then
+				if quality and (quality <= BG_GlobalDB.dropQuality
+					or BG_GlobalDB.include[itemID] or BG_LocalDB.include[itemID]
+					or BG_GlobalDB.autoSellList[itemID] or BG_LocalDB.autoSellList[itemID])
+					and not BG_GlobalDB.exclude[itemID] then									-- save excluded items!!!

-					local value = BrokerGarbage:GetItemValue(itemLink,count)
-					-- make included items appear in tooltip list
-					if BG_GlobalDB.include[itemID] and not value then value = 0 end
+					local value, source = BrokerGarbage:GetItemValue(itemLink,count)
+					-- make included items appear in tooltip list as "forced"
+					if BG_GlobalDB.include[itemID] or BG_LocalDB.include[itemID] then
+						value = 0
+						source = "|cFF8C1717F"
+					end
 					if value then
 						local currentItem = {
 							bag = container,
@@ -563,6 +633,7 @@ function BrokerGarbage:ScanInventory()
 							quality = quality,
 							count = count,
 							value = value,
+							source = source,
 						}

 						if not cheapestItem or cheapestItem.value >= value then
@@ -616,22 +687,26 @@ end

 -- special functionality
 -- ---------------------------------------------------------
--- when at a merchant this will clear your bags of junk (gray quality)
+-- when at a merchant this will clear your bags of junk (gray quality) and items on your autoSellList
 function BrokerGarbage:AutoSell(self)
 	if BG_GlobalDB.autoSellToVendor or self == _G["BrokerGarbage_SellIcon"] then
 		local i = 1
 		sellValue = 0
 		for _, itemTable in pairs(BrokerGarbage.inventory) do
 			if (itemTable.quality == 0
-				and not BrokerGarbage:Find(BG_GlobalDB.exclude, itemTable.itemID))
-				or (BG_GlobalDB.include[itemTable.itemID] and itemTable.value ~= 0) then
+				and not (BG_GlobalDB.exclude[itemTable.itemID] or BG_LocalDB.exclude[itemTable.itemID]))
+				or ((BG_GlobalDB.autoSellList[itemTable.itemID] or BG_LocalDB.autoSellList[itemTable.itemID])
+					and itemTable.value ~= 0) then

 				if i == 1 then
 					BrokerGarbage:Debug("locked")
 					locked = true
 				end
+
 				sellValue = sellValue + itemTable.value
 				BG_GlobalDB.moneyEarned = BG_GlobalDB.moneyEarned + itemTable.value
+				BG_LocalDB.moneyEarned = BG_LocalDB.moneyEarned + itemTable.value
+
 				UseContainerItem(itemTable.bag, itemTable.slot)
 				i = i+1
 			end
@@ -671,4 +746,6 @@ end
 -- types: Normal Food, Bonus Food, Stat Food, Conjured Bread, Raw Food, Bread, Fish, percent food/water, combi food/drink....
 -- ignore special bags
 -- drop-beyond-treshold: only keep 5 soulshards
--- feature: selective looting (only crafting materials, greens+ , ...)
\ No newline at end of file
+-- feature: selective looting (only crafting materials, greens+ , ...)
+
+-- Spell_Shaman_SpiritLink
\ No newline at end of file
diff --git a/deDE.lua b/deDE.lua
index b21c03b..93bf6d6 100644
--- a/deDE.lua
+++ b/deDE.lua
@@ -1,7 +1,4 @@
---[[ German localisation file
- = \195\132	 = \195\164
- = \195\150	 = \195\182
- = \195\156	 = \195\188	 = \195\159 ]]--
+-- German localisation file
 _, BrokerGarbage = ...

 if GetLocale() == "deDE" then
@@ -10,88 +7,92 @@ BrokerGarbage.locale = {
 	label = "Kein Junk",

 	-- Chat Messages
-	sellAndRepair = "M\195\188ll f\195\188r %1$s verkauft, repariert f\195\188r %2$s. \195\132nderung: %3$s.",
-	repair = "Repariert f\195\188r %s.",
-	sell = "M\195\188ll verkauft f\195\188r %s.",
+	sellAndRepair = "Müll für %1$s verkauft, repariert für %2$s. Änderung: %3$s.",
+	repair = "Repariert für %s.",
+	sell = "Müll verkauft für %s.",

-	addedToSaveList = "%s zur Ausnahmeliste hinzugef\195\188gt.",
-	addedToDestroyList = "%s zur Einschlussliste hinzugef\195\188gt.",
-	itemDeleted = "%s wurde gel\195\182scht.",
+	addedToSaveList = "%s zur Ausnahmeliste hinzugefügt.",
+	addedToDestroyList = "%s zur Einschlussliste hinzugefügt.",
+	itemDeleted = "%s wurde gelöscht.",

-	openPlease = "Bitte \195\182ffne %s - es nimmt unn\195\182tig Platz weg.",
+	openPlease = "Bitte öffne %s - es nimmt unnötig Platz weg.",

 	-- Tooltip
-	headerRightClick = "Rechts-Klick \195\182ffnet Optionen",
-	headerShiftClick = "SHIFT-Klick: Zerst\195\182ren",
+	headerRightClick = "Rechts-Klick: Optionen",
+	headerShiftClick = "SHIFT-Klick: Zerstören",
 	headerCtrlClick = "STRG-Klick: Behalten",
 	moneyLost = "Gold verloren:",
 	moneyEarned = "Gold verdient:",
-	noItems = "Keine Items zum L\195\182schen.",
+	noItems = "Keine Items zum Löschen.",
+	increaseTreshold = "Erhöhe die Item Qualität",

 	autoSellTooltip = "Graue Items verkaufen.",

 	-- Options Frame
-	subTitle = "M\195\182chtest du einmal nicht automatisch verkaufen / reparieren? \nHalte SHIFT gedr\195\188ckt, wenn du den H\195\164ndler ansprichst!",
+	subTitle = "Möchtest du einmal nicht automatisch verkaufen / reparieren? \nHalte SHIFT gedrückt, wenn du den Händler ansprichst!",
 	autoSellTitle = "Automatisch Verkaufen",
-	autoSellText = "Wenn ausgew\195\164hlt, werden graue Gegenst\195\164nde automatisch beim H\195\164ndler verkauft.",
+	autoSellText = "Wenn ausgewählt, werden graue Gegenstände automatisch beim Händler verkauft.",

 	showAutoSellIconTitle = "Icon anzeigen",
-	showAutoSellIconText = "Wenn ausgew\195\164hlt, wird bei H\195\164ndlern ein Icon zum automatischen Verkaufen angezeigt.",
+	showAutoSellIconText = "Wenn ausgewählt, wird bei Händlern ein Icon zum automatischen Verkaufen angezeigt.",

 	autoRepairTitle = "Automatisch Reparieren",
-	autoRepairText = "Wenn ausgew\195\164hlt, wird deine Ausr\195\188stung automatisch repariert wenn m\195\182glich.",
+	autoRepairText = "Wenn ausgewählt, wird deine Ausrüstung automatisch repariert wenn möglich.",

 	autoRepairGuildTitle = "Reparatur selbst zahlen",
-	autoRepairGuildText = "Wenn ausgew\195\164hlt, wird Broker_Garbage nicht auf Gildenkosten reparieren.",
+	autoRepairGuildText = "Wenn ausgewählt, wird Broker_Garbage nicht auf Gildenkosten reparieren.",

 	showLostTitle = "'Verlorenes Gold' zeigen",
-	showLostText = "Wenn ausgew\195\164hlt, wird im Tooltip die Zeile 'Verlorenes Gold' gezeigt.",
+	showLostText = "Wenn ausgewählt, wird im Tooltip die Zeile 'Verlorenes Gold' gezeigt.",
+
+	showSourceTitle = "Quelle anzeigen",
+	showSourceText = "Wenn ausgewählt, wird im Tooltip als letzte Spalte die Preisquelle gezeigt.",

 	showEarnedTitle = "'Verdientes Gold' zeigen",
-	showEarnedText = "Wenn ausgew\195\164hlt, wird im Tooltip die Zeile 'Verdientes Gold' gezeigt.",
+	showEarnedText = "Wenn ausgewählt, wird im Tooltip die Zeile 'Verdientes Gold' gezeigt.",

-	dropQualityTitle = "Item Qualit\195\164t",
-	dropQualityText = "W\195\164hle, bis zu welcher Qualit\195\164t Items zum L\195\182schen vorgeschlagen werden. Standard: Schlecht (0)",
+	dropQualityTitle = "Item Qualität",
+	dropQualityText = "Wähle, bis zu welcher Qualität Items zum Löschen vorgeschlagen werden. Standard: Schlecht (0)",

 	moneyFormatTitle = "Geldformat",
-	moneyFormatText = "\195\132ndere die Art, wie Geldbetr\195\164ge angezeigt werden. Standard: 2",
+	moneyFormatText = "Ändere die Art, wie Geldbeträge angezeigt werden. Standard: 2",

 	maxItemsTitle = "Max. Items",
-	maxItemsText = "Lege fest, wie viele Zeilen im Tooltip angezeigt werden. Standard: 10",
+	maxItemsText = "Lege fest, wie viele Zeilen im Tooltip angezeigt werden. Standard: 9",

-	maxHeightTitle = "Max. H\195\182he",
+	maxHeightTitle = "Max. Höhe",
 	maxHeightText = "Lege fest, wie hoch der Tooltip sein darf. Standard: 220",

 	rescanInventory = "Inventar neu scannen",
-	rescanInventoryText = "Klicke um dein Inventar neu zu scannen. Dies sollte normalerweise nicht n\195\182tig sein!",
+	rescanInventoryText = "Klicke um dein Inventar neu zu scannen. Dies sollte normalerweise nicht nötig sein!",

 	resetMoneyLost = "'Verlorenes Geld' leeren",
-	resetMoneyLostText = "Klicke um die Statistik 'Verlorenes Geld' zur\195\188ckzusetzen.",
+	resetMoneyLostText = "Klicke um die Statistik 'Verlorenes Geld' zurückzusetzen.",

 	resetMoneyEarned = "'Verdientes Geld' leeren",
-	resetMoneyEarnedText = "Klicke um die Statistik 'Verdientes Geld' zur\195\188ckzusetzen.",
+	resetMoneyEarnedText = "Klicke um die Statistik 'Verdientes Geld' zurückzusetzen.",

 	emptyExcludeList = "Ausschlussliste leeren",
-	emptyExcludeListText = "Klicke um deine Ausschlussliste zu leeren.",
+	emptyExcludeListText = "Klicke um deine globale (!) Ausschlussliste zu leeren.",

 	emptyIncludeList = "Einschlussliste leeren",
-	emptyIncludeListText = "Klicke um deine Einschlussliste zu leeren.",
+	emptyIncludeListText = "Klicke um deine globale (!) Einschlussliste zu leeren.",

 	-- List Options Panel
 	LOTitle = "Listen-Optionen",
-	LOSubTitle = "Stelle hier deine Listen ein. Um Items hinzuzuf\195\188gen, zieh sie auf das jeweilige '+'. Um sie zu entfernen, w\195\164hle sie aus und klicke auf '-'.",
-
-	LOExcludeHeader = "Ausschlussliste - Items hier werden nie verkauft/gel\195\182scht.",
-	LOExcludePlusTT = "Items hinzuf\195\188gen, indem du sie hierher ziehst/hier ablegst",
-	LOExcludeRefreshTT = "Klicke, um die Anzeige zu aktualisieren",
-	LOExcludeMinusTT = "W\195\164hle Items, die du entfernen willst. Dann klicke hier.",
-	LOExcludeEmptyTT = "Klicke, um die Ausschlussliste v\195\182llig zu leeren.\nAchtung!",
-
-	LOIncludeHeader = "Einschlussliste - Items hier werden zum L\195\182schen vorgeschlagen.",
-	LOIncludePlusTT = "Items hinzuf\195\188gen, indem du sie hierher ziehst/hier ablegst",
-	LOIncludeRefreshTT = "Klicke, um die Anzeige zu aktualisieren",
-	LOIncludeMinusTT = "W\195\164hle Items, die du entfernen willst. Dann klicke hier.",
-	LOIncludeEmptyTT = "Klicke, um die Einschlussliste v\195\182llig zu leeren.\nAchtung!",
+	LOSubTitle = "Stelle hier deine Listen ein. Um Items hinzuzufügen, ziehe sie auf das jeweilige '+'. Um sie zu entfernen, wähle sie aus und klicke auf '-'.",
+
+	LOExcludeHeader = "Ausschlussliste - Items hier werden nie verkauft/gelöscht.",
+	LOExcludePlusTT = "Items hinzufügen, indem du sie hierher ziehst/hier ablegst",
+	LOExcludeMinusTT = "Wähle Items, die du entfernen willst. Dann klicke hier.",
+	LOExcludePromoteTT = "Klicke um alle markierten Items in die globale Ausnahmeliste zu übernehmen.",
+	LOExcludeEmptyTT = "Klicke, um die lokale Ausschlussliste völlig zu leeren.\nAchtung!",
+
+	LOIncludeHeader = "Einschlussliste - Items hier werden zum Löschen vorgeschlagen.",
+	LOIncludePlusTT = "Items hinzufügen, indem du sie hierher ziehst/hier ablegst",
+	LOIncludeMinusTT = "Wähle Items, die du entfernen willst. Dann klicke hier.",
+	LOIncludePromoteTT = "Klicke, um alle markierten Items in die globale Einschlussliste zu übernehmen.",
+	LOIncludeEmptyTT = "Klicke, um die lokale Einschlussliste völlig zu leeren.\nAchtung!",
 }

 end
\ No newline at end of file
diff --git a/enUS.lua b/enUS.lua
index 79b2b13..dd51842 100644
--- a/enUS.lua
+++ b/enUS.lua
@@ -1,3 +1,4 @@
+-- enUS / enGB / default localization file
 _, BrokerGarbage = ...

 BrokerGarbage.locale = {
@@ -21,6 +22,7 @@ BrokerGarbage.locale = {
 	moneyLost = "Money Lost:",
 	moneyEarned = "Money Earned:",
 	noItems = "No items to delete.",
+	increaseTreshold = "Increase quality treshold",

 	autoSellTooltip = "Sell gray items.",

@@ -41,6 +43,9 @@ BrokerGarbage.locale = {
 	showLostTitle = "Show Money Lost",
 	showLostText = "Toggles whether to show the tooltip line 'Money Lost'.",

+	showSourceTitle = "Show Source",
+	showSourceText = "Toggles whether to show the last column in the tooltip, displaying the item value source.",
+
 	showEarnedTitle = "Show Money Earned",
 	showEarnedText = "Toggles whether to show the tooltip line 'Money Earned'.",

@@ -51,7 +56,7 @@ BrokerGarbage.locale = {
 	moneyFormatText = "Change the way money (i.e. gold/silver/copper) is being displayed. Default: 2",

 	maxItemsTitle = "Max. Items",
-	maxItemsText = "Set how many lines you would like to have displayed in the tooltip. Default: 10",
+	maxItemsText = "Set how many lines you would like to have displayed in the tooltip. Default: 9",

 	maxHeightTitle = "Max. Height",
 	maxHeightText = "Set the height of the tooltip. Default: 220",
@@ -76,14 +81,14 @@ BrokerGarbage.locale = {
 	LOSubTitle = "Set up your master lists here. To add Items, drag them over the corresponding '+' icon, to remove them select them and klick the '-'.",

 	LOExcludeHeader = "Exclude List - these items will never be sold/deleted.",
-	LOExcludePlusTT = "Add items to the list by dragging/placing them on me!",
-	LOExcludeRefreshTT = "Click to refresh the Exclude List display",
+	LOExcludePlusTT = "Add items to the Exclude List by dragging/placing them on me!",
 	LOExcludeMinusTT = "Select items you want to remove, then click here.",
-	LOExcludeEmptyTT = "Click to fully empty your Exclude List. Caution!",
+	LOExcludePromoteTT = "Selected items will be written onto your global Exclude List, as seen by every character.",
+	LOExcludeEmptyTT = "Click to fully empty your local Exclude List. Caution!",

 	LOIncludeHeader = "Include List - these items will be suggested to be deleted.",
-	LOIncludePlusTT = "Add items to the list by dragging/placing them on me!",
-	LOIncludeRefreshTT = "Click to refresh the Include List display",
+	LOIncludePlusTT = "Add items to your Include List by dragging/placing them on me!",
 	LOIncludeMinusTT = "Select items you want to remove, then click here.",
-	LOIncludeEmptyTT = "Click to fully empty your Include List. Caution!",
+	LOIncludePromoteTT = "Selected items will be written onto your global Include List, as seen by every character.",
+	LOIncludeEmptyTT = "Click to fully empty your local Include List. Caution!",
 }
\ No newline at end of file
diff --git a/options.lua b/options.lua
index 0b606be..dd1555f 100644
--- a/options.lua
+++ b/options.lua
@@ -1,4 +1,4 @@
-addonName, BrokerGarbage = ...
+addonName, BrokerGarbage = ...

 BrokerGarbage.quality = {
 	[0] = "|cff9D9D9D"..ITEM_QUALITY0_DESC.."|r",
@@ -60,11 +60,11 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)

 	local guildrepair = LibStub("tekKonfig-Checkbox").new(BrokerGarbage.options, nil, BrokerGarbage.locale.autoRepairGuildTitle, "TOPLEFT", autorepair, "BOTTOMLEFT", 14, 0)
 	guildrepair.tiptext = BrokerGarbage.locale.autoRepairGuildText
-	guildrepair:SetChecked(BG_GlobalDB.neverRepairGuildBank)
+	guildrepair:SetChecked(BG_LocalDB.neverRepairGuildBank)
 	local checksound = guildrepair:GetScript("OnClick")
 	guildrepair:SetScript("OnClick", function(guildrepair)
 		checksound(guildrepair)
-		BG_GlobalDB.neverRepairGuildBank = not BG_GlobalDB.neverRepairGuildBank
+		BG_LocalDB.neverRepairGuildBank = not BG_LocalDB.neverRepairGuildBank
 	end)

 	local showlost = LibStub("tekKonfig-Checkbox").new(BrokerGarbage.options, nil, BrokerGarbage.locale.showLostTitle, "TOPLEFT", autosellicon, "BOTTOMLEFT", -14, -10)
@@ -85,7 +85,7 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 		BG_GlobalDB.showEarned = not BG_GlobalDB.showEarned
 	end)

-	local quality = LibStub("tekKonfig-Slider").new(BrokerGarbage.options, BrokerGarbage.locale.dropQualityTitle, 0, 6, "TOPLEFT", showlost, "BOTTOMLEFT", 2, -50)
+	local quality = LibStub("tekKonfig-Slider").new(BrokerGarbage.options, BrokerGarbage.locale.dropQualityTitle, 0, 6, "TOPLEFT", showlost, "BOTTOMLEFT", 5, -40)
 	quality.tiptext = BrokerGarbage.locale.dropQualityText
 	quality:SetWidth(200)
 	quality:SetValueStep(1);
@@ -100,7 +100,7 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 	end)

 	local testValue = 130007
-	local moneyFormat = LibStub("tekKonfig-Slider").new(BrokerGarbage.options, BrokerGarbage.locale.moneyFormatTitle, 0, 4, "LEFT", quality, "RIGHT", 40, 0)
+	local moneyFormat = LibStub("tekKonfig-Slider").new(BrokerGarbage.options, BrokerGarbage.locale.moneyFormatTitle, 0, 4, "LEFT", quality, "LEFT", 200, 0)
 	moneyFormat.tiptext = BrokerGarbage.locale.moneyFormatText
 	moneyFormat:SetWidth(200)
 	moneyFormat:SetValueStep(1);
@@ -114,7 +114,7 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 	end)


-	local ttMaxItems = LibStub("tekKonfig-Slider").new(BrokerGarbage.options, BrokerGarbage.locale.maxItemsTitle, 0, 50, "TOPLEFT", quality, "BOTTOMLEFT", 2, -15)
+	local ttMaxItems = LibStub("tekKonfig-Slider").new(BrokerGarbage.options, BrokerGarbage.locale.maxItemsTitle, 0, 50, "TOPLEFT", quality, "BOTTOMLEFT", 0, -15)
 	ttMaxItems.tiptext = BrokerGarbage.locale.maxItemsText
 	ttMaxItems:SetWidth(200)
 	ttMaxItems:SetValueStep(1);
@@ -128,7 +128,7 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 	end)


-	local ttMaxHeight = LibStub("tekKonfig-Slider").new(BrokerGarbage.options, BrokerGarbage.locale.maxHeightTitle, 0, 400, "LEFT", ttMaxItems, "RIGHT", 40, 0)
+	local ttMaxHeight = LibStub("tekKonfig-Slider").new(BrokerGarbage.options, BrokerGarbage.locale.maxHeightTitle, 0, 400, "LEFT", ttMaxItems, "LEFT", 200, 0)
 	ttMaxHeight.tiptext = BrokerGarbage.locale.maxHeightText
 	ttMaxHeight:SetWidth(200)
 	ttMaxHeight:SetValueStep(10);
@@ -140,9 +140,24 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 		BG_GlobalDB.tooltipMaxHeight = ttMaxHeight:GetValue()
 		ttMaxHeight.text:SetText(ttMaxHeight:GetValue())
 	end)
-
-
-	local rescan = LibStub("tekKonfig-Button").new_small(BrokerGarbage.options, "TOPLEFT", ttMaxItems, "BOTTOMLEFT", 0, -50)
+
+	local resetexclude = LibStub("tekKonfig-Button").new_small(BrokerGarbage.options, "TOPLEFT", ttMaxItems, "BOTTOMLEFT", 0, -50)
+	resetexclude:SetText(BrokerGarbage.locale.emptyExcludeList)
+	resetexclude.tiptext = BrokerGarbage.locale.emptyExcludeListText
+	resetexclude:SetWidth(150) resetexclude:SetHeight(18)
+	resetexclude:SetScript("OnClick", function()
+		BrokerGarbage:ResetList("exclude")
+	end)
+
+	local resetinclude = LibStub("tekKonfig-Button").new_small(BrokerGarbage.options, "TOPLEFT", resetexclude, "BOTTOMLEFT", 0, 0)
+	resetinclude:SetText(BrokerGarbage.locale.emptyIncludeList)
+	resetinclude.tiptext = BrokerGarbage.locale.emptyIncludeListText
+	resetinclude:SetWidth(150) resetinclude:SetHeight(18)
+	resetinclude:SetScript("OnClick", function()
+		BrokerGarbage:ResetList("include")
+	end)
+
+	local rescan = LibStub("tekKonfig-Button").new_small(BrokerGarbage.options, "TOPLEFT", resetinclude, "BOTTOMLEFT", 0, -20)
 	rescan:SetText(BrokerGarbage.locale.rescanInventory)
 	rescan.tiptext = BrokerGarbage.locale.rescanInventoryText
 	rescan:SetWidth(150) rescan:SetHeight(18)
@@ -150,7 +165,7 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 		BrokerGarbage:ScanInventory()
 	end)

-	local resetmoneylost = LibStub("tekKonfig-Button").new_small(BrokerGarbage.options, "LEFT", rescan, "RIGHT", 40, 0)
+	local resetmoneylost = LibStub("tekKonfig-Button").new_small(BrokerGarbage.options, "LEFT", resetexclude, "LEFT", 200, 0)
 	resetmoneylost:SetText(BrokerGarbage.locale.resetMoneyLost)
 	resetmoneylost.tiptext = BrokerGarbage.locale.resetMoneyLostText
 	resetmoneylost:SetWidth(150) resetmoneylost:SetHeight(18)
@@ -165,6 +180,15 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 	resetmoneyearned:SetScript("OnClick", function()
 		BrokerGarbage:ResetMoney(1)
 	end)
+
+	local showsource = LibStub("tekKonfig-Checkbox").new(BrokerGarbage.options, nil, BrokerGarbage.locale.showSourceTitle, "TOPLEFT", resetmoneyearned, "BOTTOMLEFT", 0, -20)
+	showsource.tiptext = BrokerGarbage.locale.showSourceText
+	showsource:SetChecked(BG_GlobalDB.showSource)
+	local checksound = showsource:GetScript("OnClick")
+	showsource:SetScript("OnClick", function(showsource)
+		checksound(showsource)
+		BG_GlobalDB.showsource = not BG_GlobalDB.showsource
+	end)

 	-- ----------------------------------
 	-- List Options panel
@@ -191,7 +215,7 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 	group:SetWidth(boxWidth)

 	local backdrop = {bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
-		tile = true,
+		tile = false,
 		tileSize = 32,
 		insets = { left = 0, right = -22, top = 0, bottom = 0 }}
 	excludeBox:SetBackdrop(backdrop)
@@ -201,32 +225,28 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 	-- action buttons
 	local plus = CreateFrame("Button", nil, BrokerGarbage.listOptions)
 	plus:SetPoint("TOPLEFT", "BG_ExcludeListBoxScrollBar", "TOPRIGHT", 8, -3)
-	plus:SetWidth(25)
-	plus:SetHeight(25)
+	plus:SetWidth(25); plus:SetHeight(25)
 	plus:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
 	plus:SetNormalTexture("Interface\\Icons\\Spell_chargepositive")
 	plus.tiptext = BrokerGarbage.locale.LOExcludePlusTT
-
-	local refresh = CreateFrame("Button", nil, BrokerGarbage.listOptions)
-	refresh:SetPoint("TOP", plus, "BOTTOM", 0, -6)
-	refresh:SetWidth(25)
-	refresh:SetHeight(25)
-	refresh:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
-	refresh:SetNormalTexture("Interface\\Icons\\achievement_bg_returnxflags_def_wsg")
-	refresh.tiptext = BrokerGarbage.locale.LOExcludeRefreshTT

 	local minus = CreateFrame("Button", nil, BrokerGarbage.listOptions)
-	minus:SetPoint("TOP", refresh, "BOTTOM", 0, -6)
-	minus:SetWidth(25)
-	minus:SetHeight(25)
+	minus:SetPoint("TOP", plus, "BOTTOM", 0, -6)
+	minus:SetWidth(25);	minus:SetHeight(25)
 	minus:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
 	minus:SetNormalTexture("Interface\\Icons\\Spell_chargenegative")
 	minus.tiptext = BrokerGarbage.locale.LOExcludeMinusTT

+	local promote = CreateFrame("Button", nil, BrokerGarbage.listOptions)
+	promote:SetPoint("TOP", minus, "BOTTOM", 0, -6)
+	promote:SetWidth(25) promote:SetHeight(25)
+	promote:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
+	promote:SetNormalTexture("Interface\\Icons\\achievement_bg_returnxflags_def_wsg")
+	promote.tiptext = BrokerGarbage.locale.LOExcludePromoteTT
+
 	local emptyExcludeList = CreateFrame("Button", nil, BrokerGarbage.listOptions)
-	emptyExcludeList:SetPoint("TOP", minus, "BOTTOM", 0, -6)
-	emptyExcludeList:SetWidth(25)
-	emptyExcludeList:SetHeight(25)
+	emptyExcludeList:SetPoint("TOP", promote, "BOTTOM", 0, -6)
+	emptyExcludeList:SetWidth(25); emptyExcludeList:SetHeight(25)
 	emptyExcludeList:SetNormalTexture("Interface\\Buttons\\Ui-grouploot-pass-up")
 	emptyExcludeList.tiptext = BrokerGarbage.locale.LOExcludeEmptyTT

@@ -253,32 +273,28 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 	-- action buttons
 	local plus2 = CreateFrame("Button", nil, BrokerGarbage.listOptions)
 	plus2:SetPoint("TOPLEFT", "BG_IncludeListBoxScrollBar", "TOPRIGHT", 8, -3)
-	plus2:SetWidth(25)
-	plus2:SetHeight(25)
+	plus2:SetWidth(25); plus2:SetHeight(25)
 	plus2:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
 	plus2:SetNormalTexture("Interface\\Icons\\Spell_chargepositive")
 	plus2.tiptext = BrokerGarbage.locale.LOIncludePlusTT

-	local refresh2 = CreateFrame("Button", nil, BrokerGarbage.listOptions)
-	refresh2:SetPoint("TOP", plus2, "BOTTOM", 0, -6)
-	refresh2:SetWidth(25)
-	refresh2:SetHeight(25)
-	refresh2:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
-	refresh2:SetNormalTexture("Interface\\Icons\\achievement_bg_returnxflags_def_wsg")
-	refresh2.tiptext = BrokerGarbage.locale.LOIncludeRefreshTT
-
 	local minus2 = CreateFrame("Button", nil, BrokerGarbage.listOptions)
-	minus2:SetPoint("TOP", refresh2, "BOTTOM", 0, -6)
-	minus2:SetWidth(25)
-	minus2:SetHeight(25)
+	minus2:SetPoint("TOP", plus2, "BOTTOM", 0, -6)
+	minus2:SetWidth(25); minus2:SetHeight(25)
 	minus2:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
 	minus2:SetNormalTexture("Interface\\Icons\\Spell_chargenegative")
 	minus2.tiptext = BrokerGarbage.locale.LOIncludeMinusTT
+
+	local promote2 = CreateFrame("Button", nil, BrokerGarbage.listOptions)
+	promote2:SetPoint("TOP", minus2, "BOTTOM", 0, -6)
+	promote2:SetWidth(25); promote2:SetHeight(25)
+	promote2:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
+	promote2:SetNormalTexture("Interface\\Icons\\achievement_bg_returnxflags_def_wsg")
+	promote2.tiptext = BrokerGarbage.locale.LOIncludePromoteTT

 	local emptyIncludeList = CreateFrame("Button", nil, BrokerGarbage.listOptions)
-	emptyIncludeList:SetPoint("TOP", minus2, "BOTTOM", 0, -6)
-	emptyIncludeList:SetWidth(25)
-	emptyIncludeList:SetHeight(25)
+	emptyIncludeList:SetPoint("TOP", promote2, "BOTTOM", 0, -6)
+	emptyIncludeList:SetWidth(25); emptyIncludeList:SetHeight(25)
 	emptyIncludeList:SetNormalTexture("Interface\\Buttons\\Ui-grouploot-pass-up")
 	emptyIncludeList.tiptext = BrokerGarbage.locale.LOIncludeEmptyTT

@@ -294,23 +310,45 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 	local function HideTooltip() GameTooltip:Hide() end


+	local function JoinTables(t1, t2)
+		result = {}
+
+		if t1 then
+			for index, value in pairs (t1) do
+				result[index] = value
+			end
+		end
+		if t2 then
+			for index, value in pairs (t2) do
+				result[index] = value
+			end
+		end
+
+		return result
+	end
+
 	local numCols = 8
 	local function ListOptionsUpdate(listName)
-		local list, box, parent, buttonList
+		local globalList, localList, dataList, box, parent, buttonList
 		if listName == "include" then
-			list = BG_GlobalDB.include
+			globalList = BG_GlobalDB.include
+			localList = BG_LocalDB.include
+
 			box = includeBox
 			parent = group2
 			buttonList = BrokerGarbage.listButtons.include
 		else
-			list = BG_GlobalDB.exclude
+			globalList = BG_GlobalDB.exclude
+			localList = BG_LocalDB.exclude
+
 			box = excludeBox
 			parent = group
 			buttonList = BrokerGarbage.listButtons.exclude
 		end
+		dataList = JoinTables(globalList, localList)

 		local index = 1
-		for itemID,_ in pairs(list) do
+		for itemID,_ in pairs(dataList) do
 			if buttonList[index] then
 				-- use available button
 				local button = buttonList[index]
@@ -319,6 +357,7 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 				button.itemID = itemID
 				button.itemLink = itemLink
 				button:SetNormalTexture(texture)
+				button:GetNormalTexture():SetDesaturated(globalList[itemID])		-- desaturate global list items
 				button:SetChecked(false)
 				button:Show()
 			else
@@ -336,6 +375,8 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 				tex:ClearAllPoints()
 				tex:SetPoint("CENTER")
 				tex:SetWidth(36/37*66) tex:SetHeight(36/37*66)
+
+				iconbutton:GetNormalTexture():SetDesaturated(globalList[itemID])		-- desaturate global list items

 				iconbutton:SetScript("OnEnter", ShowTooltip)
 				iconbutton:SetScript("OnLeave", HideTooltip)
@@ -371,12 +412,12 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 		if not type == "item" then return end

 		if self == group2 or self == includeBox or self == plus2 then
-			BG_GlobalDB.include[itemID] = true
+			BG_LocalDB.include[itemID] = true
 			BrokerGarbage:Print(format(BrokerGarbage.locale.addedToDestroyList, link))
 			ListOptionsUpdate("include")
 			ClearCursor()
 		elseif self == group or self == excludeBox or self == plus then
-			BG_GlobalDB.exclude[itemID] = true
+			BG_LocalDB.exclude[itemID] = true
 			BrokerGarbage:Print(format(BrokerGarbage.locale.addedToSaveList, link))
 			ListOptionsUpdate("exclude")
 			ClearCursor()
@@ -384,34 +425,28 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 	end

 	local function OnClick(self, button)
-		if self == refresh then
-			ListOptionsUpdate("exclude")
-
-		elseif self == refresh2 then
-			ListOptionsUpdate("include")
-
-		elseif self == emptyExcludeList then
-			BG_GlobalDB.exclude = {}
+		if self == emptyExcludeList then
+			BG_LocalDB.exclude = {}
 			ListOptionsUpdate("exclude")
 			BrokerGarbage:ScanInventory()
-
 		elseif self == emptyIncludeList then
-			BG_GlobalDB.include = {}
+			BG_LocalDB.include = {}
 			ListOptionsUpdate("include")
 			BrokerGarbage:ScanInventory()

 		elseif self == minus then
 			for i, button in pairs(BrokerGarbage.listButtons.exclude) do
 				if button:GetChecked() then
+					BG_LocalDB.exclude[button.itemID] = nil
 					BG_GlobalDB.exclude[button.itemID] = nil
 				end
 			end
 			ListOptionsUpdate("exclude")
 			BrokerGarbage:ScanInventory()
-
 		elseif self == minus2 then
 			for i, button in pairs(BrokerGarbage.listButtons.include) do
 				if button:GetChecked() then
+					BG_LocalDB.include[button.itemID] = nil
 					BG_GlobalDB.include[button.itemID] = nil
 				end
 			end
@@ -424,22 +459,33 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 			ListOptionsUpdate("exclude")
 		elseif self == plus2 then
 			BrokerGarbage:Debug("Include2")
-			ListOptionsUpdate("include")
 			ItemDrop(self)
+			ListOptionsUpdate("include")
+
+		elseif self == promote then
+			BrokerGarbage:Debug("Promote")
+			for i, button in pairs(BrokerGarbage.listButtons.exclude) do
+				if button:GetChecked() then
+					BG_GlobalDB.exclude[button.itemID] = true
+				end
+			end
+
+			ListOptionsUpdate("exclude")
+		elseif self == promote2 then
+			BrokerGarbage:Debug("Promote2")
+			for i, button in pairs(BrokerGarbage.listButtons.include) do
+				if button:GetChecked() then
+					BG_GlobalDB.include[button.itemID] = true
+				end
+			end
+
+			ListOptionsUpdate("exclude")
 		end

 		--ListOptionsUpdate("include")
 		--ListOptionsUpdate("exclude")
 	end

-	refresh:SetScript("OnClick", OnClick)
-	refresh:SetScript("OnEnter", ShowTooltip)
-	refresh:SetScript("OnLeave", HideTooltip)
-
-	refresh2:SetScript("OnClick", OnClick)
-	refresh2:SetScript("OnEnter", ShowTooltip)
-	refresh2:SetScript("OnLeave", HideTooltip)
-
 	emptyExcludeList:SetScript("OnClick", OnClick)
 	emptyExcludeList:SetScript("OnEnter", ShowTooltip)
 	emptyExcludeList:SetScript("OnLeave", HideTooltip)
@@ -464,6 +510,14 @@ BrokerGarbage.options:SetScript("OnShow", function(frame)
 	plus2:SetScript("OnEnter", ShowTooltip)
 	plus2:SetScript("OnLeave", HideTooltip)

+	promote:SetScript("OnClick", OnClick)
+	promote:SetScript("OnEnter", ShowTooltip)
+	promote:SetScript("OnLeave", HideTooltip)
+
+	promote2:SetScript("OnClick", OnClick)
+	promote2:SetScript("OnEnter", ShowTooltip)
+	promote2:SetScript("OnLeave", HideTooltip)
+
 	-- ----------------------------------
 	plus:RegisterForDrag("LeftButton")
 	plus:SetScript("OnReceiveDrag", ItemDrop)
diff --git a/readme.txt b/readme.txt
new file mode 100644
index 0000000..ce1d85a
--- /dev/null
+++ b/readme.txt
@@ -0,0 +1,69 @@
+Broker_Garbage
+==============
+Author: ckaotik
+Version: 3.3v9
+WoW Version: 3.3 (TOC 30300)
+
+WoWInterface: http://www.wowinterface.com/downloads/info15531-Broker_Garbage.html
+Curse:        http://wow.curse.com/downloads/wow-addons/details/broker_garbage.aspx
+
+
+1. What it does
+-----------------
+
+2. First Start
+-----------------
+Depending on your LDB display addon you may or may not already see the Broker_Garbage plugin on it. If you don't, please check if you need to enable it in oder to be displayed (e.g. for DockingStation). It will be listed as "Garbage".
+If you still can't find it, have a look at your options panel (ESC - Interface - Addon Tab - look for Broker_Garbage). Should you not find it there it might be because it caused an error (you can turn on Lua error messages in the Interface menu).
+
+If you get past that point (and really, you should) it's about time to set up your lists. For more information on lists, have at look at 5. List Management.
+1) Set up items you never want to delete, on any character, in your Exclude List. Then, select them and push "Promote" to put them on your global Exclude List.
+2) Now, go ahead and add character specific items to your Exclude List (same as above, just no "Promote")
+3) With that taken care of you might want to think of items that always fill your inventory even though you don't need them or they can be easily gotten back. These items belong on your Include List. Examples for this list are Argentum Lance, Light Feather (if you have a Mage/Priest that needs them, put it on their (local) Exclude list.) and the likes.
+
+
+3. I got an error!!!11!1!
+-----------------
+Well, that's not good, but it's good ;) If you report an error I can have a look to fix it. Of course, there shouldn't be any errors in the first place but you know ... I'm only human, too.
+To report a bug just log on to WoWInterface.com or curse.com and leave me a message or a comment (the full links can be found at the top of this file) giving as much information as you can. On curse it even offers a bug tracker and I wouldn't mind you using it.
+
+* When did it happen? (on login, on /reload, when selling, ...)
+* What happened? ("The tooltip went blank.", "The tooltip sticks to the cursor.", ...)
+* Comment ("Could be because addon XY does weird things.", "Didn't happen on my pally char".)
+
+
+4. Feature Suggestions
+-----------------
+Got a feature idea? Then tell me! Send me a message on curse/wowinterface or comment my addon on any of those sites. I'll make sure to read it!
+
+Still, do not feel bad if it doesn't make it into the addon. In that case I will most likely try to get you an individual solution - or include it at a later time.
+
+
+5. List Management
+-----------------
+There are several lists for you to use:
+
+* Exclude List
+Items on here will be "saved" from any actions - they will not be sold, dropped or anything else.
+Grayed out items on there are items that are on your global list, active for all characters. Colorful ones are just for your current character.
+
+* 'Force Vendor Price' List
+Items on this list will never have their auction value used. This is useful for food, drinks and other things people tend to put on the AH at unbelievable prices.
+
+* Include List
+Items on this list will be dropped, no matter what Quality Treshold you might have set. Caution!
+Grayed out items on there are items that are on your global list, active for all characters. Colorful ones are just for your current character.
+
+* Drop List
+If your inventory gets too full and you want to drop something, these items will show up in the tooltip with a forced value of 0 copper. Items above your Quality Treshold will NOT be dropped.
+
+* Auto-Sell List
+Items on this list will be sold whenever you talk to a vendor. Items of higher quality than your Quality Treshold WILL be sold.
+
+Each of these lists except the 'Force Vendor Price' list have a global (affects all your characters) and local (only affects the current character) component. You can broadcast items on your local lists as global by selecting them and then clicking on the promote icon next to the list.
+
+
+6. How you can help
+-----------------
+I still need a few translations to get done. If you would like to help me with that, please do so on http://wow.curseforge.com/addons/broker_garbage/localization/  .
+Likewise, I need people to test the addon with different auction addons. If you have one that isn't yet supported, make a Feature Suggestion (see 4.).