Quantcast

5.3.1

Steven Jackson [12-03-14 - 04:52]
5.3.1
Filename
Interface/AddOns/SVUI/SVUI.toc
Interface/AddOns/SVUI/framework/docks/docks.lua
Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua
Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Registry.lua
Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc
Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ArcaneCharge/oUF_ArcaneCharge.toc
Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Combatant/oUF_Combatant.toc
Interface/AddOns/SVUI/packages/tools/components/questwatch.lua
Interface/AddOns/SVUI/packages/unit/elements/castbar.lua
Interface/AddOns/SVUI/scripts/mounts.lua
Interface/AddOns/SVUI/setup/installer.lua
Interface/AddOns/SVUI/setup/presets.lua
Interface/AddOns/SVUI/system/credits.lua
Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc
Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc
Interface/AddOns/SVUI_ConfigOMatic/components/_load.xml
Interface/AddOns/SVUI_ConfigOMatic/components/layouts.lua
Interface/AddOns/SVUI_ConfigOMatic/components/profiles.lua
Interface/AddOns/SVUI_ConfigOMatic/language/generic.lua
Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc
Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc
Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc
Interface/AddOns/SVUI_StyleOMatic/Loader.lua
Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc
Interface/AddOns/SVUI_StyleOMatic/components/addons/Omen.lua
Interface/AddOns/SVUI_StyleOMatic/components/addons/Recount.lua
Interface/AddOns/SVUI_StyleOMatic/components/blizzard/gossip.lua
Interface/AddOns/SVUI_StyleOMatic/components/blizzard/worldmap.lua
Interface/AddOns/SVUI_StyleOMatic/components/style_methods.lua
Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc
diff --git a/Interface/AddOns/SVUI/SVUI.toc b/Interface/AddOns/SVUI/SVUI.toc
index a8021e8..f66165b 100644
--- a/Interface/AddOns/SVUI/SVUI.toc
+++ b/Interface/AddOns/SVUI/SVUI.toc
@@ -1,11 +1,11 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 5.3.0
+## Version: 5.3.1
 ## Title: |cffFF9900SVUI|r
 ## Notes: Supervillain UI [|cff9911FFCore Framework|r].
 ## SavedVariables: SVUI_Global, SVUI_Errors
 ## SavedVariablesPerCharacter: SVUI_Profile, SVUI_Cache, SVUI_Filters, SVUI_Layouts
-## OptionalDeps: Blizzard_DebugTools, Blizzard_PetJournal, SharedMedia
+## OptionalDeps: Blizzard_DebugTools, Blizzard_PetJournal, Blizzard_ObjectiveTracker, SharedMedia
 ## X-SVUIName: SuperVillain UI
 ## X-SVUISchema: Core
 ## X-oUF: oUF_Villain
diff --git a/Interface/AddOns/SVUI/framework/docks/docks.lua b/Interface/AddOns/SVUI/framework/docks/docks.lua
index d414c83..fbe28f7 100644
--- a/Interface/AddOns/SVUI/framework/docks/docks.lua
+++ b/Interface/AddOns/SVUI/framework/docks/docks.lua
@@ -158,7 +158,7 @@ local RefreshDockWindows = function(self)
 	-- print(table.dump(self.Data.Windows))
 	for name,window in pairs(self.Data.Windows) do
 		if(window) then
-			if(not InCombatLockdown() or (InCombatLockdown() and (window.IsProtected and not window:IsProtected()))) then
+			if((window.IsProtected and not window:IsProtected()) or (not InCombatLockdown())) then
 				if(window.DockButton) then
 					window.DockButton:Deactivate()
 				end
@@ -175,7 +175,7 @@ end
 local RefreshDockButtons = function(self)
 	for name,docklet in pairs(Dock.Registration) do
 		if(docklet) then
-			if(not InCombatLockdown() or (InCombatLockdown() and (docklet.IsProtected and not docklet:IsProtected()))) then
+			if((docklet.IsProtected and not docklet:IsProtected()) or (not InCombatLockdown())) then
 				if(docklet.DockButton) then
 					docklet.DockButton:Deactivate()
 				end
@@ -195,7 +195,10 @@ local GetDefault = function(self)
 		if window and _G[window] then
 			self:Refresh()
 			self.Parent.Window.FrameLink = _G[window]
-			self.Parent.Window:Show()
+			if(not self.Parent.Window:IsShown() and (not InCombatLockdown())) then
+				self.Parent.Window:Show()
+			end
+			if(InCombatLockdown() and (_G[window].IsProtected and _G[window]:IsProtected())) then return end
 			_G[window]:Show()
 			button:Activate()
 		end
@@ -210,7 +213,10 @@ local OldDefault = function(self)
 		if window and _G[window] then
 			self:Refresh()
 			self.Parent.Window.FrameLink = _G[window]
-			self.Parent.Window:Show()
+			if(not self.Parent.Window:IsShown() and (not InCombatLockdown())) then
+				self.Parent.Window:Show()
+			end
+			if(InCombatLockdown() and (_G[window].IsProtected and _G[window]:IsProtected())) then return end
 			_G[window]:Show()
 			button:Activate()
 		end
@@ -219,13 +225,14 @@ end

 local ToggleDockletWindow = function(self, button)
 	local frame  = button.FrameLink
-	if(frame and frame.Show) then
+	if(frame and frame.Show and (not frame:IsShown())) then
 		self.Parent.Window.FrameLink = frame

-		if(not self.Parent.Window:IsShown()) then
+		if(not self.Parent.Window:IsShown() and (not InCombatLockdown())) then
 			self.Parent.Window:Show()
 		end
 		self:Cycle()
+		if(InCombatLockdown() and (frame.IsProtected and frame:IsProtected())) then return end
 		frame:Show()
 		button:Activate()
 	else
@@ -341,8 +348,8 @@ local DockletButton_OnLeave = function(self, ...)
 end

 local DockletButton_OnClick = function(self, button)
-	if InCombatLockdown() then return end
-	if(IsAltKeyDown() and self:GetAttribute("hasDropDown") and self.GetMenuList) then
+	--if InCombatLockdown() then return end
+	if(IsAltKeyDown() and (not InCombatLockdown()) and self:GetAttribute("hasDropDown") and self.GetMenuList) then
 		local list = self:GetMenuList()
 		SV.Dropdown:Open(self, list);
 	else
diff --git a/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua b/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua
index b3aa26a..d041845 100644
--- a/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua
+++ b/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua
@@ -983,6 +983,10 @@ function Mentalo:Initialize()
 	SV.cache.Anchors = SV.cache.Anchors or {}
 	self.CenterEverything = SV.db.general.multiMonitor

+	if(not SV.db.general.questWatch) then
+		tinsert(DraggableFrames, "ObjectiveTrackerFrame")
+	end
+
 	MentaloDraggablesUpdate(self)

 	self:SetPositions()
diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Registry.lua b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Registry.lua
index 6903542..cd25b13 100644
--- a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Registry.lua
+++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Registry.lua
@@ -208,14 +208,6 @@ end

 --DATABASE LOCAL HELPERS

