Quantcast

0166

Jennifer [10-30-20 - 16:07]
0166
Filename
CHANGELOG.txt
EMA.toc
Locales/Core-Locale-enUS.lua
Modules/Information.lua
Modules/Mail.lua
Modules/Quest.lua
Modules/QuestWatcher.lua
Modules/Toon.lua
Modules/Trade.lua
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 5491269..20ab3a5 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,6 +1,57 @@
 ---------------------------
 ChangeLogs:
 ---------------------------
+EMA Version: v9.0.1-Release-v3.1(0164-0166)
+Game Version: 9.0.1
+Release Date: 30/10/2020
+
+## Information
+	-- Added Support For Bagspace Information
+	-- Information Panel Can Now Startup On All Team Members
+	-- Added Some Options To Support The Removal Of "Expansions" From Dropdown List.
+	-- Added Shadowlands Currencies.
+
+## Toon
+	-- Added Support To Tell The Team When Your Bag Space Is Getting Low Then Just Full.  (by RobinFrcd )
+
+## Quest
+	-- Fixed Issue #8
+
+# Trade
+	-- Added Support To Trade All Recipes by Akandesh
+
+# Mail
+	-- Added Support To Mail All Recipes by Akandesh
+
+---------------------------
+EMA Version: v9.0.1-Release-v3.0(0163)
+Game Version: 9.0.1
+Release Date: 29/10/2020
+
+## Quest-Tracker
+	- Should now remove "Popup" quests when you click the box.
+
+
+
+
+
+---------------------------
+EMA Version: v9.0.1-Release-v3.0(0161)
+Game Version: 9.0.1
+Release Date: 25/10/2020
+
+
+## Quest
+	- fixed (bitbucket) issue #124
+
+
+## Information
+	-- command line now should be right with how there coded with /ema-info
+		-- show is now a toggle.
+
+
+
+---------------------------
 EMA Version: v9.0.1-Release-v3.0(0160)
 Game Version: 9.0.1
 Release Date: 23/10/2020
diff --git a/EMA.toc b/EMA.toc
index b1a3c8d..4b5b193 100644
--- a/EMA.toc
+++ b/EMA.toc
@@ -2,7 +2,7 @@
 ## Title: EMA
 ## Notes: Ebony's MultiBoxing Assistant
 ## Author: Jennifer Calladine 'Ebony'
-## Version: v9.0.1-Release-v3.0(0160)
+## Version: v9.0.1-Release-v3.1(0166)
 ## SavedVariables: CoreProfileDB, CommunicationsProfileDB, TeamProfileDB, TagProfileDB, MessageProfileDB, InformationProfileDB, DisplayTeamProfileDB, FollowProfileDB, GuildProfileDB, InteractionProfileDB, ItemUseProfileDB, PurchaseProfileDB, QuestProfileDB,  QuestWatcherProfileDB, SellProfileDB, TalkProfileDB, ToonProfileDB, TradeProfileDB, MailProfileDB, BankProfileDB, ISBoxerProfileDB

 #Libs
diff --git a/Locales/Core-Locale-enUS.lua b/Locales/Core-Locale-enUS.lua
index 9a71408..c4e78d3 100644
--- a/Locales/Core-Locale-enUS.lua
+++ b/Locales/Core-Locale-enUS.lua
@@ -449,20 +449,36 @@ end
 -- infomation Locale
 L["EMA_CURRENCY"] = "Currency"
 L["SHOW_CURRENCY"] = "Show Currency"
-L["SHOW_CURRENCY_HELP"] = "Show The Currency Frame Window."
+L["SHOW_CURRENCY_HELP"] = "Toggle The Currency Window Frame."
 L["HIDE_CURRENCY"] = "Hide Currency"
 L["HIDE_CURRENCY_HELP"] = "Hide The Currency Values For All Members In The Team."
 L["CURRENCY_HEADER"] = "Currency Selection To Show On Frame"
+L["BAG_SPACE"] = "Bag Space"
 L["GOLD"] = "Gold"
 L["GOLD_HELP"] = "Shows The Minion's Gold"
 L["GOLD_GB"] = "Include Gold In Guild Bank"
 L["GOLD_GB_HELP"] = "Show Gold In Guild Bank\n(This Does Not Update Unless You Visit The Guildbank)"
-L["CURR_STARTUP"] = "Open Currency List On Start Up"
-L["CURR_STARTUP_HELP"] = "Open Currency List On Start Up.\nThe Master Only)"
+L["SHOW_BAG_SPACE"] = "Bag Space"
+L["SHOW_BAG_SPACE_HELP"] = "Shows The Minion's Bag Space"
+L["CURRENCY_CLASSIC"] = "Classic"
+L["CURRENCY_CLASSIC_HELP"] = "Shows Anything Before Warlords Of Draenor Currencies"
+L["CURRENCY_WOD"] = "Warlords Of Draenor"
+L["CURRENCY_WOD_HELP"] = "Shows Warlords Of Draenor Currencies"
+L["CURRENCY_LEGION"] = "Legion"
+L["CURRENCY_LEGION_HELP"] = "Shows Legion Currencies"
+L["CURRENCY_BFA"] = "Battle for Azeroth"
+L["CURRENCY_BFA_HELP"] = "Battle for Azeroth Currencies"
+L["CURRENCY_SHADOWLANDS"] = "Shadowlands"
+L["CURRENCY_SHADOWLANDS_HELP"] = "Shadowlands Currencies"
+L["CURR_STARTUP"] = "Open Currency List On Startup"
+L["CURR_STARTUP_HELP"] = "Open Currency List On Startup On Everyone."
+L["CURR_STARTUP_MASTER"] = "Only On Master"
+L["CURR_STARTUP_MASTER_HELP"] = "Open Currency List On The Master Only"
 L["LOCK_CURR_LIST"] = "Lock The Currency List Frame"
 L["LOCK_CURR_LIST_HELP"] = "Locks The Currency List Frame And Enables Mouse Click-Through"
 L["SPACE_FOR_NAME"] = "Space For Name"
 L["SPACE_FOR_GOLD"] =  "Space For Gold"
+L["SPACE_FOR_OTHER"] = "Space For Other"
 L["SPACE_FOR_POINTS"] = "Space For Points"
 L["SPACE_BETWEEN_VALUES"] = "Space Between Values"
 L["TOTAL"] = "Total"
@@ -547,6 +563,8 @@ L["POWER_BAR_HEADER"] = "Power Bar"
 L["CLASS_BAR_HEADER"] = "Class Power Bar"
 L["CAN_NOT_FIND_TRUFIGCD_ADDON"] = "TrufiGCD Missing"
 L["NOT_SUPPORTED"] = "UnSupported"
+
+
 --------------------------
 -- Follow Locale
 L["FOLLOW_BINDING_HEADER"] = "Follow Key Bindings"
@@ -632,9 +650,11 @@ L["TRADE_LIST"] = "Trade Items"
 L["GLOBAL_TRADE_LIST"] = "Global Trade List"
 L["TRADE_LIST_HELP"] = "Trade Items With The Selected EMA-Group Member"
 L["TRADE_BOE_ITEMS"] = "Trades Binds When Equipped Items With:"
-L["TRADE_BOE_ITEMS_HELP"] = "Trade All Binds When Equipped Items with EMA Group"
+L["TRADE_BOE_ITEMS_HELP"] = "Trade All Binds When Equipped Items with EMA Groups"
 L["TRADE_REAGENTS"] = "Trades Crafting Reagents Items With:"
-L["TRADE_REAGENTS_HELP"] = "Trades All Crafting Reagent Items"
+L["TRADE_REAGENTS_HELP"] = "Trades All Crafting Reagent Items with EMA Groups"
+L["TRADE_RECIPE_FORMULA"] = "Trades Recipe Items WIth:"
+L["TRADE_RECIPE_FORMULA_HELP"] = "Trades All Recipe/Patterns/BulePrints Items with EMA Groups"
 L["TRADE_OPTIONS"] = "Trade To Options"
 L["TRADE_GOLD"] = "Trade Excess Gold To Master From Minion"
 L["TRADE_GOLD_HELP"] = "Trade Excess Gold To Master From Minions \nAlways Be Careful When Auto Trading."
@@ -704,6 +724,8 @@ L["DURABILITY_DROPS_BELOW_HELP"] = "Warn Master If My Durability Drops Below A C
 L["DURABILITY_PERCENTAGE"] = "Warn If My Durability Drops Below"
 L["LOW_DURABILITY_TEXT"] = "Low Durability Text"
 L["DURABILITY_LOW_MSG"] = "I Have My Durability At"
+L["BAG_SLOTS_HELP"] = "Empty Bags Slots Allowed Before Warning"
+L["BAGS_ALMOST_FULL"] = "Bags Are Almost Full"
 L["BAGS_FULL"] = "Warn If Bags Are Full"
 L["BAGS_FULL_HELP"] = "Warn If All Regular Bags Are Full"
 L["BAG_SPACE"] = "Bag Space"
@@ -951,6 +973,8 @@ L["MAIL_BOE_ITEMS"] = "Mail All BoE Items To:"
 L["MAIL_BOE_ITEMS_HELP"] = "Mail All BoE Items To The Selected Character"
 L["MAIL_REAGENTS"] = "Mail All Reagents To:"
 L["MAIL_REAGENTS_HELP"] = "Mails All Crafting Reagents Items To The Selected Character"
+L["MAIL_RECIPES"] = "Mails Recipe Items To:"
+L["MAIL_RECIPES_HELP"] = "Mails All Recipe/Patterns/BulePrints To The Selected Character"
 L["MAIL_GOLD"] = "Adjust Characters Money While Visiting A Mail Box"
 L["MAIL_GOLD_HELP"] = "Adjust Characters Money While Visiting A Mail Box"
 L["SENT_AUTO_MAILER"] = "Sent By EMA Auto Mailer"
diff --git a/Modules/Information.lua b/Modules/Information.lua
index 45eaf51..ed219af 100644
--- a/Modules/Information.lua
+++ b/Modules/Information.lua
@@ -39,80 +39,143 @@ EMA.moduleIcon = "Interface\\Addons\\EMA\\Media\\SellIcon.tga"
 EMA.moduleOrder = 3

 EMA.globalCurrencyFramePrefix = "EMAToonCurrencyListFrame"
-EMA.currTypes = {}
+--EMA.currTypes = {}
 EMA.simpleCurrList = {}

 -- Currency Identifiers. To add you own just add a new line at the bottom of this part
 -- http://www.wowhead.com/currencies
