Quantcast

5.2.7

Steven Jackson [11-28-14 - 06:37]
5.2.7
Filename
Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-LEVEL.blp
Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-RING.blp
Interface/AddOns/SVUI/assets/artwork/Unitframe/POP-RING.blp
Interface/AddOns/SVUI/assets/artwork/Unitframe/PORTRAIT-RING.blp
Interface/AddOns/SVUI/framework/_load.xml
Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua
Interface/AddOns/SVUI/packages/actionbar/SVBar.lua
Interface/AddOns/SVUI/packages/bag/SVBag.lua
Interface/AddOns/SVUI/packages/plates/SVPlate.lua
Interface/AddOns/SVUI/packages/stats/SVStats.lua
Interface/AddOns/SVUI/packages/stats/stats/tokens.lua
Interface/AddOns/SVUI/packages/tip/SVTip.lua
Interface/AddOns/SVUI/system/core.lua
Interface/AddOns/SVUI_StyleOMatic/components/blizzard/alert.lua
Interface/AddOns/SVUI_StyleOMatic/components/blizzard/garrison.lua
diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-LEVEL.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-LEVEL.blp
new file mode 100644
index 0000000..ea67b69
Binary files /dev/null and b/Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-LEVEL.blp differ
diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-RING.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-RING.blp
index 9d7fab1..708f231 100644
Binary files a/Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-RING.blp and b/Interface/AddOns/SVUI/assets/artwork/Unitframe/FOLLOWER-RING.blp differ
diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/POP-RING.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/POP-RING.blp
new file mode 100644
index 0000000..8e31587
Binary files /dev/null and b/Interface/AddOns/SVUI/assets/artwork/Unitframe/POP-RING.blp differ
diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/PORTRAIT-RING.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/PORTRAIT-RING.blp
new file mode 100644
index 0000000..9d7fab1
Binary files /dev/null and b/Interface/AddOns/SVUI/assets/artwork/Unitframe/PORTRAIT-RING.blp differ
diff --git a/Interface/AddOns/SVUI/framework/_load.xml b/Interface/AddOns/SVUI/framework/_load.xml
index f6f5384..9f9bd33 100644
--- a/Interface/AddOns/SVUI/framework/_load.xml
+++ b/Interface/AddOns/SVUI/framework/_load.xml
@@ -1,5 +1,4 @@
 <Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Include file="screen\screen.xml"/>
     <Include file="api\api.xml"/>
     <Include file="widgets\widgets.xml"/>
     <Include file="movers\movers.xml"/>
diff --git a/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua b/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua
index 27d6ca9..1fa1048 100644
--- a/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua
+++ b/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua
@@ -50,7 +50,7 @@ local DraggableFrames = {
 	"AchievementFrame", "AuctionFrame", "ArchaeologyFrame",
 	"BattlefieldMinimap", "BarberShopFrame", "BlackMarketFrame",
 	"CalendarFrame", "CharacterFrame", "ClassTrainerFrame",
-	"DressUpFrame",
+	"DressUpFrame", "DraenorZoneAbilityFrame",
 	"EncounterJournal",
 	"FriendsFrame",
 	"GameMenuFrame", "GMSurveyFrame", "GossipFrame", "GuildFrame", "GuildBankFrame", "GuildRegistrarFrame",
@@ -957,17 +957,6 @@ local MentaloDraggablesUpdate = function(self, event, ...)
 		end
 	end
 end
-
-Mentalo:RegisterEvent("PLAYER_LOGIN")
-Mentalo:RegisterEvent("ADDON_LOADED")
-Mentalo:RegisterEvent("LFG_UPDATE")
-Mentalo:RegisterEvent("ROLE_POLL_BEGIN")
-Mentalo:RegisterEvent("READY_CHECK")
-Mentalo:RegisterEvent("UPDATE_WORLD_STATES")
-Mentalo:RegisterEvent("WORLD_STATE_TIMER_START")
-Mentalo:RegisterEvent("WORLD_STATE_UI_TIMER_UPDATE")
-
-Mentalo:SetScript("OnEvent", MentaloDraggablesUpdate)
 --[[
 ##########################################################
 Initialize
@@ -1006,12 +995,21 @@ function Mentalo:Initialize()

 	self:SetPositions()

+	Mentalo:RegisterEvent("ADDON_LOADED")
+	Mentalo:RegisterEvent("LFG_UPDATE")
+	Mentalo:RegisterEvent("ROLE_POLL_BEGIN")
+	Mentalo:RegisterEvent("READY_CHECK")
+	Mentalo:RegisterEvent("UPDATE_WORLD_STATES")
+	Mentalo:RegisterEvent("WORLD_STATE_TIMER_START")
+	Mentalo:RegisterEvent("WORLD_STATE_UI_TIMER_UPDATE")
+	Mentalo:SetScript("OnEvent", MentaloDraggablesUpdate)
+
 	--PET JOURNAL TAINT FIX (STILL NEEDED?)
-	local info = UIPanelWindows["PetJournalParent"];
-	for name, value in pairs(info) do
-		PetJournalParent:SetAttribute("UIPanelLayout-"..name, value);
-	end
-	PetJournalParent:SetAttribute("UIPanelLayout-defined", true);
+	-- local info = UIPanelWindows["PetJournalParent"];
+	-- for name, value in pairs(info) do
+	-- 	PetJournalParent:SetAttribute("UIPanelLayout-"..name, value);
+	-- end
+	-- PetJournalParent:SetAttribute("UIPanelLayout-defined", true);
 end

 SV.Mentalo = Mentalo
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua b/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua
index f46681c..eae075c 100644
--- a/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua
+++ b/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua
@@ -1457,10 +1457,10 @@ local CreateExtraBar = function(self)
 		ExtraActionBarFrame:Show()
 	end

-	DraenorZoneAbilityFrame:SetParent(specialBar)
+	--local size = DraenorZoneAbilityFrame:GetHeight()
 	DraenorZoneAbilityFrame:ClearAllPoints()
-	DraenorZoneAbilityFrame:SetPoint('CENTER', specialBar, 'CENTER')
-	DraenorZoneAbilityFrame.ignoreFramePositionManager = true
+	DraenorZoneAbilityFrame:SetSize(150, 125)
+	--DraenorZoneAbilityFrame:SetPoint('CENTER', specialBar, 'CENTER')

 	SV.Mentalo:Add(specialBar, L["Boss Button"])
 end
@@ -1480,6 +1480,7 @@ local function RemoveDefaults()
 	MultiBarBottomRight:SetParent(removalManager)
 	MultiBarLeft:SetParent(removalManager)
 	MultiBarRight:SetParent(removalManager)
+
 	for i = 1, 12 do
 		local ab = _G[("ActionButton%d"):format(i)]
 		ab:Hide()
@@ -1517,9 +1518,11 @@ local function RemoveDefaults()
 			ob:UnregisterAllEvents()
 			ob:SetAttribute("statehidden", true)
 		end
-	end
+	end
+
 	ActionBarController:UnregisterAllEvents()
 	ActionBarController:RegisterEvent("UPDATE_EXTRA_ACTIONBAR")
+
 	MainMenuBar:EnableMouse(false)
 	MainMenuBar:SetAlpha(0)
 	MainMenuExpBar:UnregisterAllEvents()
@@ -1572,6 +1575,7 @@ local function RemoveDefaults()
 	InterfaceOptionsActionBarsPanelPickupActionKeyDropDown:SetScale(0.00001)
 	InterfaceOptionsStatusTextPanelXP:SetAlpha(0)
 	InterfaceOptionsStatusTextPanelXP:SetScale(0.00001)
+
 	if PlayerTalentFrame then
 		PlayerTalentFrame:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
 	else
diff --git a/Interface/AddOns/SVUI/packages/bag/SVBag.lua b/Interface/AddOns/SVUI/packages/bag/SVBag.lua
index 4c8ba3c..e6332ab 100644
--- a/Interface/AddOns/SVUI/packages/bag/SVBag.lua
+++ b/Interface/AddOns/SVUI/packages/bag/SVBag.lua
@@ -51,17 +51,18 @@ LOCAL VARS
 ]]--
 local CreateFrame = _G.CreateFrame;
 local hooksecurefunc = _G.hooksecurefunc;
-local iconTex = [[Interface\BUTTONS\WHITE8X8]]
-local borderTex = [[Interface\Addons\SVUI\assets\artwork\Template\ROUND]]
-local ICON_BAGS = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-BAGS]]
-local ICON_SORT = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-SORT]]
-local ICON_STACK = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-STACK]]
-local ICON_TRANSFER = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-TRANSFER]]
-local ICON_PURCHASE = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-PURCHASE]]
-local ICON_CLEANUP = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-CLEANUP]]
-local ICON_DEPOSIT = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-DEPOSIT]]
-local ICON_VENDOR = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-VENDOR]]
-local ICON_REAGENTS = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-REAGENTS]]
+local BLANK_TEXTURE = [[Interface\BUTTONS\WHITE8X8]];
+local BASIC_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Bars\DEFAULT]];
+local BORDER_TEXTURE = [[Interface\Addons\SVUI\assets\artwork\Template\ROUND]];
+local ICON_BAGS = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-BAGS]];
+local ICON_SORT = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-SORT]];
+local ICON_STACK = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-STACK]];
+local ICON_TRANSFER = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-TRANSFER]];
+local ICON_PURCHASE = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-PURCHASE]];
+local ICON_CLEANUP = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-CLEANUP]];
+local ICON_DEPOSIT = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-DEPOSIT]];
+local ICON_VENDOR = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-VENDOR]];
+local ICON_REAGENTS = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-REAGENTS]];
 local numBagFrame = NUM_BAG_FRAMES + 1;
 local VendorQueue = {};
 local gearSet, gearList = {}, {};