-local function SanitizeStorage(data)
-    for k,v in pairs(data) do
-        if(k == "STORED" or k == "SAFEDATA" or k == "LAYOUT") then
-            data[k] = nil
-        end
-    end
-end
-
 local function copydefaults(d, s)
     if(type(s) ~= "table") then return end
     if(type(d) ~= "table") then return end
@@ -249,15 +241,16 @@ local function tablecopy(d, s, debug)
     end
 end

-local function tablesplice(targetTable, mergeTable)
+local function tablesplice(mergeTable, targetTable)
     if type(targetTable) ~= "table" then targetTable = {} end

     if type(mergeTable) == 'table' then
         for key,val in pairs(mergeTable) do
             if type(val) == "table" then
-                val = tablesplice(targetTable[key], val)
-            end
-            targetTable[key] = val
+                targetTable[key] = tablesplice(val, targetTable[key])
+            else
+                targetTable[key] = val
+            end
         end
     end
     return targetTable
@@ -298,6 +291,60 @@ local function removedefaults(db, src, nometa)
     end
 end

+local function sanitizeType1(db, src, output)
+    if((type(src) == "table")) then
+        if(type(db) == "table") then
+            for k,v in pairs(db) do
+                if(not src[k]) then
+                    db[k] = nil
+                else
+                    if(src[k] ~= nil) then
+                        removedefaults(db[k], src[k])
+                    end
+                end
+            end
+        else
+            db = {}
+        end
+    end
+    if(output) then
+        return db
+    end
+end
+
+local function sanitizeType2(db, src)
+    if((type(db) ~= "table") or (type(src) ~= "table")) then return end
+    for k,v in pairs(db) do
+        if(not src[k]) then
+            db[k] = nil
+        else
+            if(src[k] ~= nil) then
+                if(not LoadOnDemand[k]) then
+                    removedefaults(db[k], src[k])
+                end
+            end
+        end
+    end
+end
+
+local function CleanupData(data, checkLOD)
+    local sv = rawget(data, "data")
+    local src = rawget(data, "defaults")
+    if(checkLOD) then
+        sanitizeType2(sv, src)
+    else
+        sanitizeType1(sv, src)
+    end
+end
+
+local function SanitizeStorage(data)
+    for k,v in pairs(data) do
+        if(k == "STORED" or k == "SAFEDATA" or k == "LAYOUT") then
+            data[k] = nil
+        end
+    end
+end
+
 --DATABASE META METHODS
 local meta_transdata = {
     __index = function(t, k)
@@ -392,15 +439,8 @@ function lib:CheckProfiles()
     return hasProfile
 end

-function lib:SaveCustomLayout(key)
-    if(not key) then return end
-
-    local export, saved
-
-    if(not LAYOUT_SV[key]) then LAYOUT_SV[key] = {} end;
-    export = rawget(CoreObject.db, "data");
-    saved = LAYOUT_SV[key];
-    tablecopy(saved, export.SVUnit);
+function lib:CurrentProfile()
+    return PROFILE_SV.SAFEDATA.GlobalKey
 end

 function lib:ImportDatabase(key, noreload)
@@ -443,6 +483,44 @@ function lib:ExportDatabase(key)
     end
 end

+function lib:SaveLayoutData(key, schema)
+    if(not key) then return end
+    if(not LAYOUT_SV[key]) then LAYOUT_SV[key] = {} end;
+
+    local sv = rawget(data, "data");
+    local src = rawget(data, "defaults");
+    local copy_db = tablesplice(sv[schema], {})
+    local copy_src = tablesplice(src[schema], {})
+
+    LAYOUT_SV[key][schema] = sanitizeType1(copy_db, copy_src, true);
+end
+
+function lib:GetLayoutList()
+    local list = {}
+    for k,v in pairs(LAYOUT_SV) do
+        list[k] = k
+    end
+    return list
+end
+
+function lib:GetLayoutData(key)
+    if((not key) or (not LAYOUT_SV[key])) then return end
+    return LAYOUT_SV[key]
+end
+
+function lib:CheckLayoutData()
+    local hasData = false
+    local list = LAYOUT_SV or {}
+    for key,_ in pairs(list) do
+        hasData = true
+    end
+    return hasData
+end
+
+function lib:RemoveLayout(key)
+    if(LAYOUT_SV[key]) then LAYOUT_SV[key] = nil end
+end
+
 function lib:WipeDatabase()
     for k,v in pairs(PROFILE_SV.STORED[SOURCE_KEY]) do
         PROFILE_SV.STORED[SOURCE_KEY][k] = nil
@@ -911,22 +989,6 @@ end

 --LIBRARY EVENT HANDLING

-local function CleanupData(data, checkLOD)
-    local sv = rawget(data, "data")
-    local src = rawget(data, "defaults")
-    for k,v in pairs(sv) do
-        if(not src[k]) then
-            sv[k] = nil
-        else
-            if(src[k] ~= nil) then
-                if((not checkLOD) or (checkLOD and (not LoadOnDemand[k]))) then
-                    removedefaults(sv[k], src[k])
-                end
-            end
-        end
-    end
-end
-
 local Library_OnEvent = function(self, event, arg, ...)
     if(event == "PLAYER_LOGOUT") then
         local key = PROFILE_SV.SAFEDATA.GlobalKey
@@ -1195,6 +1257,10 @@ function lib:Initialize()
     if not _G[LAYOUTS_FILENAME] then _G[LAYOUTS_FILENAME] = {} end
     LAYOUT_SV = _G[LAYOUTS_FILENAME]

+    if(self:CheckLayoutData()) then
+        CoreObject.CustomLayouts = true
+    end
+
     --CACHE SAVED VARIABLES
     if not _G[CACHE_FILENAME] then _G[CACHE_FILENAME] = {} end
     CACHE_SV = _G[CACHE_FILENAME]
diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
index 927bb1d..15c0cc5 100644
--- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
+++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
@@ -2,7 +2,7 @@
 ## Title: oUF ActionPanel
 ## Notes: Adds a backing to all unit frames that provides many utilities.
 ## Author: Munglunch
-## Version: 5.3.0
+## Version: 5.3.1
 ## X-Category: oUF
 ## Dependencies: oUF

diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc
index 5ad85c1..5c71568 100644
--- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc
+++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Afflicted
 ## Notes: Adds Custom Debuff Highlighting to oUF.
 ## Author: Munglunch
-## Version: 5.3.0
+## Version: 5.3.1
 ## X-Category: oUF
 ## Dependencies: oUF

diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ArcaneCharge/oUF_ArcaneCharge.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ArcaneCharge/oUF_ArcaneCharge.toc
index 2c8595b..0c6bd62 100644
--- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ArcaneCharge/oUF_ArcaneCharge.toc
+++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ArcaneCharge/oUF_ArcaneCharge.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Arcane Charge
 ## Notes: Adds support for arcane charge indicators to oUF.
 ## Author: Munglunch
-## Version: 5.3.0
+## Version: 5.3.1
 ## Dependencies: oUF

 oUF_ArcaneCharge.lua
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Combatant/oUF_Combatant.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Combatant/oUF_Combatant.toc
index 4bdccb4..7642924 100644
--- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Combatant/oUF_Combatant.toc
+++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Combatant/oUF_Combatant.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Combatant
 ## Notes: Adds PvP trinket status and spec icons to oUF frames.
 ## Author: Munglunch
-## Version: 5.3.0
+## Version: 5.3.1
 ## X-Category: oUF
 ## Dependencies: oUF

diff --git a/Interface/AddOns/SVUI/packages/tools/components/questwatch.lua b/Interface/AddOns/SVUI/packages/tools/components/questwatch.lua
index 4651bed..7edcca8 100644
--- a/Interface/AddOns/SVUI/packages/tools/components/questwatch.lua
+++ b/Interface/AddOns/SVUI/packages/tools/components/questwatch.lua
@@ -79,41 +79,34 @@ end

 function MOD:LoadQuestWatch()
 	if(not ObjectiveTrackerFrame) then return end
-
 	if(not SV.db.general.questWatch) then
 		ObjectiveTrackerFrame:RemoveTextures(true)
-
-		self.QuestWatch = CreateFrame("Frame", "SVUI_QuestWatchFrame", UIParent);
-		self.QuestWatch:SetSize(200, ObjectiveTrackerFrame:GetHeight());
-		self.QuestWatch:SetPoint("TOPRIGHT", UIParent, "RIGHT", -200, 100);
-
-		ObjectiveTrackerFrame:ClearAllPoints()
-		ObjectiveTrackerFrame:SetClampedToScreen(false)
-		ObjectiveTrackerFrame:SetAllPoints(self.QuestWatch)
-		ObjectiveTrackerFrame:SetFrameLevel(self.QuestWatch:GetFrameLevel()  +  1)
-		ObjectiveTrackerFrame.ClearAllPoints = SV.fubar;
-		ObjectiveTrackerFrame.SetPoint = SV.fubar;
-		ObjectiveTrackerFrame.SetAllPoints = SV.fubar;
-
 		ObjectiveTrackerFrame.BlocksFrame:RemoveTextures(true)
 		ObjectiveTrackerFrame.HeaderMenu:RemoveTextures(true)
 		ObjectiveTrackerFrame.BlockDropDown:RemoveTextures(true)

 		if(SV.db.general.questHeaders) then
 			ObjectiveTrackerFrame.BlocksFrame.QuestHeader:RemoveTextures(true)
-			ObjectiveTrackerFrame.BlocksFrame.QuestHeader:SetFixedPanelTemplate("Headline", true)
+			ObjectiveTrackerFrame.BlocksFrame.QuestHeader:SetPanelTemplate("Headline", true)
 	  		ObjectiveTrackerFrame.BlocksFrame.QuestHeader:SetBackdropColor(0, 0, 0, 0.5)
+	  		ObjectiveTrackerFrame.BlocksFrame.QuestHeader.Panel:ClearAllPoints()
+	  		ObjectiveTrackerFrame.BlocksFrame.QuestHeader.Panel:SetPoint("TOPLEFT", ObjectiveTrackerFrame.BlocksFrame.QuestHeader, "TOPLEFT", -2, -2)
+			ObjectiveTrackerFrame.BlocksFrame.QuestHeader.Panel:SetPoint("BOTTOMRIGHT", ObjectiveTrackerFrame.BlocksFrame.QuestHeader, "BOTTOMRIGHT", 12, 2)

 			ObjectiveTrackerFrame.BlocksFrame.AchievementHeader:RemoveTextures(true)
-			ObjectiveTrackerFrame.BlocksFrame.AchievementHeader:SetFixedPanelTemplate("Headline", true)
+			ObjectiveTrackerFrame.BlocksFrame.AchievementHeader:SetPanelTemplate("Headline", true)
 	  		ObjectiveTrackerFrame.BlocksFrame.AchievementHeader:SetBackdropColor(0, 0, 0, 0.5)
+	  		ObjectiveTrackerFrame.BlocksFrame.AchievementHeader.Panel:ClearAllPoints()
+	  		ObjectiveTrackerFrame.BlocksFrame.AchievementHeader.Panel:SetPoint("TOPLEFT", ObjectiveTrackerFrame.BlocksFrame.AchievementHeader, "TOPLEFT", -2, -2)
+			ObjectiveTrackerFrame.BlocksFrame.AchievementHeader.Panel:SetPoint("BOTTOMRIGHT", ObjectiveTrackerFrame.BlocksFrame.AchievementHeader, "BOTTOMRIGHT", 12, 2)

 			ObjectiveTrackerFrame.BlocksFrame.ScenarioHeader:RemoveTextures(true)
-			ObjectiveTrackerFrame.BlocksFrame.ScenarioHeader:SetFixedPanelTemplate("Headline", true)
+			ObjectiveTrackerFrame.BlocksFrame.ScenarioHeader:SetPanelTemplate("Headline", true)
 	  		ObjectiveTrackerFrame.BlocksFrame.ScenarioHeader:SetBackdropColor(0, 0, 0, 0.5)
+	  		ObjectiveTrackerFrame.BlocksFrame.ScenarioHeader.Panel:ClearAllPoints()
+	  		ObjectiveTrackerFrame.BlocksFrame.ScenarioHeader.Panel:SetPoint("TOPLEFT", ObjectiveTrackerFrame.BlocksFrame.ScenarioHeader, "TOPLEFT", -2, -2)
+			ObjectiveTrackerFrame.BlocksFrame.ScenarioHeader.Panel:SetPoint("BOTTOMRIGHT", ObjectiveTrackerFrame.BlocksFrame.ScenarioHeader, "BOTTOMRIGHT", 12, 2)
 	  	end
-
-		SV.Mentalo:Add(self.QuestWatch, "Quest Watch");
 	else
 		local bgTex = [[Interface\BUTTONS\WHITE8X8]]
 		local bdTex = SV.Media.bar.glow
diff --git a/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua b/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua
index d581d0d..251f395 100644
--- a/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua
+++ b/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua
@@ -557,7 +557,7 @@ function MOD:CreateCastbar(frame, reversed, moverName, ryu, useFader, isBoss)
 		bgFrame:FillInner(castbar, -2, 10)
 		bgFrame:SetFrameLevel(bgFrame:GetFrameLevel() - 1)

-	  castbar.LatencyTexture:SetTexture(SV.Media.bar.lazer)
+	  	castbar.LatencyTexture:SetTexture(SV.Media.bar.lazer)
 		castbar.noupdate = true;
 		castbar.pewpew = true
 		hadouken.iscustom = true;
diff --git a/Interface/AddOns/SVUI/scripts/mounts.lua b/Interface/AddOns/SVUI/scripts/mounts.lua
index fe710ff..bb1b4c0 100644
--- a/Interface/AddOns/SVUI/scripts/mounts.lua
+++ b/Interface/AddOns/SVUI/scripts/mounts.lua
@@ -395,8 +395,9 @@ _G.SVUILetsRide = function()
 		}
 	end