--- Old Stuff
---EMA.currTypes.DalaranJewelcraftingToken = 61
-EMA.currTypes.ChampionsSeal = 241
---EMA.currTypes.IllustriousJewelcraftersToken = 361
-EMA.currTypes.TolBaradCommendation = 391
-EMA.currTypes.LesserCharmOfGoodFortune = 738
-EMA.currTypes.ElderCharmOfGoodFortune = 697
-EMA.currTypes.MoguRuneOfFate = 752
-EMA.currTypes.WarforgedSeal = 776
-EMA.currTypes.BloodyCoin = 789
-EMA.currTypes.TimelessCoin = 777
---WoD Currency
-EMA.currTypes.GarrisonResources = 824
-EMA.currTypes.TemperedFate = 994
-EMA.currTypes.ApexisCrystal = 823
-EMA.currTypes.Darkmoon = 515
-EMA.currTypes.Oil = 1101
-EMA.currTypes.InevitableFate = 1129
-EMA.currTypes.TimeWalker = 1166
-EMA.currTypes.Valor = 1191
+
+local function allAlwaysCurrencys()
+	local allAlwaysCurrencys = {}
+		allAlwaysCurrencys.Honor = 1792
+		allAlwaysCurrencys.TimeWalker = 1166
+		allAlwaysCurrencys.Darkmoon = 515
+	return allAlwaysCurrencys
+end
+
+-- Before WOD
+local function classicCurrencys()
+	local classicCurrencys = {}
+		classicCurrencys.ChampionsSeal = 241
+		classicCurrencys.TolBaradCommendation = 391
+		classicCurrencys.LesserCharmOfGoodFortune = 738
+		classicCurrencys.ElderCharmOfGoodFortune = 697
+		classicCurrencys.MoguRuneOfFate = 752
+		classicCurrencys.WarforgedSeal = 776
+		classicCurrencys.BloodyCoin = 789
+		classicCurrencys.TimelessCoin = 777
+	return classicCurrencys
+end
+
+-- Wod Currency
+local function wodCurrencys()
+	local wodCurrencys = {}
+		wodCurrencys.GarrisonResources = 824
+		wodCurrencys.TemperedFate = 994
+		wodCurrencys.ApexisCrystal = 823
+		wodCurrencys.Oil = 1101
+		wodCurrencys.InevitableFate = 1129
+		wodCurrencys.Valor = 1191
+	return wodCurrencys
+end
+
 --Legion Currency
-EMA.currTypes.OrderResources = 1220
-EMA.currTypes.AncientMana = 1155
-EMA.currTypes.NetherShard = 1226
-EMA.currTypes.SealofBrokenFate = 1273
-EMA.currTypes.ShadowyCoins = 1154
-EMA.currTypes.SightlessEye = 1149
-EMA.currTypes.TimeWornArtifact = 1268
-EMA.currTypes.CuriousCoin = 1275
---7.2
-EMA.currTypes.LegionfallWarSupplies = 1342
---7.2.5
-EMA.currTypes.CoinsOfAir = 1416
---7.3
-EMA.currTypes.WakeningEssence = 1533
-EMA.currTypes.VeiledArgunite = 1508
---8.0
-EMA.currTypes.WarResources = 1560
-EMA.currTypes.RichAzeriteFragment = 1565
-EMA.currTypes.SeafarersDubloon = 1710
-EMA.currTypes.SealofWartornFate = 1580
-EMA.currTypes.WarSupplies = 1587
---8.1
-EMA.currTypes.SeventhLegionService = 1717
-EMA.currTypes.HonorboundService = 1716
-EMA.currTypes.TitanResiduum = 1718
---8.2
-EMA.currTypes.PrismaticManapearl = 1721
---8.3
-EMA.currTypes.CoalescingVisions = 1755
-EMA.currTypes.CorruptedMementos = 1719
-EMA.currTypes.EchoesOfNyalotha = 1803
-
---9.0
-EMA.currTypes.Honor = 1792
+local function legionCurrencys()
+	local legionCurrencys = {}
+		legionCurrencys.OrderResources = 1220
+		legionCurrencys.AncientMana = 1155
+		legionCurrencys.NetherShard = 1226
+		legionCurrencys.SealofBrokenFate = 1273
+		legionCurrencys.ShadowyCoins = 1154
+		legionCurrencys.SightlessEye = 1149
+		legionCurrencys.TimeWornArtifact = 1268
+		legionCurrencys.CuriousCoin = 1275
+		legionCurrencys.LegionfallWarSupplies = 1342
+		legionCurrencys.CoinsOfAir = 1416
+		legionCurrencys.WakeningEssence = 1533
+		legionCurrencys.VeiledArgunite = 1508
+	return legionCurrencys
+
+end
+
+-- BattleforAzeroth Currency
+local function battleforAzerothnCurrencys()
+	local bfa = {}
+		bfa.WarResources = 1560
+		bfa.RichAzeriteFragment = 1565
+		bfa.SeafarersDubloon = 1710
+		bfa.SealofWartornFate = 1580
+		bfa.WarSupplies = 1587
+		bfa.SeventhLegionService = 1717
+		bfa.HonorboundService = 1716
+		bfa.TitanResiduum = 1718
+		bfa.PrismaticManapearl = 1721
+		bfa.CoalescingVisions = 1755
+		bfa.CorruptedMementos = 1719
+		bfa.EchoesOfNyalotha = 1803
+	return bfa
+end
+
+local function shadowlandsCurrencys()
+	local shadowlandsCurrencys = {}
+		shadowlandsCurrencys.ArgentCommendation = 1754
+		shadowlandsCurrencys.SoulAsh = 1828
+		shadowlandsCurrencys.Stygia = 1767
+		shadowlandsCurrencys.ReservoirAnima = 1813
+		shadowlandsCurrencys.SinstoneFragments = 1816
+		shadowlandsCurrencys.InfusedRuby = 1820
+		shadowlandsCurrencys.FreedSoul = 1751
+	return shadowlandsCurrencys
+end
+
+

+local function testcode()
+	return EMA.currTypes
+end
 -------------------------------------- End of edit --------------------------------------------------------------

 function EMA:CurrencyIconAndName( id )
 	local info = C_CurrencyInfo.GetCurrencyInfo(id)
-	--local info.fullName, info.amount, info.icon, info.earnedThisWeek, info.weeklyMax, info.totalMax, info.isDiscovered, info.quality  -- = C_CurrencyInfo.GetCurrencyInfo(id)
-
-	--EMA:Print("test", info.name, info.icon)
+	--EMA:Print("test", info.name, info.iconFileID, info.description )
 	if 	info.iconFileID ~= nil then
 		local currName = strconcat(" |T"..info.iconFileID..":20|t", L[" "]..info.name)
 		return currName
 	end
 end
+
+function EMA:AddCurrencyToTable()
+	table.wipe( EMA.currTypes )
+	for name, id in pairs( allAlwaysCurrencys() ) do
+		EMA.currTypes[name] = id
+	end

+	if EMA.db.currClassicCurrencys == true then
+		for name, id in pairs( classicCurrencys() ) do
+			EMA.currTypes[name] = id
+		end
+	end
+	if 	EMA.db.currWodCurrencys == true then
+		for name, id in pairs( wodCurrencys() ) do
+			EMA.currTypes[name] = id
+		end
+	end
+	if EMA.db.currLegionCurrencys == true then
+		for name, id in pairs( legionCurrencys() ) do
+			EMA.currTypes[name] = id
+		end
+	end
+	if EMA.db.currBattleforAzerothCurrencys == true then
+		for name, id in pairs( battleforAzerothnCurrencys() ) do
+			EMA.currTypes[name] = id
+		end
+	end
+	if EMA.db.currShadowlands == true then
+		for name, id in pairs( shadowlandsCurrencys() ) do
+			EMA.currTypes[name] = id
+		end
+	end
+end

 -- Settings - the values to store and their defaults for the settings database.
 EMA.settings = {
@@ -120,19 +183,25 @@ EMA.settings = {
 		currChatTrigger = false,
 		currGold = true,
 		currGoldInGuildBank = false,
-		-- Currency default's
-		CcurrTypeOne = EMA.currTypes.OrderResources,
-		CcurrTypeOneName = EMA:CurrencyIconAndName(EMA.currTypes.WarResources),
-		CcurrTypeTwo = EMA.currTypes.AncientMana,
-		CcurrTypeTwoName = EMA:CurrencyIconAndName(EMA.currTypes.WarSupplies),
-		CcurrTypeThree = EMA.currTypes.TimeWalker,
-		CcurrTypeThreeName = EMA:CurrencyIconAndName(EMA.currTypes.TimeWalker),
-		CcurrTypeFour = EMA.currTypes.SightlessEye,
-		CcurrTypeFourName = EMA:CurrencyIconAndName(EMA.currTypes.SealofWartornFate),
+		currBagSpace = false,
+		currClassicCurrencys = false,
+		currWodCurrencys = false,
+		currLegionCurrencys = false,
+		currBattleforAzerothCurrencys = false,
+		currShadowlands = true,
+		-- Currency default's ALL NONE! (saves updating every xpac....)
+		CcurrTypeOne = 1,
+		CcurrTypeOneName = "",
+		CcurrTypeTwo = 1,
+		CcurrTypeTwoName = "",
+		CcurrTypeThree = 1,
+		CcurrTypeThreeName = "",
+		CcurrTypeFour = 1,
+		CcurrTypeFourName = "",
 		CcurrTypeFive = 1,
 		CcurrTypeFiveName = "",
 		CcurrTypeSix = 1,
-		CcurrTypeSixName = "",
+		CcurrTypeSixName = "",
 		currencyFrameAlpha = 1.0,
 		currencyFramePoint = "CENTER",
 		currencyFrameRelativePoint = "CENTER",
@@ -154,9 +223,11 @@ EMA.settings = {
 		currencyNameWidth = 60,
 		currencyPointsWidth = 50,
 		currencyGoldWidth = 140,
+		currencyOtherWidth = 50,
 		currencySpacingWidth = 3,
 		currencyLockWindow = false,
 		currOpenStartUpMaster = false,
+		currOpenStartUpAll = false
 	},
 }

@@ -182,15 +253,15 @@ function EMA:GetConfiguration()
 				type = "input",
 				name = L["SHOW_CURRENCY"],
 				desc = L["SHOW_CURRENCY_HELP"],
-				usage = "ema-information show",
+				usage = "ema-info show",
 				get = false,
-				set = "EMAToonRequestCurrency",
+				set = "ShowInformationPanel",
 			},
 			hide = {
 				type = "input",
 				name = L["HIDE_CURRENCY"],
 				desc = L["HIDE_CURRENCY_HELP"],
-				usage = "ema-information hide",
+				usage = "ema-info hide",
 				get = false,
 				set = "EMAToonHideCurrency",
 			},
@@ -198,7 +269,7 @@ function EMA:GetConfiguration()
 				type = "input",
 				name = L["PUSH_ALL_SETTINGS"],
 				desc = L["PUSH_SETTINGS_INFO"],
-				usage = "ema-information push",
+				usage = "ema-info push",
 				get = false,
 				set = "EMASendSettings",
 			},
@@ -210,7 +281,6 @@ end
 local function DebugMessage( ... )
 	--EMA:Print( ... )
 end
-
 -------------------------------------------------------------------------------------------------------------
 -- Command this module sends.
 -------------------------------------------------------------------------------------------------------------
@@ -269,11 +339,11 @@ function EMA:SettingsCreateCurrency( top )
 	local indent = horizontalSpacing * 12
 	local verticalSpacing = EMAHelperSettings:GetVerticalSpacing()
 	local halfWidth = (headingWidth - horizontalSpacing) / 2
-	local thirdWidth = (headingWidth - (horizontalSpacing * 5)) / 5
+	local thirdWidth = (headingWidth - (horizontalSpacing * 2)) / 3
 	local halfWidthSlider = (headingWidth - horizontalSpacing) / 2
 	local column2left = left + halfWidthSlider
 	local left2 = left + thirdWidth
-	local left3 = left + (thirdWidth * 1)
+	local left3 = left + (thirdWidth * 2)
 	local right = left + halfWidth + horizontalSpacing
 	local movingTop = top
 	-- A blank to get layout to show right?
