Quantcast

Some advanced type shit happening here

Steven Jackson [07-08-14 - 21:06]
Some advanced type shit happening here
Filename
Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_AuraBars/oUF_AuraBars.lua
Interface/AddOns/SVUI/packages/dock/SVDock.lua
Interface/AddOns/SVUI/packages/dock/common/toolbar.lua
Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua
Interface/AddOns/SVUI/packages/unit/common/aurabars.lua
Interface/AddOns/SVUI/packages/unit/common/auras.lua
Interface/AddOns/SVUI/packages/unit/common/media.lua
Interface/AddOns/SVUI/packages/unit/frames/all_units.lua
Interface/AddOns/SVUI/packages/unit/frames/basic/focus.lua
Interface/AddOns/SVUI/packages/unit/frames/basic/target.lua
Interface/AddOns/SVUI/system/system.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua
diff --git a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_AuraBars/oUF_AuraBars.lua b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_AuraBars/oUF_AuraBars.lua
index 5cc402c..0fed82a 100644
--- a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_AuraBars/oUF_AuraBars.lua
+++ b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_AuraBars/oUF_AuraBars.lua
@@ -1,3 +1,4 @@
+--[[ MODIFIED FOR SVUI BY MUNGLUNCH ]]--
 local _, ns = ...
 local oUF = oUF or ns.oUF
 assert(oUF, 'oUF_AuraBars was unable to locate oUF install.')
@@ -67,6 +68,45 @@ local function SetAnchors(self)
 	end
 end

+local function SetBackground(frame)
+	local btop = frame:CreateTexture(nil, "OVERLAY")
+	btop:SetTexture(0, 0, 0)
+	btop:SetPoint("TOPLEFT")
+	btop:SetPoint("TOPRIGHT")
+	btop:SetHeight(1)
+	local bbottom = frame:CreateTexture(nil, "OVERLAY")
+	bbottom:SetTexture(0, 0, 0)
+	bbottom:SetPoint("BOTTOMLEFT")
+	bbottom:SetPoint("BOTTOMRIGHT")
+	bbottom:SetHeight(1)
+	local bright = frame:CreateTexture(nil, "OVERLAY")
+	bright:SetTexture(0, 0, 0)
+	bright:SetPoint("TOPRIGHT")
+	bright:SetPoint("BOTTOMRIGHT")
+	bright:SetWidth(1)
+	local bleft = frame:CreateTexture(nil, "OVERLAY")
+	bleft:SetTexture(0, 0, 0)
+	bleft:SetPoint("TOPLEFT")
+	bleft:SetPoint("BOTTOMLEFT")
+	bleft:SetWidth(1)
+    frame:SetBackdrop({
+        bgFile = [[Interface\BUTTONS\WHITE8X8]],
+        edgeFile = [[Interface\BUTTONS\WHITE8X8]],
+        tile = false,
+        tileSize = 0,
+        edgeSize = 1,
+        insets =
+        {
+            left = 0,
+            right = 0,
+            top = 0,
+            bottom = 0,
+        },
+    })
+    frame:SetBackdropColor(0,0,0,0.25)
+    frame:SetBackdropBorderColor(0,0,0)
+end
+
 local function CreateAuraBar(oUF, anchor)
 	local auraBarParent = oUF.AuraBars

@@ -74,11 +114,7 @@ local function CreateAuraBar(oUF, anchor)
 	frame:SetHeight(auraBarParent.auraBarHeight or 20)
 	frame:SetWidth((auraBarParent.auraBarWidth or auraBarParent:GetWidth()) - (frame:GetHeight() + (auraBarParent.gap or 0)))
 	frame.anchor = anchor
-
-	local bg = frame:CreateTexture(nil, "BORDER")
-	bg:SetAllPoints(frame)
-	bg:SetTexture(0, 0, 0, 0.25)
-	frame.bg = bg
+	SetBackground(frame)

 	-- the main bar
 	local statusBar = CreateFrame("StatusBar", nil, frame)
@@ -108,15 +144,17 @@ local function CreateAuraBar(oUF, anchor)
 	spark:SetPoint('CENTER', statusBar:GetStatusBarTexture(), 'RIGHT')
 	statusBar.spark = spark

-	statusBar.iconHolder = CreateFrame('Button', nil, statusBar)
-	statusBar.iconHolder:SetHeight(frame:GetHeight())
-	statusBar.iconHolder:SetWidth(frame:GetHeight())
-	statusBar.iconHolder:SetPoint('BOTTOMRIGHT', frame, 'BOTTOMLEFT', -auraBarParent.gap, 0)
-	statusBar.iconHolder.__unit = oUF.unit
-	statusBar.iconHolder:SetScript('OnEnter', OnEnter)
-	statusBar.iconHolder:SetScript('OnLeave', OnLeave)
-	statusBar.iconHolder.UpdateTooltip = UpdateTooltip
-
+	local holder = CreateFrame('Button', nil, statusBar)
+	holder:SetHeight(frame:GetHeight())
+	holder:SetWidth(frame:GetHeight())
+	holder:SetPoint('BOTTOMRIGHT', frame, 'BOTTOMLEFT', -auraBarParent.gap, 0)
+	SetBackground(holder)
+	holder.__unit = oUF.unit
+	holder:SetScript('OnEnter', OnEnter)
+	holder:SetScript('OnLeave', OnLeave)
+	holder.UpdateTooltip = UpdateTooltip
+	statusBar.iconHolder = holder
+
 	statusBar.icon = statusBar.iconHolder:CreateTexture(nil, 'OVERLAY')
 	statusBar.icon:SetTexCoord(.1, .9, .1, .9)
 	statusBar.icon:SetAllPoints(statusBar.iconHolder)
@@ -141,7 +179,7 @@ local function CreateAuraBar(oUF, anchor)
 	statusBar.spellname:SetPoint('RIGHT', statusBar.spelltime, 'LEFT')

 	if auraBarParent.PostCreateBar then
-		auraBarParent.PostCreateBar(frame)
+		auraBarParent.PostCreateBar(statusBar)
 	end

 	return frame
diff --git a/Interface/AddOns/SVUI/packages/dock/SVDock.lua b/Interface/AddOns/SVUI/packages/dock/SVDock.lua
index a8af7c4..44ce579 100644
--- a/Interface/AddOns/SVUI/packages/dock/SVDock.lua
+++ b/Interface/AddOns/SVUI/packages/dock/SVDock.lua
@@ -2,20 +2,19 @@
 ##############################################################################
 _____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_       #
  ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__      #
-  __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____     #
-   ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____    #
-    ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____   #
-     _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____  #
-      __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ #
-       _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_#
-        ___\///////////___________\///___________\/////////_____\///////////_#
+	__\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____     #
+	 ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____    #
+		______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____   #
+		 _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____  #
+			__/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ #
+			 _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_#
+				___\///////////___________\///___________\/////////_____\///////////_#
 ##############################################################################
 S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SuperVillain, L = unpack(select(2, ...));
-local MOD = {};
-local LSM = LibStub("LibSharedMedia-3.0")
+local MOD = {}
 --[[
 ##########################################################
 LOCAL VARS
@@ -29,514 +28,379 @@ PRE VARS/FUNCTIONS
 ##########################################################
 ]]--
 local FadeUpdate = function()
-  if InCombatLockdown()then return end;
-  LeftSuperDock:Hide()
-  RightSuperDock:Hide()
-end;
+	if InCombatLockdown()then return end
+	LeftSuperDock:Hide()
+	RightSuperDock:Hide()
+end

 local function SetSuperDockStyle(dock)
-  if dock.backdrop then return end;
-  local backdrop = CreateFrame("Frame", nil, dock)
-  backdrop:SetAllPoints(dock)
-  backdrop:SetFrameStrata("BACKGROUND")
-  backdrop.bg = backdrop:CreateTexture(nil, "BORDER")
-  backdrop.bg:FillInner(backdrop)
-  backdrop.bg:SetTexture(1, 1, 1, 1)
-  backdrop.bg:SetGradientAlpha("VERTICAL", 0, 0, 0, 0.8, 0, 0, 0, 0)
-  backdrop.left = backdrop:CreateTexture(nil, "OVERLAY")
-  backdrop.left:SetTexture(1, 1, 1, 1)
-  backdrop.left:Point("TOPLEFT", 1, -1)
-  backdrop.left:Point("BOTTOMLEFT", -1, 1)
-  backdrop.left:Width(4)
-  backdrop.left:SetGradientAlpha("VERTICAL", 0, 0, 0, 1, 0, 0, 0, 0)
-  backdrop.right = backdrop:CreateTexture(nil, "OVERLAY")
-  backdrop.right:SetTexture(1, 1, 1, 1)
-  backdrop.right:Point("TOPRIGHT", -1, -1)
-  backdrop.right:Point("BOTTOMRIGHT", -1, 1)
-  backdrop.right:Width(4)
-  backdrop.right:SetGradientAlpha("VERTICAL", 0, 0, 0, 1, 0, 0, 0, 0)
-  backdrop.bottom = backdrop:CreateTexture(nil, "OVERLAY")
-  backdrop.bottom:SetTexture(0, 0, 0, 1)
-  backdrop.bottom:Point("BOTTOMLEFT", 1, 1)
-  backdrop.bottom:Point("BOTTOMRIGHT", -1, 1)
-  backdrop.bottom:Height(4)
-  backdrop.top = backdrop:CreateTexture(nil, "OVERLAY")
-  backdrop.top:SetTexture(0, 0, 0, 0)
-  backdrop.top:Point("TOPLEFT", 1, -1)
-  backdrop.top:Point("TOPRIGHT", -1, 1)
-  backdrop.top:SetAlpha(0)
-  backdrop.top:Height(1)
-  return backdrop
-end;
-
-local function HearthTime()
-  local start,duration = GetItemCooldown(6948)
-  local expires = duration - (GetTime() - start)
-  if expires > 0.05 then
-    local timeLeft = 0;
-    local calc = 0;
-    if expires < 4 then
-      return format("|cffff0000%.1f|r", expires)
-    elseif expires < 60 then
-      return format("|cffffff00%d|r", floor(expires))
-    elseif expires < 3600 then
-      timeLeft = ceil(expires / 60);
-      calc = floor((expires / 60) + .5);
-      return format("|cffff9900%dm|r", timeLeft)
-    elseif expires < 86400 then
-      timeLeft = ceil(expires / 3600);
-      calc = floor((expires / 3600) + .5);
-      return format("|cff66ffff%dh|r", timeLeft)
-    else
-      timeLeft = ceil(expires / 86400);
-      calc = floor((expires / 86400) + .5);
-      return format("|cff6666ff%dd|r", timeLeft)
-    end
-  else
-    return "|cff6666ffReady|r"
-  end
-end;
-
-local function Hearth_OnEnter(self, ...)
-  if InCombatLockdown() then return end;
-  self.glow:Show()
-  self:SetPanelColor("highlight")
-  if SVUI_Cache["Dock"].LeftSuperDockFaded  == true then
-    LeftSuperDock:Show()
-    UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1)
-  end;
-  if SVUI_Cache["Dock"].RightSuperDockFaded  == true then
-    RightSuperDock:Show()
-    UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1)
-  end;
-  GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4)
-  GameTooltip:ClearLines()
-  local remaining = HearthTime()
-  GameTooltip:AddLine(L["Hearthstone"], 1, 1, 1)
-  GameTooltip:AddDoubleLine(L["Time Remaining"], remaining, 1, 1, 1, 0, 1, 1)
-  GameTooltip:Show()
-end;
-
-local function Hearth_OnLeave(self, ...)
-  if InCombatLockdown() then return end;
-  self.glow:Hide()
-  self:SetPanelColor("special")
-  if SVUI_Cache["Dock"].LeftSuperDockFaded  == true then
-    UIFrameFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0)
-    LeftSuperDock.fadeInfo.finishedFunc = LeftSuperDock.fadeFunc
-  end;
-  if SVUI_Cache["Dock"].RightSuperDockFaded  == true then
-    UIFrameFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0)
-    RightSuperDock.fadeInfo.finishedFunc = RightSuperDock.fadeFunc
-  end;
-  GameTooltip:Hide()
-end;
+	if dock.backdrop then return end
+	local backdrop = CreateFrame("Frame", nil, dock)
+	backdrop:SetAllPoints(dock)
+	backdrop:SetFrameStrata("BACKGROUND")
+	backdrop.bg = backdrop:CreateTexture(nil, "BORDER")
+	backdrop.bg:FillInner(backdrop)
+	backdrop.bg:SetTexture(1, 1, 1, 1)
+	backdrop.bg:SetGradientAlpha("VERTICAL", 0, 0, 0, 0.8, 0, 0, 0, 0)
+	backdrop.left = backdrop:CreateTexture(nil, "OVERLAY")
+	backdrop.left:SetTexture(1, 1, 1, 1)
+	backdrop.left:Point("TOPLEFT", 1, -1)
+	backdrop.left:Point("BOTTOMLEFT", -1, 1)
+	backdrop.left:Width(4)
+	backdrop.left:SetGradientAlpha("VERTICAL", 0, 0, 0, 1, 0, 0, 0, 0)
+	backdrop.right = backdrop:CreateTexture(nil, "OVERLAY")
+	backdrop.right:SetTexture(1, 1, 1, 1)
+	backdrop.right:Point("TOPRIGHT", -1, -1)
+	backdrop.right:Point("BOTTOMRIGHT", -1, 1)
+	backdrop.right:Width(4)
+	backdrop.right:SetGradientAlpha("VERTICAL", 0, 0, 0, 1, 0, 0, 0, 0)
+	backdrop.bottom = backdrop:CreateTexture(nil, "OVERLAY")
+	backdrop.bottom:SetTexture(0, 0, 0, 1)
+	backdrop.bottom:Point("BOTTOMLEFT", 1, 1)
+	backdrop.bottom:Point("BOTTOMRIGHT", -1, 1)
+	backdrop.bottom:Height(4)
+	backdrop.top = backdrop:CreateTexture(nil, "OVERLAY")
+	backdrop.top:SetTexture(0, 0, 0, 0)
+	backdrop.top:Point("TOPLEFT", 1, -1)
+	backdrop.top:Point("TOPRIGHT", -1, 1)
+	backdrop.top:SetAlpha(0)
+	backdrop.top:Height(1)
+	return backdrop
+end

 local function Dock_OnEnter(self, ...)
-  if InCombatLockdown() then return end;
-  self:SetPanelColor("highlight")
-  if SVUI_Cache["Dock"].LeftSuperDockFaded  == true then
-    LeftSuperDock:Show()
-    UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1)
-  end;
-  if SVUI_Cache["Dock"].RightSuperDockFaded  == true then
-    RightSuperDock:Show()
-    UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1)
-  end;
-  GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4)
-  GameTooltip:ClearLines()
-  GameTooltip:AddLine(L["Toggle Docks"], 1, 1, 1)
-  GameTooltip:Show()
-end;
+	if InCombatLockdown() then return end
+	self:SetPanelColor("highlight")
+	if SVUI_Cache["Dock"].LeftSuperDockFaded  == true then
+		LeftSuperDock:Show()
+		UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1)
+	end
+	if SVUI_Cache["Dock"].RightSuperDockFaded  == true then
+		RightSuperDock:Show()
+		UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1)
+	end
+	GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4)
+	GameTooltip:ClearLines()
+	GameTooltip:AddLine(L["Toggle Docks"], 1, 1, 1)
+	GameTooltip:Show()
+end

 local function Dock_OnLeave(self, ...)
-  if InCombatLockdown() then return end;
-  self:SetPanelColor("special")
-  if SVUI_Cache["Dock"].LeftSuperDockFaded  == true then
-    UIFrameFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0)
-    LeftSuperDock.fadeInfo.finishedFunc = LeftSuperDock.fadeFunc
-  end;
-  if SVUI_Cache["Dock"].RightSuperDockFaded  == true then
-    UIFrameFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0)
-    RightSuperDock.fadeInfo.finishedFunc = RightSuperDock.fadeFunc
-  end;
-  GameTooltip:Hide()
-end;
-
-local function DockCall_OnEnter(self, ...)
-  if InCombatLockdown() then return end;
-  self:SetPanelColor("highlight")
-  self.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro))
-  if SVUI_Cache["Dock"].LeftSuperDockFaded  == true then
-    LeftSuperDock:Show()
-    UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1)
-  end;
-  if SVUI_Cache["Dock"].RightSuperDockFaded  == true then
-    RightSuperDock:Show()
-    UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1)
-  end;
-  GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4)
-  GameTooltip:ClearLines()
-  GameTooltip:AddLine(L["Show / Hide Phone Lines"], 1, 1, 1)
-  GameTooltip:Show()
-end;
-
-local function DockCall_OnLeave(self, ...)
-  if InCombatLockdown() then return end;
-  local color = self.stateColor
-  self:SetPanelColor(unpack(color))
-  self.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
-  GameTooltip:Hide()
-end;
+	if InCombatLockdown() then return end
+	self:SetPanelColor("special")
+	if SVUI_Cache["Dock"].LeftSuperDockFaded  == true then
+		UIFrameFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0)
+		LeftSuperDock.fadeInfo.finishedFunc = LeftSuperDock.fadeFunc
+	end
+	if SVUI_Cache["Dock"].RightSuperDockFaded  == true then
+		UIFrameFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0)
+		RightSuperDock.fadeInfo.finishedFunc = RightSuperDock.fadeFunc
+	end
+	GameTooltip:Hide()
+end

 local function Dock_OnClick(self)
-  GameTooltip:Hide()
-  if SVUI_Cache["Dock"].LeftSuperDockFaded  then
-    SVUI_Cache["Dock"].LeftSuperDockFaded  = false;
-    UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1)
-  else
-    SVUI_Cache["Dock"].LeftSuperDockFaded  = true;
-    UIFrameFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0)
-    LeftSuperDock.fadeInfo.finishedFunc = LeftSuperDock.fadeFunc
-  end;
-  if SVUI_Cache["Dock"].RightSuperDockFaded  then
-    SVUI_Cache["Dock"].RightSuperDockFaded  = false;
-    UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1)
-  else
-    SVUI_Cache["Dock"].RightSuperDockFaded  = true;
-    UIFrameFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0)
-    RightSuperDock.fadeInfo.finishedFunc = RightSuperDock.fadeFunc
-  end
-end;
+	GameTooltip:Hide()
+	if SVUI_Cache["Dock"].LeftSuperDockFaded  then
+		SVUI_Cache["Dock"].LeftSuperDockFaded  = false;
+		UIFrameFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1)
+	else
+		SVUI_Cache["Dock"].LeftSuperDockFaded  = true;
+		UIFrameFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0)
+		LeftSuperDock.fadeInfo.finishedFunc = LeftSuperDock.fadeFunc
+	end
+	if SVUI_Cache["Dock"].RightSuperDockFaded  then
+		SVUI_Cache["Dock"].RightSuperDockFaded  = false;
+		UIFrameFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1)
+	else
+		SVUI_Cache["Dock"].RightSuperDockFaded  = true;
+		UIFrameFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0)
+		RightSuperDock.fadeInfo.finishedFunc = RightSuperDock.fadeFunc
+	end
+end

 local function Button_OnEnter(self, ...)