+	local continent = GetCurrentMapContinent()
 	local checkList = SV.cache.Mounts.types
-	local letsFly = IsFlyableArea()
+	local letsFly = (IsFlyableArea() and (continent ~= 7))
 	local letsSwim = IsSwimming()

 	if(IsModifierKeyDown() and checkList["SPECIAL"]) then
diff --git a/Interface/AddOns/SVUI/setup/installer.lua b/Interface/AddOns/SVUI/setup/installer.lua
index 6ef89e9..e28160b 100644
--- a/Interface/AddOns/SVUI/setup/installer.lua
+++ b/Interface/AddOns/SVUI/setup/installer.lua
@@ -446,7 +446,7 @@ function SV.Setup:ColorTheme(style, preserve)
 		SV:ResetData("media")
 	end

-	local presets = self:CopyPreset("media", style)
+	self:CopyPreset("media", style)
 	--print(table.dump(SV.db))
 	SV.db.LAYOUT.mediastyle = style;

@@ -478,7 +478,7 @@ function SV.Setup:UnitframeLayout(style, preserve)
 		end
 	end

-	local presets = self:CopyPreset("units", style)
+	self:CopyPreset("units", style)
 	SV.db.LAYOUT.unitstyle = style

 	if(SV.db.LAYOUT.mediastyle == "default") then