@@ -283,7 +353,7 @@ function EMA:SettingsCreateCurrency( top )
 	movingTop = movingTop - headingHeight
 	EMA.settingsControl.checkBoxChatTrigger = EMAHelperSettings:CreateCheckBox(
 		EMA.settingsControl,
-		headingWidth,
+		halfWidth,
 		left,
 		movingTop,
 		L["CHAT_TRIGGERS"],
@@ -295,23 +365,82 @@ function EMA:SettingsCreateCurrency( top )
 	movingTop = movingTop - headingHeight
 	EMA.settingsControl.checkBoxCurrencyGold = EMAHelperSettings:CreateCheckBox(
 		EMA.settingsControl,
-		headingWidth,
+		halfWidth,
 		left,
 		movingTop,
 		L["GOLD"],
 		EMA.SettingsToggleCurrencyGold,
 		L["GOLD_HELP"]
-	)
-	movingTop = movingTop - checkBoxHeight
+	)
 	EMA.settingsControl.checkBoxCurrencyGoldInGuildBank = EMAHelperSettings:CreateCheckBox(
 		EMA.settingsControl,
-		headingWidth,
-		left,
+		halfWidth,
+		column2left,
 		movingTop,
 		L["GOLD_GB"],
 		EMA.SettingsToggleCurrencyGoldInGuildBank,
 		L["GOLD_GB_HELP"]
 	)
+	movingTop = movingTop - checkBoxHeight
+	EMA.settingsControl.checkBoxCurrencyShowBagSpace = EMAHelperSettings:CreateCheckBox(
+		EMA.settingsControl,
+		halfWidth,
+		left,
+		movingTop,
+		L["SHOW_BAG_SPACE"],
+		EMA.SettingsToggleCurrencyShowBagSpace,
+		L["SHOW_BAG_SPACE_HELP"]
+	)
+	movingTop = movingTop - checkBoxHeight
+	EMAHelperSettings:CreateHeading( EMA.settingsControl, L["CURRENCY"], movingTop, false )
+	movingTop = movingTop - headingHeight
+	-- Xpacs
+	EMA.settingsControl.checkBoxCurrencyShowClassic = EMAHelperSettings:CreateCheckBox(
+		EMA.settingsControl,
+		thirdWidth,
+		left,
+		movingTop,
+		L["CURRENCY_CLASSIC"],
+		EMA.SettingsToggleCurrencyClassic,
+		L["CURRENCY_CLASSIC_HELP"]
+	)
+	EMA.settingsControl.checkBoxCurrencyShowWarlordsofDraenor = EMAHelperSettings:CreateCheckBox(
+		EMA.settingsControl,
+		thirdWidth,
+		left2,
+		movingTop,
+		L["CURRENCY_WOD"],
+		EMA.SettingsToggleCurrencyWarlordsofDraenor,
+		L["CURRENCY_WOD_HELP"]
+	)
+	EMA.settingsControl.checkBoxCurrencyShowLegion = EMAHelperSettings:CreateCheckBox(
+		EMA.settingsControl,
+		thirdWidth,
+		left3,
+		movingTop,
+		L["CURRENCY_LEGION"],
+		EMA.SettingsToggleCurrencyLegion,
+		L["CURRENCY_LEGION_HELP"]
+	)
+	movingTop = movingTop - checkBoxHeight
+	EMA.settingsControl.checkBoxCurrencyShowBattleforAzeroth = EMAHelperSettings:CreateCheckBox(
+		EMA.settingsControl,
+		thirdWidth,
+		left,
+		movingTop,
+		L["CURRENCY_BFA"],
+		EMA.SettingsToggleCurrencyBattleforAzeroth,
+		L["CURRENCY_BFA_HELP"]
+	)
+	EMA.settingsControl.checkBoxCurrencyShowShadowlands = EMAHelperSettings:CreateCheckBox(
+		EMA.settingsControl,
+		thirdWidth,
+		left2,
+		movingTop,
+		L["CURRENCY_SHADOWLANDS"],
+		EMA.SettingsToggleCurrencyShadowlands,
+		L["CURRENCY_SHADOWLANDS_HELP"]
+	)
 	--Currency One & Two
 	movingTop = movingTop - checkBoxHeight
 	EMA.settingsControl.editBoxCurrencyTypeOneID = EMAHelperSettings:CreateDropdown(
@@ -384,14 +513,23 @@ function EMA:SettingsCreateCurrency( top )
 		L["SHOW_CURRENCY_HELP"]
 	)
 	movingTop = movingTop - buttonHeight