@@ -95,18 +96,17 @@ local function FormatCurrency(amount)
 	end
 end

-local function StyleBagToolButton(button)
+local function StyleBagToolButton(button, iconTex)
 	if button.styled then return end

 	local outer = button:CreateTexture(nil, "OVERLAY")
 	outer:WrapOuter(button, 6, 6)
-	outer:SetTexture(borderTex)
+	outer:SetTexture(BORDER_TEXTURE)
 	outer:SetGradient("VERTICAL", 0.4, 0.47, 0.5, 0.3, 0.33, 0.35)

-	if button.SetNormalTexture then
-		iconTex = button:GetNormalTexture()
-		iconTex:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
-	end
+	button:SetNormalTexture(iconTex)
+	iconTex = button:GetNormalTexture()
+	iconTex:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)

 	local icon = button:CreateTexture(nil, "OVERLAY")
 	icon:WrapOuter(button, 6, 6)
@@ -115,13 +115,13 @@ local function StyleBagToolButton(button)

 	local hover = button:CreateTexture(nil, "HIGHLIGHT")
 	hover:WrapOuter(button, 6, 6)
-	hover:SetTexture(borderTex)
+	hover:SetTexture(BORDER_TEXTURE)
 	hover:SetGradient(unpack(SV.Media.gradient.yellow))

 	if button.SetPushedTexture then
 		local pushed = button:CreateTexture(nil, "BORDER")
 		pushed:WrapOuter(button, 6, 6)
-		pushed:SetTexture(borderTex)
+		pushed:SetTexture(BORDER_TEXTURE)
 		pushed:SetGradient(unpack(SV.Media.gradient.highlight))
 		button:SetPushedTexture(pushed)
 	end
@@ -129,7 +129,7 @@ local function StyleBagToolButton(button)
 	if button.SetCheckedTexture then
 		local checked = button:CreateTexture(nil, "BORDER")
 		checked:WrapOuter(button, 6, 6)
-		checked:SetTexture(borderTex)
+		checked:SetTexture(BORDER_TEXTURE)
 		checked:SetGradient(unpack(SV.Media.gradient.green))
 		button:SetCheckedTexture(checked)
 	end
@@ -137,7 +137,7 @@ local function StyleBagToolButton(button)
 	if button.SetDisabledTexture then
 		local disabled = button:CreateTexture(nil, "BORDER")
 		disabled:WrapOuter(button, 6, 6)
-		disabled:SetTexture(borderTex)
+		disabled:SetTexture(BORDER_TEXTURE)
 		disabled:SetGradient(unpack(SV.Media.gradient.default))
 		button:SetDisabledTexture(disabled)
 	end
@@ -291,53 +291,46 @@ local SlotUpdate = function(self, slotID)

 	slot:Show()

-	local texture, count, locked, rarity = GetContainerItemInfo(bag, slotID);
-	local itemID = GetContainerItemID(bag, slotID);
+	local texture, count, locked = GetContainerItemInfo(bag, slotID);
 	local start, duration, enable = GetContainerItemCooldown(bag, slotID);
-	local itemLink = GetContainerItemLink(bag, slotID);
+	local isQuestItem, questId, isActiveQuest = GetContainerItemQuestInfo(bag, slotID);