@@ -505,7 +505,7 @@ end
 function SV.Setup:GroupframeLayout(style, preserve)
 	style = style or "default";

-	local presets = self:CopyPreset("layouts", style)
+	self:CopyPreset("layouts", style)
 	SV.db.LAYOUT.groupstyle = style

 	if(not mungs) then
@@ -527,7 +527,7 @@ function SV.Setup:BarLayout(style, preserve)
 		end
 	end

-	local presets = self:CopyPreset("bars", style)
+	self:CopyPreset("bars", style)
 	SV.db.LAYOUT.barstyle = style;

 	if(not mungs) then
@@ -552,7 +552,7 @@ end

 function SV.Setup:Auralayout(style, preserve)
 	style = style or "default";
-	local presets = self:CopyPreset("auras", style)
+	self:CopyPreset("auras", style)

 	SV.db.LAYOUT.aurastyle = style;

@@ -564,7 +564,17 @@ function SV.Setup:Auralayout(style, preserve)
 			SV:SavedPopup()
 		end
 	end
-end
+end
+
+function SV.Setup:CustomLayout(style)
+	if((not style) or (not SV.CustomLayouts)) then return end;
+	if(self:CopyCustom(style)) then
+		SV.db.LAYOUT.custom = style
+		SVLib:RefreshModule('SVBar')
+		SVLib:RefreshModule('SVAura')
+		SVLib:RefreshModule('SVUnit')
+	end
+end

 function SV.Setup:EZDefault()
 	mungs = true;
diff --git a/Interface/AddOns/SVUI/setup/presets.lua b/Interface/AddOns/SVUI/setup/presets.lua
index a7a9999..e736fbd 100644
--- a/Interface/AddOns/SVUI/setup/presets.lua
+++ b/Interface/AddOns/SVUI/setup/presets.lua
@@ -961,14 +961,6 @@ local function LoadPresetData()
 			},
 		}
 	};
-
-	if(SV.UserPresets) then
-		for key, data in pairs(SV.UserPresets) do
-			for category, presets in pairs(data) do
-				PRESET_DATA[key][category] = presets
-			end
-		end
-	end
 end

 local function LoadPageData()
@@ -1218,4 +1210,18 @@ function SV.Setup:CopyOnClick(index)
 	if(CLICK_DIALOG and CLICK_DIALOG[index]) then
 		return CLICK_DIALOG[index]
 	end
+end
+
+function SV.Setup:CopyCustom(name)
+	if(name and SV.CustomLayouts) then
+		local layout = SVLib:GetLayoutData(name)
+		for schema, presets in pairs(layout) do
+			local data = SV.db[schema]
+			if(data) then
+		    	_copyPresets(data, presets)
+		    end
+		end
+		return true
+	end
+	return false
 end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/system/credits.lua b/Interface/AddOns/SVUI/system/credits.lua
