Quantcast

1.0.072

Munglunch [03-04-15 - 15:18]
1.0.072
Filename
SVUI_!Core/Changelog-SVUI_!Core-r20150304000513.txt
SVUI_!Core/SVUI_!Core.toc
SVUI_!Core/libs/_SVUI_Lib/Librarian.lua
SVUI_!Core/libs/_SVUI_Lib/Registry.lua
SVUI_!Core/system/layout.lua
SVUI_!Core/system/overrides.lua
SVUI_!Options/SVUI_!Options.lua
SVUI_!Options/SVUI_!Options.toc
SVUI_!Options/UnitFrames.lua
SVUI_!Options/libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc
SVUI_!Options/libs/AceGUI-3.0-SharedMediaWidgets/Libs/LibStub/LibStub.toc
SVUI_Chat/Changelog-SVUI_Chat-r20150304000606.txt
SVUI_Chat/SVUI_Chat.toc
SVUI_Maps/Changelog-SVUI_Maps-r20150303133851.txt
SVUI_Maps/Changelog-SVUI_Maps-r20150304000545.txt
SVUI_Maps/SVUI_Maps.toc
SVUI_QuestTracker/Changelog-SVUI_QuestTracker-r20150304000706.txt
SVUI_QuestTracker/SVUI_QuestTracker.toc
SVUI_Skins/Changelog-SVUI_Skins-r20150304000528.txt
SVUI_Skins/SVUI_Skins.lua
SVUI_Skins/SVUI_Skins.toc
SVUI_Skins/components/_load.xml
SVUI_Skins/components/addons/Omen.lua
SVUI_Skins/components/addons/Recount.lua
SVUI_Skins/components/addons/Skada.lua
SVUI_Skins/components/addons/TinyDPS.lua
SVUI_Skins/components/addons/alDamageMeter.lua
SVUI_Skins/components/atlas.lua
SVUI_Skins/components/docklet.lua
SVUI_UnitFrames/Changelog-SVUI_UnitFrames-r20150304000623.txt
SVUI_UnitFrames/SVUI_UnitFrames.lua
SVUI_UnitFrames/SVUI_UnitFrames.toc
SVUI_UnitFrames/elements/castbar.lua
SVUI_UnitFrames/libs/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
SVUI_UnitFrames/libs/Plugins/oUF_Afflicted/oUF_Afflicted.toc
SVUI_UnitFrames/libs/Plugins/oUF_AuraWatch/oUF_AuraWatch.toc
SVUI_UnitFrames/libs/Plugins/oUF_CombatFader/oUF_CombatFader.toc
SVUI_UnitFrames/libs/Plugins/oUF_Druidness/oUF_Druidness.toc
SVUI_UnitFrames/libs/Plugins/oUF_Experience/oUF_Experience.toc
SVUI_UnitFrames/libs/Plugins/oUF_Friendship/oUF_Friendship.toc
SVUI_UnitFrames/libs/Plugins/oUF_Gladiator/oUF_Gladiator.toc
SVUI_UnitFrames/libs/Plugins/oUF_MageMagic/oUF_MageMagic.toc
SVUI_UnitFrames/libs/Plugins/oUF_RaidDebuffs/oUF_RaidDebuffs.toc
SVUI_UnitFrames/libs/Plugins/oUF_Reputation/oUF_Reputation.toc
diff --git a/SVUI_!Core/Changelog-SVUI_!Core-r20150304000513.txt b/SVUI_!Core/Changelog-SVUI_!Core-r20150304000513.txt
new file mode 100644
index 0000000..8a32baa
--- /dev/null
+++ b/SVUI_!Core/Changelog-SVUI_!Core-r20150304000513.txt
@@ -0,0 +1,35 @@
+Steven Jackson:
+	- updates
+	- Updated chat, maps and more
+	- Updated chat, maps and more
+	- toc update
+	- fixes for automations, and custom profiles
+	- toc update
+	- ace modifications
+	- Fixed exp bug and custom profiles
+	- Fixed profiles, filters and lua errors
+	- Fixed profiles, filters and vendoring
+	- api updates
+	- transfer wizard code added
+	- api updates
+	- api updates
+	- Styling update of quest items and garrison panels
+	- build update
+	- issue #60 and #61 fixed
+	- release 1.0.04
+	- fixed more installer issues, visual adjustments
+	- Combat closing of anchors fixed
+	- toc updates
+	- colors, installer, profiles updated
+	- installer issues fixed
+	- more updates
+	- toc update
+	- pkgmeta update
+	- fix for struct part 2
+	- fix for file struct
+	- changing for packager
+	- Updating to the new core
+	- Cleaning up
+Munglunch:
+	- 5.4.2
+	- First Commit
diff --git a/SVUI_!Core/SVUI_!Core.toc b/SVUI_!Core/SVUI_!Core.toc
index f8efa3a..ee1347f 100644
--- a/SVUI_!Core/SVUI_!Core.toc
+++ b/SVUI_!Core/SVUI_!Core.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.07
+## Version: 1.0.08
 ## Title: |cffFF9900SuperVillain UI: |r|cff00FF00!Core|r
 ## Notes: SVUI [|cff9911FFCore Framework|r].
 ## SavedVariables: SVUI_Global, SVUI_Errors, SVUI_Filters, SVUI_Media
@@ -17,5 +17,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: Core
 ## X-Curse-Project-ID: supervillain-ui
 ## X-Curse-Repository-ID: wow/supervillain-ui/mainline
+## X-Curse-Packaged-Version: r20150304000513
+## X-Curse-Project-Name: SuperVillain UI: Core
+## X-Curse-Project-ID: supervillain-ui
+## X-Curse-Repository-ID: wow/supervillain-ui/mainline

 SVUI_!Core.xml
diff --git a/SVUI_!Core/libs/_SVUI_Lib/Librarian.lua b/SVUI_!Core/libs/_SVUI_Lib/Librarian.lua
index e57b4dd..5227a55 100644
--- a/SVUI_!Core/libs/_SVUI_Lib/Librarian.lua
+++ b/SVUI_!Core/libs/_SVUI_Lib/Librarian.lua
@@ -10,7 +10,7 @@ local _G = getfenv(0)
 local Librarian = _G["Librarian"]

 if not Librarian then
-    Librarian = Librarian or {libs = {}}
+    Librarian = Librarian or {libs = {}, arrested = {}, warrants = {}}
     _G["Librarian"] = Librarian

     function Librarian:NewLibrary(libName)
@@ -26,5 +26,36 @@ if not Librarian then
         return self.libs[libName]
     end

+    local dead = function() return end
+
+    function Librarian:LockLibrary(lib)
+        if((self.warrants[lib]) or (not LibStub) or (not LibStub.libs)) then return end
+        for libName,libObj in pairs(LibStub.libs) do
+            if(libName:find(lib) and (not self.arrested[libName])) then
+                self.warrants[lib] = true
+                self.arrested[libName] = {}
+                for k,v in pairs(libObj) do
+                    if(type(v) == 'function') then
+                        self.arrested[libName][k] = v
+                        v = dead
+                    end
+                end
+            end
+        end
+    end
+
+    function Librarian:UnlockLibrary(lib)
+        if((not LibStub) or (not LibStub.libs)) then return end
+        for libName,libObj in pairs(LibStub.libs) do
+            if(libName:find(lib) and (self.arrested[libName])) then
+                for k,v in pairs(self.arrested[libName]) do
+                    libObj[k] = v
+                end
+                self.warrants[lib] = nil
+                self.arrested[libName] = nil
+            end
+        end
+    end
+
     setmetatable(Librarian, { __call = Librarian.Fetch })
 end
diff --git a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
index ceb57e5..a59ad9f 100644
--- a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
+++ b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
@@ -508,7 +508,9 @@ function lib:LiveUpdate(forced)
             CoreObject:ReLoad()
         end
         self:RefreshAll()
-        PRIVATE_SV.SAFEDATA.NEEDSLIVEUPDATE = false
+        if((not InCombatLockdown()) and (not C_PetBattles.IsInBattle())) then
+            PRIVATE_SV.SAFEDATA.NEEDSLIVEUPDATE = false
+        end
     end
 end