-  self:SetPanelColor("highlight")
-  self.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro))
-  GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4)
-  GameTooltip:ClearLines()
-  GameTooltip:AddLine(self.TText, 1, 1, 1)
-  GameTooltip:Show()
-end;
+	self:SetPanelColor("highlight")
+	self.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro))
+	GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4)
+	GameTooltip:ClearLines()
+	GameTooltip:AddLine(self.TText, 1, 1, 1)
+	GameTooltip:Show()
+end

 local function Button_OnLeave(self, ...)
-  self:SetPanelColor("special")
-  self.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
-  GameTooltip:Hide()
-end;
+	self:SetPanelColor("special")
+	self.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
+	GameTooltip:Hide()
+end
 --[[
 ##########################################################
 CORE FUNCTIONS
 ##########################################################
 ]]--
 function MOD:UpdateSuperDock()
-  _G["LeftSuperDock"]:Size(MOD.db.dockLeftWidth, MOD.db.dockLeftHeight);
-  _G["SuperDockAlertLeft"]:Width(MOD.db.dockLeftWidth);
-  _G["SuperDockWindowLeft"]:Size(MOD.db.dockLeftWidth, MOD.db.dockLeftHeight);
-  _G["RightSuperDock"]:Size(MOD.db.dockRightWidth, MOD.db.dockRightHeight);
-  _G["SuperDockAlertRight"]:Width(MOD.db.dockRightWidth);
-  _G["SuperDockWindowRight"]:Size(MOD.db.dockRightWidth, MOD.db.dockRightHeight);
-  MOD:BottomPanelVisibility();
-  MOD:TopPanelVisibility();
-  MOD:UpdateDockBackdrops();
-  MOD:ReloadDocklets()
-end;
+	_G["LeftSuperDock"]:Size(MOD.db.dockLeftWidth, MOD.db.dockLeftHeight);
+	_G["SuperDockAlertLeft"]:Width(MOD.db.dockLeftWidth);
+	_G["SuperDockWindowLeft"]:Size(MOD.db.dockLeftWidth, MOD.db.dockLeftHeight);
+	_G["RightSuperDock"]:Size(MOD.db.dockRightWidth, MOD.db.dockRightHeight);
+	_G["SuperDockAlertRight"]:Width(MOD.db.dockRightWidth);
+	_G["SuperDockWindowRight"]:Size(MOD.db.dockRightWidth, MOD.db.dockRightHeight);
+	MOD:BottomPanelVisibility();
+	MOD:TopPanelVisibility();
+	MOD:UpdateDockBackdrops();
+	MOD:ReloadDocklets()
+end

 function MOD:DockAlertLeftOpen(child)
-  local size = MOD.db.buttonSize or 22;
-  SuperDockAlertLeft:Height(size)
-  child:ClearAllPoints()
-  child:SetAllPoints(SuperDockAlertLeft)
-end;
+	local size = MOD.db.buttonSize or 22;
+	SuperDockAlertLeft:Height(size)
+	child:ClearAllPoints()
+	child:SetAllPoints(SuperDockAlertLeft)
+end

 function MOD:DockAlertLeftClose()
-  SuperDockAlertLeft:Height(1)
-end;
+	SuperDockAlertLeft:Height(1)
+end

 function MOD:DockAlertRightOpen(child)
-  local size = MOD.db.buttonSize or 22;
-  SuperDockAlertRight:Height(size)
-  child:ClearAllPoints()
-  child:SetAllPoints(SuperDockAlertRight)
-end;
+	local size = MOD.db.buttonSize or 22;
+	SuperDockAlertRight:Height(size)
+	child:ClearAllPoints()
+	child:SetAllPoints(SuperDockAlertRight)
+end

 function MOD:DockAlertRightClose()
-  SuperDockAlertRight:Height(1)
-end;
+	SuperDockAlertRight:Height(1)
+end

 function MOD:UpdateDockBackdrops()
-  if MOD.db.rightDockBackdrop then
-    RightSuperDock.backdrop:Show()
-    RightSuperDock.backdrop:ClearAllPoints()
-    RightSuperDock.backdrop:WrapOuter(RightSuperDock, 4, 4)
-  else
-    RightSuperDock.backdrop:Hide()
-  end
-  if MOD.db.leftDockBackdrop then
-    LeftSuperDock.backdrop:Show()
-    LeftSuperDock.backdrop:ClearAllPoints()
-    LeftSuperDock.backdrop:WrapOuter(LeftSuperDock, 4, 4)
-  else
-    LeftSuperDock.backdrop:Hide()
-  end
-end;
+	if MOD.db.rightDockBackdrop then
+		RightSuperDock.backdrop:Show()
+		RightSuperDock.backdrop:ClearAllPoints()
+		RightSuperDock.backdrop:WrapOuter(RightSuperDock, 4, 4)
+	else
+		RightSuperDock.backdrop:Hide()
+	end
+	if MOD.db.leftDockBackdrop then
+		LeftSuperDock.backdrop:Show()
+		LeftSuperDock.backdrop:ClearAllPoints()
+		LeftSuperDock.backdrop:WrapOuter(LeftSuperDock, 4, 4)
+	else
+		LeftSuperDock.backdrop:Hide()
+	end
+end

 function MOD:BottomPanelVisibility()
-  if MOD.db.bottomPanel then
-    MOD.BottomPanel:Show()
-  else
-    MOD.BottomPanel:Hide()
-  end
-end;
+	if MOD.db.bottomPanel then
+		MOD.BottomPanel:Show()
+	else
+		MOD.BottomPanel:Hide()
+	end
+end

 function MOD:TopPanelVisibility()
-  if MOD.db.topPanel then
-    MOD.TopPanel:Show()
-  else
-    MOD.TopPanel:Hide()
-  end
-end;
+	if MOD.db.topPanel then
+		MOD.TopPanel:Show()
+	else
+		MOD.TopPanel:Hide()
+	end
+end

 function HideSuperDocks()
-  Dock_OnClick(LeftDockToggleButton)
-end;
+	Dock_OnClick(LeftDockToggleButton)
+end

 function MOD:CreateSuperBorders()
-  local texture = [[Interface\AddOns\SVUI\assets\artwork\Template\BUTTON]];
-
-  local TopPanel = CreateFrame("Frame", "SVUITopPanel", SuperVillain.UIParent)
-  TopPanel:Point("TOPLEFT", SuperVillain.UIParent, "TOPLEFT", -1, 1)
-  TopPanel:Point("TOPRIGHT", SuperVillain.UIParent, "TOPRIGHT", 1, 1)
-  TopPanel:Height(14)
-  TopPanel:SetBackdrop({bgFile = texture, edgeFile = [[Interface\BUTTONS\WHITE8X8]], tile = false, tileSize = 0, edgeSize = 1, insets = {left = 0, right = 0, top = 0, bottom = 0}})
-  TopPanel:SetBackdropColor(unpack(SuperVillain.Media.color.special))
-  TopPanel:SetBackdropBorderColor(0,0,0,1)
-  TopPanel:SetFrameLevel(0)
-  TopPanel:SetFrameStrata('BACKGROUND')
-  MOD.TopPanel = TopPanel;
-  MOD.TopPanel:SetScript("OnShow", function(self)
-    self:SetFrameLevel(0)
-    self:SetFrameStrata('BACKGROUND')
-  end)
-  MOD:TopPanelVisibility()
-
-  local BottomPanel = CreateFrame("Frame", "SVUIBottomPanel", SuperVillain.UIParent)
-  BottomPanel:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", -1, -1)
-  BottomPanel:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", 1, -1)
-  BottomPanel:Height(14)
-  BottomPanel:SetBackdrop({bgFile = texture, edgeFile = [[Interface\BUTTONS\WHITE8X8]], tile = false, tileSize = 0, edgeSize = 1, insets = {left = 0, right = 0, top = 0, bottom = 0}})
-  BottomPanel:SetBackdropColor(unpack(SuperVillain.Media.color.special))
-  BottomPanel:SetBackdropBorderColor(0,0,0,1)
-  BottomPanel:SetFrameLevel(0)
-  BottomPanel:SetFrameStrata('BACKGROUND')
-  MOD.BottomPanel = BottomPanel;
-  MOD.BottomPanel:SetScript("OnShow", function(self)
-    self:SetFrameLevel(0)
-    self:SetFrameStrata('BACKGROUND')
-  end)
-  MOD:BottomPanelVisibility()
-end;
+	local texture = [[Interface\AddOns\SVUI\assets\artwork\Template\BUTTON]];
+
+	local TopPanel = CreateFrame("Frame", "SVUITopPanel", SuperVillain.UIParent)
+	TopPanel:Point("TOPLEFT", SuperVillain.UIParent, "TOPLEFT", -1, 1)
+	TopPanel:Point("TOPRIGHT", SuperVillain.UIParent, "TOPRIGHT", 1, 1)
+	TopPanel:Height(14)
+	TopPanel:SetBackdrop({bgFile = texture, edgeFile = [[Interface\BUTTONS\WHITE8X8]], tile = false, tileSize = 0, edgeSize = 1, insets = {left = 0, right = 0, top = 0, bottom = 0}})
+	TopPanel:SetBackdropColor(unpack(SuperVillain.Media.color.special))
+	TopPanel:SetBackdropBorderColor(0,0,0,1)
+	TopPanel:SetFrameLevel(0)
+	TopPanel:SetFrameStrata('BACKGROUND')
+	MOD.TopPanel = TopPanel;
+	MOD.TopPanel:SetScript("OnShow", function(self)
+		self:SetFrameLevel(0)
+		self:SetFrameStrata('BACKGROUND')
+	end)
+	MOD:TopPanelVisibility()
+
+	local BottomPanel = CreateFrame("Frame", "SVUIBottomPanel", SuperVillain.UIParent)
+	BottomPanel:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", -1, -1)
+	BottomPanel:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", 1, -1)
+	BottomPanel:Height(14)
+	BottomPanel:SetBackdrop({bgFile = texture, edgeFile = [[Interface\BUTTONS\WHITE8X8]], tile = false, tileSize = 0, edgeSize = 1, insets = {left = 0, right = 0, top = 0, bottom = 0}})
+	BottomPanel:SetBackdropColor(unpack(SuperVillain.Media.color.special))
+	BottomPanel:SetBackdropBorderColor(0,0,0,1)
+	BottomPanel:SetFrameLevel(0)
+	BottomPanel:SetFrameStrata('BACKGROUND')
+	MOD.BottomPanel = BottomPanel;
+	MOD.BottomPanel:SetScript("OnShow", function(self)
+		self:SetFrameLevel(0)
+		self:SetFrameStrata('BACKGROUND')
+	end)
+	MOD:BottomPanelVisibility()
+end

 function MOD:CreateDockPanels()