index 3c2db82..110a4e9 100644
--- a/Interface/AddOns/SVUI/system/credits.lua
+++ b/Interface/AddOns/SVUI/system/credits.lua
@@ -42,7 +42,7 @@ end
 --[[ DONATION CREDITS ]]--

 local donations = {
-	"Movster, Penguinsane, FaolanKing, Doonga, Meggalo",
+	"Movster, Meggalo, Penguinsane, FaolanKing, Doonga",
 	"Cazart506, Moondoggy, Necroo, Chief Pullin, lkj61",
 	"BloodEagle, Egbert, Jerry Ferguson, Hyti, Elton",
 	"James Watson, Lathron, Adam Vargas, Daphne, Dave (Naméra)",
diff --git a/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc b/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc
index ffd45ef..821c6b7 100644
--- a/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc
+++ b/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc
@@ -1,6 +1,6 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 5.3.0
+## Version: 5.3.1
 ## Title: |cffFF9900SVUI |r|cffFFEF00Chat-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFVarious Chat Gadgets|r]
 ## SavedVariables: ChatOMatic_Data
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc
index ee3c16e..6e7dd73 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc
+++ b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc
@@ -1,6 +1,6 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 5.3.0
+## Version: 5.3.1
 ## Title: |cffFF9900SVUI |r|cffFFEF00Config-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFConfig Options|r]
 ## RequiredDeps: SVUI
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/components/_load.xml b/Interface/AddOns/SVUI_ConfigOMatic/components/_load.xml
index a350879..8d30609 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/components/_load.xml
+++ b/Interface/AddOns/SVUI_ConfigOMatic/components/_load.xml
@@ -11,5 +11,6 @@
 	<Script file='plate.lua'/>
 	<Script file='tip.lua'/>
 	<Include file='units\_load.xml'/>
+	<!-- <Script file='layouts.lua'/> -->
 	<Script file='profiles.lua'/>
 </Ui>
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/components/layouts.lua b/Interface/AddOns/SVUI_ConfigOMatic/components/layouts.lua
new file mode 100644
index 0000000..3a48101
--- /dev/null
+++ b/Interface/AddOns/SVUI_ConfigOMatic/components/layouts.lua
@@ -0,0 +1,82 @@
+--[[
+##############################################################################
+_____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_       #
+ ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__      #
+  __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____     #
+   ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____    #
+    ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____   #
+     _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____  #
+      __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ #
+       _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_#
+        ___\///////////___________\///___________\/////////_____\///////////_#
+##############################################################################
+S U P E R - V I L L A I N - U I   By: Munglunch                              #
+##############################################################################
+##########################################################
+LOCALIZED LUA FUNCTIONS
+##########################################################
+]]--
+--[[ GLOBALS ]]--
+local _G = _G;
+local unpack 	 =  _G.unpack;
+local pairs 	 =  _G.pairs;
+local tinsert 	 =  _G.tinsert;
+local table 	 =  _G.table;
+--[[ TABLE METHODS ]]--
+local tsort = table.sort;
+--[[
+##########################################################
+GET ADDON DATA
+##########################################################
+]]--
+local SV = _G["SVUI"];
+local SVLib = LibSuperVillain("Registry");
+local L = SV.L;
+
+local playerRealm = GetRealmName()
+local playerName = UnitName("player")
+local profileKey = ("%s - %s"):format(playerName, playerRealm)
+
+SV.Options.args.layouts = {
+	order = 9998,
+	type = "group",
+	name = L["Layouts"],
+	childGroups = "tab",
+	args = {
+		desc = {
+			order = 1,
+			type = "description",
+			name = L["intro"] .. "\n",
+		},
+		spacer1 = {
+			order = 2,
+			type = "description",
+			name = "",
+			width = "full",
+		},
+		save = {
+			order = 3,
+			name = SAVE,
+			type = "input",
+			desc = function() return _G.SAVE .. " current settings as a custom Layout" end,
+			func = function(key, value)
+				SVLib:SaveLayoutData(value, 'SVBar')
+				SVLib:SaveLayoutData(value, 'SVAura')
+				SVLib:SaveLayoutData(value, 'SVUnit')
+				SV:SavedPopup()
+			end,
+		},
+		delete = {
+			order = 4,
+			type = "select",
+			name = L["delete"],
+			desc = L["delete_sub"],
+			get = function() return " SELECT ONE" end,
+			set = function(key, value) SVLib:RemoveLayout(value) end,
+			values = SVLib:GetLayoutList(),
+			disabled = function() local t = SVLib:CheckLayoutData() return (not t) end,
+			confirm = true,
+			confirmText = L["delete_confirm"],
+		},
+	}
+}
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/components/profiles.lua b/Interface/AddOns/SVUI_ConfigOMatic/components/profiles.lua
index a1ceeaa..36c4968 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/components/profiles.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/components/profiles.lua
@@ -40,105 +40,134 @@ local profileKey = ("%s - %s"):format(playerName, playerRealm)
 SV.Options.args.profiles = {
 	order = 9999,
 	type = "group",
-	name = L["profiles"],
+	name = L["Profiles"],
 	childGroups = "tab",
-	args = {
-		desc = {
-			order = 1,
-			type = "description",
-			name = L["intro"] .. "\n",
-		},
-		spacer1 = {
-			order = 2,
-			type = "description",
-			name = "",
-			width = "full",
-		},
-		importdesc = {
-			order = 3,
-			type = "description",
-			name = "\n" .. L["import_desc"],
-			width = "full"
-		},
-		save = {
-			order = 4,
-			type = "execute",
-			name = SAVE,
-			desc = function() return _G.SAVE .. " " .. L["current"] .. " |cffFFFF00" .. profileKey .. "|r" end,
-			func = function() SVLib:ExportDatabase(profileKey) SV:SavedPopup() end,
-		},
-		export = {
-			name = L["export"],
-			desc = L["export_sub"],
-			type = "input",
+	args = {}
+}
+
+local function RefreshProfileOptions()
+	local hasProfile = true;
+	local currentProfile = SVLib:CurrentProfile()
+	if(not currentProfile) then
+		hasProfile = false
+		currentProfile = profileKey
+	end
+
+	SV.Options.args.profiles.args.desc = {
+		order = 1,
+		type = "description",
+		name = L["intro"] .. "\n\n" .. " |cff66FF33" .. L["current"] .. currentProfile .. "|r",
+		width = "full",
+	}
+	SV.Options.args.profiles.args.spacer1 = {
+		order = 2,
+		type = "description",
+		name = "",
+		width = "full",
+	}
+	SV.Options.args.profiles.args.importdesc = {
+		order = 3,
+		type = "description",
+		name = "\n" .. L["import_desc"],
+		width = "full"
+	}
+
+	SV.Options.args.profiles.args.spacer2 = {
+		order = 4,
+		type = "description",
+		name = "",
+		width = "full",
+	}
+
+	if(not hasProfile) then
+		SV.Options.args.profiles.args.save = {
 			order = 5,
-			get = false,
-			set = function(key, value) SVLib:ExportDatabase(value) SV:SavedPopup() end,
-		},
-		import = {
-			name = L["import"],
-			desc = L["import_sub"],
-			type = "select",
-			order = 6,
-			get = function() return " SELECT ONE" end,
-			set = function(key, value) SV:ImportProfile(value) end,
-			disabled = function() local t = SVLib:CheckProfiles() return (not t) end,
-			values = SVLib:GetProfiles(),
-		},
-		spacer2 = {
-			order = 7,
-			type = "description",
-			name = "",
-			width = "full",
-		},
-		deldesc = {
-			order = 8,
-			type = "description",
-			name = "\n" .. L["delete_desc"],
-		},
-		delete = {
-			order = 9,
-			type = "select",
-			name = L["delete"],
-			desc = L["delete_sub"],
-			get = function() return " SELECT ONE" end,
-			set = function(key, value) SVLib:Remove(value) end,
-			values = SVLib:GetProfiles(),
-			disabled = function() local t = SVLib:CheckProfiles() return (not t) end,
-			confirm = true,
-			confirmText = L["delete_confirm"],
-		},
-		spacer3 = {
-			order = 10,
-			type = "description",
-			name = "",
-			width = "full",
-		},
-		descreset = {
-			order = 11,
-			type = "description",
-			name = L["reset_desc"],
-		},
-		reset = {
-			order = 12,
 			type = "execute",
-			name = function() return L["reset"] .. " " .. " |cffFFFF00" .. profileKey .. "|r" end,
-			desc = L["reset_sub"],
-			func = function() SV:StaticPopup_Show("RESET_PROFILE_PROMPT") end,
-			width = "full",
-		},
-		spacer4 = {
-			order = 13,
-			type = "description",
-			name = "",
+			name = SAVE,
 			width = "full",
-		},
-		dualSpec = {
-			order = 14,
-			type = "toggle",
-			name = "Dual-Spec Switching",
-			get = function() return SVLib:CheckDualProfile() end,
-			set = function(key, value) SVLib:ToggleDualProfile(value) end,
-		},
+			desc = function() return _G.SAVE .. " " .. L["current"] .. " |cffFFFF00" .. currentProfile .. "|r" end,
+			func = function() SVLib:ExportDatabase(currentProfile) SV:SavedPopup() RefreshProfileOptions() end,
+		}
+	else
+		SV.Options.args.profiles.args.save = nil
+	end
+
+	SV.Options.args.profiles.args.export = {
+		name = L["export"],
+		desc = L["export_sub"],
+		type = "input",
+		order = 6,
+		get = false,
+		set = function(key, value) SVLib:ExportDatabase(value) SV:SavedPopup() end,
+	}
+
+	SV.Options.args.profiles.args.import = {
+		name = L["import"],
+		desc = L["import_sub"],
+		type = "select",
+		order = 7,
+		get = function() return " SELECT ONE" end,
+		set = function(key, value) SV:ImportProfile(value) RefreshProfileOptions() end,
+		disabled = function() local t = SVLib:CheckProfiles() return (not t) end,
+		values = SVLib:GetProfiles(),
+	}
+	SV.Options.args.profiles.args.spacer3 = {
+		order = 8,
+		type = "description",
+		name = "",
+		width = "full",
+	}
+	SV.Options.args.profiles.args.deldesc = {
+		order = 9,
+		type = "description",
+		name = "\n" .. L["delete_desc"],
+		width = "full",
+	}
+	SV.Options.args.profiles.args.delete = {
+		order = 10,
+		type = "select",
+		name = L["delete"],
+		desc = L["delete_sub"],
+		get = function() return " SELECT ONE" end,
+		set = function(key, value) SVLib:Remove(value) end,
+		values = SVLib:GetProfiles(),
+		disabled = function() local t = SVLib:CheckProfiles() return (not t) end,
+		confirm = true,
+		confirmText = L["delete_confirm"],
 	}
-}
\ No newline at end of file
+	SV.Options.args.profiles.args.spacer4 = {
+		order = 11,
+		type = "description",
+		name = "",
+		width = "full",
+	}
+	SV.Options.args.profiles.args.descreset = {
+		order = 12,
+		type = "description",
+		name = L["reset_desc"],
+		width = "full",
+	}
+	SV.Options.args.profiles.args.reset = {
+		order = 13,
+		type = "execute",
+		name = function() return L["reset"] .. " " .. " |cffFFFF00" .. currentProfile .. "|r" end,
+		desc = L["reset_sub"],
+		func = function() SV:StaticPopup_Show("RESET_PROFILE_PROMPT") end,
+		width = "full",
+	}
+	SV.Options.args.profiles.args.spacer5 = {
+		order = 14,
+		type = "description",
+		name = "",
+		width = "full",
+	}
+	SV.Options.args.profiles.args.dualSpec = {
+		order = 15,
+		type = "toggle",
+		name = "Dual-Spec Switching",
+		get = function() return SVLib:CheckDualProfile() end,
+		set = function(key, value) SVLib:ToggleDualProfile(value) end,
+	}
+end
+
+RefreshProfileOptions()
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/language/generic.lua b/Interface/AddOns/SVUI_ConfigOMatic/language/generic.lua
index ceaf01a..30d7653 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/language/generic.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/language/generic.lua
@@ -34,7 +34,7 @@ if gameLocale == "enUS" then
 	L["import"] = "Existing Profiles"
 	L["import_desc"] = "You can either create a new profile by entering a name in the editbox, or choose one of the already existing profiles."
 	L["import_sub"] = "Select one of your currently available profiles."
-	L["import"] = "Copy From"
+	L["copy_name"] = "Copy From"
 	L["copy_desc"] = "Copy the settings from one existing profile into the currently active profile."
 	L["current"] = "Current Profile:"
 	L["default"] = "Default"
@@ -70,7 +70,7 @@ if gameLocale == "frFR" then
 	L["import"] = "Profils existants"
 	L["import_desc"] = "Vous pouvez créer un nouveau profil en entrant un nouveau nom dans la boîte de saisie, ou en choississant un des profils déjà existants."
 	L["import_sub"] = "Permet de choisir un des profils déjà disponibles."
-	L["import"] = "Copier à partir de"
+	L["copy_name"] = "Copier à partir de"
 	L["copy_desc"] = "Copie les paramètres d'un profil déjà existant dans le profil actuellement actif."
 	L["current"] = "Current Profile:"
 	L["default"] = "Défaut"
@@ -106,7 +106,7 @@ if gameLocale == "deDE" then
 	L["import"] = "Vorhandene Profile"
 	L["import_desc"] = "Du kannst ein neues Profil erstellen, indem du einen neuen Namen in der Eingabebox 'Neu' eingibst, oder wähle eines der vorhandenen Profile aus."
 	L["import_sub"] = "Wählt ein bereits vorhandenes Profil aus."
-	L["import"] = "Kopieren von..."
+	L["copy_name"] = "Kopieren von..."
 	L["copy_desc"] = "Kopiere die Einstellungen von einem vorhandenen Profil in das aktive Profil."
 	L["default"] = "Standard"
 	L["delete"] = "Profil löschen"
@@ -141,7 +141,7 @@ if gameLocale == "itIT" then
 	L["import"] = "Profili esistenti"
 	L["import_desc"] = "Puoi creare un nuovo profilo digitando il nome della casella di testo, oppure scegliendone uno tra i profili gia' esistenti."
 	L["import_sub"] = "Seleziona uno dei profili disponibili."
-	L["import"] = "Copia Da"
+	L["copy_name"] = "Copia Da"
 	L["copy_desc"] = "Copia le impostazioni da un profilo esistente, nel profilo attivo in questo momento."
 	L["current"] = "Profilo Attivo:"
 	L["default"] = "Standard"
@@ -177,7 +177,7 @@ if gameLocale == "koKR" then
 	L["import"] = "프로필 선택"
 	L["import_desc"] = "새로운 이름을 입력하거나, 이미 있는 프로필중 하나를 선택하여 새로운 프로필을 만들 수 있습니다."
 	L["import_sub"] = "당신이 현재 이용할수 있는 프로필을 선택합니다."
-	L["import"] = "복사"
+	L["copy_name"] = "복사"
 	L["copy_desc"] = "현재 사용중인 프로필에, 선택한 프로필의 설정을 복사합니다."
 	L["current"] = "Current Profile:"
 	L["default"] = "기본값"
@@ -230,7 +230,7 @@ if gameLocale == "ruRU" then
 	L["import"] = "Существующие профили"
 	L["import_desc"] = "Вы можете создать новый профиль, введя название в поле ввода, или выбрать один из уже существующих профилей."
 	L["import_sub"] = "Выбор одиного из уже доступных профилей"
-	L["import"] = "Скопировать из"
+	L["copy_name"] = "Скопировать из"
 	L["copy_desc"] = "Скопировать настройки из выбранного профиля в активный."
 	L["current"] = "            "
 	L["default"] = "По умолчанию"
@@ -266,7 +266,7 @@ if gameLocale == "esES" or gameLocale == "esMX" then
 	L["import"] = "Perfiles existentes"
 	L["import_desc"] = "Puedes crear un nuevo perfil introduciendo un nombre en el recuadro o puedes seleccionar un perfil de los ya existentes."
 	L["import_sub"] = "Selecciona uno de los perfiles disponibles."
-	L["import"] = "Copiar de"
+	L["copy_name"] = "Copiar de"
 	L["copy_desc"] = "Copia los ajustes de un perfil existente al perfil actual."
 	L["current"] = "Current Profile:"
 	L["default"] = "Por defecto"
@@ -302,7 +302,7 @@ if gameLocale == "zhTW" then
 	L["import"] = "現有的設定檔"
 	L["import_desc"] = "你可以通過在文本框內輸入一個名字創立一個新的設定檔,也可以選擇一個已經存在的設定檔。"
 	L["import_sub"] = "從當前可用的設定檔裏面選擇一個。"
-	L["import"] = "複製自"
+	L["copy_name"] = "複製自"
 	L["copy_desc"] = "從當前某個已保存的設定檔複製到當前正使用的設定檔。"
 	L["current"] = "Current Profile:"
 	L["default"] = "預設"
@@ -338,7 +338,7 @@ if gameLocale == "zhCN" then
 	L["import"] = "现有的配置文件"
 	L["import_desc"] = "你可以通过在文本框内输入一个名字创立一个新的配置文件,也可以选择一个已经存在的配置文件。"
 	L["import_sub"] = "从当前可用的配置文件里面选择一个。"
-	L["import"] = "复制自"
+	L["copy_name"] = "复制自"
 	L["copy_desc"] = "从当前某个已保存的配置文件复制到当前正使用的配置文件。"
 	L["current"] = "Current Profile:"
 	L["default"] = "默认"
diff --git a/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc b/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc
index ddc3e84..c0b7b8c 100644
--- a/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc
+++ b/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc
@@ -1,6 +1,6 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 5.3.0
+## Version: 5.3.1
 ## Title: |cffFF9900SVUI |r|cffFFEF00Craft-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFProfession Tools|r].
 ## SavedVariablesPerCharacter: CraftOMatic_Profile, CraftOMatic_Cache
diff --git a/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc b/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc
index 3cf06a7..aaddca6 100644
--- a/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc
+++ b/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc
@@ -1,6 +1,6 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 5.3.0
+## Version: 5.3.1
 ## Title: |cffFF9900SVUI |r|cffFFEF00Fight-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFPvP Tools|r].
 ## SavedVariablesPerCharacter: FightOMatic_Profile, FightOMatic_Cache
diff --git a/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc b/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc
index 1ac4962..bbd3c06 100644
--- a/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc
+++ b/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc
@@ -1,6 +1,6 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 5.3.0
+## Version: 5.3.1
 ## Title: |cffFF9900SVUI |r|cffFFEF00Log-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFData Logging|r].
 ## SavedVariables: LogOMatic_Data
diff --git a/Interface/AddOns/SVUI_StyleOMatic/Loader.lua b/Interface/AddOns/SVUI_StyleOMatic/Loader.lua
index d264612..0e4b78c 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/Loader.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/Loader.lua
@@ -89,26 +89,32 @@ AddonObject.defaults = {
 	},
 	["addons"] = {
 		["enable"] = true,
-		["Skada"] = true,
-		["Recount"] = true,
-		["AuctionLite"] = true,
-		["AtlasLoot"] = true,
-		["SexyCooldown"] = true,
-		["Lightheaded"] = true,
-		["Outfitter"] = true,
-		["Quartz"] = true,
-		["TomTom"] = true,
-		["TinyDPS"] = true,
-		["Clique"] = true,
-		["CoolLine"] = true,
-		["ACP"] = true,
-		["DXE"] = true,
-		["DBM-Core"] = true,
-		["VEM"] = true,
-		["MogIt"] = true,
-		["alDamageMeter"] = true,
-		["Omen"] = true,
-		["TradeSkillDW"] = true,
+		['Ace3.lua'] = true,
+		['ACP.lua'] = true,
+		['AdiBags.lua'] = true,
+		['Altoholic.lua'] = true,
+		['AtlasLoot.lua'] = true,
+		['AuctionLite.lua'] = true,
+		['alDamageMeter.lua'] = true,
+		['BigWigs.lua'] = true,
+		['Bugsack.lua'] = true,
+		['Clique.lua'] = true,
+		['Cooline.lua'] = true,
+		['DBM.lua'] = true,
+		['DXE.lua'] = true,
+		['LightHeaded.lua'] = true,
+		['Mogit.lua'] = true,
+		['Omen.lua'] = true,
+		['Outfitter.lua'] = true,
+		['Postal.lua'] = true,
+		['Quartz.lua'] = true,
+		['Recount.lua'] = true,
+		['SexyCooldown.lua'] = true,
+		['Skada.lua'] = true,
+		['TinyDPS.lua'] = true,
+		['TomTom.lua'] = true,
+		['TradeSkillDW.lua'] = true,
+		['VEM.lua'] = true,
 	},
 };