-	EMA.settingsControl.checkBoxCurrencyOpenStartUpMaster = EMAHelperSettings:CreateCheckBox(
+	EMA.settingsControl.checkBoxCurrencyOpenStartUpAll = EMAHelperSettings:CreateCheckBox(
 		EMA.settingsControl,
-		headingWidth,
+		halfWidth,
 		left,
 		movingTop,
 		L["CURR_STARTUP"],
-		EMA.SettingsToggleCurrencyOpenStartUpMaster,
+		EMA.SettingsToggleCurrencyOpenStartUpAll,
 		L["CURR_STARTUP_HELP"]
+	)
+	EMA.settingsControl.checkBoxCurrencyOpenStartUpMaster = EMAHelperSettings:CreateCheckBox(
+		EMA.settingsControl,
+		halfWidth,
+		column2left,
+		movingTop,
+		L["CURR_STARTUP_MASTER"],
+		EMA.SettingsToggleCurrencyOpenStartUpMaster,
+		L["CURR_STARTUP_MASTER_HELP"]
 	)
 	movingTop = movingTop - checkBoxHeight
 	-- Create appearance & layout.
@@ -503,6 +641,16 @@ function EMA:SettingsCreateCurrency( top )
 	EMA.settingsControl.currencySliderSpaceForGold:SetSliderValues( 20, 200, 1 )
 	EMA.settingsControl.currencySliderSpaceForGold:SetCallback( "OnValueChanged", EMA.SettingsChangeSliderSpaceForGold )
 	movingTop = movingTop - sliderHeight - verticalSpacing
+	EMA.settingsControl.currencySliderSpaceForOther = EMAHelperSettings:CreateSlider(
+		EMA.settingsControl,
+		headingWidth,
+		left,
+		movingTop,
+		L["SPACE_FOR_OTHER"]
+	)
+	EMA.settingsControl.currencySliderSpaceForOther:SetSliderValues( 20, 200, 1 )
+	EMA.settingsControl.currencySliderSpaceForOther:SetCallback( "OnValueChanged", EMA.SettingsChangeSliderSpaceForOther )
+	movingTop = movingTop - sliderHeight - verticalSpacing
 	EMA.settingsControl.currencySliderSpaceForPoints = EMAHelperSettings:CreateSlider(
 		EMA.settingsControl,
 		headingWidth,
@@ -544,14 +692,27 @@ function EMA:SettingsRefresh()
 	EMA.settingsControl.checkBoxCurrencyGold:SetValue( EMA.db.currGold )
 	EMA.settingsControl.checkBoxCurrencyGoldInGuildBank:SetValue( EMA.db.currGoldInGuildBank )
 	EMA.settingsControl.checkBoxCurrencyGoldInGuildBank:SetDisabled( not EMA.db.currGold )
+	EMA.settingsControl.checkBoxCurrencyShowBagSpace:SetValue( EMA.db.currBagSpace )
+	EMA.settingsControl.checkBoxCurrencyShowClassic:SetValue( EMA.db.currClassicCurrencys )
+	EMA.settingsControl.checkBoxCurrencyShowWarlordsofDraenor:SetValue( EMA.db.currWodCurrencys )
+	EMA.settingsControl.checkBoxCurrencyShowLegion:SetValue( EMA.db.currLegionCurrencys )
+	EMA.settingsControl.checkBoxCurrencyShowBattleforAzeroth:SetValue( EMA.db.currBattleforAzerothCurrencys)
+	EMA.settingsControl.checkBoxCurrencyShowShadowlands:SetValue( EMA.db.currShadowlands )
 	EMA.settingsControl.editBoxCurrencyTypeOneID:SetValue( EMA.db.CcurrTypeOne )
+	EMA.settingsControl.editBoxCurrencyTypeOneID:SetList( EMA.CurrDropDownBox() )
 	EMA.settingsControl.editBoxCurrencyTypeTwoID:SetValue ( EMA.db.CcurrTypeTwo )
+	EMA.settingsControl.editBoxCurrencyTypeTwoID:SetList( EMA.CurrDropDownBox() )
 	EMA.settingsControl.editBoxCurrencyTypeThreeID:SetValue ( EMA.db.CcurrTypeThree )
+	EMA.settingsControl.editBoxCurrencyTypeThreeID:SetList( EMA.CurrDropDownBox() )
 	EMA.settingsControl.editBoxCurrencyTypeFourID:SetValue ( EMA.db.CcurrTypeFour )
-	EMA.settingsControl.editBoxCurrencyTypeFiveID:SetValue ( EMA.db.CcurrTypeFive )
+	EMA.settingsControl.editBoxCurrencyTypeFourID:SetList( EMA.CurrDropDownBox() )
+	EMA.settingsControl.editBoxCurrencyTypeFiveID:SetValue ( EMA.db.CcurrTypeFive )
+	EMA.settingsControl.editBoxCurrencyTypeFiveID:SetList( EMA.CurrDropDownBox() )
 	EMA.settingsControl.editBoxCurrencyTypeSixID:SetValue ( EMA.db.CcurrTypeSix )
-	--state
+	EMA.settingsControl.editBoxCurrencyTypeSixID:SetList( EMA.CurrDropDownBox() )
+	EMA.settingsControl.checkBoxCurrencyOpenStartUpAll:SetValue( EMA.db.currOpenStartUpAll )
 	EMA.settingsControl.checkBoxCurrencyOpenStartUpMaster:SetValue( EMA.db.currOpenStartUpMaster )
+	EMA.settingsControl.checkBoxCurrencyOpenStartUpMaster:SetDisabled( not EMA.db.currOpenStartUpAll )
 	EMA.settingsControl.currencyTransparencySlider:SetValue( EMA.db.currencyFrameAlpha )
 	EMA.settingsControl.currencyScaleSlider:SetValue( EMA.db.currencyScale )
 	EMA.settingsControl.currencyMediaBorder:SetValue( EMA.db.currencyBorderStyle )
@@ -562,9 +723,11 @@ function EMA:SettingsRefresh()
 	EMA.settingsControl.currencyFontSize:SetValue( EMA.db.currencyFontSize )
 	EMA.settingsControl.currencySliderSpaceForName:SetValue( EMA.db.currencyNameWidth )
 	EMA.settingsControl.currencySliderSpaceForGold:SetValue( EMA.db.currencyGoldWidth )
+	EMA.settingsControl.currencySliderSpaceForOther:SetValue( EMA.db.currencyOtherWidth )
 	EMA.settingsControl.currencySliderSpaceForPoints:SetValue( EMA.db.currencyPointsWidth )
 	EMA.settingsControl.currencySliderSpaceBetweenValues:SetValue( EMA.db.currencySpacingWidth )
 	EMA.settingsControl.checkBoxCurrencyLockWindow:SetValue( EMA.db.currencyLockWindow )
+	EMA.CurrDropDownBox()
 	if EMA.currencyListFrameCreated == true then
 		EMA:CurrencyListSetColumnWidth()
 		EMA:SettingsUpdateBorderStyle()
@@ -595,6 +758,41 @@ function EMA:SettingsToggleCurrencyGoldInGuildBank( event, checked )
 	EMA:SettingsRefresh()
 end

+function EMA:SettingsToggleCurrencyShowBagSpace( event, checked )
+	EMA.db.currBagSpace = checked
+	EMA:SettingsRefresh()
+end
+
+function EMA:SettingsToggleCurrencyClassic( event, checked )
+	EMA.db.currClassicCurrencys = checked
+	EMA:AddCurrencyToTable()
+	EMA:SettingsRefresh()
+end
+
+function EMA:SettingsToggleCurrencyWarlordsofDraenor( event, checked )
+	EMA.db.currWodCurrencys = checked
+	EMA:AddCurrencyToTable()
+	EMA:SettingsRefresh()
+end
+
+function EMA:SettingsToggleCurrencyLegion( event, checked )
+	EMA.db.currLegionCurrencys = checked
+	EMA:AddCurrencyToTable()
+	EMA:SettingsRefresh()
+end
+
+function EMA:SettingsToggleCurrencyBattleforAzeroth( event, checked )
+	EMA.db.currBattleforAzerothCurrencys = checked
+	EMA:AddCurrencyToTable()
+	EMA:SettingsRefresh()
+end
+
+function EMA:SettingsToggleCurrencyShadowlands( event, checked )
+	EMA.db.currShadowlands = checked
+	EMA:AddCurrencyToTable()
+	EMA:SettingsRefresh()
+end
+
 function EMA:EditBoxChangedCurrencyTypeOneID( event, value )
 	local currName, id = EMA:MatchCurrValue(value)
 	EMA.db.CcurrTypeOne = id
@@ -645,6 +843,11 @@ function EMA:EditBoxChangedCurrencyTypeSixID( event, value )
 	EMA:SettingsRefresh()
 end

+function EMA:SettingsToggleCurrencyOpenStartUpAll( event, checked )
+	EMA.db.currOpenStartUpAll = checked
+	EMA:SettingsRefresh()
+end
+
 function EMA:SettingsToggleCurrencyOpenStartUpMaster( event, checked )
 	EMA.db.currOpenStartUpMaster = checked
 	EMA:SettingsRefresh()
@@ -706,6 +909,11 @@ function EMA:SettingsChangeSliderSpaceForGold( event, value )
 	EMA:SettingsRefresh()
 end

+function EMA:SettingsChangeSliderSpaceForOther( event, value )
+	EMA.db.currencyOtherWidth = tonumber( value )
+	EMA:SettingsRefresh()
+end
+
 function EMA:SettingsChangeSliderSpaceForPoints( event, value )
 	EMA.db.currencyPointsWidth = tonumber( value )
 	EMA:SettingsRefresh()
@@ -732,14 +940,16 @@ function EMA:OnInitialize()
 	EMA.currencyListFrameCreated = false
 	EMA.currencyFrameCharacterInfo = {}
 	EMA.currentCurrencyValues = {}
+	EMA.currTypes = {}
 	-- Create the settings control.
 	SettingsCreate()
 	-- Initialise the EMAModule part of this module.
 	EMA:EMAModuleInitialize( EMA.settingsControl.widgetSettings.frame )
-	-- Populate the settings.
-	EMA:SettingsRefresh()
 	-- Create the currency list frame.
 	EMA:CreateEMAToonCurrencyListFrame()
+	EMA:AddCurrencyToTable()
+	-- Populate the settings.
+	EMA:SettingsRefresh()
 end

 -- Called when the addon is enabled.
@@ -751,10 +961,14 @@ function EMA:OnEnable()
 	EMA:RegisterEvent( "CHAT_MSG_RAID", "DoChatCommand")
 	EMA:RegisterEvent( "CHAT_MSG_RAID_LEADER", "DoChatCommand")
 	--EMA:RegisterMessage( EMAApi.MESSAGE_MESSAGE_AREAS_CHANGED, "OnMessageAreasChanged" )
-	if EMA.db.currOpenStartUpMaster == true then
-		if EMAApi.IsCharacterTheMaster( self.characterName ) == true then
-			EMA:ScheduleTimer( "EMAToonRequestCurrency", 20 )
-		end
+	if EMA.db.currOpenStartUpAll == true then
+		if EMA.db.currOpenStartUpMaster == true then
+			if EMAApi.IsCharacterTheMaster( EMA.characterName ) == true then
+				EMA:ScheduleTimer( "EMAToonRequestCurrency", 10 )
+			end
+		else
+			EMA:ScheduleTimer( "EMAToonRequestCurrency", 10 )
+		end
 	end
 end

@@ -769,6 +983,12 @@ function EMA:EMAOnSettingsReceived( characterName, settings )
 		EMA.db.currChatTrigger = settings.currChatTrigger
 		EMA.db.currGold = settings.currGold
 		EMA.db.currGoldInGuildBank = settings.currGoldInGuildBank
+		EMA.db.currBagSpace = settings.currBagSpace
+		EMA.db.currClassicCurrencys = settings.currClassicCurrencys
+		EMA.db.currWodCurrencys = settings.currWodCurrencys
+		EMA.db.currLegionCurrencys = settings.currLegionCurrencys
+		EMA.db.currBattleforAzerothCurrencys = settings.currBattleforAzerothCurrencys
+		EMA.db.currShadowlands = settings.currShadowlands
 		EMA.db.CcurrTypeOne = settings.CcurrTypeOne
 		EMA.db.CcurrTypeOneName = settings.CcurrTypeOneName
 		EMA.db.CcurrTypeTwo = settings.CcurrTypeTwo
@@ -782,6 +1002,7 @@ function EMA:EMAOnSettingsReceived( characterName, settings )
 		EMA.db.CcurrTypeSix = settings.CcurrTypeSix
 		EMA.db.CcurrTypeSixName = settings.CcurrTypeSixName
 		EMA.db.currOpenStartUpMaster = settings.currOpenStartUpMaster
+		EMA.db.currOpenStartUpAll = settings.currOpenStartUpAll
 		EMA.db.currencyScale = settings.currencyScale
 		EMA.db.currencyFrameAlpha = settings.currencyFrameAlpha
 		EMA.db.currencyFramePoint = settings.currencyFramePoint
@@ -803,6 +1024,7 @@ function EMA:EMAOnSettingsReceived( characterName, settings )
 		EMA.db.currencyNameWidth = settings.currencyNameWidth
 		EMA.db.currencyPointsWidth = settings.currencyPointsWidth
 		EMA.db.currencyGoldWidth = settings.currencyGoldWidth
+		EMA.db.currencyOtherWidth = settings.currencyOtherWidth
 		EMA.db.currencySpacingWidth = settings.currencySpacingWidth
 		EMA.db.currencyLockWindow = settings.currencyLockWindow
 		-- Refresh the settings.
@@ -812,29 +1034,18 @@ function EMA:EMAOnSettingsReceived( characterName, settings )
 	end
 end

-function pairsByKeys (t, f)
-    local a = {}
-    for n in pairs(t) do table.insert(a, n) end
-    table.sort(a, f)
-    local i = 0      -- iterator variable
-    local iter = function ()   -- iterator function
-        i = i + 1
-        if a[i] == nil then return nil
-        else return a[i], t[a[i]]
-        end
-     end
-     return iter
-end
-
 function EMA:CurrDropDownBox()
+	--EMA:Print("test21")
+	EMAUtilities:ClearTable( EMA.simpleCurrList )
 	for name, id in pairs( EMA.currTypes ) do
-		--EMA:Print("test", name, id)
+		--EMA:Print("testDropDown", name, id)
 		local currName = EMA:CurrencyIconAndName( id )
+		--EMA.simpleCurrList[id] = currName
 		EMA.simpleCurrList[id] = currName
 	end
 	EMA.simpleCurrList[0] = ""
-	table.sort(EMA.simpleCurrList, function(a,b) return a<b end)
-	table.concat(EMA.simpleCurrList, ", ")
+	--table.sort(EMA.simpleCurrList, function(a,b) return a<b end)
+	--table.concat(EMA.simpleCurrList, ", ")
 	return EMA.simpleCurrList
 end

@@ -930,6 +1141,16 @@ function EMA:CreateEMAToonCurrencyListFrame()
 	frameGoldText:SetJustifyH( "CENTER" )
 	frame.GoldText = frameGoldText
 	left = left + spacing
+	-- Set the BagSpace font string.
+	local frameBagSpace = EMA.globalCurrencyFramePrefix.."TitleBagSpace"
+	local frameBagSpaceText = parentFrame:CreateFontString( frameBagSpace.."Text", "OVERLAY", "GameFontNormal" )
+	frameBagSpaceText:SetText( L["BAG_SPACE"] )
+	frameBagSpaceText:SetTextColor( r, g, b, a )
+	frameBagSpaceText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
+	frameBagSpaceText:SetWidth( width )
+	frameBagSpaceText:SetJustifyH( "CENTER" )
+	frame.BagSpaceText = frameBagSpaceText
+	left = left + spacing
 	-- Set the TypeOne font string.
 	local frameTypeOne = EMA.globalCurrencyFramePrefix.."TitleTypeOne"
 	local frameTypeOneText = parentFrame:CreateFontString( frameTypeOne.."Text", "OVERLAY", "GameFontNormal" )
@@ -1056,7 +1277,6 @@ function EMA:CreateEMAToonCurrencyListFrame()
 	updateButton:SetText( L["UPDATE"] )

 	frame.updateButton = updateButton
-
 	EMA:SettingsUpdateBorderStyle()
 	EMA:CurrencyUpdateWindowLock()
 	EMA:SettingsUpdateFontStyle()
@@ -1073,10 +1293,19 @@ local function GetIcon(iD)
 		return iconTextureString
 	end
 end
-

 function EMA:UpdateHendingText()
 	local parentFrame = EMAToonCurrencyListFrame
+	-- Gold
+	local iconTextureString = strconcat(" |T".."133785"..":20|t")
+	if iconTextureString ~= nil then
+		parentFrame.GoldText:SetText( iconTextureString )
+	end
+	-- BagSpace
+	local iconTextureString = strconcat(" |T".."133633"..":20|t")
+	if iconTextureString ~= nil then
+		parentFrame.BagSpaceText:SetText( iconTextureString )
+	end
 	-- Type One
 	local iconTextureString = GetIcon( EMA.db.CcurrTypeOne )
 	if iconTextureString ~= nil then
@@ -1117,7 +1346,6 @@ function EMA:CurrencyUpdateWindowLock()
 	end
 end

-
 function EMA:SettingsUpdateBorderStyle()
 	local borderStyle = EMA.SharedMedia:Fetch( "border", EMA.db.currencyBorderStyle )
 	local backgroundStyle = EMA.SharedMedia:Fetch( "background", EMA.db.currencyBackgroundStyle )
@@ -1130,7 +1358,6 @@ function EMA:SettingsUpdateBorderStyle()
 	} )
 	frame:SetBackdropColor( EMA.db.currencyFrameBackgroundColourR, EMA.db.currencyFrameBackgroundColourG, EMA.db.currencyFrameBackgroundColourB, EMA.db.currencyFrameBackgroundColourA )
 	frame:SetBackdropBorderColor( EMA.db.currencyFrameBorderColourR, EMA.db.currencyFrameBorderColourG, EMA.db.currencyFrameBorderColourB, EMA.db.currencyFrameBorderColourA )