-	if(slot.JunkIcon) then
-		if(itemID and VendorQueue[itemID]) then
-			slot.JunkIcon:Show()
-		else
-			slot.JunkIcon:Hide()
-		end
+	local itemID = GetContainerItemID(bag, slotID);
+	if(itemID and VendorQueue[itemID]) then
+		slot.JunkIcon:Show()
+	else
+		slot.JunkIcon:Hide()
 	end

-	if(slot.questIcon) then
-		slot.questIcon:Hide();
-	end
+	local r,g,b = 0,0,0

-	slot:SetBackdropColor(0, 0, 0, 0.6)
-	slot:SetBackdropBorderColor(0, 0, 0, 1)
-
-	if(bagType) then
-		local r, g, b = bagType[1], bagType[2], bagType[3];
-		slot:SetBackdropColor(r, g, b, 0.6)
-		slot:SetBackdropBorderColor(r, g, b, 1)
-	elseif(itemLink) then
-		local rarity = select(3, GetItemInfo(itemLink))
-		local isQuestItem, questId, isActiveQuest = GetContainerItemQuestInfo(bag, slotID);
-
-		if(questId and not isActive) then
-			slot:SetBackdropBorderColor(1.0, 0.3, 0.3);
-			if(slot.questIcon) then
-				slot.questIcon:Show();
-			end
-		elseif(questId or isQuestItem) then
-			slot:SetBackdropBorderColor(1.0, 0.3, 0.3);
-		elseif(rarity) then
-			if(rarity > 1) then
-				local r, g, b = GetItemQualityColor(rarity)
-				slot:SetBackdropBorderColor(r, g, b, 1)
-			elseif(rarity == 0) then
-				if(slot.JunkIcon) then
+	if(questId and (not isActiveQuest)) then
+		r,g,b = 1,0.3,0.3
+		slot.questIcon:Show();
+	elseif(questId or isQuestItem) then
+		r,g,b = 1,0.3,0.3
+		slot.questIcon:Hide();
+	elseif(bagType) then
+		r,g,b = bagType[1],bagType[2],bagType[3]
+		slot.questIcon:Hide();
+	else
+		slot.questIcon:Hide();
+		local itemLink = GetContainerItemLink(bag, slotID);
+		if(itemLink) then
+			local rarity = select(3, GetItemInfo(itemLink));
+			if(rarity) then
+				if(rarity > 1) then
+					r,g,b = GetItemQualityColor(rarity)
+				elseif(rarity == 0) then
 					slot.JunkIcon:Show()
 				end
 			end
 		end
 	end

+	slot:SetBackdropColor(r,g,b,0.6)
+	slot:SetBackdropBorderColor(r,g,b,1)
+
 	CooldownFrame_SetTimer(slot.cooldown, start, duration, enable);

 	if(duration > 0 and enable == 0) then
@@ -517,10 +510,11 @@ local ContainerFrame_UpdateLayout = function(self)
 				bagSlot:RemoveTextures()
 				bagSlot:SetSlotTemplate(true, 2, 0, 0, 0.5);

-				local texName = ("%sIconTexture"):format(globalName)
-				bagSlot.iconTexture = _G[texName];
-				bagSlot.iconTexture:FillInner()
-				bagSlot.iconTexture:SetTexCoord(0.1, 0.9, 0.1, 0.9)
+				if(not bagSlot.icon) then
+					bagSlot.icon = bagSlot:CreateTexture(nil, "BORDER");
+				end
+				bagSlot.icon:FillInner()
+				bagSlot.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)

 				hooksecurefunc(bagSlot, "UpdateTooltip", BagMenu_OnEnter)
 				bagSlot:HookScript("OnLeave", BagMenu_OnLeave)
@@ -583,15 +577,12 @@ local ContainerFrame_UpdateLayout = function(self)
 			end

 			bag.numSlots = numSlots;
+			bag.bagFamily = false;

 			local btype = select(2, GetContainerNumFreeSlots(bagID));
-			local r, g, b;
 			if RefProfessionColors[btype] then
-				r, g, b = unpack(RefProfessionColors[btype]);
+				local r, g, b = unpack(RefProfessionColors[btype]);
 				bag.bagFamily = {r, g, b};
-			else
-				r, g, b = 0,0,0
-				bag.bagFamily = false;
 			end

 			for i = 1, MAX_CONTAINER_ITEMS do
@@ -617,25 +608,27 @@ local ContainerFrame_UpdateLayout = function(self)
 					slot:SetSlotTemplate(true, 2, 0, 0, 0.45);
 					slot.Panel.Shadow:SetAttribute("shadowAlpha", 0.9)

-					if(slot.NewItemTexture) then
-						slot.NewItemTexture:SetTexture(nil);
-						slot.NewItemTexture:Hide()
+					if(not slot.NewItemTexture) then
+						slot.NewItemTexture = slot:CreateTexture(nil, "OVERLAY", 1);
 					end
+					slot.NewItemTexture:FillInner(slot);
+					slot.NewItemTexture:SetTexture(0,0,0,0);
+					slot.NewItemTexture:Hide()

-					if(slot.JunkIcon) then
-						slot.JunkIcon:SetTexture([[Interface\BUTTONS\UI-GroupLoot-Coin-Up]]);
-						slot.JunkIcon:Point("TOPLEFT", slot, "TOPLEFT", -4, 4);
+					if(not slot.JunkIcon) then
+						slot.JunkIcon = slot:CreateTexture(nil, "OVERLAY");
+						slot.JunkIcon:Size(16,16);
 					end
+					slot.JunkIcon:SetTexture([[Interface\BUTTONS\UI-GroupLoot-Coin-Up]]);
+					slot.JunkIcon:Point("TOPLEFT", slot, "TOPLEFT", -4, 4);

-					slot.iconTexture = _G[iconName];
-					slot.iconTexture:FillInner(slot);
-					slot.iconTexture:SetTexCoord(0.1, 0.9, 0.1, 0.9);
-
-					if(_G[questIcon]) then
-						slot.questIcon = _G[questIcon]
-					else
-						slot.questIcon = slot:CreateTexture(nil, "OVERLAY")
+					if(not slot.icon) then
+						slot.icon = slot:CreateTexture(nil, "BORDER");
 					end
+					slot.icon:FillInner(slot);
+					slot.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9);
+
+					slot.questIcon = _G[questIcon] or slot:CreateTexture(nil, "OVERLAY")
 					slot.questIcon:SetTexture(TEXTURE_ITEM_QUEST_BANG);
 					slot.questIcon:FillInner(slot);
 					slot.questIcon:SetTexCoord(0.1, 0.9, 0.1, 0.9);
@@ -650,11 +643,6 @@ local ContainerFrame_UpdateLayout = function(self)
 				slot:SetID(slotID);
 				slot:Size(buttonSize);