diff --git a/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc b/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc
index e86e29c..3452ff8 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc
+++ b/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc
@@ -1,6 +1,6 @@
 ## Interface: 60000
 ## Author: Munglunch, Azilroka, Sortokk
-## Version: 5.3.0
+## Version: 5.3.1
 ## Title: |cffFF9900SVUI |r|cffFFEF00Style-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFAddon Skins|r].
 ## SavedVariables: StyleOMatic_Global
diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/addons/Omen.lua b/Interface/AddOns/SVUI_StyleOMatic/components/addons/Omen.lua
index 94b616f..e7b4d84 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/components/addons/Omen.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/components/addons/Omen.lua
@@ -18,10 +18,10 @@ LOCALIZED LUA FUNCTIONS
 ]]--
 --[[ GLOBALS ]]--
 local _G = _G;
-local unpack 	= _G.unpack;
-local select 	= _G.select;
-local pairs 	= _G.pairs;
-local string 	= _G.string;
+local unpack  = _G.unpack;
+local select  = _G.select;
+local pairs   = _G.pairs;
+local string  = _G.string;
 --[[ STRING METHODS ]]--
 local format = string.format;
 --[[
@@ -39,13 +39,32 @@ OMEN
 local function StyleOmen()
   assert(Omen, "AddOn Not Loaded")

-  Omen.db.profile.Scale = 1
+  --[[ Background Settings ]]--
+  Omen.db.profile.Background.BarInset = 3
+  Omen.db.profile.Background.EdgeSize = 1
+  Omen.db.profile.Background.Texture = "None"
+
+  --[[ Bar Settings ]]--
+  Omen.db.profile.Bar.Font = "Roboto"
+  Omen.db.profile.Bar.FontOutline = "None"
+  Omen.db.profile.Bar.FontSize = 11
+  Omen.db.profile.Bar.Height = 14
+  Omen.db.profile.Bar.ShowHeadings = false
+  Omen.db.profile.Bar.ShowTPS = false
   Omen.db.profile.Bar.Spacing = 1
   Omen.db.profile.Bar.Texture = "SVUI MultiColorBar"
-  Omen.db.profile.Background.EdgeSize = 2
-  Omen.db.profile.Background.BarInset = 2
-  Omen.db.profile.Background.Texture = "None"
-  Omen.db.profile.TitleBar.UseSameBG = true
+
+ --[[ Titlebar Settings ]]--
+  Omen.db.profile.TitleBar.BorderColor.g = 0
+  Omen.db.profile.TitleBar.BorderColor.r = 0
+  Omen.db.profile.TitleBar.BorderTexture = "None"
+  Omen.db.profile.TitleBar.EdgeSize = 1
+  Omen.db.profile.TitleBar.Font = "Arial Narrow"
+  Omen.db.profile.TitleBar.FontSize = 12
+  Omen.db.profile.TitleBar.Height = 23
+  Omen.db.profile.TitleBar.ShowTitleBar=true
+  Omen.db.profile.TitleBar.Texture = "None"
+  Omen.db.profile.TitleBar.UseSameBG = false

   hooksecurefunc(Omen, 'UpdateBackdrop', function(self)
     if(not PLUGIN:ValidateDocklet("Omen")) then
@@ -66,15 +85,40 @@ PLUGIN:SaveAddonStyle("Omen", StyleOmen, nil, true)
 function PLUGIN:Docklet_Omen(parent)
   if not Omen then return end
   local db = Omen.db;
+
+  --[[ General Settings ]]--
+  db.profile.FrameStrata='2-LOW';
+  db.profile.Locked=true;
   db.profile.Scale=1;
-  db.profile.Bar.Spacing=1;
-  db.profile.Background.EdgeSize=2;
-  db.profile.Background.BarInset=2;
-  db.profile.TitleBar.UseSameBG=true;
   db.profile.ShowWith.UseShowWith=false;
-  db.profile.Locked=true;
+
+  --[[ Background Settings ]]--
+  db.profile.Background.BarInset=3;
+  db.profile.Background.EdgeSize=1;
+  db.profile.Background.Texture = "None"
+
+  --[[ Bar Settings ]]--
+  db.profile.Bar.Font = "Roboto";
+  db.profile.Bar.FontOutline = "None";
+  db.profile.Bar.FontSize = 11;
+  db.profile.Bar.Height = 14;
+  db.profile.Bar.ShowHeadings = false;
+  db.profile.Bar.ShowTPS = false;
+  db.profile.Bar.Spacing=1;
+  db.profile.Bar.Texture = "SVUI MultiColorBar";
+
+  --[[ Titlebar Settings ]]--
+  db.profile.TitleBar.BorderColor.g = 0;
+  db.profile.TitleBar.BorderColor.r = 0;
+  db.profile.TitleBar.BorderTexture = "None";
+  db.profile.TitleBar.EdgeSize = 1;
+  db.profile.TitleBar.Font = "Arial Narrow";
+  db.profile.TitleBar.FontSize = 12;
+  db.profile.TitleBar.Height = 23;
   db.profile.TitleBar.ShowTitleBar=true;
-  db.profile.FrameStrata='2-LOW'
+  db.profile.TitleBar.Texture = "None";
+  db.profile.TitleBar.UseSameBG=false;
+
   Omen:OnProfileChanged(nil,db)
   OmenTitle:RemoveTextures()
   OmenTitle.Panel = nil
@@ -87,4 +131,4 @@ function PLUGIN:Docklet_Omen(parent)
   OmenAnchor:SetParent(parent)

   parent.Framelink = OmenAnchor
-end
\ No newline at end of file
+end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/addons/Recount.lua b/Interface/AddOns/SVUI_StyleOMatic/components/addons/Recount.lua
index 6a06593..5dd45ae 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/components/addons/Recount.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/components/addons/Recount.lua
@@ -129,7 +129,8 @@ function PLUGIN:Docklet_Recount(parent)
   Recount.db.profile.ClampToScreen = true;
   Recount.db.profile.FrameStrata = '2-LOW'
   Recount.MainWindow:ClearAllPoints()
-  Recount.MainWindow:SetAllPoints(parent)
+  Recount.MainWindow:SetPoint("TOPLEFT", parent, "TOPLEFT", 0, 7)
+  Recount.MainWindow:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 0, 0)
   Recount.MainWindow:SetParent(parent)
   Recount:SetStrataAndClamp()
   Recount:LockWindows(true)
diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/gossip.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/gossip.lua
index 78471b7..be73102 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/gossip.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/gossip.lua
@@ -65,9 +65,17 @@ local function GossipStyle()
 	_G["GossipFrameGreetingGoodbyeButton"]:RemoveTextures()
 	_G["GossipFrameGreetingGoodbyeButton"]:SetButtonTemplate()
 	PLUGIN:ApplyCloseButtonStyle(GossipFrameCloseButton, GossipFrame.Panel)
+
 	NPCFriendshipStatusBar:RemoveTextures()
 	NPCFriendshipStatusBar:SetStatusBarTexture([[Interface\AddOns\SVUI\assets\artwork\Template\DEFAULT]])
-	NPCFriendshipStatusBar:SetPanelTemplate("Default")
+	NPCFriendshipStatusBar:SetPanelTemplate("Bar")
+
+	NPCFriendshipStatusBar:ClearAllPoints()
+	NPCFriendshipStatusBar:SetPoint("TOPLEFT", GossipFrame, "TOPLEFT", 58, -34)
+
+	NPCFriendshipStatusBar.icon:Size(32,32)
+	NPCFriendshipStatusBar.icon:ClearAllPoints()
+	NPCFriendshipStatusBar.icon:SetPoint("RIGHT", NPCFriendshipStatusBar, "LEFT", 0, -2)
 end
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/worldmap.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/worldmap.lua
index b6b871f..794abe0 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/worldmap.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/worldmap.lua
@@ -100,7 +100,7 @@ local function StripQuestMapFrame()

   local detailWidth = QuestMapFrame.DetailsFrame.RewardsFrame:GetWidth()
   QuestMapFrame.DetailsFrame:ClearAllPoints()
-  QuestMapFrame.DetailsFrame:SetPoint("TOPLEFT", WorldMapDetailFrame, "TOPRIGHT", 2, 0)
+  QuestMapFrame.DetailsFrame:SetPoint("BOTTOMRIGHT", QuestMapFrame, "BOTTOMRIGHT", 2, 0)
   QuestMapFrame.DetailsFrame:SetWidth(detailWidth)

   WorldMapFrameNavBar:ClearAllPoints()
diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/style_methods.lua b/Interface/AddOns/SVUI_StyleOMatic/components/style_methods.lua
index 5ac6a5f..2617225 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/components/style_methods.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/components/style_methods.lua
@@ -740,14 +740,14 @@ function PLUGIN:ApplyItemAlertStyle(frame, noicon)
     alertpanel:SetFrameLevel(lvl - 1)

     --[[ FRAME BG ]]--
-    alertpanel.bg = alertpanel:CreateTexture(nil, "BACKGROUND")
+    alertpanel.bg = alertpanel:CreateTexture(nil, "BACKGROUND", nil, -5)
     alertpanel.bg:SetAllPoints()
     alertpanel.bg:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Template\Alert\ALERT-FULL]])
     alertpanel.bg:SetGradient('VERTICAL', 0, 0, 0, .37, .32, .29)

     if(not noicon) then
 	    --[[ ICON BG ]]--
-	    alertpanel.icon = alertpanel:CreateTexture(nil, "BACKGROUND", nil, 2)
+	    alertpanel.icon = alertpanel:CreateTexture(nil, "BACKGROUND", nil, -2)
 	    alertpanel.icon:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Template\Alert\ALERT-ICON-BORDER]])
 	    alertpanel.icon:SetGradient('VERTICAL', 1, 0.35, 0, 1, 1, 0)
 	    alertpanel.icon:SetPoint("LEFT", alertpanel, "LEFT", -45, 20)
diff --git a/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc b/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc
index 8e339de..25907cc 100644
--- a/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc
+++ b/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc
@@ -1,6 +1,6 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 5.3.0
+## Version: 5.3.1
 ## Title: |cffFF9900SVUI |r|cffFFEF00Track-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFRaid & Party Member Tracking|r].
 ## SavedVariables: TrackOMatic_Global