-	--frame:ClearAllPoints()
 	frame:SetAlpha( EMA.db.currencyFrameAlpha )
 	frame:ClearAllPoints()
 	frame:SetPoint( EMA.db.currencyFramePoint, UIParent, EMA.db.currencyFrameRelativePoint, EMA.db.currencyFrameXOffset, EMA.db.currencyFrameYOffset )
@@ -1143,6 +1370,7 @@ function EMA:SettingsUpdateFontStyle()
 	frame.titleName:SetFont( textFont , textSize , "OUTLINE")
 	frame.characterNameText:SetFont( textFont , textSize , "OUTLINE")
 	frame.GoldText:SetFont( textFont , textSize , "OUTLINE")
+	frame.BagSpaceText:SetFont( textFont , textSize , "OUTLINE")
 	frame.TotalGoldGuildTitleText:SetFont( textFont , textSize , "OUTLINE")
 	frame.TotalGoldGuildText:SetFont( textFont , textSize , "OUTLINE")
 	frame.TotalGoldText:SetFont( textFont , textSize , "OUTLINE")
@@ -1152,6 +1380,7 @@ function EMA:SettingsUpdateFontStyle()
 		--currencyFrameCharacterInfo.characterNameText:SetFont( textFont , textSize , "OUTLINE")
 		currencyFrameCharacterInfo.characterNameText:SetFont( textFont , textSize , "OUTLINE")
 		currencyFrameCharacterInfo.GoldText:SetFont( textFont , textSize , "OUTLINE")
+		currencyFrameCharacterInfo.BagSpaceText:SetFont( textFont , textSize , "OUTLINE")
 		currencyFrameCharacterInfo.TypeOneText:SetFont( textFont , textSize , "OUTLINE")
 		currencyFrameCharacterInfo.TypeTwoText:SetFont( textFont , textSize , "OUTLINE")
 		currencyFrameCharacterInfo.TypeThreeText:SetFont( textFont , textSize , "OUTLINE")
@@ -1161,7 +1390,6 @@ function EMA:SettingsUpdateFontStyle()
 	end
 end

-
 function EMA:CurrencyListSetHeight()
 	local additionalLines = 0
 	local addHeight = 0
@@ -1181,6 +1409,7 @@ function EMA:CurrencyListSetColumnWidth()
 	local nameWidth = EMA.db.currencyNameWidth
 	local pointsWidth = EMA.db.currencyPointsWidth
 	local goldWidth = EMA.db.currencyGoldWidth
+	local otherWidth = EMA.db.currencyOtherWidth
 	local spacingWidth = EMA.db.currencySpacingWidth
 	local frameHorizontalSpacing = 10
 	local numberOfPointsColumns = 0
@@ -1188,6 +1417,7 @@ function EMA:CurrencyListSetColumnWidth()
 	local headingRowTopPoint = -30
 	local left = frameHorizontalSpacing
 	local haveGold = 0
+	local haveOther = 0
 	-- Heading rows.
 	parentFrame.characterNameText:SetWidth( nameWidth )
 	parentFrame.characterNameText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, headingRowTopPoint )
@@ -1202,6 +1432,16 @@ function EMA:CurrencyListSetColumnWidth()
 		parentFrame.GoldText:Hide()
 		haveGold = 0
 	end
+	if EMA.db.currBagSpace == true then
+		parentFrame.BagSpaceText:SetWidth( otherWidth )
+		parentFrame.BagSpaceText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, headingRowTopPoint )
+		left = left + otherWidth + (spacingWidth * 3)
+		parentFrame.BagSpaceText:Show()
+		haveOther = 1
+	else
+		parentFrame.BagSpaceText:Hide()
+		haveOther = 0
+	end
 	if EMA.db.CcurrTypeOneName == "" then
 		parentFrame.TypeOneText:Hide()
 	else
@@ -1272,6 +1512,14 @@ function EMA:CurrencyListSetColumnWidth()
 			else
 				currencyFrameCharacterInfo.GoldText:Hide()
 			end
+			if EMA.db.currBagSpace == true then
+				currencyFrameCharacterInfo.BagSpaceText:SetWidth( otherWidth )
+				currencyFrameCharacterInfo.BagSpaceText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, characterRowTopPoint )
+				left = left + otherWidth + (spacingWidth * 3)
+				currencyFrameCharacterInfo.BagSpaceText:Show()
+			else
+				currencyFrameCharacterInfo.BagSpaceText:Hide()
+			end
 			if EMA.db.CcurrTypeOneName == "" then
 				currencyFrameCharacterInfo.TypeOneText:Hide()
 			else
@@ -1324,7 +1572,7 @@ function EMA:CurrencyListSetColumnWidth()
 		end
 	end
 	-- Parent frame width and title.
-	local finalParentWidth = frameHorizontalSpacing + nameWidth + spacingWidth + (haveGold * (goldWidth + (spacingWidth * 3))) + (numberOfPointsColumns * (pointsWidth + spacingWidth)) + frameHorizontalSpacing
+	local finalParentWidth = frameHorizontalSpacing + nameWidth + spacingWidth + (haveGold * (goldWidth + (spacingWidth * 3))) + (haveOther * (otherWidth + (spacingWidth * 3))) + (numberOfPointsColumns * (pointsWidth + spacingWidth)) + frameHorizontalSpacing
 	if finalParentWidth < 95 then
 		finalParentWidth = 95
 	end
@@ -1387,9 +1635,6 @@ function EMA:CurrencyListSetColumnWidth()
 	end
 end

-
-
-
 function EMA:CreateEMACurrencyFrameInfo( characterName, parentFrame )
 	--EMA.Print("makelist", characterName)
 	--if EMAPrivate.Team.GetCharacterOnlineStatus (characterName) == true then
@@ -1435,6 +1680,16 @@ function EMA:CreateEMACurrencyFrameInfo( characterName, parentFrame )
 	frameGoldText:SetJustifyH( "RIGHT" )
 	currencyFrameCharacterInfo.GoldText = frameGoldText
 	left = left + spacing
+	-- Set the BagSpace font string.
+	local frameBagSpace = EMA.globalCurrencyFramePrefix.."BagSpace"
+	local frameBagSpaceText = parentFrame:CreateFontString( frameBagSpace.."Text", "OVERLAY", "GameFontNormal" )
+	frameBagSpaceText:SetText( "0" )
+	frameBagSpaceText:SetTextColor( 1.00, 1.00, 1.00, 1.00 )
+	frameBagSpaceText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
+	frameBagSpaceText:SetWidth( width )
+	frameBagSpaceText:SetJustifyH( "RIGHT" )
+	currencyFrameCharacterInfo.BagSpaceText = frameBagSpaceText
+	left = left + spacing
 	-- Set the TypeOne font string.
 	local frameTypeOne = EMA.globalCurrencyFramePrefix.."TypeOne"
 	local frameTypeOneText = parentFrame:CreateFontString( frameTypeOne.."Text", "OVERLAY", "GameFontNormal" )
@@ -1495,10 +1750,19 @@ function EMA:CreateEMACurrencyFrameInfo( characterName, parentFrame )
 	frameTypeSixText:SetJustifyH( "CENTER" )
 	currencyFrameCharacterInfo.TypeSixText = frameTypeSixText
 	left = left + spacing
-
 	EMA:SettingsUpdateFontStyle()
 end

+function EMA:ShowInformationPanel()
+	if EMAToonCurrencyListWindowFrame:IsShown() then
+		EMAToonCurrencyListFrame:Hide()
+	else
+		--EMA:Print("startup")
+		EMA:EMAToonRequestCurrency()
+		EMAToonCurrencyListFrame:Show()
+	end
+end
+
 function EMA:EMAToonHideCurrency()
 	EMAToonCurrencyListFrame:Hide()
 end
@@ -1524,6 +1788,7 @@ function EMA:EMAToonRequestCurrency()
 			--EMA.Print("offlineRemove", characterName )
 			currencyFrameCharacterInfo.characterNameText:Hide()
 			currencyFrameCharacterInfo.GoldText:Hide()
+			currencyFrameCharacterInfo.BagSpaceText:Hide()
 			currencyFrameCharacterInfo.TypeOneText:Hide()
 			currencyFrameCharacterInfo.TypeTwoText:Hide()
 			currencyFrameCharacterInfo.TypeThreeText:Hide()
@@ -1533,6 +1798,7 @@ function EMA:EMAToonRequestCurrency()
 		else
 			currencyFrameCharacterInfo.characterNameText:Show()
 			currencyFrameCharacterInfo.GoldText:SetTextColor( r, g, b, a )
+			currencyFrameCharacterInfo.BagSpaceText:SetTextColor( r, g, b, a )
 			currencyFrameCharacterInfo.characterNameText:SetTextColor( r, g, b, a )
 			currencyFrameCharacterInfo.TypeOneText:SetTextColor( r, g, b, a )
 			currencyFrameCharacterInfo.TypeTwoText:SetTextColor( r, g, b, a )
@@ -1557,7 +1823,12 @@ function EMA:DoSendCurrency( characterName, dummyValue )
 	--EMA:Print("Test2")
 	if EMAApi.GetCharacterOnlineStatus ( characterName ) == true then
 		table.wipe( EMA.currentCurrencyValues )
+		-- Gold
 		EMA.currentCurrencyValues.currGold = GetMoney()
+		-- BagSpace Maths
+		local numFreeSlots, numTotalSlots = LibBagUtils:CountSlots("BAGS", 0)
+		EMA.currentCurrencyValues.bagSpace = numFreeSlots
+		EMA.currentCurrencyValues.bagSpaceMax = numTotalSlots
 		--CcurrTypeOne
 		local info = C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeOne )
 		if info ~= nil then
@@ -1594,20 +1865,6 @@ function EMA:DoSendCurrency( characterName, dummyValue )
 			EMA.currentCurrencyValues.currTypeSix = infoSix.quantity
 			EMA.currentCurrencyValues.currMaxTypeSix = infoSix.maxQuantity
 		end
-
-		--[[
-		EMA.currentCurrencyValues.currTypeTwo = select( 2, C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeTwo ) )
-		EMA.currentCurrencyValues.currTypeThree = select( 2, C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeThree ) )
-		EMA.currentCurrencyValues.currTypeFour	= select( 2, C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeFour ) )
-		EMA.currentCurrencyValues.currTypeFive = select( 2, C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeFive ) )
-		EMA.currentCurrencyValues.currTypeSix = select( 2, C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeSix ) )
-		-- Max CurrencyValues
-		EMA.currentCurrencyValues.currMaxTypeTwo = select( 6, C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeTwo ) )
-		EMA.currentCurrencyValues.currMaxTypeThree = select( 6, C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeThree ) )
-		EMA.currentCurrencyValues.currMaxTypeFour	= select( 6, C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeFour ) )
-		EMA.currentCurrencyValues.currMaxTypeFive = select( 6, C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeFive ) )
-		EMA.currentCurrencyValues.currMaxTypeSix = select( 6, C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeSix ) )
-		]]
 		-- SEND DATA
 		--EMA:Print("testsendData", info.quantity, info.maxQuantity)
 		EMA:EMASendCommandToToon( characterName, EMA.COMMAND_HERE_IS_CURRENCY, EMA.currentCurrencyValues )