-				slot:SetBackdropColor(r, g, b, 0.6)
-				slot:SetBackdropBorderColor(r, g, b, 1)
-
-				bag:SlotUpdate(slotID);
-
 				if slot:GetPoint() then
 					slot:ClearAllPoints();
 				end
@@ -671,8 +659,13 @@ local ContainerFrame_UpdateLayout = function(self)
 					lastRowButton = slot;
 				end

-				lastButton = slot;
-			end
+				lastButton = slot;
+
+				slot:SetBackdropColor(1,0.3,0.3,0.6)
+				slot:SetBackdropBorderColor(1,0.3,0.3,1)
+
+				bag:SlotUpdate(slotID);
+			end
 		else
 			if(menu[i] and menu[i].GetInventorySlot) then
 				BankFrameItemButton_Update(menu[i])
@@ -740,6 +733,7 @@ local ReagentFrame_UpdateLayout = function(self)
 		if not bag[slotID] then
 			local slotName = ("%sSlot%d"):format(bagName, slotID)
 			local iconName = ("%sIconTexture"):format(slotName)
+			local questIcon = ("%sIconQuestTexture"):format(slotName)
 			local cdName = ("%sCooldown"):format(slotName)

 			slot = CreateFrame("CheckButton", slotName, bag, "ReagentBankItemButtonGenericTemplate");
@@ -747,19 +741,26 @@ local ReagentFrame_UpdateLayout = function(self)
 			slot:SetCheckedTexture(nil);
 			slot:RemoveTextures()
 			slot:SetSlotTemplate(true, 2, 0, 0, 0.5);
-
-			if(slot.NewItemTexture) then
-				slot.NewItemTexture:Hide()
-			end

-			if(slot.JunkIcon) then
-				slot.JunkIcon:SetTexture([[Interface\BUTTONS\UI-GroupLoot-Coin-Up]]);
-				slot.JunkIcon:Point("TOPLEFT", slot, "TOPLEFT", -4, 4);
-			end
+			slot.NewItemTexture = slot:CreateTexture(nil, "OVERLAY", 1);
+			slot.NewItemTexture:FillInner(slot);
+			slot.NewItemTexture:SetTexture(0,0,0,0);
+			slot.NewItemTexture:Hide()
+
+			slot.JunkIcon = slot:CreateTexture(nil, "OVERLAY");
+			slot.JunkIcon:Size(16,16);
+			slot.JunkIcon:SetTexture(0,0,0,0);
+			slot.JunkIcon:Point("TOPLEFT", slot, "TOPLEFT", -4, 4);
+
+			slot.icon = _G[iconName] or slot:CreateTexture(nil, "BORDER");
+			slot.icon:FillInner(slot);
+			slot.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9);
+
+			slot.questIcon = _G[questIcon] or slot:CreateTexture(nil, "OVERLAY")
+			slot.questIcon:SetTexture(TEXTURE_ITEM_QUEST_BANG);
+			slot.questIcon:FillInner(slot);
+			slot.questIcon:SetTexCoord(0.1, 0.9, 0.1, 0.9);

-			slot.iconTexture = _G[iconName];
-			slot.iconTexture:FillInner(slot);
-			slot.iconTexture:SetTexCoord(0.1, 0.9, 0.1, 0.9);
 			slot.cooldown = _G[cdName];

 			bag[slotID] = slot
@@ -769,7 +770,6 @@ local ReagentFrame_UpdateLayout = function(self)

 		slot:SetID(slotID);
 		slot:Size(buttonSize);
-		bag:SlotUpdate(slotID);

 		if slot:GetPoint() then
 			slot:ClearAllPoints();
@@ -790,7 +790,9 @@ local ReagentFrame_UpdateLayout = function(self)
 		lastButton = slot;

 		BankFrameItemButton_Update(slot);
-		BankFrameItemButton_UpdateLocked(slot)
+		BankFrameItemButton_UpdateLocked(slot);
+
+		bag:SlotUpdate(slotID);
 	end

 	self:Size(containerWidth, containerHeight);
@@ -1140,7 +1142,6 @@ do
 			if(bagID and slotID and self.Bags[bagID]) then
 				self.Bags[bagID]:SlotUpdate(slotID)
 			end
-			self:RefreshBags()
 		elseif(event == "BAG_UPDATE" or event == "EQUIPMENT_SETS_CHANGED") then
 			BuildEquipmentMap()
 			for id, bag in pairs(self.Bags) do
@@ -1395,8 +1396,7 @@ do
 		frame.sortButton = CreateFrame("Button", nil, frame)
 		frame.sortButton:Point("TOP", frame, "TOP", 0, -10)
 		frame.sortButton:Size(25, 25)
-		frame.sortButton:SetNormalTexture(ICON_CLEANUP)
-		StyleBagToolButton(frame.sortButton)
+		StyleBagToolButton(frame.sortButton, ICON_CLEANUP)
 		frame.sortButton.ttText = L["Sort Bags"]
 		frame.sortButton.altText = L["Filtered Cleanup"]
 		frame.sortButton:SetScript("OnEnter", Tooltip_Show)
@@ -1407,8 +1407,7 @@ do
 		frame.stackButton = CreateFrame("Button", nil, frame)
 		frame.stackButton:Point("LEFT", frame.sortButton, "RIGHT", 10, 0)
 		frame.stackButton:Size(25, 25)
-		frame.stackButton:SetNormalTexture(ICON_STACK)
-		StyleBagToolButton(frame.stackButton)
+		StyleBagToolButton(frame.stackButton, ICON_STACK)
 		frame.stackButton.ttText = L["Stack Items"]
 		frame.stackButton:SetScript("OnEnter", Tooltip_Show)
 		frame.stackButton:SetScript("OnLeave", Tooltip_Hide)
@@ -1418,8 +1417,7 @@ do
 		frame.vendorButton = CreateFrame("Button", nil, frame)
 		frame.vendorButton:Point("RIGHT", frame.sortButton, "LEFT", -10, 0)
 		frame.vendorButton:Size(25, 25)
-		frame.vendorButton:SetNormalTexture(ICON_VENDOR)
-		StyleBagToolButton(frame.vendorButton)
+		StyleBagToolButton(frame.vendorButton, ICON_VENDOR)
 		frame.vendorButton.ttText = L["Vendor Grays"]
 		frame.vendorButton.ttText2 = L["Hold Shift:"]
 		frame.vendorButton.ttText2desc = L["Delete Grays"]
@@ -1430,8 +1428,7 @@ do
 		frame.bagsButton = CreateFrame("Button", nil, frame)
 		frame.bagsButton:Point("RIGHT", frame.vendorButton, "LEFT", -10, 0)
 		frame.bagsButton:Size(25, 25)