-  local leftWidth = MOD.db.dockLeftWidth or 350;
-  local leftHeight = MOD.db.dockLeftHeight or 180;
-  local rightWidth = MOD.db.dockRightWidth or 350;
-  local rightHeight = MOD.db.dockRightHeight or 180;
-  local buttonsize = MOD.db.buttonSize or 22;
-  local spacing = MOD.db.buttonSpacing or 4;
-  local STATS = SuperVillain.Registry:Expose("SVStats");
-
-  local leftbutton = CreateFrame("Button", "LeftSuperDockToggleButton", SuperVillain.UIParent)
-  leftbutton:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", 1, 2)
-  leftbutton:Size(buttonsize, buttonsize)
-  leftbutton:SetFramedButtonTemplate()
-
-  leftbutton.icon = leftbutton:CreateTexture(nil, "OVERLAY", nil, 0)
-  leftbutton.icon:FillInner(leftbutton,2,2)
-  leftbutton.icon:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\SVUI-EMBLEM")
-
-  leftbutton:RegisterForClicks("AnyUp")
-  leftbutton:SetScript("OnEnter", Dock_OnEnter)
-  leftbutton:SetScript("OnLeave", Dock_OnLeave)
-  leftbutton:SetScript("OnClick", Dock_OnClick)
-
-  local toolbarLeft = CreateFrame("Button", "SuperDockToolBarLeft", SuperVillain.UIParent)
-  toolbarLeft:Point("LEFT", leftbutton, "RIGHT", spacing, 0)
-  toolbarLeft:Width(1)
-  toolbarLeft:Height(buttonsize)
-  toolbarLeft.currentSize = buttonsize + 4;
-
-  local leftToolButton = CreateFrame("Button", "LeftToolBarButton", toolbarLeft)
-  leftToolButton:Point("LEFT", toolbarLeft, "LEFT", 3, 0)
-  leftToolButton:Size(buttonsize, buttonsize)
-  leftToolButton:SetFramedButtonTemplate()
-  leftToolButton.icon = leftToolButton:CreateTexture(nil, "OVERLAY")
-  leftToolButton.icon:FillInner(leftToolButton,2,2)
-  leftToolButton.icon:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Icons\DOCK-CALL]])
-  leftToolButton.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
-  leftToolButton.stateColor = SuperVillain.Media.gradient.special
-  leftToolButton:RegisterForClicks("AnyUp")
-  leftToolButton:SetScript("OnEnter", DockCall_OnEnter)
-  leftToolButton:SetScript("OnLeave", DockCall_OnLeave)
-  leftToolButton:SetScript("OnShow", function(self)
-    local size = SuperDockToolBarLeft.currentSize;
-    local parent = self:GetParent()
-    parent:SetWidth(size)
-  end)
-  leftToolButton:Hide()
-
-  local leftstation = CreateFrame("Frame", "SuperDockChatTabBar", SuperVillain.UIParent)
-  leftstation:SetFrameStrata("BACKGROUND")
-  leftstation:Size(leftWidth - buttonsize, buttonsize)
-  leftstation:Point("LEFT", toolbarLeft, "RIGHT", spacing, 0)
-  leftstation:SetFrameLevel(leftstation:GetFrameLevel() + 2)
-  leftstation.currentSize = buttonsize;
-
-  local leftdock = CreateFrame("Frame", "LeftSuperDock", SuperVillain.UIParent)
-  leftdock:SetFrameStrata("BACKGROUND")
-  leftdock:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", 1, buttonsize + 10)
-  leftdock:Size(leftWidth, leftHeight)
-  SuperVillain:SetSVMovable(leftdock, "LeftDock_MOVE", L["Left Dock"])
-
-  local leftalert = CreateFrame("Frame", "SuperDockAlertLeft", leftdock)
-  leftalert:SetFrameStrata("BACKGROUND")
-  leftalert:Size(leftWidth, 1)
-  leftalert:Point("BOTTOMRIGHT", leftdock, "BOTTOMRIGHT",0, 0)
-  leftalert:SetFrameLevel(leftalert:GetFrameLevel() + 2)
-
-  local leftwindow = CreateFrame("Frame", "SuperDockWindowLeft", leftdock)
-  leftwindow:SetFrameStrata("BACKGROUND")
-  leftwindow:Point("BOTTOMRIGHT", leftalert, "TOPRIGHT", 0, 0)
-  leftwindow:Size(leftWidth, leftHeight)
-  leftdock.backdrop = SetSuperDockStyle(leftwindow)
-
-  LeftSuperDock.fadeFunc = FadeUpdate;
-
-  local rightbutton = CreateFrame("Button", "RightSuperDockToggleButton", SuperVillain.UIParent)
-  rightbutton:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", -1, 2)
-  rightbutton:Size(buttonsize, buttonsize)
-  rightbutton:SetFramedButtonTemplate()
-  rightbutton.icon = rightbutton:CreateTexture(nil, "OVERLAY")
-  rightbutton.icon:FillInner(rightbutton,2,2)
-  rightbutton.icon:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Icons\DOCK-HENCHMAN]])
-  rightbutton.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
-  rightbutton.TText = "Call Henchman!"
-  rightbutton:RegisterForClicks("AnyUp")
-  rightbutton:SetScript("OnEnter", Button_OnEnter)
-  rightbutton:SetScript("OnLeave", Button_OnLeave)
-  rightbutton:SetScript("OnClick", function()SuperVillain:ToggleHenchman()end)
-
-  local hearth = CreateFrame("Button", "RightSuperDockHearthButton", SuperVillain.UIParent, "SecureActionButtonTemplate")
-  hearth:Point("RIGHT", rightbutton, "LEFT", -spacing, 0)
-  hearth:Size(buttonsize, buttonsize)
-  hearth:SetFramedButtonTemplate()
-
-  hearth.icon = hearth:CreateTexture(nil, "OVERLAY", nil, 0)
-  hearth.icon:FillInner(hearth,2,2)
-  hearth.icon:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\DOCK-HEARTH")
-  hearth.icon:SetTexCoord(0,0.5,0,1)
-  hearth.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
-
-  hearth.glow = hearth:CreateTexture(nil, "OVERLAY", nil, 2)
-  hearth.glow:FillInner(hearth,2,2)
-  hearth.glow:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\DOCK-HEARTH")
-  hearth.glow:SetTexCoord(0.5,1,0,1)
-  hearth.glow:Hide()
-
-  hearth:SetAttribute("type","item")
-  hearth:SetAttribute("item","Hearthstone")
-
-  hearth:SetScript("OnEnter", Hearth_OnEnter)
-  hearth:SetScript("OnLeave", Hearth_OnLeave)
-
-  local toolbarRight = CreateFrame("Button", "SuperDockToolBarRight", SuperVillain.UIParent)
-  toolbarRight:Point("RIGHT", hearth, "LEFT", -spacing, 0)
-  toolbarRight:Size(1, buttonsize)
-  toolbarRight.currentSize = buttonsize;
-
-  local macrobar = CreateFrame("Button", "SuperDockMacroBar", SuperVillain.UIParent)
-  macrobar:Point("RIGHT", toolbarRight, "LEFT", -spacing, 0)
-  macrobar:Size(1, buttonsize)
-  macrobar.currentSize = buttonsize;
-
-  local breakStuffButton=CreateFrame('Button',"BreakStuffButton",SuperVillain.UIParent)
-  breakStuffButton:Point('RIGHT',macrobar,'LEFT',-6,0)
-  breakStuffButton:Size(buttonsize,buttonsize)
-  breakStuffButton:Hide()
-
-  local rightdock = CreateFrame("Frame", "RightSuperDock", SuperVillain.UIParent)
-  rightdock:SetFrameStrata("BACKGROUND")
-  rightdock:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", -1, buttonsize + 10)
-  rightdock:Size(rightWidth, rightHeight)
-  SuperVillain:SetSVMovable(rightdock, "RightDock_MOVE", L["Right Dock"])
-
-  local rightalert = CreateFrame("Frame", "SuperDockAlertRight", rightdock)
-  rightalert:SetFrameStrata("BACKGROUND")
-  rightalert:Size(rightWidth, 1)
-  rightalert:Point("BOTTOMLEFT", rightdock, "BOTTOMLEFT", 0, 0)
-  rightalert:SetFrameLevel(rightalert:GetFrameLevel() + 2)
-
-  local rightwindow = CreateFrame("Frame", "SuperDockWindowRight", rightdock)
-  rightwindow:SetFrameStrata("BACKGROUND")
-  rightwindow:Point("BOTTOMLEFT", rightalert, "TOPLEFT", 0, 0)
-  rightwindow:Size(rightWidth, rightHeight)
-  rightdock.backdrop = SetSuperDockStyle(rightwindow)
-
-  RightSuperDock.fadeFunc = FadeUpdate;
-  if SVUI_Cache["Dock"].LeftSuperDockFaded  == true then LeftSuperDock:Hide() end;
-  if SVUI_Cache["Dock"].RightSuperDockFaded  == true then RightSuperDock:Hide() end;
-
-  local toolbarTop = CreateFrame("Button", "SuperDockToolBarTop", SuperVillain.UIParent)
-  toolbarTop:Point("TOPLEFT", SuperVillain.UIParent, "TOPLEFT", 4, -2)
-  toolbarTop:Size(1, buttonsize - 12)
-  toolbarTop.openWidth = (leftWidth - 1) / 3;
-
-  --TOP STAT HOLDERS
-  local topanchor = CreateFrame("Frame", "SuperDockTopDataAnchor", SuperVillain.UIParent)
-  topanchor:Size((leftWidth + rightWidth) - 2, buttonsize - 8)
-  topanchor:Point("LEFT", toolbarTop, "RIGHT", spacing, 0)
-  SuperVillain:AddToDisplayAudit(topanchor)
-
-  local topleftdata = CreateFrame("Frame", "TopLeftDataPanel", topanchor)
-  topleftdata:Size(leftWidth - 1, buttonsize - 8)
-  topleftdata:Point("LEFT", topanchor, "LEFT", 0, 0)
-  STATS:NewAnchor(topleftdata, 3, "ANCHOR_CURSOR", 17, -4)
-
-  local toprightdata = CreateFrame("Frame", "TopRightDataPanel", topanchor)
-  toprightdata:Size(leftWidth - 1, buttonsize - 8)
-  toprightdata:Point("RIGHT", topanchor, "RIGHT", 0, 0)
-  STATS:NewAnchor(toprightdata, 3, "ANCHOR_CURSOR", 17, -4)
-
-  --BOTTOM STAT HOLDERS
-  local bottomanchor = CreateFrame("Frame", "SuperDockBottomDataAnchor", SuperVillain.UIParent)
-  bottomanchor:Size((leftWidth + rightWidth) - 2, buttonsize - 8)
-  bottomanchor:Point("BOTTOM", SuperVillain.UIParent, "BOTTOM", 0, 2)
-  SuperVillain:AddToDisplayAudit(bottomanchor)
-
-  local bottomleftdata = CreateFrame("Frame", "BottomLeftDataPanel", bottomanchor)
-  bottomleftdata:Size(leftWidth - 1, buttonsize - 8)
-  bottomleftdata:Point("LEFT", bottomanchor, "LEFT", 0, 0)
-  STATS:NewAnchor(bottomleftdata, 3, "ANCHOR_CURSOR", 17, 4)
-
-  local bottomrightdata = CreateFrame("Frame", "BottomRightDataPanel", bottomanchor)
-  bottomrightdata:Size(rightWidth - 1, buttonsize - 8)
-  bottomrightdata:Point("RIGHT", bottomanchor, "RIGHT", 0, 0)
-  STATS:NewAnchor(bottomrightdata, 3, "ANCHOR_CURSOR", 17, 4)
-end;
+	local leftWidth = MOD.db.dockLeftWidth or 350;
+	local leftHeight = MOD.db.dockLeftHeight or 180;
+	local rightWidth = MOD.db.dockRightWidth or 350;
+	local rightHeight = MOD.db.dockRightHeight or 180;
+	local buttonsize = MOD.db.buttonSize or 22;
+	local spacing = MOD.db.buttonSpacing or 4;
+	local STATS = SuperVillain.Registry:Expose("SVStats");
+
+	-- [[ CORNER BUTTONS ]] --
+	local leftbutton = CreateFrame("Button", "LeftSuperDockToggleButton", SuperVillain.UIParent)
+	leftbutton:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", 1, 2)
+	leftbutton:Size(buttonsize, buttonsize)
+	leftbutton:SetFramedButtonTemplate()
+	leftbutton.icon = leftbutton:CreateTexture(nil, "OVERLAY", nil, 0)
+	leftbutton.icon:FillInner(leftbutton,2,2)
+	leftbutton.icon:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\SVUI-EMBLEM")
+	leftbutton:RegisterForClicks("AnyUp")
+	leftbutton:SetScript("OnEnter", Dock_OnEnter)
+	leftbutton:SetScript("OnLeave", Dock_OnLeave)
+	leftbutton:SetScript("OnClick", Dock_OnClick)
+
+	local rightbutton = CreateFrame("Button", "RightSuperDockToggleButton", SuperVillain.UIParent)
+	rightbutton:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", -1, 2)
+	rightbutton:Size(buttonsize, buttonsize)
+	rightbutton:SetFramedButtonTemplate()
+	rightbutton.icon = rightbutton:CreateTexture(nil, "OVERLAY")
+	rightbutton.icon:FillInner(rightbutton,2,2)
+	rightbutton.icon:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Icons\DOCK-HENCHMAN]])
+	rightbutton.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
+	rightbutton.TText = "Call Henchman!"
+	rightbutton:RegisterForClicks("AnyUp")
+	rightbutton:SetScript("OnEnter", Button_OnEnter)
+	rightbutton:SetScript("OnLeave", Button_OnLeave)
+	rightbutton:SetScript("OnClick", function()SuperVillain:ToggleHenchman()end)
+
+
+	-- [[ TOOLBARS AND OTHER NONSENSE ]] --
+	local toolbarLeft = CreateFrame("Button", "SuperDockToolBarLeft", SuperVillain.UIParent)
+	toolbarLeft:Point("LEFT", leftbutton, "RIGHT", spacing, 0)
+	toolbarLeft:Width(1)
+	toolbarLeft:Height(buttonsize)
+	toolbarLeft.currentSize = buttonsize;
+
+	local leftstation = CreateFrame("Frame", "SuperDockChatTabBar", SuperVillain.UIParent)
+	leftstation:SetFrameStrata("BACKGROUND")
+	leftstation:Size(leftWidth - buttonsize, buttonsize)
+	leftstation:Point("LEFT", toolbarLeft, "RIGHT", spacing, 0)
+	leftstation:SetFrameLevel(leftstation:GetFrameLevel() + 2)
+	leftstation.currentSize = buttonsize;
+
+	local leftdock = CreateFrame("Frame", "LeftSuperDock", SuperVillain.UIParent)
+	leftdock:SetFrameStrata("BACKGROUND")
+	leftdock:Point("BOTTOMLEFT", SuperVillain.UIParent, "BOTTOMLEFT", 1, buttonsize + 10)
+	leftdock:Size(leftWidth, leftHeight)
+	SuperVillain:SetSVMovable(leftdock, "LeftDock_MOVE", L["Left Dock"])
+
+	local leftalert = CreateFrame("Frame", "SuperDockAlertLeft", leftdock)
+	leftalert:SetFrameStrata("BACKGROUND")
+	leftalert:Size(leftWidth, 1)
+	leftalert:Point("BOTTOMRIGHT", leftdock, "BOTTOMRIGHT",0, 0)
+	leftalert:SetFrameLevel(leftalert:GetFrameLevel() + 2)
+
+	local leftwindow = CreateFrame("Frame", "SuperDockWindowLeft", leftdock)
+	leftwindow:SetFrameStrata("BACKGROUND")
+	leftwindow:Point("BOTTOMRIGHT", leftalert, "TOPRIGHT", 0, 0)
+	leftwindow:Size(leftWidth, leftHeight)
+	leftdock.backdrop = SetSuperDockStyle(leftwindow)
+
+	LeftSuperDock.fadeFunc = FadeUpdate;
+
+	local toolbarRight = CreateFrame("Button", "SuperDockToolBarRight", SuperVillain.UIParent)
+	toolbarRight:Point("RIGHT", rightbutton, "LEFT", -spacing, 0)
+	toolbarRight:Size(1, buttonsize)
+	toolbarRight.currentSize = buttonsize;
+
+	local macrobar = CreateFrame("Button", "SuperDockMacroBar", SuperVillain.UIParent)
+	macrobar:Point("RIGHT", toolbarRight, "LEFT", -spacing, 0)
+	macrobar:Size(1, buttonsize)
+	macrobar.currentSize = buttonsize;
+
+	local rightdock = CreateFrame("Frame", "RightSuperDock", SuperVillain.UIParent)
+	rightdock:SetFrameStrata("BACKGROUND")
+	rightdock:Point("BOTTOMRIGHT", SuperVillain.UIParent, "BOTTOMRIGHT", -1, buttonsize + 10)
+	rightdock:Size(rightWidth, rightHeight)
+	SuperVillain:SetSVMovable(rightdock, "RightDock_MOVE", L["Right Dock"])
+
+	local rightalert = CreateFrame("Frame", "SuperDockAlertRight", rightdock)
+	rightalert:SetFrameStrata("BACKGROUND")
+	rightalert:Size(rightWidth, 1)
+	rightalert:Point("BOTTOMLEFT", rightdock, "BOTTOMLEFT", 0, 0)
+	rightalert:SetFrameLevel(rightalert:GetFrameLevel() + 2)
+
+	local rightwindow = CreateFrame("Frame", "SuperDockWindowRight", rightdock)
+	rightwindow:SetFrameStrata("BACKGROUND")
+	rightwindow:Point("BOTTOMLEFT", rightalert, "TOPLEFT", 0, 0)
+	rightwindow:Size(rightWidth, rightHeight)
+	rightdock.backdrop = SetSuperDockStyle(rightwindow)
+
+	RightSuperDock.fadeFunc = FadeUpdate;
+	if SVUI_Cache["Dock"].LeftSuperDockFaded  == true then LeftSuperDock:Hide() end
+	if SVUI_Cache["Dock"].RightSuperDockFaded  == true then RightSuperDock:Hide() end
+
+	local toolbarTop = CreateFrame("Button", "SuperDockToolBarTop", SuperVillain.UIParent)
+	toolbarTop:Point("TOPLEFT", SuperVillain.UIParent, "TOPLEFT", 4, -2)
+	toolbarTop:Size(1, buttonsize - 12)
+	toolbarTop.openWidth = (leftWidth - 1) / 3;
+
+	--TOP STAT HOLDERS
+	local topanchor = CreateFrame("Frame", "SuperDockTopDataAnchor", SuperVillain.UIParent)
+	topanchor:Size((leftWidth + rightWidth) - 2, buttonsize - 8)
+	topanchor:Point("LEFT", toolbarTop, "RIGHT", spacing, 0)
+	SuperVillain:AddToDisplayAudit(topanchor)
+
+	local topleftdata = CreateFrame("Frame", "TopLeftDataPanel", topanchor)
+	topleftdata:Size(leftWidth - 1, buttonsize - 8)
+	topleftdata:Point("LEFT", topanchor, "LEFT", 0, 0)
+	STATS:NewAnchor(topleftdata, 3, "ANCHOR_CURSOR", 17, -4)
+
+	local toprightdata = CreateFrame("Frame", "TopRightDataPanel", topanchor)
+	toprightdata:Size(leftWidth - 1, buttonsize - 8)
+	toprightdata:Point("RIGHT", topanchor, "RIGHT", 0, 0)
+	STATS:NewAnchor(toprightdata, 3, "ANCHOR_CURSOR", 17, -4)
+
+	--BOTTOM STAT HOLDERS
+	local bottomanchor = CreateFrame("Frame", "SuperDockBottomDataAnchor", SuperVillain.UIParent)
+	bottomanchor:Size((leftWidth + rightWidth) - 2, buttonsize - 8)
+	bottomanchor:Point("BOTTOM", SuperVillain.UIParent, "BOTTOM", 0, 2)
+	SuperVillain:AddToDisplayAudit(bottomanchor)
+
+	local bottomleftdata = CreateFrame("Frame", "BottomLeftDataPanel", bottomanchor)
+	bottomleftdata:Size(leftWidth - 1, buttonsize - 8)
+	bottomleftdata:Point("LEFT", bottomanchor, "LEFT", 0, 0)
+	STATS:NewAnchor(bottomleftdata, 3, "ANCHOR_CURSOR", 17, 4)
+
+	local bottomrightdata = CreateFrame("Frame", "BottomRightDataPanel", bottomanchor)
+	bottomrightdata:Size(rightWidth - 1, buttonsize - 8)
+	bottomrightdata:Point("RIGHT", bottomanchor, "RIGHT", 0, 0)
+	STATS:NewAnchor(bottomrightdata, 3, "ANCHOR_CURSOR", 17, 4)
+end

 function MOD:UpdateThisPackage()
 	self:UpdateSuperDock();
-end;
+end

 function MOD:ConstructThisPackage()
-  self:Protect("LoadToolBarProfessions")
-  self:CreateSuperBorders()
-  self:CreateDockPanels()
-  self:CreateDockWindow()
-  self:Protect("LoadToolBarProfessions");
-  SuperVillain:ExecuteTimer(MOD.LoadToolBarProfessions, 5)
-  --self:RegisterEvent("PLAYER_REGEN_DISABLED", "DockletEnterCombat")
-  --self:RegisterEvent("PLAYER_REGEN_ENABLED", "DockletExitCombat")
-  self:DockletInit()
-  self:UpdateDockBackdrops()
-end;
+	self:Protect("LoadToolBarProfessions")
+	self:CreateSuperBorders()
+	self:CreateDockPanels()
+	self:CreateDockWindow()
+	self:Protect("LoadToolBarProfessions");
+	SuperVillain:ExecuteTimer(MOD.LoadToolBarProfessions, 5)
+	--self:RegisterEvent("PLAYER_REGEN_DISABLED", "DockletEnterCombat")
+	--self:RegisterEvent("PLAYER_REGEN_ENABLED", "DockletExitCombat")
+	self:DockletInit()
+	self:UpdateDockBackdrops()
+end
 SuperVillain.Registry:NewPackage(MOD, "SVDock")
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/dock/common/toolbar.lua b/Interface/AddOns/SVUI/packages/dock/common/toolbar.lua
index 7f390d9..4e2db0f 100644
--- a/Interface/AddOns/SVUI/packages/dock/common/toolbar.lua
+++ b/Interface/AddOns/SVUI/packages/dock/common/toolbar.lua
@@ -15,14 +15,14 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 --]]
 local SuperVillain, L = unpack(select(2, ...));
 local MOD = SuperVillain.Registry:Expose('SVDock');
-MOD.BreakingShit = false;
 --[[
 ##########################################################
 LOCAL VARS
 ##########################################################
 ]]--
-local tools={};
-local ICON_FILE = [[Interface\AddOns\SVUI\assets\artwork\Icons\PROFESSIONS]];
+MOD.DefaultWindow = false
+local tinsert, wipe, pairs, ipairs, unpack, pcall, select = tinsert, table.wipe, pairs, ipairs, unpack, pcall, select;
+local format, gsub, strfind, strmatch, tonumber = format, gsub, strfind, strmatch, tonumber;
 local TOOL_DATA = {
 	["Alchemy"] 		= {0,0.25,0,0.25}, 					-- PRO-ALCHEMY
     ["Archaeology"] 	= {0.25,0.5,0,0.25,"Survey"}, 		-- PRO-ARCHAELOGY
@@ -39,50 +39,87 @@ local TOOL_DATA = {
     ["Skinning"] 		= {0,0.25,0.75,1}, 					-- PRO-SKINNING
     ["Tailoring"] 		= {0.25,0.5,0.75,1}, 				-- PRO-TAILORING
     ["Default"] 		= {0.5,0.75,0,0.25}
-};
+}
 --[[
 ##########################################################
 PRE VARS/FUNCTIONS
 ##########################################################
 ]]--
-local button_OnEnter=function(b)
+local function HearthTime()
+	local start,duration = GetItemCooldown(6948)
+	local expires = duration - (GetTime() - start)
+	if expires > 0.05 then
+		local timeLeft = 0;
+		local calc = 0;
+		if expires < 4 then
+			return format("|cffff0000%.1f|r", expires)
+		elseif expires < 60 then
+			return format("|cffffff00%d|r", floor(expires))
+		elseif expires < 3600 then
+			timeLeft = ceil(expires / 60);
+			calc = floor((expires / 60) + .5);
+			return format("|cffff9900%dm|r", timeLeft)
+		elseif expires < 86400 then
+			timeLeft = ceil(expires / 3600);
+			calc = floor((expires / 3600) + .5);
+			return format("|cff66ffff%dh|r", timeLeft)
+		else
+			timeLeft = ceil(expires / 86400);
+			calc = floor((expires / 86400) + .5);
+			return format("|cff6666ff%dd|r", timeLeft)
+		end
+	else
+		return "|cff6666ffReady|r"
+	end
+end
+
+local function GetDefaultWindow()
+	local window = MOD.DefaultWindow
+	if window and _G[window] and not _G[window]:IsShown() then
+		SuperDockWindowRight.FrameName = window
+		SuperDockWindowRight:Show()
+	end
+end
+
+local Button_OnEnter = function(b)
 	if not b.IsOpen then
 		b:SetPanelColor("highlight")
-      	b.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro))
+   	b.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro))
 	end
-	GameTooltip:SetOwner(b,'ANCHOR_TOPLEFT',0,4)
+	GameTooltip:SetOwner(b, "ANCHOR_TOPLEFT", 0, 4)
 	GameTooltip:ClearLines()
-	GameTooltip:AddLine(b.TText,1,1,1)
+	GameTooltip:AddLine(b.TText, 1, 1, 1)
 	GameTooltip:Show()
-end;
+end

-local button_OnLeave=function(b)
+local Button_OnLeave = function(b)
 	if not b.IsOpen then
 		b:SetPanelColor("special")
 		b.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
 	end
 	GameTooltip:Hide()
-end;
+end

-local button_OnClick=function(b)
-	if InCombatLockdown()then return end;
-	if b.FrameName and _G[b.FrameName] then
-		SuperDockWindowRight.FrameName=b.FrameName
-		if not _G[b.FrameName]:IsShown() then
+local Button_OnClick = function(self)
+	if InCombatLockdown() then return end
+	local linkedFrame = self.FrameName
+	if linkedFrame and _G[linkedFrame] then
+		SuperDockWindowRight.FrameName = linkedFrame
+		if not _G[linkedFrame]:IsShown() then
 			if not SuperDockWindowRight:IsShown()then
 				SuperDockWindowRight:Show()
 			end
 			MOD:DockletHide()
-			_G[b.FrameName]:Show()
-			b.IsOpen=true;
-			b:SetPanelColor("green")
-			b.icon:SetGradient(unpack(SuperVillain.Media.gradient.green))
+			_G[linkedFrame]:Show()
+			self.IsOpen = true;
+			self:SetPanelColor("green")
+			self.icon:SetGradient(unpack(SuperVillain.Media.gradient.green))
 		elseif not SuperDockWindowRight:IsShown()then
 			SuperDockWindowRight:Show()
-			_G[b.FrameName]:Show()
-			b.IsOpen=true;
-			b:SetPanelColor("green")
-			b.icon:SetGradient(unpack(SuperVillain.Media.gradient.green))
+			_G[linkedFrame]:Show()
+			self.IsOpen = true;
+			self:SetPanelColor("green")
+			self.icon:SetGradient(unpack(SuperVillain.Media.gradient.green))
 		end
 	else
 		if SuperDockWindowRight:IsShown()then
@@ -90,106 +127,107 @@ local button_OnClick=function(b)
 		else
 			SuperDockWindowRight:Show()
 		end