@@ -1633,10 +1890,18 @@ function EMA:DoShowToonsCurrency( characterName, currencyValues )
 	local b = 1.0
 	local a = 1.0
 	local v = 0
-
+	--Gold
 	currencyFrameCharacterInfo.GoldText:SetTextColor( r, g, b, a )
 	currencyFrameCharacterInfo.characterNameText:SetTextColor( r, g, b, a )
 	currencyFrameCharacterInfo.GoldText:SetTextColor( r, g, b, a )
+	-- BagSpace
+	if currencyValues.bagSpace == 0 then
+		--EMA:Print("SetRed")
+		currencyFrameCharacterInfo.BagSpaceText:SetTextColor( r, v, v, a )
+	else
+		--EMA:Print("SetWhite")
+		currencyFrameCharacterInfo.BagSpaceText:SetTextColor( r, g, b, a )
+	end
 	if currencyValues.currTypeOne ~= nil then
 		if currencyValues.currTypeOne == currencyValues.currMaxTypeOne and currencyValues.currTypeOne  > 0 then
 			--EMA:Print("SetRed")
@@ -1682,7 +1947,7 @@ function EMA:DoShowToonsCurrency( characterName, currencyValues )
 		end
 	end
 	currencyFrameCharacterInfo.GoldText:SetText( EMAUtilities:FormatMoneyString( currencyValues.currGold ) )
-	--currencyFrameCharacterInfo.GoldText:SetText( GetCoinTextureString( currencyValues.currGold ) )
+	currencyFrameCharacterInfo.BagSpaceText:SetText( currencyValues.bagSpace..L["/"]..currencyValues.bagSpaceMax )
 	currencyFrameCharacterInfo.TypeOneText:SetText( currencyValues.currTypeOne )
 	currencyFrameCharacterInfo.TypeTwoText:SetText( currencyValues.currTypeTwo )
 	currencyFrameCharacterInfo.TypeThreeText:SetText( currencyValues.currTypeThree )
@@ -1913,3 +2178,5 @@ function EMA:EMAOnCommandReceived( characterName, commandName, ... )
 		EMA:DoShowToonsCurrency( characterName, ... )
 	end
 end
+
+EMAApi.TestCodeCurr = testcode
diff --git a/Modules/Mail.lua b/Modules/Mail.lua
index 62a0692..aaf90d9 100644
--- a/Modules/Mail.lua
+++ b/Modules/Mail.lua
@@ -58,6 +58,9 @@ EMA.settings = {
 		MailCRItems = false,
 		autoMailToonNameCR = "",
 		autoCRItemTag = EMAApi.AllGroup(),
+		MailRecipeFItems = false,
+		autoMailToonNameRecipeF = "",
+		autoRecipeFItemTag = EMAApi.AllGroup(),
 		autoMailItemsList = {},

 		adjustMoneyWithMail = false,
@@ -384,6 +387,34 @@ function EMA:SettingsCreateMail( top )
 	)
 	EMA.settingsControl.MailTradeCRItemsTagCR:SetList( EMAApi.GroupList() )
 	EMA.settingsControl.MailTradeCRItemsTagCR:SetCallback( "OnValueChanged",  EMA.GroupListDropDownListCR )
+	-- Recipes & Formulas
+	movingTop = movingTop - editBoxHeight - 3
+	EMA.settingsControl.checkBoxMailRecipeFItems = EMAHelperSettings:CreateCheckBox(
+	EMA.settingsControl,
+		thirdWidth,
+		left,
+		movingTop + movingTopEdit,
+		L["MAIL_RECIPES"],
+		EMA.SettingsToggleMailRecipeF,
+		L["MAIL_RECIPES_HELP"]
+	)
+	EMA.settingsControl.tabNumListDropDownListRecipeF = EMAHelperSettings:CreateEditBox(
+		EMA.settingsControl,
+		thirdWidth,
+		left2,
+		movingTop,
+		L["MAILTOON"]
+	)
+	EMA.settingsControl.tabNumListDropDownListRecipeF:SetCallback( "OnEnterPressed",  EMA.SettingsToggleMailRecipeFName )
+	EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF = EMAHelperSettings:CreateDropdown(
+		EMA.settingsControl,
+		thirdWidth,
+		left3,
+		movingTop,
+		L["GROUP_LIST"]
+	)
+	EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF:SetList( EMAApi.GroupList() )
+	EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF:SetCallback( "OnValueChanged",  EMA.EditMailToonNameRecipeFGroup )

 	movingTop = movingTop - editBoxHeight - headingHeight
 --	movingTop = movingTop - editBoxHeight
@@ -605,6 +636,34 @@ function EMA:GroupListDropDownListCR (event, value )
 	EMA:SettingsRefresh()
 end

+function EMA:SettingsToggleMailRecipeF(event, checked )
+	EMA.db.MailRecipeFItems = checked
+	EMA:SettingsRefresh()
+end
+
+function EMA:SettingsToggleMailRecipeFName (event, value )
+	-- if nil or the blank group then don't get Name.
+	if value == " " or value == nil then
+		return
+	end
+	EMA.db.autoMailToonNameRecipeF = value
+	EMA:SettingsRefresh()
+end
+
+function EMA:EditMailToonNameRecipeFGroup (event, value )
+	-- if nil or the blank group then don't get Name.
+	if value == " " or value == nil then
+		return
+	end
+	for index, groupName in ipairs( EMAApi.GroupList() ) do
+		if index == value then
+			EMA.db.autoRecipeFItemTag = groupName
+			break
+		end
+	end
+	EMA:SettingsRefresh()
+end
+
 function EMA:OnMessageAreasChanged( message )
 	EMA.settingsControl.dropdownMessageArea:SetList( EMAApi.MessageAreaList() )
 end
@@ -613,6 +672,7 @@ function EMA:OnGroupAreasChanged( message )
 	EMA.settingsControl.MailItemsEditBoxMailTag:SetList( EMAApi.GroupList() )
 	EMA.settingsControl.MailTradeBoEItemsTagBoE:SetList( EMAApi.GroupList() )
 	EMA.settingsControl.MailTradeCRItemsTagCR:SetList( EMAApi.GroupList() )
+	EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF:SetList( EMAApi.GroupList() )
 end

 function EMA:SettingsSetMessageArea( event, value )
@@ -688,6 +748,9 @@ function EMA:EMAOnSettingsReceived( characterName, settings )
 		EMA.db.MailCRItems = settings.MailCRItems
 		EMA.db.autoMailToonNameCR = settings.autoMailToonNameCR
 		EMA.db.autoCRItemTag = settings.autoCRItemTag
+		EMA.db.MailRecipeFItems = settings.MailRecipeFItems
+		EMA.db.autoMailToonNameRecipeF = settings.autoMailToonNameRecipeF
+		EMA.db.autoRecipeFItemTag = settings.autoRecipeFItemTag
 		EMA.db.autoMailItemsList = EMAUtilities:CopyTable( settings.autoMailItemsList )
 		EMA.db.global.autoMailItemsListGlobal = EMAUtilities:CopyTable( settings.global.autoMailItemsListGlobal )
 		EMA.db.adjustMoneyWithMail = settings.adjustMoneyWithMail
@@ -721,8 +784,11 @@ function EMA:SettingsRefresh()
 	EMA.settingsControl.checkBoxMailCRItems:SetValue( EMA.db.MailCRItems )
 	EMA.settingsControl.tabNumListDropDownListCR:SetText( EMA.db.autoMailToonNameCR )
 	EMA.settingsControl.MailTradeCRItemsTagCR:SetText( EMA.db.autoCRItemTag )
+
+	EMA.settingsControl.checkBoxMailRecipeFItems:SetValue( EMA.db.MailRecipeFItems )
+	EMA.settingsControl.tabNumListDropDownListRecipeF:SetText( EMA.db.autoMailToonNameRecipeF )
+	EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF:SetText( EMA.db.autoRecipeFItemTag )
 	EMA.settingsControl.dropdownMessageArea:SetValue( EMA.db.messageArea )
-
 	EMA.settingsControl.checkBoxAdjustMoneyOnToonViaMail:SetValue( EMA.db.adjustMoneyWithMail )
 	EMA.settingsControl.editBoxGoldAmountToLeaveOnToon:SetText( tostring( EMA.db.goldAmountToKeepOnToon ) )
 	EMA.settingsControl.editBoxGoldAmountToLeaveOnToon:SetDisabled( not EMA.db.adjustMoneyWithMail )
@@ -743,6 +809,9 @@ function EMA:SettingsRefresh()
 	EMA.settingsControl.checkBoxMailCRItems:SetDisabled( not EMA.db.showEMAMailWindow )
 	EMA.settingsControl.tabNumListDropDownListCR:SetDisabled( not EMA.db.showEMAMailWindow )
 	EMA.settingsControl.MailTradeCRItemsTagCR:SetDisabled( not EMA.db.showEMAMailWindow )
+	EMA.settingsControl.checkBoxMailRecipeFItems:SetDisabled( not EMA.db.showEMAMailWindow )
+	EMA.settingsControl.tabNumListDropDownListRecipeF:SetDisabled( not EMA.db.showEMAMailWindow )
+	EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF:SetDisabled( not EMA.db.showEMAMailWindow )
 	EMA:SettingsScrollRefresh()

 end
@@ -860,17 +929,18 @@ function EMA:AddAllToMailBox()
 	EMA.Count = 1
 	for bagID = 0, NUM_BAG_SLOTS do
 		for slotID = 1,GetContainerNumSlots( bagID ),1 do
-			--EMA:Print( "Bags OK. checking", itemLink )
+
 			local item = Item:CreateFromBagAndSlot(bagID, slotID)
 			if ( item ) then
 				local bagItemLink = item:GetItemLink()
 				if ( bagItemLink ) then
+					--EMA:Print( "Bags OK. checking", itemLink )
 					local itemLink = item:GetItemLink()
 					local location = item:GetItemLocation()
 					local itemType = C_Item.GetItemInventoryType( location )
 					local isBop = C_Item.IsBound( location )
 					local itemRarity =  C_Item.GetItemQuality( location )
-					local _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,isCraftingReagent = GetItemInfo( bagItemLink )
+					local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, itemIcon, itemSellPrice, itemClassID, itemSubClassID, bindType, expacID, itemSetID, isCraftingReagent = GetItemInfo( bagItemLink )
 					local canSend = false
 					local toonName = nil
 					if EMA.db.MailBoEItems == true then
@@ -888,6 +958,7 @@ function EMA:AddAllToMailBox()
 					if EMA.db.MailCRItems == true then
 						if isCraftingReagent == true then
 							if EMAApi.IsCharacterInGroup(  EMA.characterName, EMA.db.autoCRItemTag ) == true then
+								--EMA:Print("testCR", classID, bagItemLink)
 								if isBop == false then
 									canSend = true
 									toonName = EMA.db.autoMailToonNameCR
@@ -895,6 +966,17 @@ function EMA:AddAllToMailBox()
 							end
 						end
 					end