-		frame.bagsButton:SetNormalTexture(ICON_BAGS)
-		StyleBagToolButton(frame.bagsButton)
+		StyleBagToolButton(frame.bagsButton, ICON_BAGS)
 		frame.bagsButton.ttText = L["Toggle Bags"]
 		frame.bagsButton:SetScript("OnEnter", Tooltip_Show)
 		frame.bagsButton:SetScript("OnLeave", Tooltip_Hide)
@@ -1447,8 +1444,7 @@ do
 		frame.transferButton = CreateFrame("Button", nil, frame)
 		frame.transferButton:Point("LEFT", frame.stackButton, "RIGHT", 10, 0)
 		frame.transferButton:Size(25, 25)
-		frame.transferButton:SetNormalTexture(ICON_TRANSFER)
-		StyleBagToolButton(frame.transferButton)
+		StyleBagToolButton(frame.transferButton, ICON_TRANSFER)
 		frame.transferButton.ttText = L["Stack Bags to Bank"]
 		frame.transferButton:SetScript("OnEnter", Tooltip_Show)
 		frame.transferButton:SetScript("OnLeave", Tooltip_Hide)
@@ -1546,8 +1542,7 @@ do
 		frame.sortButton = CreateFrame("Button", nil, frame)
 		frame.sortButton:Point("TOPRIGHT", frame, "TOP", 0, -10)
 		frame.sortButton:Size(25, 25)
-		frame.sortButton:SetNormalTexture(ICON_CLEANUP)
-		StyleBagToolButton(frame.sortButton)
+		StyleBagToolButton(frame.sortButton, ICON_CLEANUP)
 		frame.sortButton.ttText = L["Sort Bank"]
 		frame.sortButton.altText = L["Filtered Cleanup"]
 		frame.sortButton:SetScript("OnEnter", Tooltip_Show)
@@ -1556,8 +1551,7 @@ do
 		frame.stackButton = CreateFrame("Button", nil, frame)
 		frame.stackButton:Point("LEFT", frame.sortButton, "RIGHT", 10, 0)
 		frame.stackButton:Size(25, 25)
-		frame.stackButton:SetNormalTexture(ICON_STACK)
-		StyleBagToolButton(frame.stackButton)
+		StyleBagToolButton(frame.stackButton, ICON_STACK)
 		frame.stackButton.ttText = L["Stack Items"]
 		frame.stackButton:SetScript("OnEnter", Tooltip_Show)
 		frame.stackButton:SetScript("OnLeave", Tooltip_Hide)
@@ -1576,8 +1570,7 @@ do
 			frame.transferButton = CreateFrame("Button", nil, frame)
 			frame.transferButton:Point("LEFT", frame.stackButton, "RIGHT", 10, 0)
 			frame.transferButton:Size(25, 25)
-			frame.transferButton:SetNormalTexture(ICON_TRANSFER)
-			StyleBagToolButton(frame.transferButton)
+			StyleBagToolButton(frame.transferButton, ICON_TRANSFER)
 			frame.transferButton.ttText = L["Stack Bank to Bags"]
 			frame.transferButton:SetScript("OnEnter", Tooltip_Show)
 			frame.transferButton:SetScript("OnLeave", Tooltip_Hide)
@@ -1590,8 +1583,7 @@ do
 			frame.bagsButton = CreateFrame("Button", nil, frame)
 			frame.bagsButton:Point("RIGHT", frame.sortButton, "LEFT", -10, 0)
 			frame.bagsButton:Size(25, 25)
-			frame.bagsButton:SetNormalTexture(ICON_BAGS)
-			StyleBagToolButton(frame.bagsButton)
+			StyleBagToolButton(frame.bagsButton, ICON_BAGS)
 			frame.bagsButton.ttText = L["Toggle Bags"]
 			frame.bagsButton:SetScript("OnEnter", Tooltip_Show)
 			frame.bagsButton:SetScript("OnLeave", Tooltip_Hide)
@@ -1613,8 +1605,7 @@ do
 			frame.purchaseBagButton:Size(25, 25)
 			frame.purchaseBagButton:Point("RIGHT", frame.bagsButton, "LEFT", -10, 0)
 			frame.purchaseBagButton:SetFrameLevel(frame.purchaseBagButton:GetFrameLevel()+2)
-			frame.purchaseBagButton:SetNormalTexture(ICON_PURCHASE)
-			StyleBagToolButton(frame.purchaseBagButton)
+			StyleBagToolButton(frame.purchaseBagButton, ICON_PURCHASE)
 			frame.purchaseBagButton.ttText = L["Purchase"]
 			frame.purchaseBagButton:SetScript("OnEnter", Tooltip_Show)
 			frame.purchaseBagButton:SetScript("OnLeave", Tooltip_Hide)
@@ -1633,8 +1624,7 @@ do
 			frame.swapButton = CreateFrame("Button", nil, frame)
 			frame.swapButton:Point("TOPRIGHT", frame, "TOPRIGHT", -40, -10)
 			frame.swapButton:Size(25, 25)
-			frame.swapButton:SetNormalTexture(active_icon)
-			StyleBagToolButton(frame.swapButton)
+			StyleBagToolButton(frame.swapButton, active_icon)
 			frame.swapButton.ttText = L["Toggle Reagents Bank"]
 			frame.swapButton:SetScript("OnEnter", function(self)
 				GameTooltip:SetOwner(self:GetParent(),"ANCHOR_TOP",0,4)
@@ -1671,8 +1661,7 @@ do
 			frame.transferButton = CreateFrame("Button", nil, frame)
 			frame.transferButton:Point("LEFT", frame.stackButton, "RIGHT", 10, 0)
 			frame.transferButton:Size(25, 25)
-			frame.transferButton:SetNormalTexture(ICON_DEPOSIT)
-			StyleBagToolButton(frame.transferButton)
+			StyleBagToolButton(frame.transferButton, ICON_DEPOSIT)
 			frame.transferButton.ttText = L["Deposit All Reagents"]
 			frame.transferButton:SetScript("OnEnter", Tooltip_Show)
 			frame.transferButton:SetScript("OnLeave", Tooltip_Hide)
@@ -1807,7 +1796,6 @@ function MOD:BANKFRAME_OPENED()
 	if(not self.ReagentFrame) then
 		self:MakeBankOrReagent(true)
 	end
-	self.ReagentFrame:UpdateLayout()

 	if(self.ReagentFrame) then
 		self.ReagentFrame:UpdateLayout()
@@ -1965,6 +1953,4 @@ function MOD:Load()
 	self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED")

 	StackSplitFrame:SetFrameStrata("DIALOG")
-
-	self.BagFrame:RefreshBags()
 end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/plates/SVPlate.lua b/Interface/AddOns/SVUI/packages/plates/SVPlate.lua
index fe1f198..60410fc 100644
--- a/Interface/AddOns/SVUI/packages/plates/SVPlate.lua
+++ b/Interface/AddOns/SVUI/packages/plates/SVPlate.lua
@@ -58,7 +58,6 @@ local MOD = SV:NewPackage("SVPlate", L["NamePlates"]);
 LOCALIZED GLOBALS
 ##########################################################
 ]]--