-		b.IsOpen=false;
-		b:SetPanelColor("special")
-		b.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
-		if MOD.DefaultWindow and _G[MOD.DefaultWindow] and not _G[MOD.DefaultWindow]:IsShown() then
-			SuperDockWindowRight.FrameName = MOD.DefaultWindow
-			SuperDockWindowRight:Show()
-		end
-	end;
-end;
+		self.IsOpen = false;
+		self:SetPanelColor("special")
+		self.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
+		GetDefaultWindow()
+	end
+end

-local macro_OnEnter = function(b)
-	b:SetPanelColor("highlight")
-    b.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro))
-	GameTooltip:SetOwner(b, "ANCHOR_TOPLEFT", 2, 4)
+local Macro_OnEnter = function(self)
+	self:SetPanelColor("highlight")
+    self.icon:SetGradient(unpack(SuperVillain.Media.gradient.bizzaro))
+	GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 2, 4)
 	GameTooltip:ClearLines()
-	if not b.TText2 then
-		GameTooltip:AddLine(b.TText, 1, 1, 1)
+	if not self.TText2 then
+		GameTooltip:AddLine(self.TText, 1, 1, 1)
 	else
-		GameTooltip:AddDoubleLine(b.TText, b.TText2, 1, 1, 1)
-	end;
+		GameTooltip:AddDoubleLine(self.TText, self.TText2, 1, 1, 1)
+	end
 	GameTooltip:Show()
-end;
+end

-local macro_OnLeave=function(b)
-	b:SetPanelColor("special")
-	b.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
+local Macro_OnLeave = function(self)
+	self:SetPanelColor("special")
+	self.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
 	GameTooltip:Hide()
-end;
+end
+
+local Hearth_OnEnter = function(self)
+	if InCombatLockdown() then return end
+	self.glow:Show()
+	self:SetPanelColor("highlight")
+	GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4)
+	GameTooltip:ClearLines()
+	local remaining = HearthTime()
+	GameTooltip:AddLine(L["Hearthstone"], 1, 1, 1)
+	GameTooltip:AddDoubleLine(L["Time Remaining"], remaining, 1, 1, 1, 0, 1, 1)
+	if(self.ExtraSpell) then
+		GameTooltip:AddLine(" ", 1, 1, 1)
+		GameTooltip:AddDoubleLine(self.ExtraSpell, "[Right Click]", 1, 1, 1, 0, 1, 0)
+	end
+	GameTooltip:Show()
+end
+
+local Hearth_OnLeave = function(self)
+	if InCombatLockdown() then return end
+	self.glow:Hide()
+	self:SetPanelColor("special")
+	GameTooltip:Hide()
+end

 MOD.ToolsList = {};
 MOD.ToolsSafty = {};
-MOD.MacroCount = 0;
 MOD.LastAddedTool = false;
-MOD.LastAddedMacro = false;
 --[[
 ##########################################################
 CORE FUNCTIONS
 ##########################################################
 ]]--
-MOD.DefaultWindow = false;
 function MOD:RemoveTool(frame)
-	if not frame or not frame.listIndex then return end;
+	if not frame or not frame.listIndex then return end
 	local name = frame:GetName();
-	if not MOD.ToolsSafty[name] then return end;
+	if not MOD.ToolsSafty[name] then return end
 	MOD.ToolsSafty[name] = false;
 	local i = frame.listIndex;
-	tremove(MOD.ToolsList,i)
+	tremove(MOD.ToolsList, i)
 	local width;
 	local height = SuperDockToolBarRight.currentSize;
-	MOD.LastAddedTool = MOD.ToolsList[#MOD.ToolsList];
+	MOD.LastAddedTool = MOD.ToolsList[#MOD.ToolsList]
 	width = #MOD.ToolsList * (height + 6)
 	SuperDockToolBarRight:ClearAllPoints()
-	SuperDockToolBarRight:Point('RIGHT',RightSuperDockHearthButton,'LEFT',-6,0)
-	SuperDockToolBarRight:Size(width,height)
+	SuperDockToolBarRight:Point("RIGHT", RightSuperDockHearthButton, "LEFT", -6, 0)
+	SuperDockToolBarRight:Size(width, height)
 	SuperDockMacroBar:ClearAllPoints()
-	SuperDockMacroBar:Point('RIGHT',SuperDockToolBarRight,'LEFT',-6,0)
-end;
+	SuperDockMacroBar:Point("RIGHT", SuperDockToolBarRight, "LEFT", -6, 0)
+end

 function MOD:AddTool(frame)
 	local name = frame:GetName();
-	if MOD.ToolsSafty[name] then return end;
+	if MOD.ToolsSafty[name] then return end
 	MOD.ToolsSafty[name] = true;
 	local width;
 	local height = SuperDockToolBarRight.currentSize;
 	if not MOD.LastAddedTool or MOD.LastAddedTool == frame then
-		frame:Point("RIGHT",SuperDockToolBarRight,"RIGHT",-6,0);
+		frame:Point("RIGHT", SuperDockToolBarRight, "RIGHT", -6, 0);
 	else
-		frame:Point("RIGHT",MOD.LastAddedTool,"LEFT",-6,0);
+		frame:Point("RIGHT", MOD.LastAddedTool, "LEFT", -6, 0);
 	end
-	tinsert(MOD.ToolsList,frame);
-    frame.listIndex = #MOD.ToolsList;
+	tinsert(MOD.ToolsList, frame)
+ 	frame.listIndex = #MOD.ToolsList;
 	MOD.LastAddedTool = frame;
 	width = #MOD.ToolsList * (height + 6)
 	SuperDockToolBarRight:ClearAllPoints()
-	SuperDockToolBarRight:Point('RIGHT',RightSuperDockHearthButton,'LEFT',-6,0)
-	SuperDockToolBarRight:Size(width,height)
-	SuperDockMacroBar:ClearAllPoints()
-	SuperDockMacroBar:Point('RIGHT',SuperDockToolBarRight,'LEFT',-6,0)
-end;
-
-function MOD:AddMacroTool(frame)
-	local width;
-	local height = SuperDockToolBarRight.currentSize;
-	if not MOD.LastAddedMacro then
-		frame:Point("RIGHT",SuperDockMacroBar,"RIGHT",-6,0);
-	else
-		frame:Point("RIGHT",MOD.LastAddedMacro,"LEFT",-6,0);
-	end
-	MOD.LastAddedMacro=frame;
-	MOD.MacroCount=MOD.MacroCount+1;
-	width=MOD.MacroCount*(height+6)
+	SuperDockToolBarRight:Point("RIGHT", RightSuperDockHearthButton, "LEFT", -6, 0)
+	SuperDockToolBarRight:Size(width, height)
 	SuperDockMacroBar:ClearAllPoints()
-	SuperDockMacroBar:Size(width,height)
-	SuperDockMacroBar:Point('RIGHT',SuperDockToolBarRight,'LEFT',-6,0)
-end;
+	SuperDockMacroBar:Point("RIGHT", SuperDockToolBarRight, "LEFT", -6, 0)
+end

 function MOD:CreateBasicToolButton(name,texture,onclick,frameName,isdefault)
 	local fName = frameName or name;
 	local dockIcon = texture or [[Interface\AddOns\SVUI\assets\artwork\Icons\DOCK-ADDON]];
-	local clickFunction = (type(onclick)=="function") and onclick or button_OnClick;
+	local clickFunction = (type(onclick)=="function") and onclick or Button_OnClick;
 	local size = SuperDockToolBarRight.currentSize;
 	local button = _G[fName .. "_ToolBarButton"] or CreateFrame("Button",("%s_ToolBarButton"):format(fName),SuperDockToolBarRight)
 	MOD:AddTool(button)
@@ -202,10 +240,10 @@ function MOD:CreateBasicToolButton(name,texture,onclick,frameName,isdefault)
 	button.FrameName = fName;
 	if isdefault == true then
 		MOD.DefaultWindow = fName;
-	end;
+	end
 	button.IsOpen = isdefault or false;
-	button:SetScript("OnEnter",button_OnEnter)
-	button:SetScript("OnLeave",button_OnLeave)
+	button:SetScript("OnEnter",Button_OnEnter)
+	button:SetScript("OnLeave",Button_OnLeave)
 	button:SetScript("OnClick",clickFunction)
 	_G[fName].ToggleName = fName.."_ToolBarButton";
 	if(isdefault) then
@@ -214,68 +252,135 @@ function MOD:CreateBasicToolButton(name,texture,onclick,frameName,isdefault)
 	else
 		button.icon:SetGradient(unpack(SuperVillain.Media.gradient.light))
 	end
-end;
+end

-function MOD:CreateMacroToolButton(name,texCoords,itemID)
-	if name == "Mining" then name = "Smelting" end;
-	local data = TOOL_DATA[texCoords] or TOOL_DATA["Default"];
-	local size = SuperDockMacroBar.currentSize;
-	local button = CreateFrame("Button",("%s_MacroBarButton"):format(itemID),SuperDockMacroBar,"SecureActionButtonTemplate")
-	button:Size(size,size)
-	MOD:AddMacroTool(button)
-	button:SetFramedButtonTemplate()
-	button.icon = button:CreateTexture(nil,"OVERLAY")
-	button.icon:FillInner(button,2,2)
-	button.icon:SetTexture(ICON_FILE)
-	button.icon:SetTexCoord(data[1],data[2],data[3],data[4])
-	button.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
-	button.skillName = name;
-	button.itemId = itemID;
-	button.TText = "Open " .. name;
-	button:SetAttribute("type","macro")
-	if(data[5]) then
-		local rightClickSpell = data[5]
-		button:SetAttribute("macrotext", "/cast [mod:shift]" .. rightClickSpell .. "; " .. name)
-		button.TText2 = "Shift-Click to use " .. rightClickSpell
-	else
-		button:SetAttribute("macrotext","/cast " .. name)
-	end;
-	button:SetScript("OnEnter",macro_OnEnter)
-	button:SetScript("OnLeave",macro_OnLeave)
-end;
+do
+	local LastAddedMacro;
+	local MacroCount = 0;

-function MOD:LoadToolBarProfessions()
-	if(MOD.ToolBarLoaded) then return end
-	local j,k,l,m,n,o=GetProfessions();
-	if o~=nil then
-		local t,u,v,w,x,y,z,A,B,C=GetProfessionInfo(o)
-		if(t ~= "Herbalism" and t ~= "Skinning") then
-			MOD:CreateMacroToolButton(t,t,o)
-		end
-	end;
-	if l~=nil then
-		local t,u,v,w,x,y,z,A,B,C=GetProfessionInfo(l)
-		if(t ~= "Herbalism" and t ~= "Skinning") then
-			MOD:CreateMacroToolButton(t,t,l)
+	local function AddMacroTool(frame)
+		local width;
+		local height = SuperDockToolBarRight.currentSize;
+		if not LastAddedMacro then
+			frame:Point("RIGHT", SuperDockMacroBar, "RIGHT", -6, 0);
+		else
+			frame:Point("RIGHT", LastAddedMacro, "LEFT", -6, 0);
 		end
-	end;
-	if n~=nil then
-		local t,u,v,w,x,y,z,A,B,C=GetProfessionInfo(n)
-		if(t ~= "Herbalism" and t ~= "Skinning") then
-			MOD:CreateMacroToolButton(t,t,n)
-		end
-	end;
-	if k~=nil then
-		local t,u,v,w,x,y,z,A,B,C=GetProfessionInfo(k)
-		if(t ~= "Herbalism" and t ~= "Skinning") then
-			MOD:CreateMacroToolButton(t,t,k)
+		LastAddedMacro = frame;
+		MacroCount = MacroCount + 1;
+		width = MacroCount * (height + 6)
+		SuperDockMacroBar:ClearAllPoints()
+		SuperDockMacroBar:Size(width, height)
+		SuperDockMacroBar:Point("RIGHT", SuperDockToolBarRight, "LEFT", -6, 0)
+	end
+
+	local function CreateMacroToolButton(proName, itemID, size)
+		if proName == "Mining" then proName = "Smelting" end
+		local data = TOOL_DATA[proName] or TOOL_DATA["Default"]
+		local button = CreateFrame("Button", ("%s_MacroBarButton"):format(itemID), SuperDockMacroBar, "SecureActionButtonTemplate")
+		button:Size(size, size)
+		AddMacroTool(button)
+		button:SetFramedButtonTemplate()
+		button.icon = button:CreateTexture(nil, "OVERLAY")
+		button.icon:FillInner(button, 2, 2)
+		button.icon:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Icons\PROFESSIONS]])
+		button.icon:SetTexCoord(data[1], data[2], data[3], data[4])
+		button.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
+		button.skillName = proName;
+		button.itemId = itemID;
+		button.TText = "Open " .. proName;
+		button:SetAttribute("type", "macro")
+		if(data[5]) then
+			local rightClickSpell = data[5]
+			button:SetAttribute("macrotext", "/cast [mod:shift]" .. rightClickSpell .. "; " .. proName)
+			button.TText2 = "Shift-Click to use " .. rightClickSpell
+		else
+			button:SetAttribute("macrotext","/cast " .. proName)
+		end
+		button:SetScript("OnEnter", Macro_OnEnter)
+		button:SetScript("OnLeave", Macro_OnLeave)
+	end
+
+	function MOD:LoadToolBarProfessions()
+		if(MOD.ToolBarLoaded) then return end
+		local size = SuperDockMacroBar.currentSize
+		local hearth = CreateFrame("Button", "RightSuperDockHearthButton", SuperVillain.UIParent, "SecureActionButtonTemplate")
+		hearth:Size(size, size)
+		hearth:SetFramedButtonTemplate()
+		AddMacroTool(hearth)
+		hearth.icon = hearth:CreateTexture(nil, "OVERLAY", nil, 0)
+		hearth.icon:FillInner(hearth,2,2)
+		hearth.icon:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\DOCK-HEARTH")
+		hearth.icon:SetTexCoord(0,0.5,0,1)
+		hearth.icon:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1)
+		hearth.glow = hearth:CreateTexture(nil, "OVERLAY", nil, 2)
+		hearth.glow:FillInner(hearth,2,2)
+		hearth.glow:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\DOCK-HEARTH")
+		hearth.glow:SetTexCoord(0.5,1,0,1)
+		hearth.glow:Hide()
+		hearth:SetAttribute("type","item")
+		hearth:SetAttribute("item","Hearthstone")
+
+		if(SuperVillain.class == "SHAMAN") then
+			hearth:SetAttribute("type2","spell")
+			hearth:SetAttribute("spell","Astral Recall")
+			hearth.ExtraSpell = "Astral Recall"
+		elseif(SuperVillain.class == "DEATHKNIGHT") then
+			hearth:SetAttribute("type2","spell")
+			hearth:SetAttribute("spell","Death Gate")
+			hearth.ExtraSpell = "Death Gate"
+		elseif(SuperVillain.class == "DRUID") then
+			hearth:SetAttribute("type2","spell")
+			hearth:SetAttribute("spell","Teleport: Moonglade")
+			hearth.ExtraSpell = "Teleport: Moonglade"
+		elseif(SuperVillain.class == "MONK") then
+			hearth:SetAttribute("type2","spell")
+			hearth:SetAttribute("spell","Zen Pilgrimage")
+			hearth.ExtraSpell = "Zen Pilgrimage"
 		end
-	end;
-	if j~=nil then
-		local t,u,v,w,x,y,z,A,B,C=GetProfessionInfo(j)
-		if(t ~= "Herbalism" and t ~= "Skinning") then
-			MOD:CreateMacroToolButton(t,t,j)
+
+		hearth:SetScript("OnEnter", Hearth_OnEnter)
+		hearth:SetScript("OnLeave", Hearth_OnLeave)
+
+		local proName
+		local prof1, prof2, archaeology, _, cooking, firstAid = GetProfessions();
+
+		if(firstAid ~= nil) then
+			proName, _ = GetProfessionInfo(firstAid)
+			if(proName ~= "Herbalism" and proName ~= "Skinning") then
+				CreateMacroToolButton(proName, firstAid, size)
+			end
+		end
+		if(archaeology ~= nil) then
+			proName, _ = GetProfessionInfo(archaeology)
+			if(proName ~= "Herbalism" and proName ~= "Skinning") then
+				CreateMacroToolButton(proName, archaeology, size)
+			end
+		end
+		if(cooking ~= nil) then
+			proName, _ = GetProfessionInfo(cooking)
+			if(proName ~= "Herbalism" and proName ~= "Skinning") then
+				CreateMacroToolButton(proName, cooking, size)
+			end
+		end
+		if(prof2 ~= nil) then
+			proName, _ = GetProfessionInfo(prof2)
+			if(proName ~= "Herbalism" and proName ~= "Skinning") then
+				CreateMacroToolButton(proName, prof2, size)
+			end
+		end
+		if(prof1 ~= nil) then
+			proName, _ = GetProfessionInfo(prof1)
+			if(proName ~= "Herbalism" and proName ~= "Skinning") then
+				CreateMacroToolButton(proName, prof1, size)
+			end
 		end
-	end;
-	MOD.ToolBarLoaded = true
+
+		local breakStuffButton = CreateFrame("Button", "BreakStuffButton", SuperVillain.UIParent)
+		breakStuffButton:Size(size, size)
+		AddMacroTool(breakStuffButton)
+		breakStuffButton:Hide()
+
+		MOD.ToolBarLoaded = true
+	end
 end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua b/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua
index 1c295c1..6374454 100644
--- a/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua
+++ b/Interface/AddOns/SVUI/packages/unit/common/actionpanel.lua
@@ -194,23 +194,18 @@ NAME
 ]]--
 local function CreateNameText(frame, unitName)
 	local db = MOD.db
-
 	if(MOD.db[unitName] and MOD.db[unitName].name) then
 		db = MOD.db[unitName].name
 	end
-
 	local name = frame:CreateFontString(nil, "OVERLAY")
+	name:SetFont(LSM:Fetch("font", db.font), db.fontSize, db.fontOutline)
 	name:SetShadowOffset(2, -2)
 	name:SetShadowColor(0, 0, 0, 1)
-	name:SetFontTemplate()
-
 	if unitNmae == "target" then
 		name:SetPoint("RIGHT", frame)
 	else
 		name:SetPoint("CENTER", frame)
 	end
-
-	name:SetFont(LSM:Fetch("font", db.font), db.fontSize, db.fontOutline)
 	return name;
 end
 --[[
diff --git a/Interface/AddOns/SVUI/packages/unit/common/aurabars.lua b/Interface/AddOns/SVUI/packages/unit/common/aurabars.lua
index af1cde5..3c50390 100644
--- a/Interface/AddOns/SVUI/packages/unit/common/aurabars.lua
+++ b/Interface/AddOns/SVUI/packages/unit/common/aurabars.lua
@@ -26,7 +26,7 @@ local LSM = LibStub("LibSharedMedia-3.0");
 LOCAL VARIABLES
 ##########################################################
 ]]--