+					if EMA.db.MailRecipeFItems == true then
+						if itemClassID == 9 then
+							--EMA:Print("testRF", itemClassID, bagItemLink)
+							if EMAApi.IsCharacterInGroup(  EMA.characterName, EMA.db.autoRecipeFItemTag ) == true then
+								if isBop == false then
+									canSend = true
+									toonName = EMA.db.autoMailToonNameRecipeF
+								end
+							end
+						end
+					end
 					if EMA.db.globalMailList == true then
 						itemTable = EMA.db.global.autoMailItemsListGlobal
 					else
@@ -996,4 +1078,4 @@ function EMA:AddGoldToMailBox()
 			EMA:Print("[PH] Can Only Send Mail From BlizzardUI Mail Frame!")
 		end
 	end
-end
\ No newline at end of file
+end
diff --git a/Modules/Quest.lua b/Modules/Quest.lua
index 32e7d09..3c8a117 100644
--- a/Modules/Quest.lua
+++ b/Modules/Quest.lua
@@ -1097,6 +1097,7 @@ end

 function EMA:ChurnNpcGossip()
     EMA:DebugMessage( "ChurnNpcGossip" )
+	--9.0 C_GossipInfo.
 	-- GetGossipAvailableQuests and GetGossipActiveQuests are returning nil in some cases, so do this as well.
 	-- GetGossipAvailableQuests() now returns 6 elements per quest and GetGossipActiveQuests() returns 4. title, level, isTrivial, isDaily, ...
 	-- Patch 5.0.4 added isLegendary.
@@ -1105,10 +1106,11 @@ function EMA:ChurnNpcGossip()
 	local numberAvailableQuestInfo = 6
 	local numberActiveQuestInfo = 5
     local index
-    EMA:DebugMessage( "GetNumAvailableQuests", GetNumAvailableQuests() )
+	--EMA:Print("test" )
+   EMA:DebugMessage( "GetNumAvailableQuests", GetNumAvailableQuests() )
     EMA:DebugMessage( "GetNumActiveQuests", GetNumActiveQuests() )
-    EMA:DebugMessage( "GetGossipAvailableQuests", GetGossipAvailableQuests() )
-    EMA:DebugMessage( "GetGossipActiveQuests", GetGossipActiveQuests() )
+    EMA:DebugMessage( "GetGossipAvailableQuests", C_GossipInfo.GetAvailableQuests() )
+    EMA:DebugMessage( "GetGossipActiveQuests", C_GossipInfo.GetActiveQuests() )
     for index = 0, GetNumAvailableQuests() do
 		SelectAvailableQuest( index )
 	end
@@ -1116,7 +1118,7 @@ function EMA:ChurnNpcGossip()
 		SelectActiveQuest( index )
 	end
 	EMAUtilities:ClearTable( EMA.gossipQuests )
-	local availableQuestsData = { GetGossipAvailableQuests() }
+	local availableQuestsData = { C_GossipInfo.GetAvailableQuests() }
 	local iterateQuests = 1
 	local questIndex = 1
 	while( availableQuestsData[iterateQuests] ) do
@@ -1129,7 +1131,7 @@ function EMA:ChurnNpcGossip()
 		iterateQuests = iterateQuests + numberAvailableQuestInfo
 		questIndex = questIndex + 1
 	end
-	local activeQuestsData = { GetGossipActiveQuests() }
+	local activeQuestsData = {  C_GossipInfo.GetActiveQuests() }
 	iterateQuests = 1
 	while( activeQuestsData[iterateQuests] ) do
 		local questInformation = {}
@@ -1144,7 +1146,7 @@ function EMA:ChurnNpcGossip()
 	end
 	for index, questInformation in ipairs( EMA.gossipQuests ) do
 		if questInformation.type == "available" then
-			SelectGossipAvailableQuest( questInformation.index )
+			C_GossipInfo.SelectAvailableQuest( questInformation.index )
 		end
 		-- If this is an active quest...
 		if questInformation.type == "active" then
@@ -1263,12 +1265,9 @@ end
 function EMA:DoSelectActiveQuest( sender, questIndex )
 	if EMA.db.mirrorMasterQuestSelectionAndDeclining == true then
 		EMA.isInternalCommand = true
-        EMA:DebugMessage( "DoSelectActiveQuest" )
-		--if C_GossipInfo.GetNumActiveQuests() > 1 then
-			C_GossipInfo.SelectActiveQuest( questIndex )
-		--else
-		--	EMA:EMASendMessageToTeam( EMA.db.warningArea, L["AM_I_TALKING_TO_A_NPC"], false )
-		--end
+
+		--EMA:Print( "DoSelectActiveQuest" )
+		C_GossipInfo.SelectActiveQuest( questIndex )
 		EMA.isInternalCommand = false
 	end
 end
@@ -1587,9 +1586,9 @@ function EMA:CanAutoAcceptSharedQuestFromPlayer()
 			end
 		end
 		if EMA.db.acceptFromFriends == true then
-			for friendIndex = 1, GetNumFriends() do
-				local friendName = GetFriendInfo( friendIndex )
-				if questSourceName == friendName then
+			for friendIndex = 1, C_FriendList.GetNumFriends() do
+				local info = C_FriendList.GetFriendInfo( friendIndex )
+				if questSourceName == info.name then
 					canAccept = true
 					break
 				end
diff --git a/Modules/QuestWatcher.lua b/Modules/QuestWatcher.lua
index ace5707..efd8b1c 100644
--- a/Modules/QuestWatcher.lua
+++ b/Modules/QuestWatcher.lua
@@ -2458,7 +2458,7 @@ function EMA:DisplayAutoQuestPopUps()
 				frame:HookScript( "OnMouseUp", function()
 					ShowQuestComplete( questID )
 					EMA:EMARemoveAllAutoQuestPopUps( questID )
-					EMA:DisplayAutoQuestPopUps()
+					--EMA:DisplayAutoQuestPopUps()
 					EMA:SettingsUpdateBorderStyle()
 					EMA:SettingsUpdateFontStyle()
 				end )
@@ -2471,9 +2471,10 @@ function EMA:DisplayAutoQuestPopUps()
 			frame:HookScript( "OnMouseUp", function()
 				ShowQuestOffer( questID )
 				EMA:EMARemoveAllAutoQuestPopUps( questID )
-				EMA:DisplayAutoQuestPopUps()
+				--EMA:DisplayAutoQuestPopUps()
 				EMA:SettingsUpdateBorderStyle()
 				EMA:SettingsUpdateFontStyle()
+				AutoQuestPopupTracker_RemovePopUp( questID )
 			end )
 		end
 		frame:ClearAllPoints()
diff --git a/Modules/Toon.lua b/Modules/Toon.lua
index e137665..bfc8d19 100644
--- a/Modules/Toon.lua
+++ b/Modules/Toon.lua
@@ -60,9 +60,11 @@ EMA.settings = {
 		warnManaDropsMessage = L["LOW_MANA"],
 		warnWhenDurabilityDropsBelowX = true,
 		warnWhenDurabilityDropsAmount = "60",
+		warnWhenBagsAlmostFullAmount = 0,
 		warnDurabilityDropsMessage = L["DURABILITY_LOW_MSG"],
 		warnBagsFull = true,
-		bagsFullMessage = L["BAGS_FULL"],
+		bagsFullMessage = L["BAGS_FULL"],
+		bagsAlmostFullMessage = L["BAGS_ALMOST_FULL"],
 		warnCC = true,
 		CcMessage = L["CCED"],
 		warningArea = EMAApi.DefaultWarningArea(),
@@ -559,6 +561,14 @@ local function SettingsCreateWarnings( top )
 		L["BAGS_FULL_HELP"]
 	)
 	movingTop = movingTop - checkBoxHeight