-local SVUI_CLASS_COLORS = _G.SVUI_CLASS_COLORS
 local RAID_CLASS_COLORS = _G.RAID_CLASS_COLORS
 --[[
 ##########################################################
@@ -758,11 +757,10 @@ do
 	end

 	local function GetPlateReaction(plate)
-		local class, classToken, _
 		if plate.guid ~= nil then
-			class, classToken, _, _, _, _, _ = GetPlayerInfoByGUID(plate.guid)
-			if RAID_CLASS_COLORS[class] then
-				return class
+			local class, classToken, _, _, _, _, _ = GetPlayerInfoByGUID(plate.guid)
+			if RAID_CLASS_COLORS[classToken] then
+				return classToken
 			end
 		end

@@ -770,15 +768,17 @@ do
 		local r = floor(oldR * 100 + .5) * 0.01;
 		local g = floor(oldG * 100 + .5) * 0.01;
 		local b = floor(oldB * 100 + .5) * 0.01;
-		for class, _ in pairs(RAID_CLASS_COLORS) do
+		--print(plate.health:GetStatusBarColor())
+		for classToken, _ in pairs(RAID_CLASS_COLORS) do
 			local bb = b
-			if class == 'MONK' then
+			if classToken == 'MONK' then
 				bb = bb - 0.01
 			end
-			if RAID_CLASS_COLORS[class].r == r and RAID_CLASS_COLORS[class].g == g and RAID_CLASS_COLORS[class].b == bb then
-				return class
+			if RAID_CLASS_COLORS[classToken].r == r and RAID_CLASS_COLORS[classToken].g == g and RAID_CLASS_COLORS[classToken].b == bb then
+				return classToken
 			end
 		end
+
 		if (r + b + b) == 1.59 then
 			return 'TAPPED_NPC'
 		elseif g + b == 0 then
diff --git a/Interface/AddOns/SVUI/packages/stats/SVStats.lua b/Interface/AddOns/SVUI/packages/stats/SVStats.lua
index 104268f..e58ddf2 100644
--- a/Interface/AddOns/SVUI/packages/stats/SVStats.lua
+++ b/Interface/AddOns/SVUI/packages/stats/SVStats.lua
@@ -215,17 +215,21 @@ function MOD:NewAnchor(parent, maxCount, tipAnchor, isTop, customTemplate, isVer
 		strata = "MEDIUM"
 	end

-	MOD.Anchors[parent:GetName()] = parent;
+	local parentName = parent:GetName();
+
+	MOD.Anchors[parentName] = parent;
 	parent.holders = {};
 	parent.vertical = isVertical;
 	parent.numPoints = maxCount;
 	parent.anchor = tipAnchor;
 	parent.useIndex = activeIndex

+	local statName = parentName .. 'StatSlot';
+
 	for i = 1, maxCount do
 		local position = positionIndex[activeIndex][i]
 		if not parent.holders[position] then
-			parent.holders[position] = CreateFrame("Button", "DataText"..i, parent)
+			parent.holders[position] = CreateFrame("Button", statName..i, parent)
 			parent.holders[position]:RegisterForClicks("AnyUp")
 			parent.holders[position].barframe = CreateFrame("Frame", nil, parent.holders[position])
 			if(SV.db.SVStats.showBackground) then
@@ -284,8 +288,11 @@ function MOD:NewAnchor(parent, maxCount, tipAnchor, isTop, customTemplate, isVer
 				parent.holders[position].text:SetJustifyH("CENTER")
 				parent.holders[position].text:SetJustifyV("MIDDLE")
 			end
-		end
+		end
+		parent.holders[position].SlotKey = statName..i;
+		parent.holders[position].TokenKey = 738;
 		parent.holders[position].MenuList = {};
+		parent.holders[position].TokenList = {};
 		parent.holders[position]:Point(GrabPlot(parent, i, maxCount))
 	end
 	parent:SetScript("OnSizeChanged", UpdateAnchor)
@@ -352,6 +359,11 @@ do

 	local function _load(parent, name, config)
 		parent.StatParent = name
+
+		if config["init_handler"]then
+			config["init_handler"](parent)
+		end
+
 		if config["events"]then
 			for _, event in pairs(config["events"])do
 				parent:RegisterEvent(event)
@@ -384,10 +396,6 @@ do
 		end

 		parent:Show()
-
-		if config["init_handler"]then
-			config["init_handler"](parent)
-		end
 	end

 	local BG_OnUpdate = function(self)
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua b/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua
index 409b7e5..ff27b78 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua
@@ -77,25 +77,26 @@ local function TokenInquiry(id, weekly, capped)
 end

 local function TokensEventHandler(self, event,...)
-    if(not IsLoggedIn() or (not self)) then return end
-    local id = MOD.Accountant[playerRealm]["tokens"][playerName][self.TokenStatIndex] or 738;
+    if(not IsLoggedIn() or (not self)) then return end
+    local id = self.TokenKey or 738;
     local _, current, tex = GetCurrencyInfo(id)
     local currentText = ("\124T%s:12\124t %s"):format(tex, current);
     self.text:SetText(currentText)
 end

-local function AddToTokenMenu(self, id)
+local function AddToTokenMenu(parent, id)
 	local name, _, tex, _, _, _, _ = GetCurrencyInfo(id)
 	local itemName = "\124T"..tex..":12\124t "..name;
 	local fn = function()
-		MOD.Accountant[playerRealm]["tokens"][playerName][self.TokenStatIndex] = id;
-		TokensEventHandler(self)
+		MOD.Accountant[playerRealm]["tokens"][playerName][parent.SlotKey] = id;
+    parent.TokenKey = id
+		TokensEventHandler(parent)
 	end
-	tinsert(self.TokenMenuList, {text = itemName, func = fn});
+	tinsert(parent.TokenList, {text = itemName, func = fn});
 end

 local function CacheTokenData(self)
-    twipe(self.TokenMenuList)
+    twipe(self.TokenList)
     local prof1, prof2, archaeology, _, cooking = GetProfessions()
     if archaeology then
         AddToTokenMenu(self, 398)
@@ -216,19 +217,19 @@ local function Tokens_OnEnter(self)
 		TokenInquiry(399)
 	end
 	MOD.tooltip:AddLine(" ")
-  	MOD.tooltip:AddDoubleLine("[Shift + Click]", "Change Watched Token", 0,1,0, 0.5,1,0.5)
+  MOD.tooltip:AddDoubleLine("[Shift + Click]", "Change Watched Token", 0,1,0, 0.5,1,0.5)
 	MOD:ShowTip(true)
 end

 local function Tokens_OnClick(self, button)
   CacheTokenData(self);
-	SV.Dropdown:Open(self, self.TokenMenuList)
+	SV.Dropdown:Open(self, self.TokenList)
 end

 local function Tokens_OnInit(self)
-  self.TokenStatIndex = self:GetName()
-  self.TokenMenuList = {};
-  MOD.Accountant[playerRealm]["tokens"][playerName][self.TokenStatIndex] = MOD.Accountant[playerRealm]["tokens"][playerName][self.TokenStatIndex] or 738;
+  local key = self.SlotKey
+  MOD.Accountant[playerRealm]["tokens"][playerName][key] = MOD.Accountant[playerRealm]["tokens"][playerName][key] or 738;
+  self.TokenKey = MOD.Accountant[playerRealm]["tokens"][playerName][key]
   CacheTokenData(self);
 end

diff --git a/Interface/AddOns/SVUI/packages/tip/SVTip.lua b/Interface/AddOns/SVUI/packages/tip/SVTip.lua
index eab29da..4e0824e 100644
--- a/Interface/AddOns/SVUI/packages/tip/SVTip.lua
+++ b/Interface/AddOns/SVUI/packages/tip/SVTip.lua
@@ -85,7 +85,10 @@ local tooltips = {
 	WorldMapCompareTooltip3, DropDownList1MenuBackdrop,
 	DropDownList2MenuBackdrop, DropDownList3MenuBackdrop, BNToastFrame,
 	PetBattlePrimaryAbilityTooltip, PetBattlePrimaryUnitTooltip,
-	BattlePetTooltip, FloatingBattlePetTooltip, FloatingPetBattleAbilityTooltip
+	BattlePetTooltip, FloatingBattlePetTooltip, FloatingPetBattleAbilityTooltip,
+	GarrisonMissionMechanicTooltip, GarrisonFollowerTooltip,
+	GarrisonMissionMechanicFollowerCounterTooltip, GarrisonFollowerAbilityTooltip,
+	BuildingLevelTooltip
 }

 local classification = {
diff --git a/Interface/AddOns/SVUI/system/core.lua b/Interface/AddOns/SVUI/system/core.lua
index 518fb4a..29847c2 100644
--- a/Interface/AddOns/SVUI/system/core.lua
+++ b/Interface/AddOns/SVUI/system/core.lua
@@ -379,13 +379,6 @@ function SVUI:ToggleConfig()
     GameTooltip:Hide()
 end

-function SVUI:TaintHandler(taint, sourceName, sourceFunc)
-    if GetCVarBool('scriptErrors') ~= 1 then return end
-    local errorString = ("Error Captured: %s->%s->{%s}"):format(taint, sourceName or "Unknown", sourceFunc or "Unknown")
-    self:AddonMessage(errorString)
-    self:StaticPopup_Show("TAINT_RL")
-end
-
 function SVUI:VersionCheck()
     local minimumVersion = 5.0;
     --print(table.dump(self.safedata))
diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/alert.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/alert.lua
index 030bad2..cb48461 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/alert.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/alert.lua
@@ -27,6 +27,9 @@ local Schema = PLUGIN.Schema;
 OVERRIDES AND HOOKS
 ##########################################################
 ]]--
+local RING_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\FOLLOWER-RING]]
+local LVL_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\FOLLOWER-LEVEL]]
+
 local AlphaBlock = function() return end

 local _hook_DisableBackground = function(self)