-local tsort,floor,sub,huge = table.sort,math.floor,string.sub,math.huge;
+local tsort,floor,sub = table.sort, math.floor, string.sub;
 --[[
 ##########################################################
 BUILD FUNCTION
@@ -44,14 +44,11 @@ local AuraRemover_OnClick = function(self)
 end

 local function PostCreateAuraBars(self)
-	self:SetPanelTemplate("Bar")
-	local auraBar = self.statusBar
-	auraBar.iconHolder:SetPanelTemplate("Transparent")
-	auraBar.iconHolder:RegisterForClicks("RightButtonUp")
-	auraBar.iconHolder:SetScript("OnClick", AuraRemover_OnClick)
+	self.iconHolder:RegisterForClicks("RightButtonUp")
+	self.iconHolder:SetScript("OnClick", AuraRemover_OnClick)
 end

-function MOD:ColorizeAuraBars()
+local function ColorizeAuraBars(self)
 	local bars = self.bars;
 	for i = 1, #bars do
 		local auraBar = bars[i]
@@ -89,12 +86,11 @@ local function CheckAuraFilter(setting, helpful)
   	return false
 end

-function MOD:AuraBarFilter(unit, name, _, _, _, debuffType, duration, _, unitCaster, isStealable, shouldConsolidate, spellID)
-	if not MOD.db then return end
-	if(spellID == 65148) then
+local function AuraBarFilter(self, unit, name, _, _, _, debuffType, duration, _, unitCaster, isStealable, shouldConsolidate, spellID)
+	if((not self.db) or (spellID == 65148)) then
 		return false;
 	end
-	local db = self.db.aurabar;
+	local db = self.db.aurabar
 	local filtered = (unitCaster == "player" or unitCaster == "vehicle") and true or false;
 	local allowed = true;
 	local pass = false;
@@ -104,28 +100,28 @@ function MOD:AuraBarFilter(unit, name, _, _, _, debuffType, duration, _, unitCas
 		allowed = filtered;
 		pass = true
 	end
-	if CheckAuraFilter(db.filterDispellable, friendly)then
-		if (self.type == "buffs" and not isStealable) or (self.type == "debuffs" and debuffType and not SuperVillain:DispellAvailable(debuffType)) or debuffType == nil then
+	if CheckAuraFilter(db.filterDispellable, friendly) then
+		if (debuffType and not SuperVillain.Dispellable[debuffType]) or debuffType == nil then
 			filtered = false
 		end
 		pass = true
 	end
-	if CheckAuraFilter(db.filterRaid, friendly)then
+	if CheckAuraFilter(db.filterRaid, friendly) then
 		if shouldConsolidate == 1 then filtered = false end
 		pass = true
 	end
-	if CheckAuraFilter(db.filterInfinite, friendly)then
+	if CheckAuraFilter(db.filterInfinite, friendly) then
 		if duration == 0 or not duration then
 			filtered = false
 		end
 		pass = true
 	end
-	if CheckAuraFilter(db.filterBlocked, friendly)then
+	if CheckAuraFilter(db.filterBlocked, friendly) then
 		local blackList = SuperVillain.Filters["Blocked"][name]
 		if blackList and blackList.enable then filtered = false end
 		pass = true
 	end
-	if CheckAuraFilter(db.filterAllowed, friendly)then
+	if CheckAuraFilter(db.filterAllowed, friendly) then
 		local whiteList = SuperVillain.Filters["Allowed"][name]
 		if whiteList and whiteList.enable then
 			filtered = true
@@ -134,7 +130,7 @@ function MOD:AuraBarFilter(unit, name, _, _, _, debuffType, duration, _, unitCas
 		end
 		pass = true
 	end
-	if db.useFilter and SuperVillain.Filters[db.useFilter]then
+	if db.useFilter and SuperVillain.Filters[db.useFilter] then
 		local spellsDB = SuperVillain.Filters[db.useFilter];
 		if db.useFilter  ~= "Blocked" then
 			if spellsDB[name] and spellsDB[name].enable and allowed then
@@ -153,36 +149,18 @@ end
 UTILITY
 ##########################################################
 ]]--
-function MOD:CreateAuraBarHeader(frame,unitName)
-	local auraBarParent = CreateFrame('Frame',nil,frame)
+function MOD:CreateAuraBarHeader(frame, unitName)
+	local auraBarParent = CreateFrame("Frame", nil, frame)
 	auraBarParent.parent = frame;
 	auraBarParent.PostCreateBar = PostCreateAuraBars;
 	auraBarParent.gap = 1;
 	auraBarParent.spacing = 1;
 	auraBarParent.spark = true;
-	auraBarParent.filter = self.AuraBarFilter;
-	auraBarParent.PostUpdate = self.ColorizeAuraBars;
-	local bartex = self.db.auraBarStatusbar
-	auraBarParent.barTexture = LSM:Fetch("statusbar", bartex);
+	auraBarParent.filter = AuraBarFilter;
+	auraBarParent.PostUpdate = ColorizeAuraBars;
+	auraBarParent.barTexture = LSM:Fetch("statusbar", MOD.db.auraBarStatusbar)
 	auraBarParent.textFont = LSM:Fetch("font", MOD.db.auraFont)
 	auraBarParent.textSize = MOD.db.auraFontSize
 	auraBarParent.textOutline = MOD.db.auraFontOutline
 	return auraBarParent
-end
-
-function MOD:SortAuraBars(parent,sorting)
-	if not parent then return end
-	if sorting=='TIME_REMAINING' then
-		parent.sort=true;
-	elseif sorting=='TIME_REMAINING_REVERSE' then
-		parent.sort=function(a,b)local compA,compB=a.noTime and huge or a.expirationTime, b.noTime and huge or b.expirationTime; return compA < compB end
-	elseif sorting=='TIME_DURATION' then
-		parent.sort=function(a,b)local compA,compB=a.noTime and huge or a.duration, b.noTime and huge or b.duration; return compA > compB end
-	elseif sorting=='TIME_DURATION_REVERSE' then
-		parent.sort=function(a,b)local compA,compB=a.noTime and huge or a.duration, b.noTime and huge or b.duration; return compA < compB end
-	elseif sorting=='NAME' then
-		parent.sort=function(a,b)return a.name > b.name end
-	else
-		parent.sort=nil;
-	end
-end
\ No newline at end of file
+end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/unit/common/auras.lua b/Interface/AddOns/SVUI/packages/unit/common/auras.lua
index dfb6aac..a946b04 100644
--- a/Interface/AddOns/SVUI/packages/unit/common/auras.lua
+++ b/Interface/AddOns/SVUI/packages/unit/common/auras.lua
@@ -51,6 +51,7 @@ local assert = enforce;
 assert(oUF_SuperVillain, "SVUI was unable to locate oUF.");
 local LSM = LibStub("LibSharedMedia-3.0");

+local CustomAuraFilter;
 local AURA_FONT = [[Interface\AddOns\SVUI\assets\fonts\Display.ttf]];
 local AURA_FONTSIZE = 11;
 local AURA_OUTLINE = "OUTLINE";
@@ -90,7 +91,7 @@ local AuraRemover_OnClick = function(self)
 	end
 end

-local function PostCreateAuraIcon(self, aura)
+local PostCreateAuraIcon = function(self, aura)
 	aura.cd.noOCC = true;
 	aura.cd.noCooldownCount = true;
 	aura.cd:SetReverse()
@@ -120,8 +121,59 @@ local function PostCreateAuraIcon(self, aura)
 	aura:SetScript("OnClick", AuraRemover_OnClick)
 	aura.styled = true
 end
--- unit, icon, index, offset
-local function PostUpdateAuraIcon(self, unit, button, index, offset)
+
+local UpdateAuraTimer = function(self, elapsed)
+	self.expiration = self.expiration - elapsed;
+	if(self.nextUpdate > 0) then
+		self.nextUpdate = self.nextUpdate - elapsed;
+		return
+	end
+	if(self.expiration  <= 0) then
+		self:SetScript("OnUpdate", nil)
+		if(self.text:GetFont()) then
+			self.text:SetText("")
+		end
+		return
+	end
+
+	local expires = self.expiration;
+	local calc, timeLeft = 0, 0;
+	local timeFormat;
+
+	if expires < 60 then
+		if expires  >= 4 then
+			timeLeft = floor(expires)
+			timeFormat = "|cffffff00%d|r"
+			self.nextUpdate = 0.51
+		else
+			timeLeft = expires
+			timeFormat = "|cffff0000%.1f|r"
+			self.nextUpdate = 0.051
+		end
+	elseif expires < 3600 then
+		timeFormat = "|cffffffff%dm|r"
+		timeLeft = ceil(expires  /  60);
+		calc = floor((expires  /  60)  +  .5);
+		self.nextUpdate = calc > 1 and ((expires - calc)  *  29.5) or (expires - 59.5);
+	elseif expires < 86400 then
+		timeFormat = "|cff66ffff%dh|r"
+		timeLeft = ceil(expires  /  3600);
+		calc = floor((expires  /  3600)  +  .5);
+		self.nextUpdate = calc > 1 and ((expires - calc)  *  1799.5) or (expires - 3570);
+	else
+		timeFormat = "|cff6666ff%dd|r"
+		timeLeft = ceil(expires  /  86400);
+		calc = floor((expires  /  86400)  +  .5);
+		self.nextUpdate = calc > 1 and ((expires - calc)  *  43199.5) or (expires - 86400);
+	end
+	if self.text:GetFont() then
+		self.text:SetFormattedText(timeFormat, timeLeft)
+	else
+		self.text:SetFormattedText(timeFormat, timeLeft)
+	end
+end
+
+local PostUpdateAuraIcon = function(self, unit, button, index, offset)
 	local name, _, _, _, dtype, duration, expiration, _, isStealable = UnitAura(unit, index, button.filter)
 	local isFriend = UnitIsFriend('player', unit) == 1 and true or false
 	if button.isDebuff then
@@ -157,7 +209,7 @@ local function PostUpdateAuraIcon(self, unit, button, index, offset)
 			button.expirationTime = expiration
 			button.expiration = expiration - GetTime()
 			button.nextUpdate = -1
-			button:SetScript('OnUpdate', MOD.UpdateAuraTimer)
+			button:SetScript('OnUpdate', UpdateAuraTimer)
 		end
 		if button.expirationTime ~= expiration  then
 			button.expirationTime = expiration
@@ -173,98 +225,100 @@ local function PostUpdateAuraIcon(self, unit, button, index, offset)
 	end
 end

-local function CheckAuraFilter(setting, helpful)
-	local friend, enemy = false, false
-	if type(setting) == "boolean" then
-		friend = setting;
-	  	enemy = setting
-	elseif setting and type(setting) ~= "string" then
-		friend = setting.friendly;
-	  	enemy = setting.enemy
+do
+	local function _test(setting, helpful)
+		local friend, enemy = false, false
+		if type(setting) == "boolean" then
+			friend = setting;
+		  	enemy = setting
+		elseif setting and type(setting) ~= "string" then
+			friend = setting.friendly;
+		  	enemy = setting.enemy
+		end
+		if (friend and helpful) or (enemy and not helpful) then
+		  return true;
+		end
+	  	return false
 	end
-	if (friend and helpful) or (enemy and not helpful) then
-	  return true;
-	end
-  	return false
-end

-local function CustomAuraIconFilter(self, unit, icon, name, _, _, _, dtype, duration, _, caster, isStealable, shouldConsolidate, spellID, canApplyAura, isBossAura)
-	if spellID == 65148 then return false end
-	local isPlayer, friendly;
-	local db = self:GetParent().db;
-	local auraType = self.type;
-	if not db or not auraType or not db[auraType] then return true end;
-	local filtered = true;
-	local allowed = true;
-	local pass = false;
-	local isPlayer = caster == "player"or caster == "vehicle"
-	local friendly = UnitIsFriend("player", unit) == 1 and true or false;
-	local filterType = friendly and db.friendlyAuraType or db.enemyAuraType;
-	icon.isPlayer = isPlayer;
-	icon.owner = caster;
-	icon.name = name;
-	icon.priority = 0;
-	local shieldSpell = SuperVillain.Filters["Shield"][name]
-	if shieldSpell and shieldSpell.enable then
-		icon.priority = shieldSpell.priority
-	end
-	if CheckAuraFilter(db.filterPlayer, friendly)then
-		if isPlayer then filtered = true else filtered = false end
-		allowed = filtered;
-		pass = true
-	end
-	if CheckAuraFilter(db.filterDispellable, friendly) then
-		if (auraType == "buffs" and not isStealable) or (auraType == "debuffs" and dtype and not SuperVillain:DispellAvailable(dtype)) or dtype == nil then
-			filtered = false
+	CustomAuraFilter = function(self, unit, icon, name, _, _, _, debuffType, duration, _, caster, isStealable, shouldConsolidate, spellID, canApplyAura, isBossAura)
+		if spellID == 65148 then return false end
+		local isPlayer, friendly;
+		local db = self:GetParent().db;
+		local auraType = self.type;
+		if not db or not auraType or not db[auraType] then return true end;
+		local filtered = true;
+		local allowed = true;
+		local pass = false;
+		local isPlayer = caster == "player"or caster == "vehicle"
+		local friendly = UnitIsFriend("player", unit) == 1 and true or false;
+		local filterType = friendly and db.friendlyAuraType or db.enemyAuraType;
+		icon.isPlayer = isPlayer;
+		icon.owner = caster;
+		icon.name = name;
+		icon.priority = 0;
+		local shieldSpell = SuperVillain.Filters["Shield"][name]
+		if shieldSpell and shieldSpell.enable then
+			icon.priority = shieldSpell.priority
 		end
-		pass = true
-	end
-	if CheckAuraFilter(db.filterRaid, friendly) then
-		if shouldConsolidate == 1 then filtered = false end
-		pass = true
-	end
-	if CheckAuraFilter(db.filterInfinite, friendly)then
-		if duration == 0 or not duration then
-			filtered = false
+		if _test(db.filterPlayer, friendly) then
+			if isPlayer then filtered = true else filtered = false end
+			allowed = filtered;
+			pass = true
 		end
-		pass = true
-	end
-	if CheckAuraFilter(db.useBlocked, friendly) then
-		local blackListSpell = SuperVillain.Filters["Blocked"][name]
-		if blackListSpell and blackListSpell.enable then
-			filtered = false
+		if _test(db.filterDispellable, friendly) then
+			if (auraType == "buffs" and not isStealable) or (auraType == "debuffs" and debuffType and not SuperVillain.Dispellable[debuffType]) or debuffType == nil then
+				filtered = false
+			end
+			pass = true
 		end
-		pass = true
-	end
-	if CheckAuraFilter(db.useAllowed, friendly) then
-		local whiteListSpell = SuperVillain.Filters["Allowed"][name]
-		if whiteListSpell and whiteListSpell.enable then
-			filtered = true;
-			icon.priority = whiteListSpell.priority
-		elseif not pass then
-			filtered = false
+		if _test(db.filterRaid, friendly) then
+			if shouldConsolidate == 1 then filtered = false end
+			pass = true
 		end
-		pass = true
-	end
-
-	if db.useFilter and SuperVillain.Filters[db.useFilter] then
-		local spellDB = SuperVillain.Filters[db.useFilter];
-		if db.useFilter  ~= "Blocked" then
-			if spellDB[name] and spellDB[name].enable and allowed then
+		if _test(db.filterInfinite, friendly)then
+			if duration == 0 or not duration then
+				filtered = false
+			end
+			pass = true
+		end
+		if _test(db.useBlocked, friendly) then
+			local blackListSpell = SuperVillain.Filters["Blocked"][name]
+			if blackListSpell and blackListSpell.enable then
+				filtered = false
+			end
+			pass = true
+		end
+		if _test(db.useAllowed, friendly) then
+			local whiteListSpell = SuperVillain.Filters["Allowed"][name]
+			if whiteListSpell and whiteListSpell.enable then
 				filtered = true;
-				icon.priority = spellDB[name].priority;
-				if db.useFilter == "Shield" and (spellID == 86698 or spellID == 86669) then
-					filtered = false
-				end
+				icon.priority = whiteListSpell.priority
 			elseif not pass then
 				filtered = false
 			end
-		elseif spellDB[name] and spellDB[name].enable then
-			filtered = false
-		end
-	end
-	return filtered
-end
+			pass = true
+		end
+
+		if db.useFilter and SuperVillain.Filters[db.useFilter] then
+			local spellDB = SuperVillain.Filters[db.useFilter];
+			if db.useFilter  ~= "Blocked" then
+				if spellDB[name] and spellDB[name].enable and allowed then
+					filtered = true;
+					icon.priority = spellDB[name].priority;
+					if db.useFilter == "Shield" and (spellID == 86698 or spellID == 86669) then
+						filtered = false
+					end
+				elseif not pass then
+					filtered = false
+				end
+			elseif spellDB[name] and spellDB[name].enable then
+				filtered = false
+			end
+		end
+		return filtered
+	end
+end
 --[[
 ##########################################################
 BUILD FUNCTION
@@ -275,7 +329,7 @@ function MOD:CreateBuffs(frame)
 	aura.spacing = 2;
 	aura.PostCreateIcon = PostCreateAuraIcon;
 	aura.PostUpdateIcon = PostUpdateAuraIcon;
-	aura.CustomFilter = CustomAuraIconFilter;
+	aura.CustomFilter = CustomAuraFilter;
 	aura:SetFrameLevel(10)
 	aura.type = "buffs"
 	aura.textFont = LSM:Fetch("font", MOD.db.auraFont)
@@ -289,7 +343,7 @@ function MOD:CreateDebuffs(frame)
 	aura.spacing = 2;
 	aura.PostCreateIcon = PostCreateAuraIcon;
 	aura.PostUpdateIcon = PostUpdateAuraIcon;
-	aura.CustomFilter = CustomAuraIconFilter;
+	aura.CustomFilter = CustomAuraFilter;
 	aura.type = "debuffs"
 	aura:SetFrameLevel(10)
 	aura.textFont = LSM:Fetch("font", MOD.db.auraFont)
@@ -307,64 +361,53 @@ function MOD:CreateAuraWatch(frame)
 	aWatch.strictMatching = true;
 	aWatch.icons = {}
 	return aWatch
-end
-
-function MOD:UpdateAuraTimer(elapsed)
-	self.expiration = self.expiration - elapsed;
-	if(self.nextUpdate > 0) then
-		self.nextUpdate = self.nextUpdate - elapsed;
-		return
-	end
-	if(self.expiration  <= 0) then
-		self:SetScript("OnUpdate", nil)
-		if(self.text:GetFont()) then
-			self.text:SetText("")
-		end
-		return
-	end
-
-	local expires = self.expiration;
-	local calc, timeLeft = 0, 0;
-	local timeFormat;
+end

-	if expires < 60 then
-		if expires  >= 4 then
-			timeLeft = floor(expires)
-			timeFormat = "|cffffff00%d|r"
-			self.nextUpdate = 0.51
-		else
-			timeLeft = expires
-			timeFormat = "|cffff0000%.1f|r"
-			self.nextUpdate = 0.051
+function MOD:SmartAuraDisplay()
+	local db = self.db;
+	local unit = self.unit;
+	if not db or not db.smartAuraDisplay or db.smartAuraDisplay == 'DISABLED' or not UnitExists(unit) then return end
+	local buffs = self.Buffs;
+	local debuffs = self.Debuffs;
+	local bars = self.AuraBars;
+	local friendly = UnitIsFriend('player',unit) == 1 and true or false;
+
+	if friendly then
+		if db.smartAuraDisplay == 'SHOW_DEBUFFS_ON_FRIENDLIES' then
+			buffs:Hide()
+			debuffs:Show()
+		else
+			buffs:Show()
+			debuffs:Hide()
 		end
-	elseif expires < 3600 then
-		timeFormat = "|cffffffff%dm|r"
-		timeLeft = ceil(expires  /  60);
-		calc = floor((expires  /  60)  +  .5);
-		self.nextUpdate = calc > 1 and ((expires - calc)  *  29.5) or (expires - 59.5);
-	elseif expires < 86400 then
-		timeFormat = "|cff66ffff%dh|r"
-		timeLeft = ceil(expires  /  3600);
-		calc = floor((expires  /  3600)  +  .5);
-		self.nextUpdate = calc > 1 and ((expires - calc)  *  1799.5) or (expires - 3570);
 	else
-		timeFormat = "|cff6666ff%dd|r"
-		timeLeft = ceil(expires  /  86400);
-		calc = floor((expires  /  86400)  +  .5);
-		self.nextUpdate = calc > 1 and ((expires - calc)  *  43199.5) or (expires - 86400);
+		if db.smartAuraDisplay == 'SHOW_DEBUFFS_ON_FRIENDLIES' then
+			buffs:Show()
+			debuffs:Hide()
+		else
+			buffs:Hide()
+			debuffs:Show()
+		end
 	end
-	if self.text:GetFont() then
-		self.text:SetFormattedText(timeFormat, timeLeft)
-	else
-		self.text:SetFormattedText(timeFormat, timeLeft)
+
+	if buffs:IsShown() then
+		buffs:ClearAllPoints()
+		SuperVillain:ReversePoint(buffs, db.buffs.anchorPoint, self, db.buffs.xOffset, db.buffs.yOffset)
+		if db.aurabar.attachTo ~= 'FRAME' then
+			bars:ClearAllPoints()
+			bars:SetPoint('BOTTOMLEFT', buffs, 'TOPLEFT', 0, 1)
+			bars:SetPoint('BOTTOMRIGHT', buffs, 'TOPRIGHT', 0, 1)
+		end
 	end
-end

-function MOD:UpdateAuraWatchFromHeader(group, override)
-	assert(self[group],"Invalid group specified.")
-	for i=1,self[group]:GetNumChildren() do
-		local frame = select(i, self[group]:GetChildren())
-		if frame and frame.Health then MOD:UpdateAuraWatch(frame,override) end
+	if debuffs:IsShown() then
+		debuffs:ClearAllPoints()
+		SuperVillain:ReversePoint(debuffs, db.debuffs.anchorPoint, self, db.debuffs.xOffset, db.debuffs.yOffset)
+		if db.aurabar.attachTo ~= 'FRAME' then
+			bars:ClearAllPoints()
+			bars:SetPoint('BOTTOMLEFT', debuffs, 'TOPLEFT', 0, 1)
+			bars:SetPoint('BOTTOMRIGHT', debuffs, 'TOPRIGHT', 0, 1)
+		end
 	end
 end
 --[[
@@ -536,56 +579,12 @@ function MOD:UpdateAuraWatch(frame, override)
 		frame.AuraWatch.Update(frame)
 	end
 	temp = nil
-end
---[[
-##########################################################
-UTILITY
-##########################################################
-]]--
-function MOD:SmartAuraDisplay()
-	local db = self.db;
-	local unit = self.unit;
-	if not db or not db.smartAuraDisplay or db.smartAuraDisplay == 'DISABLED' or not UnitExists(unit) then return end
-	local buffs = self.Buffs;
-	local debuffs = self.Debuffs;
-	local bars = self.AuraBars;
-	local friendly = UnitIsFriend('player',unit) == 1 and true or false;
-
-	if friendly then
-		if db.smartAuraDisplay == 'SHOW_DEBUFFS_ON_FRIENDLIES' then
-			buffs:Hide()
-			debuffs:Show()
-		else
-			buffs:Show()
-			debuffs:Hide()
-		end
-	else
-		if db.smartAuraDisplay == 'SHOW_DEBUFFS_ON_FRIENDLIES' then
-			buffs:Show()
-			debuffs:Hide()
-		else
-			buffs:Hide()
-			debuffs:Show()
-		end
-	end
-
-	if buffs:IsShown() then
-		buffs:ClearAllPoints()
-		SuperVillain:ReversePoint(buffs, db.buffs.anchorPoint, self, db.buffs.xOffset, db.buffs.yOffset)
-		if db.aurabar.attachTo ~= 'FRAME' then
-			bars:ClearAllPoints()
-			bars:SetPoint('BOTTOMLEFT', buffs, 'TOPLEFT', 0, 1)
-			bars:SetPoint('BOTTOMRIGHT', buffs, 'TOPRIGHT', 0, 1)
-		end
-	end
+end

-	if debuffs:IsShown() then
-		debuffs:ClearAllPoints()
-		SuperVillain:ReversePoint(debuffs, db.debuffs.anchorPoint, self, db.debuffs.xOffset, db.debuffs.yOffset)
-		if db.aurabar.attachTo ~= 'FRAME' then
-			bars:ClearAllPoints()
-			bars:SetPoint('BOTTOMLEFT', debuffs, 'TOPLEFT', 0, 1)
-			bars:SetPoint('BOTTOMRIGHT', debuffs, 'TOPRIGHT', 0, 1)
-		end
+function MOD:UpdateAuraWatchFromHeader(group, override)
+	assert(self[group], "Invalid group specified.")
+	for i = 1, self[group]:GetNumChildren() do
+		local frame = select(i, self[group]:GetChildren())
+		if frame and frame.Health then MOD:UpdateAuraWatch(frame, override) end
 	end
 end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/unit/common/media.lua b/Interface/AddOns/SVUI/packages/unit/common/media.lua
index a80e1c9..abcf609 100644
--- a/Interface/AddOns/SVUI/packages/unit/common/media.lua
+++ b/Interface/AddOns/SVUI/packages/unit/common/media.lua
@@ -109,7 +109,6 @@ function MOD:RefreshUnitMedia(unitName, updateUpvalues)
 	local db = self.db
 	local unitDB = db[unitName]
 	if(self[unitName] and unitDB and unitDB.enable) then
-
 		local frame = self[unitName]
 		local panel = frame.InfoPanel
 		if(panel) then
diff --git a/Interface/AddOns/SVUI/packages/unit/frames/all_units.lua b/Interface/AddOns/SVUI/packages/unit/frames/all_units.lua
index f202cd2..760fda6 100644
--- a/Interface/AddOns/SVUI/packages/unit/frames/all_units.lua
+++ b/Interface/AddOns/SVUI/packages/unit/frames/all_units.lua
@@ -34,6 +34,8 @@ local gmatch, gsub, join = string.gmatch, string.gsub, string.join;
 local abs, ceil, floor, round, min = math.abs, math.ceil, math.floor, math.round, math.min;
 --[[ TABLE METHODS ]]--
 local twipe = table.wipe;
+--[[ MUNGLUNCH's FASTER ASSERT FUNCTION ]]--
+local assert = enforce;
 --[[
 ##########################################################
 GET ADDON DATA
@@ -43,36 +45,65 @@ local SuperVillain, L = unpack(select(2, ...));
 local MOD = SuperVillain.Registry:Expose('SVUnit');
 local _, ns = ...
 local oUF_SuperVillain = ns.oUF
---[[ MUNGLUNCH's FASTER ASSERT FUNCTION ]]--
-local assert = enforce;
 assert(oUF_SuperVillain, "SVUI was unable to locate oUF.");
 local LSM = LibStub("LibSharedMedia-3.0");
 --[[
 ##########################################################
-LOCAL VARS
-##########################################################
-]]--
-local SETTINGS = {
-	["player"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1},
-	["target"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1},
-	["targettarget"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1},
-	["pet"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1},
-	["pettarget"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1},
-	["focus"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1},
-	["focustarget"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1},
-	["party"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1},
-	["raid"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1},
-	["raidpet"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1},
-	["assist"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1},
-	["tank"]={"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1},
-	["boss"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1},
-	["arena"]={"BOTTOMRIGHT","TOPLEFT","BOTTOMLEFT","TOPRIGHT",-1,1}
-};
---[[
-##########################################################
-LOCAL FUNCTIONS
+LOCALS
 ##########################################################
-]]--
+]]--
+local SortAuraBars;
+local ReversedUnit = {
+	["target"] = true,
+	["targettarget"] = true,
+	["pettarget"] = true,
+	["focustarget"] = true,
+	["boss"] = true,
+	["arena"] = true,
+}
+
+do
+	local hugeMath = math.huge
+
+	local TRRSort = function(a, b)
+		local compA = a.noTime and hugeMath or a.expirationTime
+		local compB = b.noTime and hugeMath or b.expirationTime
+		return compA < compB
+	end
+
+	local TDSort = function(a, b)
+		local compA = a.noTime and hugeMath or a.duration
+		local compB = b.noTime and hugeMath or b.duration
+		return compA > compB
+	end
+
+	local TDRSort = function(a, b)
+		local compA = a.noTime and hugeMath or a.duration
+		local compB = b.noTime and hugeMath or b.duration
+		return compA < compB
+	end
+
+	local NSort = function(a, b)
+		return a.name > b.name
+	end
+
+	SortAuraBars = function(parent, sorting)
+		if not parent then return end
+		if sorting == "TIME_REMAINING" then
+			parent.sort = true;
+		elseif sorting == "TIME_REMAINING_REVERSE" then
+			parent.sort = TRRSort
+		elseif sorting == "TIME_DURATION" then
+			parent.sort = TDSort
+		elseif sorting == "TIME_DURATION_REVERSE" then
+			parent.sort = TDRSort
+		elseif sorting == "NAME" then
+			parent.sort = NSort
+		else
+			parent.sort = nil;
+		end
+	end
+end
 local function FindAnchorFrame(frame, anchor, badPoint)
 	if badPoint or anchor == 'FRAME' then
 		return frame
@@ -97,21 +128,27 @@ CORE FUNCTIONS
 ]]--
 function MOD:RefreshUnitLayout(frame, template)
 	local db = frame.db
-	local UNIT_TEMPLATE = SETTINGS[template] or {"BOTTOMLEFT","TOPRIGHT","BOTTOMRIGHT","TOPLEFT",1,-1};
 	local GAP = SuperVillain:Scale(3);
 	local UNIT_WIDTH = db.width;
 	local UNIT_HEIGHT = db.height;
 	local BEST_SIZE = min(UNIT_WIDTH,UNIT_HEIGHT);
 	local AURA_HOLDER = db.width
 	local powerHeight = (db.power and db.power.enable) and (db.power.height - 1) or 1;
-	local BOTTOM_ANCHOR1 = UNIT_TEMPLATE[1];
-	local TOP_ANCHOR1 = UNIT_TEMPLATE[2];
-	local BOTTOM_ANCHOR2 = UNIT_TEMPLATE[3];
-	local TOP_ANCHOR2 = UNIT_TEMPLATE[4];
-	local MOD1,MOD2 = UNIT_TEMPLATE[5],UNIT_TEMPLATE[6];
+
+	local TOP_ANCHOR1, TOP_ANCHOR2, TOP_MODIFIER = "TOPRIGHT", "TOPLEFT", 1;
+	local BOTTOM_ANCHOR1, BOTTOM_ANCHOR2, BOTTOM_MODIFIER = "BOTTOMLEFT", "BOTTOMRIGHT", -1;
+	if(ReversedUnit[template]) then
+		TOP_ANCHOR1 = "TOPLEFT"
+		TOP_ANCHOR2 = "TOPRIGHT"
+		TOP_MODIFIER = -1
+		BOTTOM_ANCHOR1 = "BOTTOMRIGHT"
+		BOTTOM_ANCHOR2 = "BOTTOMLEFT"
+		BOTTOM_MODIFIER = 1
+	end
+
 	local portraitOverlay = false;
 	local overlayAnimation = false;
-	local portraitWidth = (1 * MOD1);
+	local portraitWidth = (1 * TOP_MODIFIER);
 	local healthPanel = frame.HealthPanel
 	local infoPanel = frame.InfoPanel
 	local calculatedHeight = db.height;
@@ -122,7 +159,7 @@ function MOD:RefreshUnitLayout(frame, template)

 	if(db.portrait and db.portrait.enable) then
 		if(not db.portrait.overlay) then
-			portraitWidth = ((db.portrait.width * MOD1) + (1 * MOD1))
+			portraitWidth = ((db.portrait.width * TOP_MODIFIER) + (1 * TOP_MODIFIER))
 		else
 			portraitOverlay = true
 			overlayAnimation = self.db.overlayAnimation
@@ -147,7 +184,7 @@ function MOD:RefreshUnitLayout(frame, template)
 	end

 	healthPanel:ClearAllPoints()
-	healthPanel:Point(TOP_ANCHOR1, frame, TOP_ANCHOR1, (1 * MOD2), -1)
+	healthPanel:Point(TOP_ANCHOR1, frame, TOP_ANCHOR1, (1 * BOTTOM_MODIFIER), -1)
 	healthPanel:Point(BOTTOM_ANCHOR1, frame, BOTTOM_ANCHOR1, portraitWidth, powerHeight)

 	if(frame.StatusPanel) then
@@ -316,8 +353,8 @@ function MOD:RefreshUnitLayout(frame, template)
 				end
 				power:ClearAllPoints()
 				power:Height(powerHeight - 2)
-				power:Point(BOTTOM_ANCHOR1, frame, BOTTOM_ANCHOR1, (portraitWidth - (1 * MOD2)), 2)
-				power:Point(BOTTOM_ANCHOR2, frame, BOTTOM_ANCHOR2, (2 * MOD2), 2)
+				power:Point(BOTTOM_ANCHOR1, frame, BOTTOM_ANCHOR1, (portraitWidth - (1 * BOTTOM_MODIFIER)), 2)
+				power:Point(BOTTOM_ANCHOR2, frame, BOTTOM_ANCHOR2, (2 * BOTTOM_MODIFIER), 2)
 			elseif frame:IsElementEnabled('Power')then
 				frame:DisableElement('Power')
 				power:Hide()
@@ -342,7 +379,7 @@ function MOD:RefreshUnitLayout(frame, template)
 				end
 				altPower.text:SetAlpha(1)
 				altPower:Point(TOP_ANCHOR2, frame, TOP_ANCHOR2, portraitWidth, -1)
-				altPower:Point(TOP_ANCHOR1, frame, TOP_ANCHOR1, (1 * MOD2), -1)
+				altPower:Point(TOP_ANCHOR1, frame, TOP_ANCHOR1, (1 * BOTTOM_MODIFIER), -1)
 				altPower:SetHeight(powerHeight)
 				altPower.Smooth = self.db.smoothbars;
 				altPower:HookScript("OnShow", Alt_OnShow)
@@ -377,8 +414,8 @@ function MOD:RefreshUnitLayout(frame, template)
 					portrait.anchor:SetFrameLevel(frame.ActionPanel:GetFrameLevel())
 				end

-				portrait:Point(TOP_ANCHOR2, healthPanel, TOP_ANCHOR2, (1 * MOD1), -1)
-				portrait:Point(BOTTOM_ANCHOR2, healthPanel, BOTTOM_ANCHOR2, (1 * MOD2), 1)
+				portrait:Point(TOP_ANCHOR2, healthPanel, TOP_ANCHOR2, (1 * TOP_MODIFIER), -1)
+				portrait:Point(BOTTOM_ANCHOR2, healthPanel, BOTTOM_ANCHOR2, (1 * BOTTOM_MODIFIER), 1)

 				portrait.Panel:Show()
 			else
@@ -391,11 +428,11 @@ function MOD:RefreshUnitLayout(frame, template)
 				end

 				if not frame.Power or not db.power.enable then
-					portrait:Point(TOP_ANCHOR2, frame, TOP_ANCHOR2, (1 * MOD1), -1)
-					portrait:Point(BOTTOM_ANCHOR2, healthPanel, BOTTOM_ANCHOR1, (4 * MOD2), 0)
+					portrait:Point(TOP_ANCHOR2, frame, TOP_ANCHOR2, (1 * TOP_MODIFIER), -1)
+					portrait:Point(BOTTOM_ANCHOR2, healthPanel, BOTTOM_ANCHOR1, (4 * BOTTOM_MODIFIER), 0)
 				else
-					portrait:Point(TOP_ANCHOR2, frame, TOP_ANCHOR2, (1 * MOD1), -1)
-					portrait:Point(BOTTOM_ANCHOR2, frame.Power, BOTTOM_ANCHOR1, (4 * MOD2), 0)
+					portrait:Point(TOP_ANCHOR2, frame, TOP_ANCHOR2, (1 * TOP_MODIFIER), -1)
+					portrait:Point(BOTTOM_ANCHOR2, frame.Power, BOTTOM_ANCHOR1, (4 * BOTTOM_MODIFIER), 0)
 				end
 			end
 		else
@@ -517,7 +554,7 @@ function MOD:RefreshUnitLayout(frame, template)

 			local attachTo = FindAnchorFrame(frame, db.buffs.attachTo, db.debuffs.attachTo == 'BUFFS' and db.buffs.attachTo == 'DEBUFFS')

-			SuperVillain:ReversePoint(buffs, db.buffs.anchorPoint, attachTo, db.buffs.xOffset + MOD2, db.buffs.yOffset)
+			SuperVillain:ReversePoint(buffs, db.buffs.anchorPoint, attachTo, db.buffs.xOffset + BOTTOM_MODIFIER, db.buffs.yOffset)
 			buffs:SetWidth((auraSize + buffs.spacing) * perRow)
 			buffs:Height((auraSize + buffs.spacing) * numRows)
 			buffs["growth-y"] = db.buffs.verticalGrowth;
@@ -549,7 +586,7 @@ function MOD:RefreshUnitLayout(frame, template)

 			local attachTo = FindAnchorFrame(frame, db.debuffs.attachTo, db.debuffs.attachTo == 'BUFFS' and db.buffs.attachTo == 'DEBUFFS')

-			SuperVillain:ReversePoint(debuffs, db.debuffs.anchorPoint, attachTo, db.debuffs.xOffset + MOD2, db.debuffs.yOffset)
+			SuperVillain:ReversePoint(debuffs, db.debuffs.anchorPoint, attachTo, db.debuffs.xOffset + BOTTOM_MODIFIER, db.debuffs.yOffset)
 			debuffs:SetWidth((auraSize + debuffs.spacing) * perRow)
 			debuffs:Height((auraSize + debuffs.spacing) * numRows)
 			debuffs["growth-y"] = db.debuffs.verticalGrowth;
@@ -568,47 +605,49 @@ function MOD:RefreshUnitLayout(frame, template)
 	if frame.AuraBars then
 		local auraBar = frame.AuraBars;
 		if db.aurabar.enable then
-			if not frame:IsElementEnabled('AuraBars') then frame:EnableElement('AuraBars')end
+			if not frame:IsElementEnabled("AuraBars") then frame:EnableElement("AuraBars") end
 			auraBar:Show()
-			auraBar.friendlyAuraType = db.aurabar.friendlyAuraType;
-			auraBar.enemyAuraType = db.aurabar.enemyAuraType;
+			auraBar.friendlyAuraType = db.aurabar.friendlyAuraType
+			auraBar.enemyAuraType = db.aurabar.enemyAuraType
+
 			local attachTo = frame.ActionPanel;
 			local preOffset = 1;
-			if(db.aurabar.attachTo == 'BUFFS' and frame.Buffs and frame.Buffs:IsShown()) then
+			if(db.aurabar.attachTo == "BUFFS" and frame.Buffs and frame.Buffs:IsShown()) then
 				attachTo = frame.Buffs
 				preOffset = 10
-			elseif(db.aurabar.attachTo == 'DEBUFFS' and frame.Debuffs and frame.Debuffs:IsShown()) then
+			elseif(db.aurabar.attachTo == "DEBUFFS" and frame.Debuffs and frame.Debuffs:IsShown()) then
 				attachTo = frame.Debuffs
 				preOffset = 10
-			elseif not isPlayer and SVUI_Player and db.aurabar.attachTo == 'PLAYER_AURABARS' then
+			elseif not isPlayer and SVUI_Player and db.aurabar.attachTo == "PLAYER_AURABARS" then
 				attachTo = SVUI_Player.AuraBars
 				preOffset = 10
-			end
-			local anchorPoint, relativePoint = 'BOTTOM', 'TOP';
-			if db.aurabar.anchorPoint == 'BELOW' then
-				anchorPoint, relativePoint = 'TOP', 'BOTTOM';
+			end
+
+			auraBar.auraBarHeight = db.aurabar.height;
+			auraBar:ClearAllPoints()
+			auraBar:SetSize(UNIT_WIDTH, db.aurabar.height)
+
+			if db.aurabar.anchorPoint == "BELOW" then
+				auraBar:Point("TOPLEFT", attachTo, "BOTTOMLEFT", 1, -preOffset)
 				auraBar.down = true
 			else
+				auraBar:Point("BOTTOMLEFT", attachTo, "TOPLEFT", 1, preOffset)
 				auraBar.down = false
 			end
-			local offSet = SuperVillain:Scale(preOffset)
-			local yOffset = db.aurabar.anchorPoint == 'BELOW' and -offSet or offSet;
-			auraBar.auraBarHeight = db.aurabar.height;
-			auraBar:ClearAllPoints()
-			auraBar:SetSize(UNIT_WIDTH, db.aurabar.height)
-			auraBar:Point(anchorPoint..'LEFT', attachTo, relativePoint..'LEFT', 1, yOffset)
 			auraBar.buffColor = oUF_SuperVillain.colors.buff_bars
+
 			if self.db.auraBarByType then
 				auraBar.debuffColor = nil;
 				auraBar.defaultDebuffColor = oUF_SuperVillain.colors.debuff_bars
 			else
 				auraBar.debuffColor = oUF_SuperVillain.colors.debuff_bars
 				auraBar.defaultDebuffColor = nil
-			end
-			self:SortAuraBars(auraBar, db.aurabar.sort)
+			end
+
+			SortAuraBars(auraBar, db.aurabar.sort)
 			auraBar:SetAnchors()
 		else
-			if frame:IsElementEnabled('AuraBars')then frame:DisableElement('AuraBars')auraBar:Hide()end
+			if frame:IsElementEnabled("AuraBars")then frame:DisableElement("AuraBars")auraBar:Hide()end
 		end
 	end

diff --git a/Interface/AddOns/SVUI/packages/unit/frames/basic/focus.lua b/Interface/AddOns/SVUI/packages/unit/frames/basic/focus.lua
index 67521d0..3a9d2ca 100644
--- a/Interface/AddOns/SVUI/packages/unit/frames/basic/focus.lua
+++ b/Interface/AddOns/SVUI/packages/unit/frames/basic/focus.lua
@@ -28,20 +28,25 @@ BUILD FUNCTION
 ]]--
 function MOD.Construct:focus(frame)
 	MOD:SetActionPanel(frame, "focus")
+
 	frame.Health = MOD:CreateHealthBar(frame, true, true)
-	frame.Health.frequentUpdates = true;
+	frame.Health.frequentUpdates = true
+
+	frame.HealPrediction = MOD:CreateHealPrediction(frame, true)
 	frame.Power = MOD:CreatePowerBar(frame, true)
-	frame.Buffs = MOD:CreateBuffs(frame)
+
 	frame.Castbar = MOD:CreateCastbar(frame, false, L["Focus Castbar"])
-	frame.Castbar.SafeZone = nil;
+	frame.Castbar.SafeZone = nil
+
 	frame.Castbar.LatencyTexture:Hide()
-	frame.RaidIcon = MOD:CreateRaidIcon(frame)
+	frame.Buffs = MOD:CreateBuffs(frame)
 	frame.Debuffs = MOD:CreateDebuffs(frame)
-	frame.HealPrediction = MOD:CreateHealPrediction(frame, true)
 	frame.AuraBars = MOD:CreateAuraBarHeader(frame, "focus")
-	frame.Range = { insideAlpha = 1, outsideAlpha = 1 }
 	tinsert(frame.__elements, MOD.SmartAuraDisplay)
 	frame:RegisterEvent("PLAYER_FOCUS_CHANGED", MOD.SmartAuraDisplay)
+
+	frame.RaidIcon = MOD:CreateRaidIcon(frame)
+	frame.Range = { insideAlpha = 1, outsideAlpha = 1 }
 	frame.XRay = MOD:CreateXRay_Closer(frame)
 	frame.XRay:SetPoint("BOTTOMRIGHT", 20, -10)
 	frame:Point("BOTTOMRIGHT", SVUI_Target, "TOPRIGHT", 0, 220)
diff --git a/Interface/AddOns/SVUI/packages/unit/frames/basic/target.lua b/Interface/AddOns/SVUI/packages/unit/frames/basic/target.lua
index c73bb8b..35d1682 100644
--- a/Interface/AddOns/SVUI/packages/unit/frames/basic/target.lua
+++ b/Interface/AddOns/SVUI/packages/unit/frames/basic/target.lua
@@ -28,14 +28,25 @@ BUILD FUNCTION
 ]]--
 function MOD.Construct:target(frame)
 	MOD:SetActionPanel(frame, "target")
+
 	frame.Health = MOD:CreateHealthBar(frame, true, true)
 	frame.Health.frequentUpdates = true
+	frame.HealPrediction = MOD:CreateHealPrediction(frame, true)
+
 	frame.Power = MOD:CreatePowerBar(frame, true, true)
 	frame.Power.frequentUpdates = true
+
 	MOD:CreatePortrait(frame)
+
+	frame.Castbar = MOD:CreateCastbar(frame, true, L["Target Castbar"], true)
+
 	frame.Buffs = MOD:CreateBuffs(frame)
 	frame.Debuffs = MOD:CreateDebuffs(frame)
-	frame.Castbar = MOD:CreateCastbar(frame, true, L["Target Castbar"], true)
+	frame.AuraBars = MOD:CreateAuraBarHeader(frame, "target")
+	frame.Afflicted = MOD:CreateAfflicted(frame)
+	tinsert(frame.__elements, MOD.SmartAuraDisplay)
+	frame:RegisterEvent("PLAYER_TARGET_CHANGED", MOD.SmartAuraDisplay)
+
 	frame.RaidIcon = MOD:CreateRaidIcon(frame)
 	local isSmall = MOD.db.target.combobar.smallIcons
 	if(SuperVillain.class == "ROGUE") then
@@ -43,14 +54,8 @@ function MOD.Construct:target(frame)
 	elseif(SuperVillain.class == "DRUID") then
 		frame.HyperCombo = MOD:CreateDruidCombobar(frame, isSmall)
 	end
-	frame.HealPrediction = MOD:CreateHealPrediction(frame, true)
-	frame.Afflicted = MOD:CreateAfflicted(frame)

 	frame.GPS = MOD:CreateGPS(frame)
-
-	tinsert(frame.__elements, MOD.SmartAuraDisplay)
-	frame:RegisterEvent("PLAYER_TARGET_CHANGED", MOD.SmartAuraDisplay)
-	frame.AuraBars = MOD:CreateAuraBarHeader(frame, "target")
 	frame.Range = { insideAlpha = 1, outsideAlpha = 1 }
 	frame.XRay = MOD:CreateXRay(frame)
 	frame.XRay:SetPoint("TOPRIGHT", 12, 12)
diff --git a/Interface/AddOns/SVUI/system/system.lua b/Interface/AddOns/SVUI/system/system.lua
index c80707d..75b3223 100644
--- a/Interface/AddOns/SVUI/system/system.lua
+++ b/Interface/AddOns/SVUI/system/system.lua
@@ -72,6 +72,7 @@ SuperVillain.Media = {};
 SuperVillain.DisplayAudit = {};
 SuperVillain.DynamicOptions = {};
 SuperVillain.snaps = {};
+SuperVillain.Dispellable = {};
 SuperVillain.Options = { type="group", name="|cff339fffConfig-O-Matic|r", args={}, };

 local svui_meta = {}
@@ -95,12 +96,13 @@ CREATE GLOBAL NAMESPACE
 _G[SVUINameSpace] = SVUICore;
 --[[
 ##########################################################
-CREATE GLOBAL NAMESPACE
+SET MANY VARIABLES
 ##########################################################
 ]]--
+local toonClass = select(2,UnitClass("player"));
 SuperVillain.version = GetAddOnMetadata(..., "Version");
 SuperVillain.HVAL = format("|cff%02x%02x%02x",0.2*255,0.5*255,1*255);
-SuperVillain.class = select(2,UnitClass("player"));
+SuperVillain.class = toonClass;
 SuperVillain.name = UnitName("player");
 SuperVillain.realm = GetRealmName();
 SuperVillain.build = tonumber(bld);
@@ -137,65 +139,43 @@ DISPEL MECHANICS
 ##########################################################
 ]]--
 local droodSpell1, droodSpell2 = GetSpellInfo(110309), GetSpellInfo(4987);
-local RefClassData = {
-	PALADIN = {
-		["ROLE"] = {"C", "T", "M"},
-		["DISPELL"] = {["Poison"] = true, ["Magic"] = false, ["Disease"] = true},
-		["MagicSpec"] = 1
-	},
-	PRIEST = {
-		["ROLE"] = {"C", "C", "C"},
-		["DISPELL"] = {["Magic"] = true, ["Disease"] = true},
-		["MagicSpec"] = false
-	},
-	WARLOCK = {
-		["ROLE"] = {"C", "C", "C"},
-		["DISPELL"] = false,
-		["MagicSpec"] = false
-	},
-	WARRIOR = {
-		["ROLE"] = {"M", "M", "T"},
-		["DISPELL"] = false,
-		["MagicSpec"] = false
-	},
-	HUNTER = {
-		["ROLE"] = {"M", "M", "M"},
-		["DISPELL"] = false,
-		["MagicSpec"] = false
-	},
-	SHAMAN = {
-		["ROLE"] = {"C", "M", "C"},
-		["DISPELL"] = {["Magic"] = false, ["Curse"] = true},
-		["MagicSpec"] = 3
-	},
-	ROGUE = {
-		["ROLE"] = {"M", "M", "M"},
-		["DISPELL"] = false,
-		["MagicSpec"] = false
-	},
-	MAGE = {
-		["ROLE"] = {"C", "C", "C"},
-		["DISPELL"] = {["Curse"] = true},
-		["MagicSpec"] = false
-	},
-	DEATHKNIGHT = {
-		["ROLE"] = {"T", "M", "M"},
-		["DISPELL"] = false,
-		["MagicSpec"] = false
-	},
-	DRUID = {
-		["ROLE"] = {"C", "M", "T", "C"},
-		["DISPELL"] = {["Magic"] = false, ["Curse"] = true, ["Poison"] = true, ["Disease"] = false},
-		["MagicSpec"] = 4
-	},
-	MONK = {
-		["ROLE"] = {"T", "C", "M"},
-		["DISPELL"] = {["Magic"] = false, ["Disease"] = true, ["Poison"] = true},
-		["MagicSpec"] = 2
-	}
-}
-
-local DispellData = RefClassData[SuperVillain.class]["DISPELL"];
+local RefClassRoles;
+local RefMagicSpec;
+do
+	if(toonClass == "PRIEST") then
+		RefClassRoles = {"C", "C", "C"}
+		SuperVillain.Dispellable = {["Magic"] = true, ["Disease"] = true}
+	elseif(toonClass == "WARLOCK") then
+		RefClassRoles = {"C", "C", "C"}
+	elseif(toonClass == "WARRIOR") then
+		RefClassRoles = {"M", "M", "T"}
+	elseif(toonClass == "HUNTER") then
+		RefClassRoles = {"M", "M", "M"}
+	elseif(toonClass == "ROGUE") then
+		RefClassRoles = {"M", "M", "M"}
+	elseif(toonClass == "MAGE") then
+		RefClassRoles = {"C", "C", "C"}
+		SuperVillain.Dispellable = {["Curse"] = true}
+	elseif(toonClass == "DEATHKNIGHT") then
+		RefClassRoles = {"T", "M", "M"}
+	elseif(toonClass == "DRUID") then
+		RefMagicSpec = 4
+		RefClassRoles = {"C", "M", "T", "C"}
+		SuperVillain.Dispellable = {["Curse"] = true, ["Poison"] = true}
+	elseif(toonClass == "SHAMAN") then
+		RefMagicSpec = 3
+		RefClassRoles = {"C", "M", "C"}
+		SuperVillain.Dispellable = {["Curse"] = true}
+	elseif(toonClass == "MONK") then
+		RefMagicSpec = 2
+		RefClassRoles = {"T", "C", "M"}
+		SuperVillain.Dispellable = {["Disease"] = true, ["Poison"] = true}
+	elseif(toonClass == "PALADIN") then
+		RefMagicSpec = 1
+		RefClassRoles = {"C", "T", "M"}
+		SuperVillain.Dispellable = {["Poison"] = true, ["Disease"] = true}
+	end
+end

 local function GetTalentInfo(arg)
 	if type(arg) == "number" then
@@ -205,18 +185,11 @@ local function GetTalentInfo(arg)
 	end
 end

-function SuperVillain:DispellAvailable(debuffType)
-	if not DispellData then return end
-	if DispellData[debuffType] then
-		return true
-	end
-end
-
 function SuperVillain:DefinePlayerRole()
 	local spec = GetSpecialization()
 	local role;
 	if spec then
-		role = RefClassData[self.class]["ROLE"][spec]
+		role = RefClassRoles[spec]
 		if role == "T" and UnitLevel("player") == MAX_PLAYER_LEVEL then
 			local bonus, pvp = GetCombatRatingBonus(COMBAT_RATING_RESILIENCE_PLAYER_DAMAGE_TAKEN), false;
 			if bonus > GetDodgeChance() and bonus > GetParryChance() then
@@ -238,11 +211,11 @@ function SuperVillain:DefinePlayerRole()
 		self.ClassRole = role;
 		self.RoleChangedCallback()
 	end
-	if RefClassData[self.class]["MagicSpec"] then
-		if GetTalentInfo(RefClassData[self.class]["MagicSpec"]) then
-			DispellData.Magic = true
-		else
-			DispellData.Magic = false
+	if RefMagicSpec then
+		if(GetTalentInfo(RefMagicSpec)) then
+			self.Dispellable["Magic"] = true
+		elseif(self.Dispellable["Magic"]) then
+			self.Dispellable["Magic"] = nil
 		end
 	end
 end
@@ -486,14 +459,14 @@ local Registry_OnEvent = function(self, event, arg, ...)
 			SuperVillain.BGTimer = nil
 		end
 	elseif(event == "SPELLS_CHANGED") then
-		if (SuperVillain.class ~= "DRUID") then
+		if (toonClass ~= "DRUID") then
 			self:UnregisterEvent("SPELLS_CHANGED")
 			return
 		end
 		if GetSpellInfo(droodSpell1) == droodSpell2 then
-			DispellData.Disease = true
-		else
-			DispellData.Disease = false
+			SuperVillain.Dispellable["Disease"] = true
+		elseif(SuperVillain.Dispellable["Disease"]) then
+			SuperVillain.Dispellable["Disease"] = nil
 		end
 	elseif(event == "PET_BATTLE_CLOSE") then
 		SuperVillain:PushDisplayAudit()
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua
index a2fd324..1ba20b1 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua
@@ -36,397 +36,397 @@ local _, ns = ...
 local subOrder = 11;
 for w=10,40,15 do
 	subOrder = subOrder + 1
-	SuperVillain.Options.args.SVUnit.args['raid' .. w] ={
-		name = L['Raid-' .. w .. ' Frames'],
-		type = 'group',
-		order = subOrder,
-		childGroups = "tab",
-		get = function(l) return SuperVillain.db.SVUnit['raid' .. w][l[#l]] end,
-		set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w)end,
-		args ={
+	SuperVillain.Options.args.SVUnit.args["raid" .. w] = {
+		name = L["Raid-" .. w .. " Frames"],
+		type = "group",
+		order = subOrder,
+		childGroups = "tab",
+		get = function(l) return SuperVillain.db.SVUnit["raid" .. w][l[#l]] end,
+		set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w)end,
+		args = {
 			enable =
 			{
-				type = 'toggle',
-				order = 1,
-				name = L['Enable'],
-			},
-			configureToggle ={
-				order = 2,
-				type = 'execute',
-				name = L['Display Frames'],
-				func = function()MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w], _G['SVUI_Raid' .. w].forceShow ~= true or nil)end,
-			},
-			resetSettings ={
-				type = 'execute',
-				order = 3,
-				name = L['Restore Defaults'],
-				func = function(l, m)MOD:ResetUnitOptions('raid' .. w)SuperVillain:ResetMovables('Raid 1-' .. w .. ' Frames')end,
-			},
-			tabGroups={
-				order=3,
-				type='group',
-				name=L['Unit Options'],
-				childGroups="tree",
-				args={
-					commonGroup={
-						order=1,
-						type='group',
-						name=L['General Settings'],
-						args={
+				type = "toggle",
+				order = 1,
+				name = L["Enable"],
+			},
+			configureToggle = {
+				order = 2,
+				type = "execute",
+				name = L["Display Frames"],
+				func = function()MOD:UpdateGroupConfig(_G["SVUI_Raid" .. w], _G["SVUI_Raid" .. w].forceShow  ~= true or nil)end,
+			},
+			resetSettings = {
+				type = "execute",
+				order = 3,
+				name = L["Restore Defaults"],
+				func = function(l, m)MOD:ResetUnitOptions("raid" .. w)SuperVillain:ResetMovables("Raid 1-" .. w .. " Frames")end,
+			},
+			tabGroups = {
+				order = 3,
+				type = "group",
+				name = L["Unit Options"],
+				childGroups = "tree",
+				args = {
+					commonGroup = {
+						order = 1,
+						type = "group",
+						name = L["General Settings"],
+						args = {
 							hideonnpc =
 							{
-								type = 'toggle',
-								order = 2,
-								name = L['Text Toggle On NPC'],
-								desc = L['Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point.'],
-								get = function(l)return SuperVillain.db.SVUnit['raid' .. w]['power'].hideonnpc end,
-								set = function(l, m)SuperVillain.db.SVUnit['raid' .. w]['power'].hideonnpc = m;MOD:SetGroupFrame('raid' .. w)end,
-							},
-							rangeCheck ={
-								order = 3,
-								name = L["Range Check"],
-								desc = L["Check if you are in range to cast spells on this specific unit."],
-								type = "toggle",
-							},
-							predict ={
-								order = 4,
-								name = L['Heal Prediction'],
-								desc = L['Show a incomming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals.'],
-								type = 'toggle',
-							},
-							threatEnabled ={
-								type = 'toggle',
-								order = 5,
-								name = L['Show Threat'],
-							},
-							colorOverride ={
-								order = 6,
-								name = L['Class Color Override'],
-								desc = L['Override the default class color setting.'],
-								type = 'select',
+								type = "toggle",
+								order = 2,
+								name = L["Text Toggle On NPC"],
+								desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."],
+								get = function(l)return SuperVillain.db.SVUnit["raid" .. w]["power"].hideonnpc end,
+								set = function(l, m)SuperVillain.db.SVUnit["raid" .. w]["power"].hideonnpc = m;MOD:SetGroupFrame("raid" .. w)end,
+							},
+							rangeCheck = {
+								order = 3,
+								name = L["Range Check"],
+								desc = L["Check if you are in range to cast spells on this specific unit."],
+								type = "toggle",
+							},
+							predict = {
+								order = 4,
+								name = L["Heal Prediction"],
+								desc = L["Show a incomming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."],
+								type = "toggle",
+							},
+							threatEnabled = {
+								type = "toggle",
+								order = 5,
+								name = L["Show Threat"],
+							},
+							colorOverride = {
+								order = 6,
+								name = L["Class Color Override"],
+								desc = L["Override the default class color setting."],
+								type = "select",
 								values =
 								{
-									['USE_DEFAULT'] = L['Use Default'],
-									['FORCE_ON'] = L['Force On'],
-									['FORCE_OFF'] = L['Force Off'],
-								},
-							},
-							positionsGroup ={
-								order = 100,
-								name = L['Size and Positions'],
-								type = 'group',
-								guiInline = true,
-								set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w, nil, nil, true)end,
+									["USE_DEFAULT"] = L["Use Default"],
+									["FORCE_ON"] = L["Force On"],
+									["FORCE_OFF"] = L["Force Off"],
+								},
+							},
+							positionsGroup = {
+								order = 100,
+								name = L["Size and Positions"],
+								type = "group",
+								guiInline = true,
+								set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w, nil, nil, true)end,
 								args =
 								{
 									gridMode =
 									{
-										order = 1,
-										name = L["Enable Grid mode"],
-										type = 'toggle',
+										order = 1,
+										name = L["Enable Grid mode"],
+										type = "toggle",
 										set = function(l, m)
 											MOD:ChangeDBVar(m, l[#l], "raid" .. w);
-											MOD:SetGroupFrame('raid' .. w)
+											MOD:SetGroupFrame("raid" .. w)
 											MOD:ChangeDBVar(m, l[#l], "raidpet");
-											MOD:SetGroupFrame('raidpet')
+											MOD:SetGroupFrame("raidpet")
 											MOD:ChangeDBVar(m, l[#l], "tank");
-											MOD:SetGroupFrame('tank')
+											MOD:SetGroupFrame("tank")
 											MOD:ChangeDBVar(m, l[#l], "assist");
-											MOD:SetGroupFrame('assist')
-										end,
-									},
+											MOD:SetGroupFrame("assist")
+										end,
+									},
 									width =
 									{
-										order = 2,
-										name = L['Width'],
-										type = 'range',
-										min = 10,
-										max = 500,
-										step = 1,
-										set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w)end,
-									},
+										order = 2,
+										name = L["Width"],
+										type = "range",
+										min = 10,
+										max = 500,
+										step = 1,
+										set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w)end,
+									},
 									height =
 									{
-										order = 3,
-										name = L['Height'],
-										type = 'range',
-										min = 10,
-										max = 500,
-										step = 1,
-										set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w)end,
-									},
+										order = 3,
+										name = L["Height"],
+										type = "range",
+										min = 10,
+										max = 500,
+										step = 1,
+										set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w)end,
+									},
 									spacer =
 									{
-										order = 4,
-										name = '',
-										type = 'description',
-										width = 'full',
-									},
+										order = 4,
+										name = "",
+										type = "description",
+										width = "full",
+									},
 									showBy =
 									{
-										order = 5,
-										name = L['Growth Direction'],
-										desc = L['Growth direction from the first unitframe.'],
-										type = 'select',
+										order = 5,
+										name = L["Growth Direction"],
+										desc = L["Growth direction from the first unitframe."],
+										type = "select",
 										values =
 										{
-											DOWN_RIGHT = format(L['%s and then %s'], L['Down'], L['Right']),
-											DOWN_LEFT = format(L['%s and then %s'], L['Down'], L['Left']),
-											UP_RIGHT = format(L['%s and then %s'], L['Up'], L['Right']),
-											UP_LEFT = format(L['%s and then %s'], L['Up'], L['Left']),
-											RIGHT_DOWN = format(L['%s and then %s'], L['Right'], L['Down']),
-											RIGHT_UP = format(L['%s and then %s'], L['Right'], L['Up']),
-											LEFT_DOWN = format(L['%s and then %s'], L['Left'], L['Down']),
-											LEFT_UP = format(L['%s and then %s'], L['Left'], L['Up']),
-										},
-									},
+											DOWN_RIGHT = format(L["%s and then %s"], L["Down"], L["Right"]),
+											DOWN_LEFT = format(L["%s and then %s"], L["Down"], L["Left"]),
+											UP_RIGHT = format(L["%s and then %s"], L["Up"], L["Right"]),
+											UP_LEFT = format(L["%s and then %s"], L["Up"], L["Left"]),
+											RIGHT_DOWN = format(L["%s and then %s"], L["Right"], L["Down"]),
+											RIGHT_UP = format(L["%s and then %s"], L["Right"], L["Up"]),
+											LEFT_DOWN = format(L["%s and then %s"], L["Left"], L["Down"]),
+											LEFT_UP = format(L["%s and then %s"], L["Left"], L["Up"]),
+										},
+									},
 									gCount =
 									{
-										order = 7,
-										type = 'range',
-										name = L['Number of Groups'],
-										min = 1,
-										max = 8,
-										step = 1,
+										order = 7,
+										type = "range",
+										name = L["Number of Groups"],
+										min = 1,
+										max = 8,
+										step = 1,
 										set = function(l, m)
 											MOD:ChangeDBVar(m, l[#l], "raid" .. w);
-											MOD:SetGroupFrame('raid' .. w)
-											if _G['SVUI_Raid' .. w].isForced then
-												MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w])
-												MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w], true)
+											MOD:SetGroupFrame("raid" .. w)
+											if _G["SVUI_Raid" .. w].isForced then
+												MOD:UpdateGroupConfig(_G["SVUI_Raid" .. w])
+												MOD:UpdateGroupConfig(_G["SVUI_Raid" .. w], true)
 											end
-										end,
-									},
+										end,
+									},
 									gRowCol =
 									{
-										order = 8,
-										type = 'range',
-										name = L['Groups Per Row/Column'],
-										min = 1,
-										max = 8,
-										step = 1,
+										order = 8,
+										type = "range",
+										name = L["Groups Per Row / Column"],
+										min = 1,
+										max = 8,
+										step = 1,
 										set = function(l, m)
 											MOD:ChangeDBVar(m, l[#l], "raid" .. w);
-											MOD:SetGroupFrame('raid' .. w)
-											if _G['SVUI_Raid' .. w].isForced then
-												MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w])
-												MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w], true)
+											MOD:SetGroupFrame("raid" .. w)
+											if _G["SVUI_Raid" .. w].isForced then
+												MOD:UpdateGroupConfig(_G["SVUI_Raid" .. w])
+												MOD:UpdateGroupConfig(_G["SVUI_Raid" .. w], true)
 											end
-										end,
-									},
+										end,
+									},
 									wrapXOffset =
 									{
-										order = 9,
-										type = 'range',
-										name = L['Horizontal Spacing'],
-										min = 0,
-										max = 50,
-										step = 1,
-									},
+										order = 9,
+										type = "range",
+										name = L["Horizontal Spacing"],
+										min = 0,
+										max = 50,
+										step = 1,
+									},
 									wrapYOffset =
 									{
-										order = 10,
-										type = 'range',
-										name = L['Vertical Spacing'],
-										min = 0,
-										max = 50,
-										step = 1,
-									},
-								},
-							},
-							visibilityGroup ={
-								order = 200,
-								name = L['Visibility'],
-								type = 'group',
-								guiInline = true,
-								set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w, nil, nil, true)end,
+										order = 10,
+										type = "range",
+										name = L["Vertical Spacing"],
+										min = 0,
+										max = 50,
+										step = 1,
+									},
+								},
+							},
+							visibilityGroup = {
+								order = 200,
+								name = L["Visibility"],
+								type = "group",
+								guiInline = true,
+								set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w, nil, nil, true)end,
 								args =
 								{
 									showPlayer =
 									{
-										order = 1,
-										type = 'toggle',
-										name = L['Display Player'],
-										desc = L['When true, the header includes the player when not in a raid.'],
-									},
+										order = 1,
+										type = "toggle",
+										name = L["Display Player"],
+										desc = L["When true, the header includes the player when not in a raid."],
+									},
 									visibility =
 									{
-										order = 2,
-										type = 'input',
-										name = L['Visibility'],
-										desc = L['The following macro must be true in order for the group to be shown, in addition to any filter that may already be set.'],
-										width = 'full',
-										desc = L['TEXT_FORMAT_DESC'],
-									},
-								},
-							},
-							sortingGroup ={
-								order = 300,
-								type = 'group',
-								guiInline = true,
-								name = L['Sorting'],
-								set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w, nil, nil, true)end,
+										order = 2,
+										type = "input",
+										name = L["Visibility"],
+										desc = L["The following macro must be true in order for the group to be shown, in addition to any filter that may already be set."],
+										width = "full",
+										desc = L["TEXT_FORMAT_DESC"],
+									},
+								},
+							},
+							sortingGroup = {
+								order = 300,
+								type = "group",
+								guiInline = true,
+								name = L["Sorting"],
+								set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w, nil, nil, true)end,
 								args =
 								{
 									sortMethod =
 									{
-										order = 1,
-										name = L['Group By'],
-										desc = L['Set the order that the group will sort.'],
-										type = 'select',
+										order = 1,
+										name = L["Group By"],
+										desc = L["Set the order that the group will sort."],
+										type = "select",
 										values =
 										{
-											['CLASS'] = CLASS,
-											['ROLE'] = ROLE.."(Tanks, Healers, DPS)",
-											['ROLE_TDH'] = ROLE.."(Tanks, DPS, Healers)",
-											['ROLE_HDT'] = ROLE.."(Healers, DPS, Tanks)",
-											['ROLE_HTD'] = ROLE.."(Healers, Tanks, DPS)",
-											['NAME'] = NAME,
-											['MTMA'] = L['Main Tanks / Main Assist'],
-											['GROUP'] = GROUP,
-										},
-									},
+											["CLASS"] = CLASS,
+											["ROLE"] = ROLE.."(Tanks, Healers, DPS)",
+											["ROLE_TDH"] = ROLE.."(Tanks, DPS, Healers)",
+											["ROLE_HDT"] = ROLE.."(Healers, DPS, Tanks)",
+											["ROLE_HTD"] = ROLE.."(Healers, Tanks, DPS)",
+											["NAME"] = NAME,
+											["MTMA"] = L["Main Tanks  /  Main Assist"],
+											["GROUP"] = GROUP,
+										},
+									},
 									sortDir =
 									{
-										order = 2,
-										name = L['Sort Direction'],
-										desc = L['Defines the sort order of the selected sort method.'],
-										type = 'select',
+										order = 2,
+										name = L["Sort Direction"],
+										desc = L["Defines the sort order of the selected sort method."],
+										type = "select",
 										values =
 										{
-											['ASC'] = L['Ascending'],
-											['DESC'] = L['Descending'],
-										},
-									},
+											["ASC"] = L["Ascending"],
+											["DESC"] = L["Descending"],
+										},
+									},
 									spacer =
 									{
-										order = 3,
-										type = 'description',
-										width = 'full',
-										name = ' ',
-									},
+										order = 3,
+										type = "description",
+										width = "full",
+										name = " ",
+									},
 									rSort =
 									{
-										order = 4,
-										name = L['Raid-Wide Sorting'],
-										desc = L['Enabling this allows raid-wide sorting however you will not be able to distinguish between groups.'],
-										type = 'toggle',
-									},
+										order = 4,
+										name = L["Raid-Wide Sorting"],
+										desc = L["Enabling this allows raid-wide sorting however you will not be able to distinguish between groups."],
+										type = "toggle",
+									},
 									invertGroupingOrder =
 									{
-										order = 5,
-										name = L['Invert Grouping Order'],
-										desc = L['Enabling this inverts the grouping order when the raid is not full, this will reverse the direction it starts from.'],
-										disabled = function()return not SuperVillain.db.SVUnit['raid' .. w].rSort end,
-										type = 'toggle',
-									},
+										order = 5,
+										name = L["Invert Grouping Order"],
+										desc = L["Enabling this inverts the grouping order when the raid is not full, this will reverse the direction it starts from."],
+										disabled = function()return not SuperVillain.db.SVUnit["raid" .. w].rSort end,
+										type = "toggle",
+									},
 									startFromCenter =
 									{
-										order = 6,
-										name = L['Start Near Center'],
-										desc = L['The initial group will start near the center and grow out.'],
-										disabled = function()return not SuperVillain.db.SVUnit['raid' .. w].rSort end,
-										type = 'toggle',
-									},
-								},
+										order = 6,
+										name = L["Start Near Center"],
+										desc = L["The initial group will start near the center and grow out."],
+										disabled = function()return not SuperVillain.db.SVUnit["raid" .. w].rSort end,
+										type = "toggle",
+									},
+								},
 							}
 						}