diff --git a/SVUI_!Core/system/layout.lua b/SVUI_!Core/system/layout.lua
index 3605e0b..38c5a9b 100644
--- a/SVUI_!Core/system/layout.lua
+++ b/SVUI_!Core/system/layout.lua
@@ -44,6 +44,7 @@ UIPanels["BlackMarketFrame"] 				= { moving = false, snapped = false, canupdate
 UIPanels["CalendarFrame"] 					= { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true };
 UIPanels["CharacterFrame"] 					= { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false };
 UIPanels["ClassTrainerFrame"] 				= { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false };
+--UIPanels["ColorPickerFrame"] 				= { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false };
 UIPanels["DressUpFrame"] 					= { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false };
 UIPanels["DraenorZoneAbilityFrame"] 		= { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false };
 UIPanels["EncounterJournal"] 				= { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false };
diff --git a/SVUI_!Core/system/overrides.lua b/SVUI_!Core/system/overrides.lua
index 8cd7a94..2905060 100644
--- a/SVUI_!Core/system/overrides.lua
+++ b/SVUI_!Core/system/overrides.lua
@@ -992,6 +992,10 @@ local function SetOverrides()
 		LootingEventFrame:SetScript("OnEvent", LootFrame_OnEvent);
 	end

+	ColorPickerFrame:RemoveTextures()
+	ColorPickerFrame:SetBackdrop(SV.media.backdrop.pattern)
+	ColorPickerFrame:SetFrameLevel(999)
+
 	AlterBlizzMainBar()
 end

diff --git a/SVUI_!Options/SVUI_!Options.lua b/SVUI_!Options/SVUI_!Options.lua
index 15bed55..18638ae 100644
--- a/SVUI_!Options/SVUI_!Options.lua
+++ b/SVUI_!Options/SVUI_!Options.lua
@@ -74,7 +74,7 @@ local function GetLiveDockletsA()
 	local test = SV.private.Docks.Embed2;
 	local t = {["None"] = L["None"]};
 	for n,l in pairs(DockableAddons) do
-		if (test ~= n) then
+		if((not test) or (not test:find(n))) then
 			if(n:find("Skada") and _G.Skada) then
 				for index,window in pairs(_G.Skada:GetWindows()) do
 				    local key = window.db.name
@@ -92,7 +92,7 @@ local function GetLiveDockletsB()
 	local test = SV.private.Docks.Embed1;
 	local t = {["None"] = L["None"]};
 	for n,l in pairs(DockableAddons) do
-		if (test ~= n) then
+		if((not test) or (not test:find(n))) then
 			if(n:find("Skada") and _G.Skada) then
 				for index,window in pairs(_G.Skada:GetWindows()) do
 				    local key = window.db.name
@@ -1603,7 +1603,7 @@ SV.Options.args.Dock = {
 					order = 2,
 					name = "Secondary Docklet",
 					desc = "Select another addon",
-					disabled = function() return (SV.private.Docks.Embed1 == "None") end,
+					--disabled = function() return (SV.private.Docks.Embed1 == "None") end,
 					values = function() return GetLiveDockletsB() end,
 					get = function() return SV.private.Docks.Embed2 end,
 					set = function(a,value) SV.private.Docks.Embed2 = value; if(SV.Skins) then SV.Skins:RegisterAddonDocklets() end end,
diff --git a/SVUI_!Options/SVUI_!Options.toc b/SVUI_!Options/SVUI_!Options.toc
index 42a269e..f80997c 100644
--- a/SVUI_!Options/SVUI_!Options.toc
+++ b/SVUI_!Options/SVUI_!Options.toc
@@ -15,5 +15,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: Core
 ## X-Curse-Project-ID: supervillain-ui
 ## X-Curse-Repository-ID: wow/supervillain-ui/mainline
+## X-Curse-Packaged-Version: r20150304000513
+## X-Curse-Project-Name: SuperVillain UI: Core
+## X-Curse-Project-ID: supervillain-ui
+## X-Curse-Repository-ID: wow/supervillain-ui/mainline

 SVUI_!Options.xml
diff --git a/SVUI_!Options/UnitFrames.lua b/SVUI_!Options/UnitFrames.lua
index 4ce5892..fd0712a 100644
--- a/SVUI_!Options/UnitFrames.lua
+++ b/SVUI_!Options/UnitFrames.lua
@@ -2490,7 +2490,7 @@ SV.Options.args[Schema] = {
 								fontConfigButton = {
 									order = 1,
 									name = L["Set UnitFrame Fonts"],
-									type = "execute", func = function() ns:SetToFontConfig("UnitFrame") end
+									type = "execute", func = function() SVUIOptions:SetToFontConfig("UnitFrame") end
 								},
 							}
 						},
diff --git a/SVUI_!Options/libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc b/SVUI_!Options/libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc
index 521e10a..34b5904 100644
--- a/SVUI_!Options/libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc
+++ b/SVUI_!Options/libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc
@@ -35,6 +35,10 @@
 ## X-Curse-Project-Name: SuperVillain UI: Core
 ## X-Curse-Project-ID: supervillain-ui
 ## X-Curse-Repository-ID: wow/supervillain-ui/mainline
+## X-Curse-Packaged-Version: r20150304000513
+## X-Curse-Project-Name: SuperVillain UI: Core
+## X-Curse-Project-ID: supervillain-ui
+## X-Curse-Repository-ID: wow/supervillain-ui/mainline

 ## Title: Lib: AceGUI-3.0-SharedMediaWidgets
 ## Notes: Enables AceGUI-3.0 widgets for the 5 basic SharedMedia-3.0 types
diff --git a/SVUI_!Options/libs/AceGUI-3.0-SharedMediaWidgets/Libs/LibStub/LibStub.toc b/SVUI_!Options/libs/AceGUI-3.0-SharedMediaWidgets/Libs/LibStub/LibStub.toc
index 46509b8..e7219fb 100644
--- a/SVUI_!Options/libs/AceGUI-3.0-SharedMediaWidgets/Libs/LibStub/LibStub.toc
+++ b/SVUI_!Options/libs/AceGUI-3.0-SharedMediaWidgets/Libs/LibStub/LibStub.toc
@@ -41,5 +41,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: Core
 ## X-Curse-Project-ID: supervillain-ui
 ## X-Curse-Repository-ID: wow/supervillain-ui/mainline
+## X-Curse-Packaged-Version: r20150304000513
+## X-Curse-Project-Name: SuperVillain UI: Core
+## X-Curse-Project-ID: supervillain-ui
+## X-Curse-Repository-ID: wow/supervillain-ui/mainline

 LibStub.lua
diff --git a/SVUI_Chat/Changelog-SVUI_Chat-r20150304000606.txt b/SVUI_Chat/Changelog-SVUI_Chat-r20150304000606.txt
new file mode 100644
index 0000000..36ac6d4
--- /dev/null
+++ b/SVUI_Chat/Changelog-SVUI_Chat-r20150304000606.txt
@@ -0,0 +1,10 @@
+Steven Jackson:
+	- updates
+	- added shortening option
+	- new features
+	- fixed twitter functionality
+	- build update
+	- updating with core
+	- toc update
+	- fix for file struct
+	- First commit
diff --git a/SVUI_Chat/SVUI_Chat.toc b/SVUI_Chat/SVUI_Chat.toc
index cf65b82..30253f9 100644
--- a/SVUI_Chat/SVUI_Chat.toc
+++ b/SVUI_Chat/SVUI_Chat.toc
@@ -17,5 +17,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: Chat
 ## X-Curse-Project-ID: supervillain-ui-chat
 ## X-Curse-Repository-ID: wow/supervillain-ui-chat/mainline
+## X-Curse-Packaged-Version: r20150304000606
+## X-Curse-Project-Name: SuperVillain UI: Chat
+## X-Curse-Project-ID: supervillain-ui-chat
+## X-Curse-Repository-ID: wow/supervillain-ui-chat/mainline

 SVUI_Chat.xml
diff --git a/SVUI_Maps/Changelog-SVUI_Maps-r20150303133851.txt b/SVUI_Maps/Changelog-SVUI_Maps-r20150303133851.txt
new file mode 100644
index 0000000..a93cd94
--- /dev/null
+++ b/SVUI_Maps/Changelog-SVUI_Maps-r20150303133851.txt
@@ -0,0 +1,9 @@
+Steven Jackson:
+	- added Zygor minimap icon support
+	- added Zygor minimap icon support
+	- build update
+	- updating with core
+	- toc update
+	- new shape options
+	- fix for file struct
+	- First commit
diff --git a/SVUI_Maps/Changelog-SVUI_Maps-r20150304000545.txt b/SVUI_Maps/Changelog-SVUI_Maps-r20150304000545.txt
new file mode 100644
index 0000000..7da0683
--- /dev/null
+++ b/SVUI_Maps/Changelog-SVUI_Maps-r20150304000545.txt
@@ -0,0 +1,10 @@
+Steven Jackson:
+	- updates
+	- added Zygor minimap icon support
+	- added Zygor minimap icon support
+	- build update
+	- updating with core
+	- toc update
+	- new shape options
+	- fix for file struct
+	- First commit
diff --git a/SVUI_Maps/SVUI_Maps.toc b/SVUI_Maps/SVUI_Maps.toc
index eb82e14..0fb5b6e 100644
--- a/SVUI_Maps/SVUI_Maps.toc
+++ b/SVUI_Maps/SVUI_Maps.toc
@@ -12,7 +12,11 @@
 ## X-Donate: PayPal:munglunch@gmail.com
 ## X-License: All Rights Reserved
 ## X-Category: Interface Enhancements
-## X-Curse-Packaged-Version: r20150303025045
+## X-Curse-Packaged-Version: r20150303133851
+## X-Curse-Project-Name: SuperVillain UI: Maps
+## X-Curse-Project-ID: supervillain-ui-maps
+## X-Curse-Repository-ID: wow/supervillain-ui-maps/mainline
+## X-Curse-Packaged-Version: r20150304000545
 ## X-Curse-Project-Name: SuperVillain UI: Maps
 ## X-Curse-Project-ID: supervillain-ui-maps
 ## X-Curse-Repository-ID: wow/supervillain-ui-maps/mainline
diff --git a/SVUI_QuestTracker/Changelog-SVUI_QuestTracker-r20150304000706.txt b/SVUI_QuestTracker/Changelog-SVUI_QuestTracker-r20150304000706.txt
new file mode 100644
index 0000000..956b758
--- /dev/null
+++ b/SVUI_QuestTracker/Changelog-SVUI_QuestTracker-r20150304000706.txt
@@ -0,0 +1,10 @@
+Steven Jackson:
+	- updates
+	- fixes for automations, and custom profiles
+	- ace modifications, petbattle adjustments
+	- build update
+	- updating with core
+	- toc update
+	- more updates
+	- fix for file struct
+	- First commit
diff --git a/SVUI_QuestTracker/SVUI_QuestTracker.toc b/SVUI_QuestTracker/SVUI_QuestTracker.toc
index a0dbcf1..d75f882 100644
--- a/SVUI_QuestTracker/SVUI_QuestTracker.toc
+++ b/SVUI_QuestTracker/SVUI_QuestTracker.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.01
+## Version: 1.0.08
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00QuestTracker|r
 ## Notes: QuestTracker Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
@@ -16,5 +16,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: QuestTracker
 ## X-Curse-Project-ID: supervillain-ui-questtracker
 ## X-Curse-Repository-ID: wow/supervillain-ui-questtracker/mainline
+## X-Curse-Packaged-Version: r20150304000706
+## X-Curse-Project-Name: SuperVillain UI: QuestTracker
+## X-Curse-Project-ID: supervillain-ui-questtracker
+## X-Curse-Repository-ID: wow/supervillain-ui-questtracker/mainline

 SVUI_QuestTracker.xml
diff --git a/SVUI_Skins/Changelog-SVUI_Skins-r20150304000528.txt b/SVUI_Skins/Changelog-SVUI_Skins-r20150304000528.txt
new file mode 100644
index 0000000..ffd6588
--- /dev/null
+++ b/SVUI_Skins/Changelog-SVUI_Skins-r20150304000528.txt
@@ -0,0 +1,17 @@
+Steven Jackson:
+	- updates
+	- misc bug fixed
+	- fixes for automations, and custom profiles
+	- ace modifications, petbattle adjustments
+	- Fixed profiles, filters and lua errors
+	- updated styles in interface options
+	- api updates
+	- Styling update of quest items and garrison panels
+	- build update
+	- 6.1 style update
+	- updating with core
+	- toc update
+	- DBM fix
+	- more updates
+	- fix for file struct
+	- First Commit
diff --git a/SVUI_Skins/SVUI_Skins.lua b/SVUI_Skins/SVUI_Skins.lua
index 7ce4478..6ddb384 100644
--- a/SVUI_Skins/SVUI_Skins.lua
+++ b/SVUI_Skins/SVUI_Skins.lua
@@ -48,7 +48,7 @@ MOD.AddOnEvents = {};
 MOD.CustomQueue = {};
 MOD.EventListeners = {};
 MOD.OnLoadAddons = {};
-MOD.SkinsdAddons = {};
+MOD.SkinnedAddons = {};
 MOD.Debugging = false;
 --[[
 ##########################################################
@@ -85,8 +85,8 @@ function MOD:Style(style, fn, ...)
 		SV:HandleError("SKINS", style, catch);
 		return
 	end
-	if(pass and (not style:find("Blizzard")) and not self.SkinsdAddons[style]) then
-		self.SkinsdAddons[style] = true
+	if(pass and (not style:find("Blizzard")) and not self.SkinnedAddons[style]) then
+		self.SkinnedAddons[style] = true
 		if(SV.db.general.loginmessage) then
 			local verb = charming[math.random(1,#charming)]
 			SV:AddonMessage(styleMessage:format(style, verb))
@@ -235,169 +235,9 @@ function MOD:ADDON_LOADED(event, addon)
 end
 --[[
 ##########################################################
-OPTIONS CREATION
+CUSTOM HANDLERS
 ##########################################################
 ]]--
-function MOD:FetchDocklets()
-	local dock1 = SV.private.Docks.Embed1 or "None";
-	local dock2 = SV.private.Docks.Embed2 or "None";
-	local enabled1 = (dock1 ~= "None")
-	local enabled2 = ((dock2 ~= "None") and (dock2 ~= dock1))
-	return dock1, dock2, enabled1, enabled2
-end
-
-function MOD:ValidateDocklet(addon)
-	local dock1,dock2,enabled1,enabled2 = self:FetchDocklets();
-	local valid = false;
-
-	if(dock1:find(addon) or dock2:find(addon)) then
-		valid = true
-	end
-
-	return valid,enabled1,enabled2
-end
-
-function MOD:DockletReady(addon, dock)
-	if((not addon) or (not dock)) then return false end
-	if(dock:find(addon) and IsAddOnLoaded(addon)) then
-		return true
-	end
-	return false
-end
-
-function MOD:RegisterAddonDocklets()
-	local dock1,dock2,enabled1,enabled2 = self:FetchDocklets();
-  	local tipLeft, tipRight = "", "";
-  	local active1, active2 = false, false;
-
-  	self.Docklet.Dock1.FrameLink = nil;
-  	self.Docklet.Dock1.ExpandCallback = nil;
-  	self.Docklet.Dock2.FrameLink = nil;
-  	self.Docklet.Dock2.ExpandCallback = nil;
-
-  	if(enabled1) then
-  		local width = self.Docklet:GetWidth();
-
-		if(enabled2) then
-			self.Docklet.Dock1:SetWidth(width * 0.5)
-			self.Docklet.Dock2:SetWidth(width * 0.5)
-
-			if(self:DockletReady("Skada", dock2)) then
-				tipRight = " and Skada";
-				self:Docklet_Skada()
-				active2 = true
-				self.Docklet.Dock2.ExpandCallback = "Docklet_Skada"
-			elseif(self:DockletReady("Omen", dock2)) then
-				tipRight = " and Omen";
-				self:Docklet_Omen(self.Docklet.Dock2)
-				active2 = true
-				self.Docklet.Dock2.ExpandCallback = "Docklet_Omen"
-			elseif(self:DockletReady("Recount", dock2)) then
-				tipRight = " and Recount";
-				self:Docklet_Recount(self.Docklet.Dock2)
-				active2 = true
-				self.Docklet.Dock2.ExpandCallback = "Docklet_Recount"
-			elseif(self:DockletReady("TinyDPS", dock2)) then
-				tipRight = " and TinyDPS";
-				self:Docklet_TinyDPS(self.Docklet.Dock2)
-				active2 = true
-				self.Docklet.Dock2.ExpandCallback = "Docklet_TinyDPS"
-			elseif(self:DockletReady("alDamageMeter", dock2)) then
-				tipRight = " and alDamageMeter";
-				self:Docklet_alDamageMeter(self.Docklet.Dock2)
-				active2 = true
-				self.Docklet.Dock2.ExpandCallback = "Docklet_alDamageMeter"
-			end
-		end
-
-		if(not active2) then
-			self.Docklet.Dock1:SetWidth(width)
-		end
-
-		if(self:DockletReady("Skada", dock1)) then
-			tipLeft = "Skada";
-			self:Docklet_Skada()
-			active1 = true
-			self.Docklet.Dock1.ExpandCallback = "Docklet_Skada"
-		elseif(self:DockletReady("Omen", dock1)) then
-			tipLeft = "Omen";
-			self:Docklet_Omen(self.Docklet.Dock1)
-			active1 = true
-			self.Docklet.Dock1.ExpandCallback = "Docklet_Omen"
-		elseif(self:DockletReady("Recount", dock1)) then
-			tipLeft = "Recount";
-			self:Docklet_Recount(self.Docklet.Dock1)
-			active1 = true
-			self.Docklet.Dock1.ExpandCallback = "Docklet_Recount"
-		elseif(self:DockletReady("TinyDPS", dock1)) then
-			tipLeft = "TinyDPS";
-			self:Docklet_TinyDPS(self.Docklet.Dock1)
-			active1 = true
-			self.Docklet.Dock1.ExpandCallback = "Docklet_TinyDPS"
-		elseif(self:DockletReady("alDamageMeter", dock1)) then
-			tipLeft = "alDamageMeter";
-			self:Docklet_alDamageMeter(self.Docklet.Dock1)
-			active1 = true
-			self.Docklet.Dock1.ExpandCallback = "alDamageMeter"
-		end
-	end
-
-	if(active1) then
-		self.Docklet:Enable();
-		if(active2) then
-			self.Docklet.Dock1:Show()
-			self.Docklet.Dock2:Show()
-		else
-			self.Docklet.Dock1:Show()
-			self.Docklet.Dock2:Hide()
-		end
-
-		self.Docklet.DockButton:SetAttribute("tipText", ("%s%s"):format(tipLeft, tipRight));
-		self.Docklet.DockButton:MakeDefault();
-	else
-		self.Docklet.Dock1:Hide()
-		self.Docklet.Dock2:Hide()
-		self.Docklet:Disable()
-
-		self.Docklet.Parent.Bar:UnsetDefault();
-	end
-end
-
-local DockableAddons = {
-	["alDamageMeter"] = L["alDamageMeter"],
-	["Skada"] = L["Skada"],
-	["Recount"] = L["Recount"],
-	["TinyDPS"] = L["TinyDPS"],
-	["Omen"] = L["Omen"]
-}
-
-local function GetDockableAddons()
-	local test = SV.private.Docks.Embed1;
-
-	local t = {
-		{ title = "Docked Addon", divider = true },
-		{text = "Remove All", func = function() SV.private.Docks.Embed1 = "None"; MOD:RegisterAddonDocklets() end}
-	};
-
-	for n,l in pairs(DockableAddons) do
-		if (not test or (test and not test:find(n))) then
-			if(n:find("Skada") and _G.Skada) then
-				for index,window in pairs(_G.Skada:GetWindows()) do
-					local keyName = window.db.name
-				    local key = "SkadaBarWindow" .. keyName
-				    local name = (keyName == "Skada") and "Skada - Main" or "Skada - " .. keyName;
-				    tinsert(t,{text = name, func = function() SV.private.Docks.Embed1 = key; MOD:RegisterAddonDocklets() end});
-				end
-			else
-				if IsAddOnLoaded(n) or IsAddOnLoaded(l) then
-					tinsert(t,{text = n, func = function() SV.private.Docks.Embed1 = l; MOD:RegisterAddonDocklets() end});
-				end
-			end
-		end
-	end
-	return t;
-end
-
 local AddonDockletToggle = function(self)
 	if(not InCombatLockdown()) then
 		self.Parent:Refresh()
@@ -443,15 +283,7 @@ local HideSubDocklet = function(self)
 end

 local function DockExpandDocklet()
-	local height = SV.Dock.BottomRight.Window:GetHeight()
-	local fn1 = MOD.Docklet.Dock1.ExpandCallback
-	if(fn1 and MOD[fn1] and type(MOD[fn1]) == 'function') then
-		MOD[fn1](MOD.Docklet.Dock1, height)
-	end
-	local fn2 = MOD.Docklet.Dock2.ExpandCallback
-	if(fn2 and MOD[fn2] and type(MOD[fn2]) == 'function') then
-		MOD[fn2](MOD.Docklet.Dock2, height)
-	end
+	MOD.Docklet:UpdateEmbeds()
 end

 local function DockFadeInDocklet()
@@ -511,26 +343,29 @@ function MOD:Load()
 	self.Alert = alert;

 	self.Docklet = SV.Dock:NewDocklet("BottomRight", "SVUI_SkinsDock", self.TitleID, nil, AddonDockletToggle);
-	SV.Dock.BottomRight.Bar.Button.GetMenuList = GetDockableAddons;
-	self.Docklet.DockButton.GetPreMenuList = GetDockableAddons;
+	self.Docklet.DockButton.GetPreMenuList = self.GetDockables;
 	self.Docklet.DockButton:SetAttribute("hasDropDown", true);

+	SV.Dock.BottomRight.Bar.Button.GetMenuList = self.GetDockables;
+
 	local dockWidth = self.Docklet:GetWidth()

 	self.Docklet.Dock1 = CreateFrame("Frame", "SVUI_SkinsDockAddon1", self.Docklet);
-	self.Docklet.Dock1:SetPoint('TOPLEFT', self.Docklet, 'TOPLEFT', -4, 0);
-	self.Docklet.Dock1:SetPoint('BOTTOMLEFT', self.Docklet, 'BOTTOMLEFT', -4, -4);
+	self.Docklet.Dock1:SetPoint('TOPLEFT', self.Docklet, 'TOPLEFT', -1, 0);
+	self.Docklet.Dock1:SetPoint('BOTTOMLEFT', self.Docklet, 'BOTTOMLEFT', -1, -1);
 	self.Docklet.Dock1:SetWidth(dockWidth);
 	self.Docklet.Dock1:SetScript('OnShow', ShowSubDocklet);
 	self.Docklet.Dock1:SetScript('OnHide', HideSubDocklet);

 	self.Docklet.Dock2 = CreateFrame("Frame", "SVUI_SkinsDockAddon2", self.Docklet);
 	self.Docklet.Dock2:SetPoint('TOPLEFT', self.Docklet.Dock1, 'TOPRIGHT', 0, 0);
-	self.Docklet.Dock2:SetPoint('BOTTOMLEFT', self.Docklet.Dock1, 'BOTTOMRIGHT', 0, 0);
+	self.Docklet.Dock2:SetPoint('BOTTOMRIGHT', self.Docklet, 'BOTTOMRIGHT', 1, -1);
 	self.Docklet.Dock2:SetWidth(dockWidth * 0.5);
 	self.Docklet.Dock2:SetScript('OnShow', ShowSubDocklet);
 	self.Docklet.Dock2:SetScript('OnHide', HideSubDocklet);

+	self:SetEmbedHandlers(self.Docklet)
+
 	self.Docklet:Hide()

 	self:RegisterAddonDocklets()
diff --git a/SVUI_Skins/SVUI_Skins.toc b/SVUI_Skins/SVUI_Skins.toc
index 1bdb222..0c1bf83 100644
--- a/SVUI_Skins/SVUI_Skins.toc
+++ b/SVUI_Skins/SVUI_Skins.toc
@@ -18,5 +18,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: Skins
 ## X-Curse-Project-ID: supervillain-ui-skins
 ## X-Curse-Repository-ID: wow/supervillain-ui-skins/mainline
+## X-Curse-Packaged-Version: r20150304000528
+## X-Curse-Project-Name: SuperVillain UI: Skins
+## X-Curse-Project-ID: supervillain-ui-skins
+## X-Curse-Repository-ID: wow/supervillain-ui-skins/mainline

 SVUI_Skins.xml
diff --git a/SVUI_Skins/components/_load.xml b/SVUI_Skins/components/_load.xml
index c457c20..39e3923 100644
--- a/SVUI_Skins/components/_load.xml
+++ b/SVUI_Skins/components/_load.xml
@@ -1,5 +1,6 @@
 <Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Include file='atlas\_load.xml'/>
+	<Script file='docklet.lua'/>
+	<Script file='atlas.lua'/>
 	<Include file='blizzard\_load.xml'/>
 	<Include file='addons\_load.xml'/>
 </Ui>
\ No newline at end of file
diff --git a/SVUI_Skins/components/addons/Omen.lua b/SVUI_Skins/components/addons/Omen.lua
index 0a6a486..a616695 100644
--- a/SVUI_Skins/components/addons/Omen.lua
+++ b/SVUI_Skins/components/addons/Omen.lua
@@ -58,7 +58,7 @@ local function StyleOmen()
   Omen.db.profile.TitleBar.UseSameBG = false

   hooksecurefunc(Omen, 'UpdateBackdrop', function(self)
-    if(not MOD:ValidateDocklet("Omen")) then
+    if(not MOD.Docklet:IsEmbedded("Omen")) then
       SV.API:Set("Frame", self.BarList, 'Transparent')
       self.Title:RemoveTextures()
       self.Title:SetStyle("Frame", "Default")
@@ -71,56 +71,5 @@ local function StyleOmen()
   Omen:ReAnchorBars()
   Omen:ResizeBars()
 end
-MOD:SaveAddonStyle("Omen", StyleOmen, nil, true)

-function MOD: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.ShowWith.UseShowWith=false;
-
-  --[[ Background Settings ]]--
-  db.profile.Background.BarInset=3;
-  db.profile.Background.EdgeSize=1;
-  db.profile.Background.Texture = "None"
-
-  --[[ Bar Settings ]]--
-  db.profile.Bar.Font = "SVUI Default Font";
-  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.TitleBar.Texture = "None";
-  db.profile.TitleBar.UseSameBG=false;
-
-  Omen:OnProfileChanged(nil,db)
-  OmenTitle:RemoveTextures()
-  OmenTitle.Panel = nil
-  OmenTitle:SetStyle("Frame", "Transparent")
-  --OmenTitle:SetPanelColor("class")
-  --OmenTitle:GetFontString():SetFont(SV.media.font.default, 12, "OUTLINE")
-  OmenBarList:RemoveTextures()
-  OmenAnchor:SetStyle("!_Frame", 'Transparent')
-  OmenAnchor:ClearAllPoints()
-  OmenAnchor:SetAllPoints(parent)
-  OmenAnchor:SetParent(parent)
-
-  parent.Framelink = OmenAnchor
-end
\ No newline at end of file
+MOD:SaveAddonStyle("Omen", StyleOmen, nil, true)
\ No newline at end of file
diff --git a/SVUI_Skins/components/addons/Recount.lua b/SVUI_Skins/components/addons/Recount.lua
index a5baee9..ec9a747 100644
--- a/SVUI_Skins/components/addons/Recount.lua
+++ b/SVUI_Skins/components/addons/Recount.lua
@@ -27,106 +27,90 @@ local Schema = MOD.Schema;
 RECOUNT
 ##########################################################
 ]]--
-local function NoColor(a)
-  for p = 1,a:GetNumRegions()do
-    local q=select(p,a:GetRegions())
-    if q:GetObjectType()=='Texture'then
-      q:SetDesaturated(true)
-      if q:GetTexture()=='Interface\\DialogFrame\\UI-DialogBox-Corner'then
-        q:SetTexture("")
-        q:Die()
-      end
-    end
-  end
-end
+local StripKeys = {"CloseButton", "ConfigButton", "FileButton", "LeftButton", "ResetButton", "RightButton", "ReportButton", "SummaryButton"}

-local function StyleFrame(frame)
-  if(not frame) then return end
-  SV.API:Set("Frame", frame,"Transparent")
-  frame.Panel:SetAllPoints()
-  frame.Panel:SetPoint('TOPLEFT', frame, 'TOPLEFT', 0, -6)
-  frame.CloseButton:SetPoint('TOPRIGHT', frame, 'TOPRIGHT', -1, -9)
-  frame:SetBackdrop(nil)
+local Recount_ShowReset = function(self)
+	MOD:LoadAlert(L['Reset Recount?'], function(self) Recount:ResetData() self:GetParent():Hide() end)
+end

-  frame.TitleBackground = CreateFrame('Frame', nil, frame)
-  frame.TitleBackground:SetStyle("!_Frame", "Transparent")
-  --frame.TitleBackground:SetPanelColor("class")
-  frame.TitleBackground:SetPoint('TOP', frame, 'TOP', 0, -8)
-  frame.TitleBackground.timeLapse = 0
-  frame.TitleBackground:SetScript('OnUpdate', function(self,elapsed)
-    self.timeLapse = self.timeLapse + elapsed
-    if(self.timeLapse < 0.2) then
-      return
-    else
-      self.timeLapse = 0
-    end
-    self:SetSize(frame:GetWidth() - 4, 22)
-  end)
-  frame.TitleBackground:SetFrameLevel(frame:GetFrameLevel())
-  frame.Title:SetPoint('TOPLEFT', frame, 'TOPLEFT', 6, -12)
-  NoColor(frame.CloseButton)
-  if frame.ConfigButton then NoColor(frame.ConfigButton) end
-  if frame.FileButton then NoColor(frame.FileButton) end
-  if frame.LeftButton then NoColor(frame.LeftButton) end
-  if frame.ResetButton then NoColor(frame.ResetButton) end
-  if frame.RightButton then NoColor(frame.RightButton) end
-  if frame.ReportButton then NoColor(frame.ReportButton) end
-  if frame.SummaryButton then NoColor(frame.SummaryButton) end
+local Title_OnUpdate = function(self, elapsed)
+	self.timeLapse = self.timeLapse + elapsed
+	if(self.timeLapse < 0.2) then
+		return
+	else
+		self.timeLapse = 0
+	end
+	local parent = self:GetParent()parent:GetWidth()
+	self:SetSize(parent:GetWidth(), 23)
 end

-local function StyleRecount()
-  assert(Recount, "AddOn Not Loaded")
-
-  function Recount:ShowReset()
-    MOD:LoadAlert(L['Reset Recount?'], function(self) Recount:ResetData() self:GetParent():Hide() end)
-  end
+local function StyleFrame(frame)
+	if((not frame) or (frame.Panel)) then return end

-  local RecountFrames = {
-    Recount.MainWindow,
-    Recount.ConfigWindow,
-    Recount.GraphWindow,
-    Recount.DetailWindow,
-  }
+	frame:SetBackdrop(nil)
+	frame:SetStyle("Frame", "Transparent")
+	--frame.Panel:SetAllPoints()
+	--frame.Panel:SetPoint('TOPLEFT', frame, 'TOPLEFT', 0, -6)
+	frame.CloseButton:SetPoint('TOPRIGHT', frame, 'TOPRIGHT', -1, -1)

-  for _, frame in pairs(RecountFrames) do StyleFrame(frame) end
+	frame.TitleBackground = CreateFrame('Frame', nil, frame)
+	frame.TitleBackground:SetStyle("!_Frame", "Transparent")
+	--frame.TitleBackground:SetPanelColor("class")
+	frame.TitleBackground:SetPoint('TOP', frame, 'TOP', 0, 0)
+	frame.TitleBackground.timeLapse = 0;
+	frame.TitleBackground:SetFrameLevel(frame:GetFrameLevel())
+	frame.TitleBackground:SetScript('OnUpdate', Title_OnUpdate)

-  SV.API:Set("ScrollFrame", Recount_MainWindow_ScrollBarScrollBar)
+	frame.Title:ClearAllPoints()
+	frame.Title:SetPoint('TOPLEFT', frame, 'TOPLEFT', 6, -5)

-  Recount.MainWindow:HookScript('OnShow', function(self) if InCombatLockdown() then return end if MOD:ValidateDocklet("Recount") then MOD.Docklet:Show() end end)
-  Recount.MainWindow.FileButton:HookScript('OnClick', function(self) if LibDropdownFrame0 then SV.API:Set("Frame", LibDropdownFrame0) end end)
+	for i=1, #StripKeys do
+		local subframe = frame[StripKeys[i]]
+		if(subframe) then
+			for i = 1, subframe:GetNumRegions() do
+				local region = select(i, subframe:GetRegions())
+				if(region:GetObjectType() == 'Texture') then
+					region:SetDesaturated(true)
+					if(region:GetTexture() == 'Interface\\DialogFrame\\UI-DialogBox-Corner') then
+						region:SetTexture("")
+						region:Die()
+					end
+				end
+			end
+		end
+	end
+end

-  hooksecurefunc(Recount, 'ShowScrollbarElements', function(self, name) Recount_MainWindow_ScrollBarScrollBar:Show() end)
-  hooksecurefunc(Recount, 'HideScrollbarElements', function(self, name) Recount_MainWindow_ScrollBarScrollBar:Hide() end)
-  hooksecurefunc(Recount, 'CreateFrame', function(self, frame) StyleFrame(_G[frame]) end)
+local function StyleRecount()
+	assert(Recount, "AddOn Not Loaded")
+
+	Recount.ShowReset = Recount_ShowReset

-  hooksecurefunc(Recount, 'ShowReport', function(self)
-    if Recount_ReportWindow.isStyled then return end
-    Recount_ReportWindow.isStyled = true
-    SV.API:Set("Frame", Recount_ReportWindow.Whisper)
-    Recount_ReportWindow.ReportButton:SetStyle("Button")
-    SV.API:Set("ScrollBar", Recount_ReportWindow_Slider)
-    Recount_ReportWindow_Slider:GetThumbTexture():ModSize(6,6)
-  end)
-end
-MOD:SaveAddonStyle("Recount", StyleRecount)
+	local RecountFrames = {
+		Recount.MainWindow,
+		Recount.ConfigWindow,
+		Recount.GraphWindow,
+		Recount.DetailWindow,
+	}

-function MOD:Docklet_Recount(parent)
-  if not Recount then return end
+	for _, frame in pairs(RecountFrames) do StyleFrame(frame) end

-  Recount.db.profile.Locked = true;
-  Recount.db.profile.Scaling = 1;
-  Recount.db.profile.ClampToScreen = true;
-  Recount.db.profile.FrameStrata = '2-LOW'
-  Recount.MainWindow:ClearAllPoints()
-  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)
-  Recount:ResizeMainWindow()
-  Recount_MainWindow_ScrollBar:Hide()
+	SV.API:Set("ScrollFrame", Recount_MainWindow_ScrollBarScrollBar)

-  Recount.MainWindow:Show()
+	Recount.MainWindow:HookScript('OnShow', function(self) if InCombatLockdown() then return end if MOD.Docklet:IsEmbedded("Recount") then MOD.Docklet:Show() end end)
+	Recount.MainWindow.FileButton:HookScript('OnClick', function(self) if LibDropdownFrame0 then SV.API:Set("Frame", LibDropdownFrame0) end end)

-  parent.Framelink = Recount.MainWindow
-end
\ No newline at end of file
+	hooksecurefunc(Recount, 'ShowScrollbarElements', function(self, name) Recount_MainWindow_ScrollBarScrollBar:Show() end)
+	hooksecurefunc(Recount, 'HideScrollbarElements', function(self, name) Recount_MainWindow_ScrollBarScrollBar:Hide() end)
+	hooksecurefunc(Recount, 'CreateFrame', function(self, frame) StyleFrame(_G[frame]) end)
+
+	hooksecurefunc(Recount, 'ShowReport', function(self)
+		if Recount_ReportWindow.isStyled then return end
+		Recount_ReportWindow.isStyled = true
+		SV.API:Set("Frame", Recount_ReportWindow.Whisper)
+		Recount_ReportWindow.ReportButton:SetStyle("Button")
+		SV.API:Set("ScrollBar", Recount_ReportWindow_Slider)
+		Recount_ReportWindow_Slider:GetThumbTexture():ModSize(6,6)
+	end)
+end
+MOD:SaveAddonStyle("Recount", StyleRecount)
\ No newline at end of file
diff --git a/SVUI_Skins/components/addons/Skada.lua b/SVUI_Skins/components/addons/Skada.lua
index c17b4c9..f0fae4a 100644
--- a/SVUI_Skins/components/addons/Skada.lua
+++ b/SVUI_Skins/components/addons/Skada.lua
@@ -23,121 +23,65 @@ local SV = _G['SVUI'];
 local L = SV.L;
 local MOD = SV.Skins;
 local Schema = MOD.Schema;
-local activePanels = {};
-local StupidSkada = function() return end
 --[[
 ##########################################################
 SKADA
 ##########################################################
 ]]--
-local function skada_panel_loader(dock, window, heightOverride)
-  local height = heightOverride or MOD.Docklet:GetHeight()
-  local width = dock:GetWidth()
-  local db = window.db
-  local curHeight = 0
-  if(db) then
-    if(db.enabletitle) then curHeight = db.title.height end
-    db.barspacing = 1;
-    db.barwidth = width - 10;
-    db.background.height = (height - curHeight) - 12;
-    db.spark = false;
-    db.barslocked = true;
-  end
-  window.bargroup:ClearAllPoints()
-  window.bargroup:InsetPoints(dock, 3, 3)
-  window.bargroup:SetFrameStrata('LOW')
-
-  local bgroup = window.bargroup.backdrop;
-  if (bgroup) then
-    bgroup:Show()
-    if(not bgroup.Panel) then
-      bgroup:SetStyle("!_Frame", 'Transparent', true)
-    end
-  end
-
-  dock.FrameLink = window;
-end
-
-function MOD:Docklet_Skada(_, heightOverride)
-  if not Skada then return end
-
-  local dock1,dock2,enabled1,enabled2 = MOD:FetchDocklets();
-
-  for index,window in pairs(Skada:GetWindows()) do
-    if(window) then
-      local wname = window.db.name or "Skada"
-      local key = "SkadaBarWindow" .. wname
-
-      if(enabled1 and dock1:find(key)) then
-        skada_panel_loader(MOD.Docklet.Dock1, window, heightOverride);
-        Skada.displays['bar']:ApplySettings(window)
-      elseif(enabled2 and dock2:find(key)) then
-        skada_panel_loader(MOD.Docklet.Dock2, window, heightOverride);
-        Skada.displays['bar']:ApplySettings(window)
-      else
-        window.db.barslocked = false;
-      end
-    end
-  end
-end
-
 local function Skada_ShowPopup(self)
-  MOD:LoadAlert('Do you want to reset Skada?', function(self) Skada:Reset() self:GetParent():Hide() end)
+	MOD:LoadAlert('Do you want to reset Skada?', function(self) Skada:Reset() self:GetParent():Hide() end)
 end

 local function StyleSkada()
-  assert(Skada, "AddOn Not Loaded")
-  Skada.ShowPopup = Skada_ShowPopup
-
-  local SkadaDisplayBar = Skada.displays['bar']
+	assert(Skada, "AddOn Not Loaded")
+	Skada.ShowPopup = Skada_ShowPopup
+
+	local SkadaDisplayBar = Skada.displays['bar']

-  hooksecurefunc(SkadaDisplayBar, 'AddDisplayOptions', function(self, window, options)
-    options.baroptions.args.barspacing = nil
-    options.titleoptions.args.texture = nil
-    options.titleoptions.args.bordertexture = nil
-    options.titleoptions.args.thickness = nil
-    options.titleoptions.args.margin = nil
-    options.titleoptions.args.color = nil
-    options.windowoptions = nil
-  end)
+	hooksecurefunc(SkadaDisplayBar, 'AddDisplayOptions', function(self, window, options)
+		options.baroptions.args.barspacing = nil
+		options.titleoptions.args.texture = nil
+		options.titleoptions.args.bordertexture = nil
+		options.titleoptions.args.thickness = nil
+		options.titleoptions.args.margin = nil
+		options.titleoptions.args.color = nil
+		options.windowoptions = nil
+	end)

-  hooksecurefunc(SkadaDisplayBar, 'ApplySettings', function(self, window)
-    local skada = window.bargroup
-    if not skada then return end
-    local panelAnchor = skada
-    skada:SetSpacing(1)
-    skada:SetFrameLevel(5)
-    skada:SetBackdrop(nil)
+	hooksecurefunc(SkadaDisplayBar, 'ApplySettings', function(self, window)
+		local skada = window.bargroup
+		if not skada then return end
+		local panelAnchor = skada
+		skada:SetSpacing(1)
+		skada:SetFrameLevel(5)
+		skada:SetBackdrop(nil)

-    if(window.db.enabletitle) then
-      panelAnchor = skada.button
-      skada.button:ModHeight(22)
-      skada.button:RemoveTextures()
-      skada.button:SetStyle("Frame", "Transparent")
-      --skada.button:SetPanelColor("class")
-      local titleFont = skada.button:GetFontString()
-      titleFont:SetFont(SV.media.font.dialog, 13, "NONE")
-      titleFont:SetShadowColor(0, 0, 0, 1)
-      titleFont:SetShadowOffset(1, -1)
-    end
+		if(window.db.enabletitle) then
+			panelAnchor = skada.button
+			skada.button:SetHeight(23)
+			skada.button:RemoveTextures()
+			skada.button:SetStyle("Frame", "Transparent")
+			--skada.button:SetPanelColor("class")
+			local titleFont = skada.button:GetFontString()
+			titleFont:SetFont(SV.media.font.dialog, 13, "NONE")
+			titleFont:SetShadowColor(0, 0, 0, 1)
+			titleFont:SetShadowOffset(1, -1)
+		end

-    skada:SetStyle("Frame", "Transparent")
-    skada.Panel:ClearAllPoints()
-    skada.Panel:SetPoint('TOPLEFT', panelAnchor, 'TOPLEFT', -3, 3)
-    skada.Panel:SetPoint('BOTTOMRIGHT', skada, 'BOTTOMRIGHT', 3, -3)
-  end)
+		skada:SetStyle("Frame", "Transparent")
+	end)

-  hooksecurefunc(Skada, 'CreateWindow', function()
-    if MOD:ValidateDocklet("Skada") then
-      MOD:Docklet_Skada()
-    end
-  end)
+	hooksecurefunc(Skada, 'CreateWindow', function()
+		if MOD.Docklet:IsEmbedded("Skada") then
+			MOD:Docklet_Skada()
+		end
+	end)

-  hooksecurefunc(Skada, 'DeleteWindow', function()
-    if MOD:ValidateDocklet("Skada") then
-      MOD:Docklet_Skada()
-    end
-  end)
+	hooksecurefunc(Skada, 'DeleteWindow', function()
+		if MOD.Docklet:IsEmbedded("Skada") then
+			MOD:Docklet_Skada()
+		end
+	end)
 end

 MOD:SaveAddonStyle("Skada", StyleSkada, nil, true)
\ No newline at end of file
diff --git a/SVUI_Skins/components/addons/TinyDPS.lua b/SVUI_Skins/components/addons/TinyDPS.lua
index ba84197..4f1cd75 100644
--- a/SVUI_Skins/components/addons/TinyDPS.lua
+++ b/SVUI_Skins/components/addons/TinyDPS.lua
@@ -34,7 +34,7 @@ local function StyleTinyDPS()

 	tdpsFrame:HookScript("OnShow", function()
 		if InCombatLockdown() then return end
-		if MOD:ValidateDocklet("TinyDPS") then
+		if MOD.Docklet:IsEmbedded("TinyDPS") then
 			MOD.Docklet:Show()
 		end
 	end)
@@ -47,17 +47,4 @@ local function StyleTinyDPS()
 	tdpsRefresh()
 end

-MOD:SaveAddonStyle("TinyDPS", StyleTinyDPS)
-
-function MOD:Docklet_TinyDPS(parent)
-	if not tdpsFrame then return end
-	tdps.hideOOC = false;
-	tdps.hideIC = false;
-	tdps.hideSolo = false;
-	tdps.hidePvP = false;
-	tdpsFrame:ClearAllPoints()
-	tdpsFrame:SetAllPoints(parent)
-	tdpsRefresh()
-
-	parent.Framelink = tdpsFrame
-end
\ No newline at end of file
+MOD:SaveAddonStyle("TinyDPS", StyleTinyDPS)
\ No newline at end of file
diff --git a/SVUI_Skins/components/addons/alDamageMeter.lua b/SVUI_Skins/components/addons/alDamageMeter.lua
index 3795b23..6274f80 100644
--- a/SVUI_Skins/components/addons/alDamageMeter.lua
+++ b/SVUI_Skins/components/addons/alDamageMeter.lua
@@ -34,23 +34,9 @@ local function StyleALDamageMeter()
   SV.API:Set("Frame", alDamageMeterFrame)
   alDamageMeterFrame:HookScript('OnShow', function()
     if InCombatLockdown() then return end
-    if MOD:ValidateDocklet("alDamageMeter") then
-      MOD.Docklet:Show()
+    if MOD.Docklet:IsEmbedded("alDamageMeter") then
+    	MOD.Docklet:Show()
     end
   end)
 end
-MOD:SaveAddonStyle("alDamageMeter", StyleALDamageMeter)
-
-function MOD:Docklet_alDamageMeter(parent)
-  if not _G['alDamagerMeterFrame'] then return end
-  local parentFrame=_G['alDamagerMeterFrame']:GetParent();
-  dmconf.barheight=floor(parentFrame:GetHeight()/dmconf.maxbars-dmconf.spacing)
-  dmconf.width=parentFrame:GetWidth()
-  alDamageMeterFrame:ClearAllPoints()
-  alDamageMeterFrame:SetAllPoints(parent)
-  alDamageMeterFrame.backdrop:SetStyle("!_Frame", 'Transparent',true)
-  alDamageMeterFrame.bg:Die()
-  alDamageMeterFrame:SetFrameStrata('LOW')
-
-  parent.Framelink = alDamageMeterFrame
-end
\ No newline at end of file
+MOD:SaveAddonStyle("alDamageMeter", StyleALDamageMeter)
\ No newline at end of file
diff --git a/SVUI_Skins/components/atlas.lua b/SVUI_Skins/components/atlas.lua
new file mode 100644
index 0000000..8538392
--- /dev/null
+++ b/SVUI_Skins/components/atlas.lua
@@ -0,0 +1,56 @@
+--[[
+##############################################################################
+S V U I   By: Munglunch
+##############################################################################
+--]]
+--[[ GLOBALS ]]--
+local _G = _G;
+local unpack  = _G.unpack;
+local select  = _G.select;
+local ipairs  = _G.ipairs;
+local pairs   = _G.pairs;
+--[[ ADDON ]]--
+local SV = _G['SVUI'];
+local L = SV.L;
+local MOD = SV.Skins;
+local Schema = MOD.Schema;
+--[[
+##########################################################
+HELPERS
+##########################################################
+]]--
+local RING_TEXTURE = [[Interface\AddOns\SVUI_Skins\artwork\FOLLOWER-RING]]
+local LVL_TEXTURE = [[Interface\AddOns\SVUI_Skins\artwork\FOLLOWER-LEVEL]]
+local HIGHLIGHT_TEXTURE = SV.BaseTexture
+local DEFAULT_COLOR = {r = 0.25, g = 0.25, b = 0.25};
+--[[
+##########################################################
+STYLE
+##########################################################
+]]--
+local GarrMission_PortraitsFromLevel = function(self)
+	local parent = self:GetParent()
+	if(parent.PortraitRing) then
+  		parent.PortraitRing:SetTexture(RING_TEXTURE)
+  	end
+end
+SV:SetAtlasFunc("GarrMission_PortraitsFromLevel", GarrMission_PortraitsFromLevel)
+
+local GarrMission_MaterialFrame = function(self)
+  local frame = self:GetParent()
+  frame:RemoveTextures()
+  frame:SetStyle("Frame", "Inset", true, 1, -5, -7)
+end
+SV:SetAtlasFunc("GarrMission_MaterialFrame", GarrMission_MaterialFrame)
+
+SV:SetAtlasFilter("GarrMission_PortraitRing_LevelBorder", "GarrMission_PortraitsFromLevel")
+SV:SetAtlasFilter("GarrMission_PortraitRing_iLvlBorder", "GarrMission_PortraitsFromLevel")
+SV:SetAtlasFilter("Garr_Mission_MaterialFrame", "GarrMission_MaterialFrame")
+
+SV:SetAtlasFilter("Garr_FollowerToast-Uncommon");
+SV:SetAtlasFilter("Garr_FollowerToast-Epic");
+SV:SetAtlasFilter("Garr_FollowerToast-Rare");
+SV:SetAtlasFilter("GarrLanding-MinimapIcon-Horde-Up");
+SV:SetAtlasFilter("GarrLanding-MinimapIcon-Horde-Down");
+SV:SetAtlasFilter("GarrLanding-MinimapIcon-Alliance-Up");
+SV:SetAtlasFilter("GarrLanding-MinimapIcon-Alliance-Down");
\ No newline at end of file
diff --git a/SVUI_Skins/components/docklet.lua b/SVUI_Skins/components/docklet.lua
new file mode 100644
index 0000000..c6e6890
--- /dev/null
+++ b/SVUI_Skins/components/docklet.lua
@@ -0,0 +1,425 @@
+--[[
+##########################################################
+S V U I   By: Munglunch
+##########################################################
+LOCALIZED LUA FUNCTIONS
+##########################################################
+]]--
+--[[ GLOBALS ]]--
+local _G = _G;
+local unpack 	= _G.unpack;
+local select 	= _G.select;
+local pairs 	= _G.pairs;
+local type 		= _G.type;
+local tostring 	= _G.tostring;
+local print 	= _G.print;
+local pcall 	= _G.pcall;
+local tinsert 	= _G.tinsert;
+local string 	= _G.string;
+local math 		= _G.math;
+local table 	= _G.table;
+--[[ STRING METHODS ]]--
+local format,find = string.format, string.find;
+--[[ MATH METHODS ]]--
+local floor = math.floor;
+--[[ TABLE METHODS ]]--
+local twipe, tcopy = table.wipe, table.copy;
+local IsAddOnLoaded = _G.IsAddOnLoaded;
+local LoadAddOn = _G.LoadAddOn;
+--[[
+##########################################################
+GET ADDON DATA
+##########################################################
+]]--
+local SV = _G['SVUI'];
+local L = SV.L;
+local MOD = SV.Skins;
+local Schema = MOD.Schema;
+local Librarian = _G.Librarian;
+--[[
+##########################################################
+LOCALS
+##########################################################
+]]--
+local TIP_RIGHT_PATTERN = " and %s";
+local DOCK_EMBEDS = {};
+--[[
+##########################################################
+HELPERS
+##########################################################
+]]--
+local function RequestEmbedded(addon)
+	local embed1 = SV.private.Docks.Embed1 or "None";
+	local embed2 = SV.private.Docks.Embed2 or "None";
+	local enabled1 = (embed1 ~= "None")
+	local enabled2 = ((embed2 ~= "None") and (embed2 ~= embed1))
+
+	if(addon) then
+		local valid = false;
+		if(embed1:find(addon) or embed2:find(addon)) then
+			valid = true
+		end
+		return valid, enabled1, enabled2
+	end
+
+	return embed1, embed2, enabled1, enabled2
+end
+--[[
+##########################################################
+SKADA
+##########################################################
+]]--
+local Skada_PointLock = function(self, a1, p, a2, x, y)
+	if((x ~= 0) or (y ~= 0)) then
+		self:ClearAllPoints()
+		self:SetPoint("BOTTOM", p, "BOTTOM", 0, 0)
+	end
+end
+
+local Skada_PointTest = function(self, p1, p2, p3, p4, p5)
+	print(p1 .. ", " .. p2:GetName() .. ", " .. p3 .. ", " .. p4 .. ", " .. p5)
+end
+
+DOCK_EMBEDS["Skada"] = function(self)
+	if((not IsAddOnLoaded("Skada")) or (not _G.Skada)) then print("Skada Not Loaded") return false end
+
+	local assigned = self:EmbedCheck();
+	local width = self:GetWidth()
+	local height = SV.Dock.BottomRight.Window:GetHeight();
+
+	if(assigned) then
+		for index,window in pairs(Skada:GetWindows()) do
+			if(window) then
+				local wname = window.db.name or "Skada"
+				local key = "SkadaBarWindow" .. wname
+				if(assigned:find(key)) then
+					Librarian:LockLibrary('LibWindow');
+					local db = window.db
+
+					if(db) then
+						local curHeight = 0
+						if(db.enabletitle) then
+							curHeight = db.title.height
+						end
+						db.barspacing = 1;
+						db.barwidth = width - 10;
+						db.background.height = (height - curHeight) - 8;
+						db.spark = false;
+						db.barslocked = true;
+					end
+
+					window.bargroup:ClearAllPoints()
+					window.bargroup:SetParent(self)
+					window.bargroup:SetSize(width, height)
+					window.bargroup:SetPoint("BOTTOM", self, "BOTTOM", 0, 0)
+					window.bargroup:SetFrameStrata('LOW')
+
+					hooksecurefunc(window.bargroup, "SetPoint", Skada_PointLock)
+
+					local bgroup = window.bargroup.backdrop;
+					if(bgroup) then
+						bgroup:Show()
+						if(not bgroup.Panel) then
+							bgroup:SetStyle("!_Frame", 'Transparent', true)
+						end
+					end
+
+					self.FrameLink = window;
+
+					Skada.displays['bar']:ApplySettings(window)
+
+					return true
+				else
+					Librarian:UnlockLibrary('LibWindow');
+					window.db.barslocked = false;
+				end
+			end
+		end
+	end
+
+	return false
+end
+--[[
+##########################################################
+RECOUNT
+##########################################################
+]]--
+DOCK_EMBEDS["Recount"] = function(self)
+	if((not IsAddOnLoaded("Recount")) or (not _G.Recount)) then return false end
+
+	local width = self:GetWidth()
+	local height = SV.Dock.BottomRight.Window:GetHeight();
+
+	Recount.db.profile.Locked = true;
+	Recount.db.profile.Scaling = 1;
+	Recount.db.profile.ClampToScreen = true;
+	Recount.db.profile.FrameStrata = '2-LOW'
+	Recount.MainWindow:ClearAllPoints()
+	Recount.MainWindow:SetParent(self)
+	Recount.MainWindow:SetSize(width, height)
+	Recount.MainWindow:SetPoint("BOTTOM", self, "BOTTOM", 0, 0)
+	Recount:SetStrataAndClamp()
+	Recount:LockWindows(true)
+	Recount:ResizeMainWindow()
+	Recount_MainWindow_ScrollBar:Hide()
+
+	Recount.MainWindow:Show()
+
+	self.Framelink = Recount.MainWindow
+	return true
+end
+--[[
+##########################################################
+OMEN
+##########################################################
+]]--
+DOCK_EMBEDS["Omen"] = function(self)
+	if((not IsAddOnLoaded("Omen")) or (not _G.Omen)) then return false end
+
+	local width = self:GetWidth()
+	local height = SV.Dock.BottomRight.Window:GetHeight();
+	local db = Omen.db;
+
+	--[[ General Settings ]]--
+	db.profile.FrameStrata = '2-LOW';
+	db.profile.Locked = true;
+	db.profile.Scale = 1;
+	db.profile.ShowWith.UseShowWith = false;
+
+	--[[ Background Settings ]]--
+	db.profile.Background.BarInset = 3;
+	db.profile.Background.EdgeSize = 1;
+	db.profile.Background.Texture = "None"
+
+	--[[ Bar Settings ]]--
+	db.profile.Bar.Font = "SVUI Default Font";
+	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.TitleBar.Texture = "None";
+	db.profile.TitleBar.UseSameBG = false;
+
+	Omen:OnProfileChanged(nil,db)
+	OmenTitle:RemoveTextures()
+	OmenTitle.Panel = nil
+	OmenTitle:SetStyle("Frame", "Transparent")
+	--OmenTitle:SetPanelColor("class")
+	--OmenTitle:GetFontString():SetFont(SV.media.font.default, 12, "OUTLINE")
+
+	if(not OmenAnchor.Panel) then
+		OmenBarList:RemoveTextures()
+		OmenAnchor:SetStyle("Frame", 'Transparent')
+	end
+	OmenAnchor:ClearAllPoints()
+	OmenAnchor:SetParent(self)
+	OmenAnchor:SetSize(width, height)
+	OmenAnchor:SetPoint("BOTTOM", self, "BOTTOM", 0, 0)
+
+	self.Framelink = OmenAnchor
+	return true
+end
+--[[
+##########################################################
+ALDAMAGEMETER
+##########################################################
+]]--
+DOCK_EMBEDS["alDamageMeter"] = function(self)
+	if((not IsAddOnLoaded("alDamageMeter")) or (not _G.alDamagerMeterFrame)) then return false end
+
+	local w,h = self:GetSize();
+	local count = dmconf.maxbars or 10;
+	local spacing = dmconf.spacing or 1;
+
+	dmconf.barheight = floor((h / count) - spacing);
+	dmconf.width = w;
+
+	alDamageMeterFrame:ClearAllPoints()
+	alDamageMeterFrame:SetAllPoints(self)
+	alDamageMeterFrame.backdrop:SetStyle("!_Frame", 'Transparent')
+	alDamageMeterFrame.bg:Die()
+	alDamageMeterFrame:SetFrameStrata('LOW')
+
+	self.Framelink = alDamageMeterFrame
+	return true
+end
+--[[
+##########################################################
+TINYDPS
+##########################################################
+]]--
+DOCK_EMBEDS["TinyDPS"] = function(self)
+	if((not IsAddOnLoaded("TinyDPS")) or (not _G.tdpsFrame)) then return false end
+
+	tdps.hideOOC = false;
+	tdps.hideIC = false;
+	tdps.hideSolo = false;
+	tdps.hidePvP = false;
+	tdpsFrame:ClearAllPoints()
+	tdpsFrame:SetAllPoints(self)
+	tdpsRefresh()
+
+	self.Framelink = tdpsFrame
+	return true
+end
+--[[
+##########################################################
+DOCK EMBED METHODS
+##########################################################
+]]--
+local DOCK_EmbedAddon = function(self, request)
+	if(not request) then return false end
+	local dock = self:GetParent()
+	for addon,fn in pairs(dock.EmbedMethods) do
+		if(request:find(addon)) then
+			local activated = fn(self)
+			dock.Embedded[addon] = self
+			return activated, addon
+		end
+	end
+	return false
+end
+
+local DOCK_EmbedCheck = function(self, ...)
+	local data = SV.private.Docks[self.EmbedKey]
+	local dock = self:GetParent()
+	if(data and (data ~= "None")) then
+		return data
+	end
+	return false
+end
+
+local PARENT_IsEmbedded = function(self, request)
+	if(not self.Embedded) then return false end
+	for addon,owner in pairs(self.Embedded) do
+		if(owner and self[owner] and request:find(addon)) then
+			return true
+		end
+	end
+	return false
+end
+
+local PARENT_UpdateEmbeds = function(self, ...)
+	if(not self.Embedded) then return end
+	for addon,owner in pairs(self.Embedded) do
+		if(owner and self[owner]) then
+			local fn = self.EmbedMethods[addon];
+			if(fn) then
+				fn(self[owner], ...)
+			end
+		end
+	end
+end
+--[[
+##########################################################
+CORE FUNCTIONS
+##########################################################
+]]--
+function MOD:SetEmbedHandlers(parent)
+	parent.EmbedMethods     = DOCK_EMBEDS;
+	parent.UpdateEmbeds     = PARENT_UpdateEmbeds;
+	parent.IsEmbedded       = PARENT_IsEmbedded;
+
+	parent.Dock1.EmbedKey   = "Embed1";
+	parent.Dock1.EmbedAddon = DOCK_EmbedAddon;
+	parent.Dock1.EmbedCheck = DOCK_EmbedCheck;
+
+	parent.Dock2.EmbedKey   = "Embed2";
+	parent.Dock2.EmbedAddon = DOCK_EmbedAddon;
+	parent.Dock2.EmbedCheck = DOCK_EmbedCheck;
+end
+
+function MOD:RegisterAddonDocklets()
+	local embed1,embed2,enabled1,enabled2 = RequestEmbedded();
+  	local addon1, addon2, extraTip = "", "", "";
+  	local active1, active2 = false, false;
+
+  	self.Docklet.Embedded = {}
+  	self.Docklet.Dock1.FrameLink = nil;
+  	self.Docklet.Dock1.ExpandCallback = nil;
+  	self.Docklet.Dock2.FrameLink = nil;
+  	self.Docklet.Dock2.ExpandCallback = nil;
+
+  	local width = self.Docklet:GetWidth() - 2;
+  	self.Docklet.Dock1:SetWidth(width)
+
+  	if(enabled2) then
+  		if(enabled1) then
+			self.Docklet.Dock1:SetWidth(width * 0.5)
+		else
+			self.Docklet.Dock1:SetWidth(0.1)
+		end
+
+		active2, addon2 = self.Docklet.Dock2:EmbedAddon(embed2)
+
+		if(not active2) then
+			self.Docklet.Dock1:SetWidth(width)
+		end
+	end
+
+  	if(enabled1) then
+		active1, addon1 = self.Docklet.Dock1:EmbedAddon(embed1)
+	end
+
+	if(active1 or active2) then
+		self.Docklet:Enable();
+		if(active2) then
+			extraTip = TIP_RIGHT_PATTERN:format(addon2)
+			self.Docklet.Dock1:Show()
+			self.Docklet.Dock2:Show()
+		else
+			self.Docklet.Dock1:Show()
+			self.Docklet.Dock2:Hide()
+		end
+
+		self.Docklet.DockButton:SetAttribute("tipText", ("%s%s"):format(addon1, extraTip));
+		self.Docklet.DockButton:MakeDefault();
+	else
+		self.Docklet.Dock1:Hide()
+		self.Docklet.Dock2:Hide()
+		self.Docklet:Disable()
+
+		self.Docklet.Parent.Bar:UnsetDefault();
+		Librarian:UnlockLibrary('LibWindow');
+	end
+end
+
+function MOD:GetDockables()
+	local test = SV.private.Docks.Embed1;
+
+	local t = {
+		{ title = "Docked Addon", divider = true },
+		{text = "Remove All", func = function() SV.private.Docks.Embed1 = "None"; MOD:RegisterAddonDocklets() end}
+	};
+
+	for addon,_ in pairs(EMBEDS) do
+		if (not test or (test and not test:find(addon))) then
+			if(addon:find("Skada") and _G.Skada) then
+				for index,window in pairs(_G.Skada:GetWindows()) do
+					local keyName = window.db.name
+				    local key = "SkadaBarWindow" .. keyName
+				    local name = (keyName == "Skada") and "Skada - Main" or "Skada - " .. keyName;
+				    tinsert(t,{text = name, func = function() SV.private.Docks.Embed1 = key; MOD:RegisterAddonDocklets() end});
+				end
+			else
+				if IsAddOnLoaded(addon) or IsAddOnLoaded(addon) then
+					tinsert(t,{text = addon, func = function() SV.private.Docks.Embed1 = addon; MOD:RegisterAddonDocklets() end});
+				end
+			end
+		end
+	end
+	return t;
+end
\ No newline at end of file
diff --git a/SVUI_UnitFrames/Changelog-SVUI_UnitFrames-r20150304000623.txt b/SVUI_UnitFrames/Changelog-SVUI_UnitFrames-r20150304000623.txt
new file mode 100644
index 0000000..9824732
--- /dev/null
+++ b/SVUI_UnitFrames/Changelog-SVUI_UnitFrames-r20150304000623.txt
@@ -0,0 +1,11 @@
+Steven Jackson:
+	- updates
+	- Fixed profiles, filters and lua errors
+	- api updates
+	- build update
+	- release 1.0.04
+	- updating with core
+	- toc update
+	- color updates
+	- fix for file struct
+	- First commit
diff --git a/SVUI_UnitFrames/SVUI_UnitFrames.lua b/SVUI_UnitFrames/SVUI_UnitFrames.lua
index 5d2a81c..994f93c 100644
--- a/SVUI_UnitFrames/SVUI_UnitFrames.lua
+++ b/SVUI_UnitFrames/SVUI_UnitFrames.lua
@@ -644,8 +644,8 @@ function MOD:RefreshUnitLayout(frame, template)
 					PORTRAIT_GRIP.anchor:SetFrameLevel(frame.ActionPanel:GetFrameLevel())
 				end

-				PORTRAIT_GRIP:ModPoint(TOP_ANCHOR2, MASTER_GRIP, TOP_ANCHOR2, (1 * TOP_MODIFIER), 0)
-				PORTRAIT_GRIP:ModPoint(BOTTOM_ANCHOR2, MASTER_GRIP, BOTTOM_ANCHOR2, (1 * BOTTOM_MODIFIER), 0)
+				PORTRAIT_GRIP:ModPoint(TOP_ANCHOR2, frame, TOP_ANCHOR2, (1 * TOP_MODIFIER), -1)
+				PORTRAIT_GRIP:ModPoint(BOTTOM_ANCHOR2, frame, BOTTOM_ANCHOR2, (1 * BOTTOM_MODIFIER), 1)

 				PORTRAIT_GRIP.Panel:Show()
 			else
diff --git a/SVUI_UnitFrames/SVUI_UnitFrames.toc b/SVUI_UnitFrames/SVUI_UnitFrames.toc
index a020771..d88a1a0 100644
--- a/SVUI_UnitFrames/SVUI_UnitFrames.toc
+++ b/SVUI_UnitFrames/SVUI_UnitFrames.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.01
+## Version: 1.0.08
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00UnitFrames|r
 ## Notes: UnitFrames Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
@@ -17,5 +17,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 SVUI_UnitFrames.xml
diff --git a/SVUI_UnitFrames/elements/castbar.lua b/SVUI_UnitFrames/elements/castbar.lua
index d9e28c8..c281211 100644
--- a/SVUI_UnitFrames/elements/castbar.lua
+++ b/SVUI_UnitFrames/elements/castbar.lua
@@ -541,6 +541,7 @@ function MOD:CreateCastbar(frame, reversed, moverName, ryu, useFader, isBoss, ha
 		castbar.Time:SetTextColor(1, 1, 1)
 		castbar.Text:SetFontObject(SVUI_Font_Caps)
 		castbar.Text:SetTextColor(1, 1, 1, 0.75)
+		castbar.Text:SetWordWrap(false)

 		castbar:SetStatusBarTexture(SV.media.statusbar.lazer)

@@ -642,6 +643,7 @@ function MOD:CreateCastbar(frame, reversed, moverName, ryu, useFader, isBoss, ha
 		castbar.Text:SetFontObject(SVUI_Font_Caps)
 		castbar.Text:SetTextColor(1, 1, 1, 0.9)
 		castbar.Text:SetAllPoints(castbar)
+		castbar.Text:SetWordWrap(false)

 		castbar.pewpew = false

diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc b/SVUI_UnitFrames/libs/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
index 0ae1cb5..3c582e2 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
+++ b/SVUI_UnitFrames/libs/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: 1.0.01
+## Version: 1.0.08
 ## X-Category: oUF
 ## Dependencies: oUF
 ## X-Curse-Packaged-Version: r20150218022926
@@ -21,5 +21,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 oUF_ActionPanel.lua
\ No newline at end of file
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_Afflicted/oUF_Afflicted.toc b/SVUI_UnitFrames/libs/Plugins/oUF_Afflicted/oUF_Afflicted.toc
index fdc1ed5..b925c6c 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_Afflicted/oUF_Afflicted.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_Afflicted/oUF_Afflicted.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Afflicted
 ## Notes: Adds Custom Debuff Highlighting to oUF.
 ## Author: Munglunch
-## Version: 1.0.01
+## Version: 1.0.08
 ## X-Category: oUF
 ## Dependencies: oUF
 ## X-Curse-Packaged-Version: r20150218022926
@@ -21,5 +21,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 oUF_ActionPanel.lua
\ No newline at end of file
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_AuraWatch/oUF_AuraWatch.toc b/SVUI_UnitFrames/libs/Plugins/oUF_AuraWatch/oUF_AuraWatch.toc
index 56cc07e..54633ee 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_AuraWatch/oUF_AuraWatch.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_AuraWatch/oUF_AuraWatch.toc
@@ -21,5 +21,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 oUF_AuraWatch.lua
\ No newline at end of file
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_CombatFader/oUF_CombatFader.toc b/SVUI_UnitFrames/libs/Plugins/oUF_CombatFader/oUF_CombatFader.toc
index 296101f..f843284 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_CombatFader/oUF_CombatFader.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_CombatFader/oUF_CombatFader.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Combat Fader
 ## Notes: Adds combat fade ability to oUF
 ## Author: SV
-## Version: 1.0.01
+## Version: 1.0.08
 ## Dependencies: oUF
 ## X-Curse-Packaged-Version: r20150218022926
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
@@ -20,5 +20,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 oUF_CombatFader.lua
\ No newline at end of file
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_Druidness/oUF_Druidness.toc b/SVUI_UnitFrames/libs/Plugins/oUF_Druidness/oUF_Druidness.toc
index e934e12..773e907 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_Druidness/oUF_Druidness.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_Druidness/oUF_Druidness.toc
@@ -21,6 +21,10 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 oUF_Druidness.lua

diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_Experience/oUF_Experience.toc b/SVUI_UnitFrames/libs/Plugins/oUF_Experience/oUF_Experience.toc
index 317adf9..7f482dc 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_Experience/oUF_Experience.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_Experience/oUF_Experience.toc
@@ -20,5 +20,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 oUF_Experience.lua
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_Friendship/oUF_Friendship.toc b/SVUI_UnitFrames/libs/Plugins/oUF_Friendship/oUF_Friendship.toc
index 5424e3c..173dad3 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_Friendship/oUF_Friendship.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_Friendship/oUF_Friendship.toc
@@ -20,5 +20,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 oUF_Friendship.lua
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_Gladiator/oUF_Gladiator.toc b/SVUI_UnitFrames/libs/Plugins/oUF_Gladiator/oUF_Gladiator.toc
index 6909b8f..24d39ec 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_Gladiator/oUF_Gladiator.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_Gladiator/oUF_Gladiator.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Gladiator
 ## Notes: Adds PvP trinket status and spec icons to oUF frames.
 ## Author: Munglunch
-## Version: 1.0.01
+## Version: 1.0.08
 ## X-Category: oUF
 ## Dependencies: oUF
 ## X-Curse-Packaged-Version: r20150218022926
@@ -21,5 +21,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 oUF_Gladiator.lua
\ No newline at end of file
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_MageMagic/oUF_MageMagic.toc b/SVUI_UnitFrames/libs/Plugins/oUF_MageMagic/oUF_MageMagic.toc
index d3af7a9..2bfb284 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_MageMagic/oUF_MageMagic.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_MageMagic/oUF_MageMagic.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Mage Magic
 ## Notes: Adds support for mage spell indicators to oUF.
 ## Author: Munglunch
-## Version: 1.0.01
+## Version: 1.0.08
 ## Dependencies: oUF
 ## X-Curse-Packaged-Version: r20150218022926
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
@@ -20,5 +20,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 oUF_MageMagic.lua
\ No newline at end of file
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_RaidDebuffs/oUF_RaidDebuffs.toc b/SVUI_UnitFrames/libs/Plugins/oUF_RaidDebuffs/oUF_RaidDebuffs.toc
index 6ac3cb9..ea55409 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_RaidDebuffs/oUF_RaidDebuffs.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_RaidDebuffs/oUF_RaidDebuffs.toc
@@ -19,5 +19,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 oUF_RaidDebuffs.lua
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_Reputation/oUF_Reputation.toc b/SVUI_UnitFrames/libs/Plugins/oUF_Reputation/oUF_Reputation.toc
index 01d1a6b..7b26963 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_Reputation/oUF_Reputation.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_Reputation/oUF_Reputation.toc
@@ -20,5 +20,9 @@
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
 ## X-Curse-Project-ID: supervillain-ui-unitframes
 ## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline
+## X-Curse-Packaged-Version: r20150304000623
+## X-Curse-Project-Name: SuperVillain UI: UnitFrames
+## X-Curse-Project-ID: supervillain-ui-unitframes
+## X-Curse-Repository-ID: wow/supervillain-ui-unitframes/mainline

 oUF_Reputation.lua