@@ -328,7 +331,7 @@ local function AlertStyle()
 		    end
 	    	local color = ITEM_QUALITY_COLORS[itemRarity];
 	    	if(not self.IconSlot) then return end;
-			self.IconSlot:SetBackdropColor(color.r, color.g, color.b);
+			self.IconSlot:SetBackdropBorderColor(color.r, color.g, color.b);
 		end)
 	end

@@ -402,10 +405,9 @@ local function AlertStyle()
 			frame:DisableDrawLayer("BACKGROUND")

 			PLUGIN:ApplyAlertStyle(frame)
-			frame:AlertColor(0.28, 0.31, 0.32)
+			frame:AlertColor(0.37, 0.32, 0.29)

 			frame.IconBG:SetTexture('')
-			frame.Title:FontManager(nil, 12)
 			frame.Title:SetTextColor(1, 1, 1)

 			if(_G[frameName .. 'Glow']) then _G[frameName .. 'Glow']:Die() end
@@ -426,7 +428,6 @@ local function AlertStyle()
 			frame:AlertColor(0.75, 0.42, 0)

 			frame.Icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
-			frame.Title:FontManager(nil, 12)
 			frame.Title:SetTextColor(1, 1, 1)

 			if(_G[frameName .. 'Glow']) then _G[frameName .. 'Glow']:Die() end
@@ -447,7 +448,6 @@ local function AlertStyle()
 				PLUGIN:ApplyAlertStyle(frame, 2)

 				frame.FollowerBG:SetTexCoord(0.1, 0.9, 0.1, 0.9)
-				frame.Title:FontManager(nil, 12)
 				frame.Title:SetTextColor(1, 1, 1)

 				if(_G[frameName .. 'Glow']) then _G[frameName .. 'Glow']:Die() end
@@ -457,9 +457,19 @@ local function AlertStyle()
 			end

 			if(frame.PortraitFrame) then
-				frame.PortraitFrame.PortraitRing:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Unitframe\FOLLOWER-RING]])
+				--frame.PortraitFrame.PortraitRing:ClearAllPoints()
+				--frame.PortraitFrame.PortraitRing:SetPoint("TOPLEFT", frame.PortraitFrame, "TOPLEFT", -5, 10)
+				--frame.PortraitFrame.PortraitRing:SetPoint("BOTTOMRIGHT", frame.PortraitFrame, "BOTTOMRIGHT", 5, 0)
+				frame.PortraitFrame.PortraitRing:SetTexture(RING_TEXTURE)
 				frame.PortraitFrame.PortraitRingQuality:SetTexture('')
 				frame.PortraitFrame.LevelBorder:SetTexture('')