+	EMA.settingsControlWarnings.editBoxWarnWhenBagsAlmostFull = EMAHelperSettings:CreateEditBox( EMA.settingsControlWarnings,
+		headingWidth,
+		left,
+		movingTop,
+		L["BAG_SLOTS_HELP"]
+	)
+	EMA.settingsControlWarnings.editBoxWarnWhenBagsAlmostFull:SetCallback( "OnEnterPressed", EMA.EditBoxChangedWarnWhenBagsAlmostFull )
+	movingTop = movingTop - editBoxHeight
 	EMA.settingsControlWarnings.editBoxBagsFullMessage = EMAHelperSettings:CreateEditBox( EMA.settingsControlWarnings,
 		headingWidth,
 		left,
@@ -647,6 +657,7 @@ function EMA:SettingsRefresh()
 	EMA.settingsControlWarnings.checkBoxWarnWhenDurabilityDropsBelowX:SetValue( EMA.db.warnWhenDurabilityDropsBelowX )
 	EMA.settingsControlWarnings.editBoxWarnWhenDurabilityDropsAmount:SetText( EMA.db.warnWhenDurabilityDropsAmount )
 	EMA.settingsControlWarnings.editBoxWarnDurabilityDropsMessage:SetText( EMA.db.warnDurabilityDropsMessage )
+	EMA.settingsControlWarnings.editBoxWarnWhenBagsAlmostFull:SetText( EMA.db.warnWhenBagsAlmostFullAmount )
 	EMA.settingsControlWarnings.checkBoxWarnBagsFull:SetValue( EMA.db.warnBagsFull )
 	EMA.settingsControlWarnings.editBoxBagsFullMessage:SetText( EMA.db.bagsFullMessage )
 	EMA.settingsControlWarnings.checkBoxWarnCC:SetValue( EMA.db.warnCC )
@@ -677,8 +688,9 @@ function EMA:SettingsRefresh()
 	EMA.settingsControlWarnings.editBoxWarnWhenManaDropsAmount:SetDisabled( not EMA.db.warnWhenManaDropsBelowX )
 	EMA.settingsControlWarnings.editBoxWarnManaDropsMessage:SetDisabled( not EMA.db.warnWhenManaDropsBelowX )
 	EMA.settingsControlWarnings.editBoxWarnWhenDurabilityDropsAmount:SetDisabled( not EMA.db.warnWhenDurabilityDropsBelowX )
-	EMA.settingsControlWarnings.editBoxWarnDurabilityDropsMessage:SetDisabled( not EMA.db.warnWhenDurabilityDropsBelowX )
-	EMA.settingsControlMerchant.checkBoxAutoRepairUseGuildFunds:SetDisabled( not EMA.db.autoRepair )
+	EMA.settingsControlWarnings.editBoxWarnDurabilityDropsMessage:SetDisabled( not EMA.db.warnWhenDurabilityDropsBelowX )
+	EMA.settingsControlWarnings.editBoxWarnWhenBagsAlmostFull:SetDisabled( not EMA.db.warnWhenBagsAlmostFullAmount )
+  EMA.settingsControlMerchant.checkBoxAutoRepairUseGuildFunds:SetDisabled( not EMA.db.autoRepair )
 	EMA.settingsControlWarnings.editBoxBagsFullMessage:SetDisabled( not EMA.db.warnBagsFull )
 	EMA.settingsControlWarnings.editBoxCCMessage:SetDisabled( not EMA.db.warnCC )
 	EMA.settingsControlToon.checkBoxAutoAcceptResurrectRequestOnlyFromTeam:SetDisabled( not EMA.db.autoAcceptResurrectRequest )
@@ -877,6 +889,13 @@ function EMA:SettingsSetMerchantArea( event, value )
 	EMA:SettingsRefresh()
 end

+function EMA:EditBoxChangedWarnWhenBagsAlmostFull( event, text )
+	local amount = tonumber( text )
+	amount = EMAUtilities:FixValueToRange( amount, 0, 100 )
+	EMA.db.warnWhenBagsAlmostFullAmount = amount
+	EMA:SettingsRefresh()
+end
+
 -------------------------------------------------------------------------------------------------------------
 -- Addon initialization, enabling and disabling.
 -------------------------------------------------------------------------------------------------------------
@@ -963,6 +982,7 @@ function EMA:EMAOnSettingsReceived( characterName, settings )
 		EMA.db.warnDurabilityDropsMessage = settings.warnDurabilityDropsMessage
 		EMA.db.warnBagsFull = settings.warnBagsFull
 		EMA.db.bagsFullMessage = settings.bagsFullMessage
+		EMA.db.bagsAlmostFullMessage = settings.bagsAlmostFullMessage
 		EMA.db.warnCC = settings.warnCC
 		EMA.db.CcMessage = settings.CcMessage
 		EMA.db.autoAcceptResurrectRequest = settings.autoAcceptResurrectRequest
@@ -1570,13 +1590,24 @@ function EMA:BAGS_FULL( event, arg1, message, ... )
 end

 function EMA:BAG_UPDATE_DELAYED(event, ... )
-	if EMA.db.warnBagsFull == true then
-		local numberFreeSlots, numberTotalSlots = LibBagUtils:CountSlots( "BAGS", 0 )
-		if numberFreeSlots > 0 then
-			 EMA.previousFreeBagSlotsCount = false
-			 EMA:CancelAllTimers()
-		end
-	end
+  if EMA.db.warnBagsFull == false then
+    return
+  end
+
+  if EMA.previousFreeBagSlotsCount == true then
+    return
+  end
+
+  local numberFreeSlots, numberTotalSlots = LibBagUtils:CountSlots( "BAGS", 0 )
+  if numberFreeSlots > 0 and numberFreeSlots < EMA.db.warnWhenBagsAlmostFullAmount then
+    local warnMsg = EMA.db.bagsAlmostFullMessage .. ' (' .. tostring(numberFreeSlots) .. ')'
+    EMA:EMASendMessageToTeam( EMA.db.warningArea, warnMsg, false )
+    EMA.previousFreeBagSlotsCount = true
+    EMA:ScheduleTimer("ResetBagFull", 15, nil )
+  elseif numberFreeSlots > 0 then
+    EMA.previousFreeBagSlotsCount = false
+    EMA:CancelAllTimers()
+  end
 end

 function EMA:ResetBagFull()
diff --git a/Modules/Trade.lua b/Modules/Trade.lua
index 5f12095..be4db5c 100644
--- a/Modules/Trade.lua
+++ b/Modules/Trade.lua
@@ -53,9 +53,11 @@ EMA.settings = {
 		blackListItem = false,
 		tradeBoEItems = false,
 		tradeCRItems = false,
+		tradeRecipeFItems = false,
 		autoSellOtherItemTag = EMAApi.MasterGroup(),
 		autoBoEItemTag = EMAApi.MasterGroup(),
 		autoCRItemTag = EMAApi.MasterGroup(),
+		autoRecipeFItemTag = EMAApi.MasterGroup(),
 		autoTradeItemsList = {},
 		adjustMoneyWithMasterOnTrade = false,
 		goldAmountToKeepOnToonTrade = 200,
@@ -344,6 +346,26 @@ function EMA:SettingsCreateTrade( top )
 	)
 	EMA.settingsControl.tradeTradeCRItemsTag:SetList( EMAApi.GroupList() )
 	EMA.settingsControl.tradeTradeCRItemsTag:SetCallback( "OnValueChanged",  EMA.TradeGroupListItemsCRDropDown )
+	-- NEW AKANDESH THING
+	movingTop = movingTop - editBoxHeight - 3
+	EMA.settingsControl.checkBoxTradeRecipeFItems = EMAHelperSettings:CreateCheckBox(
+	EMA.settingsControl,
+		halfWidth,
+		left,
+		movingTop + movingTopEdit,
+		L["TRADE_RECIPE_FORMULA"],
+		EMA.SettingsToggleTradeRecipeFItems,
+		L["TRADE_RECIPE_FORMULA_HELP"]
+	)
+	EMA.settingsControl.tradeTradeRecipeFItemsTag = EMAHelperSettings:CreateDropdown(
+		EMA.settingsControl,
+		dropBoxWidth,
+		left3,
+		movingTop,
+		L["GROUP_LIST"]
+	)
+	EMA.settingsControl.tradeTradeRecipeFItemsTag:SetList( EMAApi.GroupList() )
+	EMA.settingsControl.tradeTradeRecipeFItemsTag:SetCallback( "OnValueChanged",  EMA.TradeGroupListItemsRecipeFDropDown )
 	-- Trade Gold! Keep
 	movingTop = movingTop - editBoxHeight
 	EMA.settingsControl.checkBoxAdjustMoneyWithMasterOnTrade = EMAHelperSettings:CreateCheckBox(
@@ -472,6 +494,7 @@ end
 function EMA:OnGroupAreasChanged( message )
 	EMA.settingsControl.tradeItemsEditBoxToonTag:SetList( EMAApi.GroupList() )
 	EMA.settingsControl.tradeTradeCRItemsTag:SetList( EMAApi.GroupList() )
+	EMA.settingsControl.tradeTradeRecipeFItemsTag:SetList( EMAApi.GroupList() )
 	EMA.settingsControl.tradeTradeBoEItemsTag:SetList( EMAApi.GroupList() )
 end

@@ -513,6 +536,11 @@ function EMA:SettingsToggleTradeCRItems(event, checked )
 	EMA:SettingsRefresh()
 end

+function EMA:SettingsToggleTradeRecipeFItems(event, checked )
+	EMA.db.tradeRecipeFItems = checked
+	EMA:SettingsRefresh()
+end
+
 function EMA:TradeGroupListItemsCRDropDown(event, value )
 	if value == " " or value == nil then
 		return
@@ -526,6 +554,19 @@ function EMA:TradeGroupListItemsCRDropDown(event, value )
 	EMA:SettingsRefresh()
 end

+function EMA:TradeGroupListItemsRecipeFDropDown(event, value )
+	if value == " " or value == nil then
+		return
+	end
+	for index, groupName in ipairs( EMAApi.GroupList() ) do
+		if index == value then
+			EMA.db.autoRecipeFItemTag = groupName
+			break
+		end
+	end
+	EMA:SettingsRefresh()
+end
+

 function EMA:SettingsToggleAdjustMoneyOnToonViaGuildBank( event, checked )
 	EMA.db.adjustMoneyWithGuildBank = checked
@@ -570,6 +611,7 @@ function EMA:EMAOnSettingsReceived( characterName, settings )
 		EMA.db.blackListItem = settings.blackListItem
 		EMA.db.tradeBoEItems = settings.tradeBoEItems
 		EMA.db.tradeCRItems = settings.tradeCRItems
+		EMA.db.tradeRecipeFItems = settings.tradeRecipeFItems
 		EMA.db.autoBoEItemTag = settings.autoBoEItemTag
 		EMA.db.autoCRItemTag = settings.autoCRItemTag
 		EMA.db.autoTradeItemsList = EMAUtilities:CopyTable( settings.autoTradeItemsList )
@@ -600,10 +642,12 @@ function EMA:SettingsRefresh()
 	EMA.settingsControl.listCheckBoxBoxOtherBlackListItem:SetValue( EMA.db.blackListItem )
 	EMA.settingsControl.checkBoxTradeBoEItems:SetValue( EMA.db.tradeBoEItems)
 	EMA.settingsControl.checkBoxTradeCRItems:SetValue( EMA.db.tradeCRItems)
+	EMA.settingsControl.checkBoxTradeRecipeFItems:SetValue( EMA.db.tradeRecipeFItems)
 	EMA.settingsControl.dropdownMessageArea:SetValue( EMA.db.messageArea )
 	EMA.settingsControl.tradeItemsEditBoxToonTag:SetText( EMA.db.autoSellOtherItemTag )
 	EMA.settingsControl.tradeTradeBoEItemsTag:SetText( EMA.db.autoBoEItemTag )
 	EMA.settingsControl.tradeTradeCRItemsTag:SetText( EMA.db.autoCRItemTag )
+	EMA.settingsControl.tradeTradeRecipeFItemsTag:SetText( EMA.db.autoRecipeFItemTag )
 	EMA.settingsControl.checkBoxAdjustMoneyWithMasterOnTrade:SetValue( EMA.db.adjustMoneyWithMasterOnTrade )
 	EMA.settingsControl.editBoxGoldAmountToLeaveOnToonTrade:SetText( tostring( EMA.db.goldAmountToKeepOnToonTrade ) )
 	EMA.settingsControl.editBoxGoldAmountToLeaveOnToonTrade:SetDisabled( not EMA.db.adjustMoneyWithMasterOnTrade )
@@ -616,6 +660,8 @@ function EMA:SettingsRefresh()
 	EMA.settingsControl.tradeTradeBoEItemsTag:SetDisabled( not EMA.db.showEMATradeWindow )
 	EMA.settingsControl.checkBoxTradeCRItems:SetDisabled( not EMA.db.showEMATradeWindow )
 	EMA.settingsControl.tradeTradeCRItemsTag:SetDisabled( not EMA.db.showEMATradeWindow )
+	EMA.settingsControl.checkBoxTradeRecipeFItems:SetDisabled( not EMA.db.showEMATradeWindow )
+	EMA.settingsControl.tradeTradeRecipeFItemsTag:SetDisabled( not EMA.db.showEMATradeWindow )
 	EMA:SettingsScrollRefresh()
 end

@@ -750,13 +796,13 @@ function EMA:TradeAllItems()
 				if ( bagItemLink ) then
 					local itemLink = item:GetItemLink()
 					local location = item:GetItemLocation()
-					local itemType = C_Item.GetItemInventoryType( location )
+					local inventoryType = C_Item.GetItemInventoryType( location )
 					local isBop = C_Item.IsBound( location )
 					local itemRarity =  C_Item.GetItemQuality( location )
-					local _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,isCraftingReagent = GetItemInfo( bagItemLink )
+					local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, itemIcon, itemSellPrice, itemClassID, itemSubClassID, bindType, expacID, itemSetID, isCraftingReagent = GetItemInfo(bagItemLink)
 					local canTrade = false
 					if EMA.db.tradeBoEItems == true then
-						if itemType ~= 0 then
+						if inventoryType ~= 0 then
 							if EMAApi.IsCharacterInGroup( characterName, EMA.db.autoBoEItemTag ) == true then
 								if isBop == false then
 									if itemRarity == 2 or itemRarity == 3 or itemRarity == 4 then
@@ -775,6 +821,15 @@ function EMA:TradeAllItems()
 							end
 						end
 					end
+					if EMA.db.tradeRecipeFItems == true then
+						if itemClassID == 9 then -- LE_ITEM_CLASS_RECIPE
+							if EMAApi.IsCharacterInGroup( characterName, EMA.db.autoRecipeFItemTag ) == true then
+								if isBop == false then
+									canTrade = true
+								end
+							end
+						end
+					end
 					if EMA.db.globalTradeList == true then
 						itemTable = EMA.db.global.autoTradeItemsListGlobal
 					else
@@ -808,4 +863,4 @@ end

 function EMA:TRADE_CLOSED()

-end
\ No newline at end of file
+end