-					},
-					misc = ns:SetMiscConfigGroup(true, MOD.SetGroupFrame, 'raid' .. w),
-					health = ns:SetHealthConfigGroup(true, MOD.SetGroupFrame, 'raid' .. w),
-					power = ns:SetPowerConfigGroup(false, MOD.SetGroupFrame, 'raid' .. w),
-					name = ns:SetNameConfigGroup(MOD.SetGroupFrame, 'raid' .. w),
-					buffs = ns:SetAuraConfigGroup(true, 'buffs', true, MOD.SetGroupFrame, 'raid' .. w),
-					debuffs = ns:SetAuraConfigGroup(true, 'debuffs', true, MOD.SetGroupFrame, 'raid' .. w),
-					buffIndicator ={
-						order = 600,
-						type = 'group',
-						name = L['Buff Indicator'],
+					},
+					misc = ns:SetMiscConfigGroup(true, MOD.SetGroupFrame, "raid" .. w),
+					health = ns:SetHealthConfigGroup(true, MOD.SetGroupFrame, "raid" .. w),
+					power = ns:SetPowerConfigGroup(false, MOD.SetGroupFrame, "raid" .. w),
+					name = ns:SetNameConfigGroup(MOD.SetGroupFrame, "raid" .. w),
+					buffs = ns:SetAuraConfigGroup(true, "buffs", true, MOD.SetGroupFrame, "raid" .. w),
+					debuffs = ns:SetAuraConfigGroup(true, "debuffs", true, MOD.SetGroupFrame, "raid" .. w),
+					buffIndicator = {
+						order = 600,
+						type = "group",
+						name = L["Buff Indicator"],
 						get = function(l)return
-						SuperVillain.db.SVUnit['raid' .. w]['buffIndicator'][l[#l]]end,
-						set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w, "buffIndicator");MOD:SetGroupFrame('raid' .. w)end,
+						SuperVillain.db.SVUnit["raid" .. w]["buffIndicator"][l[#l]]end,
+						set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w, "buffIndicator");MOD:SetGroupFrame("raid" .. w)end,

-						args ={
-							enable ={
-								type = 'toggle',
-								name = L['Enable'],
-								order = 1,
-							},
-							size ={
-								type = 'range',
-								name = L['Size'],
-								desc = L['Size of the indicator icon.'],
-								order = 2,
-								min = 4,
-								max = 15,
-								step = 1,
-							},
-							configureButton ={
-								type = 'execute',
-								name = L['Configure Auras'],
-								func = function()SuperVillain:SetToFilterConfig('Buff Indicator')end,
-								order = 3,
-							},
+						args = {
+							enable = {
+								type = "toggle",
+								name = L["Enable"],
+								order = 1,
+							},
+							size = {
+								type = "range",
+								name = L["Size"],
+								desc = L["Size of the indicator icon."],
+								order = 2,
+								min = 4,
+								max = 15,
+								step = 1,
+							},
+							configureButton = {
+								type = "execute",
+								name = L["Configure Auras"],
+								func = function()SuperVillain:SetToFilterConfig("Buff Indicator")end,
+								order = 3,
+							},

-						},
-					},
-					rdebuffs ={
-						order = 800,
-						type = 'group',
-						name = L['RaidDebuff Indicator'],
+						},
+					},
+					rdebuffs = {
+						order = 800,
+						type = "group",
+						name = L["RaidDebuff Indicator"],
 						get = function(l)return
-						SuperVillain.db.SVUnit['raid' .. w]['rdebuffs'][l[#l]]end,
-						set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w, "rdebuffs");MOD:SetGroupFrame('raid' .. w)end,
-						args ={
-							enable ={
-								type = 'toggle',
-								name = L['Enable'],
-								order = 1,
-							},
-							size ={
-								type = 'range',
-								name = L['Size'],
-								order = 2,
-								min = 8,
-								max = 35,
-								step = 1,
-							},
-							fontSize ={
-								type = 'range',
-								name = L['Font Size'],
-								order = 3,
-								min = 7,
-								max = 22,
-								step = 1,
-							},
-							xOffset ={
-								order = 4,
-								type = 'range',
-								name = L['xOffset'],
-								min =  - 300,
-								max = 300,
-								step = 1,
-							},
-							yOffset ={
-								order = 5,
-								type = 'range',
-								name = L['yOffset'],
-								min =  - 300,
-								max = 300,
-								step = 1,
-							},
-							configureButton ={
-								type = 'execute',
-								name = L['Configure Auras'],
-								func = function()SuperVillain:SetToFilterConfig('Raid')end,
-								order = 7,
-							},
-						},
-					},
-					icons = ns:SetIconConfigGroup(MOD.SetGroupFrame, 'raid' .. w),
-				},
-			},
-		},
+						SuperVillain.db.SVUnit["raid" .. w]["rdebuffs"][l[#l]]end,
+						set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w, "rdebuffs");MOD:SetGroupFrame("raid" .. w)end,
+						args = {
+							enable = {
+								type = "toggle",
+								name = L["Enable"],
+								order = 1,
+							},
+							size = {
+								type = "range",
+								name = L["Size"],
+								order = 2,
+								min = 8,
+								max = 35,
+								step = 1,
+							},
+							fontSize = {
+								type = "range",
+								name = L["Font Size"],
+								order = 3,
+								min = 7,
+								max = 22,
+								step = 1,
+							},
+							xOffset = {
+								order = 4,
+								type = "range",
+								name = L["xOffset"],
+								min =  - 300,
+								max = 300,
+								step = 1,
+							},
+							yOffset = {
+								order = 5,
+								type = "range",
+								name = L["yOffset"],
+								min =  - 300,
+								max = 300,
+								step = 1,
+							},
+							configureButton = {
+								type = "execute",
+								name = L["Configure Auras"],
+								func = function()SuperVillain:SetToFilterConfig("Raid")end,
+								order = 7,
+							},
+						},
+					},
+					icons = ns:SetIconConfigGroup(MOD.SetGroupFrame, "raid" .. w),
+				},
+			},
+		},
 	}
 end