+				--frame.PortraitFrame.LevelBorder:SetTexture(LVL_TEXTURE)
+				if(not frame.PortraitFrame.LevelCallout) then
+					frame.PortraitFrame.LevelCallout = frame.PortraitFrame:CreateTexture(nil, 'BORDER')
+					frame.PortraitFrame.LevelCallout:SetAllPoints(frame.PortraitFrame)
+					frame.PortraitFrame.LevelCallout:SetTexture(LVL_TEXTURE)
+					frame.PortraitFrame.LevelBorder:SetDrawLayer('OVERLAY')
+				end
 			end
 		end
 	end
diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/garrison.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/garrison.lua
index 79bc5d4..65658a8 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/garrison.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/garrison.lua
@@ -29,9 +29,8 @@ local Schema = PLUGIN.Schema;
 HELPERS
 ##########################################################
 ]]--
-local GarrisonButtonList = {
-	"StartWorkOrderButton"
-};
+local RING_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\FOLLOWER-RING]]
+local LVL_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\FOLLOWER-LEVEL]]
 --[[
 ##########################################################
 STYLE
@@ -60,24 +59,72 @@ end

 local _hook_GarrisonFollowerListUpdate = function(self)
     local buttons = self.FollowerList.listScroll.buttons;
+    local followers = self.FollowerList.followers;
+    local followersList = self.FollowerList.followersList;
+    local numFollowers = #followersList;
+    local scrollFrame = self.FollowerList.listScroll;
+    local offset = HybridScrollFrame_GetOffset(scrollFrame);
     local numButtons = #buttons;

     for i = 1, numButtons do
         local button = buttons[i];
-        local picture = button.PortraitFrame.Portrait:GetTexture()
-        if(not button.Panel) then
-            button:RemoveTextures()
-            button:SetPanelTemplate('Blackout', true, 1, 0, 0)
-        end
+        local index = offset + i;
+        if(index <= numFollowers) then
+        	local follower = followers[followersList[index]];
+	        if(not button.Panel) then
+	            button:RemoveTextures()
+	            button:SetPanelTemplate('Blackout', true, 1, 0, 0)
+	            if(button.PortraitFrame) then
+	            	--button.PortraitFrame.PortraitRing:ClearAllPoints()
+					--button.PortraitFrame.PortraitRing:SetPoint("TOPLEFT", button.PortraitFrame, "TOPLEFT", -10, 10)
+					--button.PortraitFrame.PortraitRing:SetPoint("BOTTOMRIGHT", button.PortraitFrame, "BOTTOMRIGHT", 10, 0)
+	            	button.PortraitFrame.PortraitRing:SetTexture(RING_TEXTURE)
+					button.PortraitFrame.PortraitRingQuality:SetTexture('')
+					button.PortraitFrame.LevelBorder:SetTexture('')
+					if(not button.PortraitFrame.LevelCallout) then
+						button.PortraitFrame.LevelCallout = button.PortraitFrame:CreateTexture(nil, 'BORDER', 4)
+						button.PortraitFrame.LevelCallout:SetAllPoints(button.PortraitFrame)
+						button.PortraitFrame.LevelCallout:SetTexture(LVL_TEXTURE)
+						button.PortraitFrame.LevelBorder:SetDrawLayer('OVERLAY')
+					end
+				end
+	        end
+	        if(button.PortraitFrame) then
+		        if (follower.isCollected) then
+	            	local color = ITEM_QUALITY_COLORS[follower.quality];
+					button.PortraitFrame.PortraitRing:SetVertexColor(color.r, color.g, color.b)
+				else
+					button.PortraitFrame.PortraitRing:SetVertexColor(0.25, 0.25, 0.25)
+				end
+			end
+	    end
     end
 end

-local _hook_GarrisonFollowerPage_ShowFollower = function(self)
+local _hook_GarrisonFollowerPage_ShowFollower = function(self, followerID)
+	local followerInfo = C_Garrison.GetFollowerInfo(followerID);
     if(not self.XPBar.Panel) then
 	    self.XPBar:RemoveTextures()
 		self.XPBar:SetStatusBarTexture([[Interface\AddOns\SVUI\assets\artwork\Bars\DEFAULT]])
 		self.XPBar:SetFixedPanelTemplate("Bar")
 	end
+
+	if(self.PortraitFrame) then
+		local color = ITEM_QUALITY_COLORS[followerInfo.quality];
+		--self.PortraitFrame.PortraitRing:ClearAllPoints()
+		--self.PortraitFrame.PortraitRing:SetPoint("TOPLEFT", self.PortraitFrame, "TOPLEFT", -10, 10)
+		--self.PortraitFrame.PortraitRing:SetPoint("BOTTOMRIGHT", self.PortraitFrame, "BOTTOMRIGHT", 10, 0)
+        self.PortraitFrame.PortraitRing:SetTexture(RING_TEXTURE)
+		self.PortraitFrame.PortraitRingQuality:SetTexture('')
+		self.PortraitFrame.LevelBorder:SetTexture('')
+		if(not self.PortraitFrame.LevelCallout) then
+			self.PortraitFrame.LevelCallout = self.PortraitFrame:CreateTexture(nil, 'BORDER', 4)
+			self.PortraitFrame.LevelCallout:SetAllPoints(self.PortraitFrame)
+			self.PortraitFrame.LevelCallout:SetTexture(LVL_TEXTURE)
+			self.PortraitFrame.LevelBorder:SetDrawLayer('OVERLAY')
+		end
+		self.PortraitFrame.PortraitRing:SetVertexColor(color.r, color.g, color.b)
+	end

     for i=1, #self.AbilitiesFrame.Abilities do
         local abilityFrame = self.AbilitiesFrame.Abilities[i];
@@ -265,12 +312,9 @@ local function LoadGarrisonStyle()
     hooksecurefunc("GarrisonMissionFrame_SetItemRewardDetails", _hook_GarrisonMissionFrame_SetItemRewardDetails)

  	--print("Test")
-	for i = 1, #GarrisonButtonList do
-		local button = GarrisonCapacitiveDisplayFrame[GarrisonButtonList[i]]
-		if(button) then
-			button:RemoveTextures(true)
-			button:SetButtonTemplate()
-		end
+	if(GarrisonCapacitiveDisplayFrame.StartWorkOrderButton) then
+		GarrisonCapacitiveDisplayFrame.StartWorkOrderButton:RemoveTextures(true)
+		GarrisonCapacitiveDisplayFrame.StartWorkOrderButton:SetButtonTemplate()
 	end

 	--print("Test")