Quantcast

New db lib

Steven Jackson [09-23-14 - 05:37]
New db lib
Filename
Interface/AddOns/SVUI/SVUI.lua
Interface/AddOns/SVUI/SVUI.toc
Interface/AddOns/SVUI/SVUI.xml
Interface/AddOns/SVUI/language/chinese_ui.lua
Interface/AddOns/SVUI/language/english_ui.lua
Interface/AddOns/SVUI/language/french_ui.lua
Interface/AddOns/SVUI/language/german_ui.lua
Interface/AddOns/SVUI/language/italian_ui.lua
Interface/AddOns/SVUI/language/korean_ui.lua
Interface/AddOns/SVUI/language/portuguese_ui.lua
Interface/AddOns/SVUI/language/russian_ui.lua
Interface/AddOns/SVUI/language/spanish_ui.lua
Interface/AddOns/SVUI/language/taiwanese_ui.lua
Interface/AddOns/SVUI/libs/LibLocale-1.0/LibLocale-1.0.lua
Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua
Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/database.lua
Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/librarian.lua
Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/linguist.lua
Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/registry.lua
Interface/AddOns/SVUI/libs/LibSystemRegistry-1.0/LibSystemRegistry-1.0.lua
Interface/AddOns/SVUI/libs/libdatabroker-1-1/Changelog-libdatabroker-1-1-v1.1.4.txt
Interface/AddOns/SVUI/libs/libdatabroker-1-1/LibDataBroker-1.1.lua
Interface/AddOns/SVUI/libs/libdatabroker-1-1/README.textile
Interface/AddOns/SVUI/libs/libs.xml
Interface/AddOns/SVUI/packages/actionbar/KeyBind.lua
Interface/AddOns/SVUI/packages/actionbar/SVBar.lua
Interface/AddOns/SVUI/packages/actionbar/config.lua
Interface/AddOns/SVUI/packages/aura/SVAura.lua
Interface/AddOns/SVUI/packages/bag/SVBag.lua
Interface/AddOns/SVUI/packages/bag/tools/breakstuff.lua
Interface/AddOns/SVUI/packages/bag/tools/sorting.lua
Interface/AddOns/SVUI/packages/chat/SVChat.lua
Interface/AddOns/SVUI/packages/dock/SVDock.lua
Interface/AddOns/SVUI/packages/gear/SVGear.lua
Interface/AddOns/SVUI/packages/henchmen/SVHenchmen.lua
Interface/AddOns/SVUI/packages/map/SVMap.lua
Interface/AddOns/SVUI/packages/override/SVOverride.lua
Interface/AddOns/SVUI/packages/plates/SVPlate.lua
Interface/AddOns/SVUI/packages/stats/SVStats.lua
Interface/AddOns/SVUI/packages/stats/stats/bags.lua
Interface/AddOns/SVUI/packages/stats/stats/cta.lua
Interface/AddOns/SVUI/packages/stats/stats/dps.lua
Interface/AddOns/SVUI/packages/stats/stats/durability.lua
Interface/AddOns/SVUI/packages/stats/stats/experience.lua
Interface/AddOns/SVUI/packages/stats/stats/friends.lua
Interface/AddOns/SVUI/packages/stats/stats/gold.lua
Interface/AddOns/SVUI/packages/stats/stats/guild.lua
Interface/AddOns/SVUI/packages/stats/stats/hps.lua
Interface/AddOns/SVUI/packages/stats/stats/reputation.lua
Interface/AddOns/SVUI/packages/stats/stats/system.lua
Interface/AddOns/SVUI/packages/stats/stats/time.lua
Interface/AddOns/SVUI/packages/stats/stats/tokens.lua
Interface/AddOns/SVUI/packages/tip/SVTip.lua
Interface/AddOns/SVUI/packages/unit/SVUnit.lua
Interface/AddOns/SVUI/packages/unit/SVUnit.xml
Interface/AddOns/SVUI/packages/unit/config.lua
Interface/AddOns/SVUI/packages/unit/elements/auras.lua
Interface/AddOns/SVUI/packages/unit/elements/castbar.lua
Interface/AddOns/SVUI/packages/unit/elements/essentials.lua
Interface/AddOns/SVUI/packages/unit/elements/misc.lua
Interface/AddOns/SVUI/packages/unit/elements/tags.lua
Interface/AddOns/SVUI/packages/unit/frames.lua
Interface/AddOns/SVUI/packages/unit/resources/deathknight.lua
Interface/AddOns/SVUI/packages/unit/resources/druid.lua
Interface/AddOns/SVUI/packages/unit/resources/hunter.lua
Interface/AddOns/SVUI/packages/unit/resources/mage.lua
Interface/AddOns/SVUI/packages/unit/resources/monk.lua
Interface/AddOns/SVUI/packages/unit/resources/paladin.lua
Interface/AddOns/SVUI/packages/unit/resources/priest.lua
Interface/AddOns/SVUI/packages/unit/resources/rogue.lua
Interface/AddOns/SVUI/packages/unit/resources/shaman.lua
Interface/AddOns/SVUI/packages/unit/resources/warlock.lua
Interface/AddOns/SVUI/packages/unit/resources/warrior.lua
Interface/AddOns/SVUI/scripts/comix.lua
Interface/AddOns/SVUI/scripts/misc.lua
Interface/AddOns/SVUI/scripts/mounts.lua
Interface/AddOns/SVUI/scripts/questwatch.lua
Interface/AddOns/SVUI/scripts/raid.lua
Interface/AddOns/SVUI/scripts/reactions.lua
Interface/AddOns/SVUI/scripts/spellbind.lua
Interface/AddOns/SVUI/system/alerts.lua
Interface/AddOns/SVUI/system/animate.lua
Interface/AddOns/SVUI/system/common.lua
Interface/AddOns/SVUI/system/database.lua
Interface/AddOns/SVUI/system/load.lua
Interface/AddOns/SVUI/system/media.lua
Interface/AddOns/SVUI/system/mentalo.lua
Interface/AddOns/SVUI/system/setup.lua
Interface/AddOns/SVUI/system/slash.lua
Interface/AddOns/SVUI/system/timers.lua
Interface/AddOns/SVUI/system/utilities.lua
Interface/AddOns/SVUI/system/visibility.lua
Interface/AddOns/SVUI_AnsweringService/SVUI_AnsweringService.lua
Interface/AddOns/SVUI_ArtOfWar/SVUI_ArtOfWar.lua
Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua
Interface/AddOns/SVUI_ConfigOMatic/language/generic.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/art.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/aura.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/bag.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/bar.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/chat.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/dock.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/dynamic.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/filter.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/henchmen.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/map.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/mode.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/plate.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/profiles.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/stat.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/tip.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/units/core.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/units/focus.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/units/grid.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/units/other.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/units/party.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/units/pet.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/units/player.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua
Interface/AddOns/SVUI_ConfigOMatic/modules/units/target.lua
Interface/AddOns/SVUI_DebugOMatic/Bindings.xml
Interface/AddOns/SVUI_DebugOMatic/SVUI_DebugOMatic.toc
Interface/AddOns/SVUI_DebugOMatic/SVUI_DebugOMatic.xml
Interface/AddOns/SVUI_DebugOMatic/debug.lua
Interface/AddOns/SVUI_Laborer/SVUI_Laborer.lua
Interface/AddOns/SVUI_Laborer/modes/archaeology.lua
Interface/AddOns/SVUI_Laborer/modes/cooking.lua
Interface/AddOns/SVUI_Laborer/modes/farming.lua
Interface/AddOns/SVUI_Laborer/modes/fishing.lua
Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.lua
Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.lua
Interface/AddOns/SVUI_StyleOMatic/addons/achievement.lua
Interface/AddOns/SVUI_StyleOMatic/addons/alert.lua
Interface/AddOns/SVUI_StyleOMatic/addons/archeology.lua
Interface/AddOns/SVUI_StyleOMatic/addons/auctionhouse.lua
Interface/AddOns/SVUI_StyleOMatic/addons/barbershop.lua
Interface/AddOns/SVUI_StyleOMatic/addons/battlefield.lua
Interface/AddOns/SVUI_StyleOMatic/addons/blackmarket.lua
Interface/AddOns/SVUI_StyleOMatic/addons/calendar.lua
Interface/AddOns/SVUI_StyleOMatic/addons/challenges.lua
Interface/AddOns/SVUI_StyleOMatic/addons/character.lua
Interface/AddOns/SVUI_StyleOMatic/addons/chat.lua
Interface/AddOns/SVUI_StyleOMatic/addons/dressup.lua
Interface/AddOns/SVUI_StyleOMatic/addons/encounterjournal.lua
Interface/AddOns/SVUI_StyleOMatic/addons/friends.lua
Interface/AddOns/SVUI_StyleOMatic/addons/gossip.lua
Interface/AddOns/SVUI_StyleOMatic/addons/guild.lua
Interface/AddOns/SVUI_StyleOMatic/addons/help.lua
Interface/AddOns/SVUI_StyleOMatic/addons/inspect.lua
Interface/AddOns/SVUI_StyleOMatic/addons/itemsocketing.lua
Interface/AddOns/SVUI_StyleOMatic/addons/itemupgrade.lua
Interface/AddOns/SVUI_StyleOMatic/addons/keybinding.lua
Interface/AddOns/SVUI_StyleOMatic/addons/lfd.lua
Interface/AddOns/SVUI_StyleOMatic/addons/loothistory.lua
Interface/AddOns/SVUI_StyleOMatic/addons/lossofcontrol.lua
Interface/AddOns/SVUI_StyleOMatic/addons/macro.lua
Interface/AddOns/SVUI_StyleOMatic/addons/mailbox.lua
Interface/AddOns/SVUI_StyleOMatic/addons/merchant.lua
Interface/AddOns/SVUI_StyleOMatic/addons/petbattle.lua
Interface/AddOns/SVUI_StyleOMatic/addons/petition.lua
Interface/AddOns/SVUI_StyleOMatic/addons/petjournal.lua
Interface/AddOns/SVUI_StyleOMatic/addons/petstable.lua
Interface/AddOns/SVUI_StyleOMatic/addons/pvp.lua
Interface/AddOns/SVUI_StyleOMatic/addons/quest.lua
Interface/AddOns/SVUI_StyleOMatic/addons/raid.lua
Interface/AddOns/SVUI_StyleOMatic/addons/reforging.lua
Interface/AddOns/SVUI_StyleOMatic/addons/spellbook.lua
Interface/AddOns/SVUI_StyleOMatic/addons/store.lua
Interface/AddOns/SVUI_StyleOMatic/addons/supervillain.lua
Interface/AddOns/SVUI_StyleOMatic/addons/system.lua
Interface/AddOns/SVUI_StyleOMatic/addons/tabard.lua
Interface/AddOns/SVUI_StyleOMatic/addons/talents.lua
Interface/AddOns/SVUI_StyleOMatic/addons/taxi.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/ACP.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AdiBags.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Altoholic.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AtlasLoot.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AuctionLite.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/BigWigs.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Bugsack.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Clique.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Cooline.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/DBM.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/DXE.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/LightHeaded.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Mogit.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Omen.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Outfitter.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Postal.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Quartz.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Recount.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/SexyCooldown.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Skada.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TinyDPS.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TomTom.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TradeSkillDW.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/VEM.lua
Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/alDamageMeter.lua
Interface/AddOns/SVUI_StyleOMatic/addons/timemanager.lua
Interface/AddOns/SVUI_StyleOMatic/addons/trade.lua
Interface/AddOns/SVUI_StyleOMatic/addons/tradeskill.lua
Interface/AddOns/SVUI_StyleOMatic/addons/trainer.lua
Interface/AddOns/SVUI_StyleOMatic/addons/transmog.lua
Interface/AddOns/SVUI_StyleOMatic/addons/voidstorage.lua
Interface/AddOns/SVUI_StyleOMatic/addons/worldmap.lua
Interface/AddOns/SVUI_StyleOMatic/addons/worldstate.lua
Interface/AddOns/SVUI_StyleOMatic/common/methods.lua
Interface/AddOns/SVUI_TrackingDevice/SVUI_TrackingDevice.lua
diff --git a/Interface/AddOns/SVUI/SVUI.lua b/Interface/AddOns/SVUI/SVUI.lua
index cd0fdcb..598ef0e 100644
--- a/Interface/AddOns/SVUI/SVUI.lua
+++ b/Interface/AddOns/SVUI/SVUI.lua
@@ -52,55 +52,23 @@ local twipe, tsort, tconcat = table.wipe, table.sort, table.concat;

 --[[ GET THE REGISTRY LIB ]]--

-local LibRegistry = LibStub("LibSystemRegistry-1.0")
+local SVLib = LibStub("LibSuperVillain-1.0");

 --[[ LOCALS ]]--

 local callbacks = {};
 local numCallbacks = 0;
-local playerClass = select(2,UnitClass("player"));
+local playerClass = select(2, UnitClass("player"));
+local filterClass = playerClass or "NONE"

 local actualWidth, actualHeight = UIParent:GetSize()

 --[[ MUNGLUNCH's FASTER ASSERT FUNCTION ]]--

-function enforce(condition, ...)
-   if not condition then
-      if next({...}) then
-         local fn = function (...) return(string.format(...)) end
-         local s,r = pcall(fn, ...)
-         if s then
-            error("Error!: " .. r, 2)
-         end
-      end
-      error("Error!", 2)
-   end
-end
 local assert = enforce;

 --[[ CLASS COLOR LOCALS ]]--

-local function formatValueString(text)
-    if "string" == type(text) then
-        text = gsub(text,"\n","\\n")
-        if match(gsub(text,"[^'\"]",""),'^"+$') then
-            return "'"..text.."'";
-        else
-            return '"'..gsub(text,'"','\\"')..'"';
-        end
-    else
-        return tostring(text);
-    end
-end
-
-local function formatKeyString(text)
-    if "string"==type(text) and match(text,"^[_%a][_%a%d]*$") then
-        return text;
-    else
-        return "["..formatValueString(text).."]";
-    end
-end
-
 local function RegisterCallback(self, m, h)
     assert(type(m) == "string" or type(m) == "function", "Bad argument #1 to :RegisterCallback (string or function expected)")
     if type(m) == "string" then
@@ -178,77 +146,43 @@ do
     classes = nil
 end

---[[ APPENDED LUA METHODS ]]--
-
-function math.parsefloat(value,decimal)
-    if decimal and decimal > 0 then
-        local calc1 = 10 ^ decimal;
-        local calc2 = (value * calc1) + 0.5;
-        return floor(calc2) / calc1
-    end
-    return floor(value + 0.5)
-end
+--[[ CORE ENGINE CONSTRUCT ]]--

-function table.dump(targetTable)
-    local dumpTable = {};
-    local dumpCheck = {};
-    for key,value in ipairs(targetTable) do
-        tinsert(dumpTable, formatValueString(value));
-        dumpCheck[key] = true;
-    end
-    for key,value in pairs(targetTable) do
-        if not dumpCheck[key] then
-            tinsert(dumpTable, "\n    "..formatKeyString(key).." = "..formatValueString(value));
-        end
-    end
-    local output = tconcat(dumpTable, ", ");
-    return "{ "..output.." }";
-end
+local messagePattern = "|cffFF2F00%s:|r";
+local debugPattern = "|cffFF2F00%s|r [|cff992FFF%s|r]|cffFF2F00:|r";

-function table.copy(targetTable,deepCopy,mergeTable)
-    mergeTable = mergeTable or {};
-    if targetTable==nil then return nil end
-    if mergeTable[targetTable] then return mergeTable[targetTable] end
-    local replacementTable = {}
-    for key,value in pairs(targetTable)do
-        if deepCopy and type(value) == "table" then
-            replacementTable[key] = table.copy(value, deepCopy, mergeTable)
-        else
-            replacementTable[key] = value
-        end
-    end
-    setmetatable(replacementTable, table.copy(getmetatable(targetTable), deepCopy, mergeTable))
-    mergeTable[targetTable] = replacementTable;
-    return replacementTable
+local function _sendmessage(msg, prefix)
+    if(type(msg) == "table") then
+         msg = tostring(msg)
+    end
+    if(not msg) then return end
+    if(prefix) then
+        local outbound = ("%s %s"):format(prefix, msg);
+        print(outbound)
+    else
+        print(msg)
+    end
 end

-function string.trim(this)
-    return this:find('^%s*$') and '' or this:match('^%s*(.*%S)')
-end
+local Core_DeadFunction = function() return end

-function string.color(this, color)
-    return ("|cff%s%s|r"):format(color, this)
+local Core_StaticPopup_Show = function(self, arg)
+    if arg == "ADDON_ACTION_FORBIDDEN" then
+        StaticPopup_Hide(arg)
+    end
 end

-function string.link(this, prefix, text, color)
-    text = tostring(text)
-    local colorstring = tostring(this):color(color or "ffffff")
-    return ("|H%s:%s|h%s|h"):format(prefix, text, colorstring)
+local Core_Debugger = function(self, msg)
+    if(not self.___debugging) then return end
+    local outbound = (debugPattern):format(self.___addonName, "DEBUG")
+    _sendmessage(msg, outbound)
 end

-function string.explode(str, delim)
-   local res = { }
-   local pattern = string.format("([^%s]+)%s()", delim, delim)
-   while (true) do
-      line, pos = str:match(pattern, pos)
-      if line == nil then break end
-      table.insert(res, line)
-   end
-   return res
+local Core_AddonMessage = function(self, msg)
+    local outbound = (messagePattern):format(self.___addonName)
+    _sendmessage(msg, outbound)
 end

---[[ CORE ENGINE CONSTRUCT ]]--
-
 local Core_ResetAllUI = function(self, confirmed)
     if InCombatLockdown()then
         SendAddonMessage(ERR_NOT_IN_COMBAT)
@@ -273,6 +207,12 @@ local Core_ResetUI = function(self, confirmed)
     self:ResetMovables()
 end

+local Core_ImportProfile = function(self, key)
+    self.SystemAlert["COPY_PROFILE_PROMPT"].text = L["Are you sure you want to copy the profile '" .. key .. "'?"]
+    self.SystemAlert["COPY_PROFILE_PROMPT"].OnAccept = function() SVLib:ImportDatabase(key) end
+    self:StaticPopup_Show("COPY_PROFILE_PROMPT")
+end
+
 local Core_ToggleConfig = function(self)
     if InCombatLockdown() then
         SendAddonMessage(ERR_NOT_IN_COMBAT)
@@ -319,7 +259,7 @@ end

 --[[ INITIALIZE THE CORE OBJECT ]]--

-local SVUI = LibRegistry:InitializeCore()
+local SVUI = SVLib:NewCore("SVUI_Global", "SVUI_Profile", "SVUI_Cache")

 SVUI.Snap               = {}
 SVUI.Media              = {}
@@ -337,10 +277,15 @@ SVUI.ActualWidth        = actualWidth
 SVUI.yScreenArea        = (actualHeight * 0.33)
 SVUI.xScreenArea        = (actualWidth * 0.33)

+SVUI.fubar              = Core_DeadFunction
 SVUI.ResetAllUI         = Core_ResetAllUI
 SVUI.ResetUI            = Core_ResetUI
 SVUI.ToggleConfig       = Core_ToggleConfig
 SVUI.TaintHandler       = Core_TaintHandler
+SVUI.ImportProfile      = Core_ImportProfile
+SVUI.AddonMessage       = Core_AddonMessage
+SVUI.Debugger           = Core_Debugger
+SVUI.StaticPopup_Show   = Core_StaticPopup_Show

 --[[ UTILITY FRAMES ]]--

@@ -381,7 +326,7 @@ SVUI.Options = {
                                 active = {
                                     order = 1,
                                     type = "description",
-                                    name = function() return LibRegistry:GetPlugins() end
+                                    name = function() return SVLib:GetPlugins() end
                                 }
                             }
                         },
@@ -390,4 +335,688 @@ SVUI.Options = {
             }
         }
     }
-}
\ No newline at end of file
+}
+--[[
+#####################################################################################
+  /$$$$$$   /$$$$$$  /$$   /$$ /$$$$$$$$/$$$$$$  /$$$$$$   /$$$$$$
+ /$$__  $$ /$$__  $$| $$$ | $$| $$_____/_  $$_/ /$$__  $$ /$$__  $$
+| $$  \__/| $$  \ $$| $$$$| $$| $$       | $$  | $$  \__/| $$  \__/
+| $$      | $$  | $$| $$ $$ $$| $$$$$    | $$  | $$ /$$$$|  $$$$$$
+| $$      | $$  | $$| $$  $$$$| $$__/    | $$  | $$|_  $$ \____  $$
+| $$    $$| $$  | $$| $$\  $$$| $$       | $$  | $$  \ $$ /$$  \ $$
+|  $$$$$$/|  $$$$$$/| $$ \  $$| $$      /$$$$$$|  $$$$$$/|  $$$$$$/
+ \______/  \______/ |__/  \__/|__/     |______/ \______/  \______/
+#####################################################################################
+]]--
+local function safename(id)
+    local n = GetSpellInfo(id)
+    if not n then
+        if type(id) == "string" then
+            n = id
+        else
+            SVUI:Debugger('|cffFF9900SVUI:|r Spell not found: (#ID) '..id)
+            n = "Voodoo Doll";
+        end
+    end
+    return n
+end
+
+--[[ SYSTEM DATA ]]--
+
+local BUFFWATCH_BY_CLASS = {
+    PRIEST = {
+        {-- Weakened Soul
+            ["enabled"] = true,
+            ["id"] = 6788,
+            ["point"] = "TOPRIGHT",
+            ["color"] = {["r"] = 1, ["g"] = 0, ["b"] = 0},
+            ["anyUnit"] = true,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Prayer of Mending
+            ["enabled"] = true,
+            ["id"] = 41635,
+            ["point"] = "BOTTOMRIGHT",
+            ["color"] = {["r"] = 0.2, ["g"] = 0.7, ["b"] = 0.2},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Renew
+            ["enabled"] = true,
+            ["id"] = 139,
+            ["point"] = "BOTTOMLEFT",
+            ["color"] = {["r"] = 0.4, ["g"] = 0.7, ["b"] = 0.2},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Power Word: Shield
+            ["enabled"] = true,
+            ["id"] = 17,
+            ["point"] = "TOPLEFT",
+            ["color"] = {["r"] = 0.81, ["g"] = 0.85, ["b"] = 0.1},
+            ["anyUnit"] = true,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Power Word: Shield Power Insight
+            ["enabled"] = true,
+            ["id"] = 123258,
+            ["point"] = "TOPLEFT",
+            ["color"] = {["r"] = 0.81, ["g"] = 0.85, ["b"] = 0.1},
+            ["anyUnit"] = true,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Power Infusion
+            ["enabled"] = true,
+            ["id"] = 10060,
+            ["point"] = "RIGHT",
+            ["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Guardian Spirit
+            ["enabled"] = true,
+            ["id"] = 47788,
+            ["point"] = "LEFT",
+            ["color"] = {["r"] = 0.86, ["g"] = 0.44, ["b"] = 0},
+            ["anyUnit"] = true,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Pain Suppression
+            ["enabled"] = true,
+            ["id"] = 33206,
+            ["point"] = "LEFT",
+            ["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
+            ["anyUnit"] = true,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+    },
+    DRUID = {
+        {-- Rejuvenation
+            ["enabled"] = true,
+            ["id"] = 774,
+            ["point"] = "TOPRIGHT",
+            ["color"] = {["r"] = 0.8, ["g"] = 0.4, ["b"] = 0.8},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Regrowth
+            ["enabled"] = true,
+            ["id"] = 8936,
+            ["point"] = "BOTTOMLEFT",
+            ["color"] = {["r"] = 0.2, ["g"] = 0.8, ["b"] = 0.2},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Lifebloom
+            ["enabled"] = true,
+            ["id"] = 33763,
+            ["point"] = "TOPLEFT",
+            ["color"] = {["r"] = 0.4, ["g"] = 0.8, ["b"] = 0.2},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Wild Growth
+            ["enabled"] = true,
+            ["id"] = 48438,
+            ["point"] = "BOTTOMRIGHT",
+            ["color"] = {["r"] = 0.8, ["g"] = 0.4, ["b"] = 0},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+    },
+    PALADIN = {
+        {-- Beacon of Light
+            ["enabled"] = true,
+            ["id"] = 53563,
+            ["point"] = "TOPRIGHT",
+            ["color"] = {["r"] = 0.7, ["g"] = 0.3, ["b"] = 0.7},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Hand of Protection
+            ["enabled"] = true,
+            ["id"] = 1022,
+            ["point"] = "BOTTOMRIGHT",
+            ["color"] = {["r"] = 0.2, ["g"] = 0.2, ["b"] = 1},
+            ["anyUnit"] = true,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Hand of Freedom
+            ["enabled"] = true,
+            ["id"] = 1044,
+            ["point"] = "BOTTOMRIGHT",
+            ["color"] = {["r"] = 0.89, ["g"] = 0.45, ["b"] = 0},
+            ["anyUnit"] = true,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Hand of Salvation
+            ["enabled"] = true,
+            ["id"] = 1038,
+            ["point"] = "BOTTOMRIGHT",
+            ["color"] = {["r"] = 0.93, ["g"] = 0.75, ["b"] = 0},
+            ["anyUnit"] = true,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Hand of Sacrifice
+            ["enabled"] = true,
+            ["id"] = 6940,
+            ["point"] = "BOTTOMRIGHT",
+            ["color"] = {["r"] = 0.89, ["g"] = 0.1, ["b"] = 0.1},
+            ["anyUnit"] = true,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Hand of Purity
+            ["enabled"] = true,
+            ["id"] = 114039,
+            ["point"] = "BOTTOMRIGHT",
+            ["color"] = {["r"] = 0.64, ["g"] = 0.41, ["b"] = 0.72},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Sacred Shield
+            ["enabled"] = true,
+            ["id"] = 20925,
+            ["point"] = "TOPLEFT",
+            ["color"] = {["r"] = 0.93, ["g"] = 0.75, ["b"] = 0},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Eternal Flame
+            ["enabled"] = true,
+            ["id"] = 114163,
+            ["point"] = "BOTTOMLEFT",
+            ["color"] = {["r"] = 0.87, ["g"] = 0.7, ["b"] = 0.03},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+    },
+    SHAMAN = {
+        {-- Riptide
+            ["enabled"] = true,
+            ["id"] = 61295,
+            ["point"] = "TOPRIGHT",
+            ["color"] = {["r"] = 0.7, ["g"] = 0.3, ["b"] = 0.7},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Earth Shield
+            ["enabled"] = true,
+            ["id"] = 974,
+            ["point"] = "BOTTOMLEFT",
+            ["color"] = {["r"] = 0.2, ["g"] = 0.7, ["b"] = 0.2},
+            ["anyUnit"] = true,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Earthliving
+            ["enabled"] = true,
+            ["id"] = 51945,
+            ["point"] = "BOTTOMRIGHT",
+            ["color"] = {["r"] = 0.7, ["g"] = 0.4, ["b"] = 0.4},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+    },
+    MONK = {
+        {--Renewing Mist
+            ["enabled"] = true,
+            ["id"] = 119611,
+            ["point"] = "TOPLEFT",
+            ["color"] = {["r"] = 0.8, ["g"] = 0.4, ["b"] = 0.8},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Life Cocoon
+            ["enabled"] = true,
+            ["id"] = 116849,
+            ["point"] = "TOPRIGHT",
+            ["color"] = {["r"] = 0.2, ["g"] = 0.8, ["b"] = 0.2},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Enveloping Mist
+            ["enabled"] = true,
+            ["id"] = 132120,
+            ["point"] = "BOTTOMLEFT",
+            ["color"] = {["r"] = 0.4, ["g"] = 0.8, ["b"] = 0.2},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Zen Sphere
+            ["enabled"] = true,
+            ["id"] = 124081,
+            ["point"] = "BOTTOMRIGHT",
+            ["color"] = {["r"] = 0.7, ["g"] = 0.4, ["b"] = 0},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+    },
+    ROGUE = {
+        {-- Tricks of the Trade
+            ["enabled"] = true,
+            ["id"] = 57934,
+            ["point"] = "TOPRIGHT",
+            ["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+    },
+    MAGE = {
+        {-- Ice Ward
+            ["enabled"] = true,
+            ["id"] = 111264,
+            ["point"] = "TOPLEFT",
+            ["color"] = {["r"] = 0.2, ["g"] = 0.2, ["b"] = 1},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+    },
+    WARRIOR = {
+        {-- Vigilance
+            ["enabled"] = true,
+            ["id"] = 114030,
+            ["point"] = "TOPLEFT",
+            ["color"] = {["r"] = 0.2, ["g"] = 0.2, ["b"] = 1},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Intervene
+            ["enabled"] = true,
+            ["id"] = 3411,
+            ["point"] = "TOPRIGHT",
+            ["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+        {-- Safe Guard
+            ["enabled"] = true,
+            ["id"] = 114029,
+            ["point"] = "TOPRIGHT",
+            ["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+    },
+    DEATHKNIGHT = {
+        {-- Unholy Frenzy
+            ["enabled"] = true,
+            ["id"] = 49016,
+            ["point"] = "TOPRIGHT",
+            ["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
+            ["anyUnit"] = false,
+            ["onlyShowMissing"] = false,
+            ['style'] = 'coloredIcon',
+            ['displayText'] = false,
+            ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+            ['textThreshold'] = -1,
+            ['xOffset'] = 0,
+            ['yOffset'] = 0
+        },
+    },
+    NONE = {}
+}
+
+local FilterIDs = {
+    ["Blocked"] = [[36900,36901,36893,114216,97821,36032,132365,8733,57724,25771,57723,36032,58539,26013,6788,71041,41425,55711,8326,23445,24755,25163,80354,95809,95223,124275,124274,124273,117870,123981,15007,113942,89140]],
+    ["Allowed"] = [[31821,2825,32182,80353,90355,47788,33206,116849,22812,1490,116202,123059,136431,137332,137375,144351,142863,142864,142865,143198]],
+    ["Strict"] = [[123059,136431,137332,137375,144351,142863,142864,142865,143198]],
+    ["CC"] = [[47476,91800,91807,91797,108194,115001,33786,2637,339,78675,22570,5211,9005,102359,99,127797,45334,102795,114238,113004,3355,1513,19503,34490,24394,64803,19386,117405,128405,50519,91644,90337,54706,4167,90327,56626,50245,50541,96201,96201,31661,118,55021,122,82691,118271,44572,33395,102051,20066,10326,853,105593,31935,105421,605,64044,8122,9484,15487,114404,88625,113792,87194,2094,1776,6770,1833,51722,1330,408,88611,115197,113953,51514,64695,63685,76780,118905,118345,710,6789,118699,5484,6358,30283,24259,115782,115268,118093,89766,137143,20511,7922,676,105771,107566,132168,107570,118895,18498,116706,117368,115078,122242,119392,119381,120086,116709,123407,140023,25046,20549,107079]],
+    ["Shield"] = [[17,47515,45243,45438,115610,48797,48792,49039,87256,55233,50461,33206,47788,62618,47585,104773,110913,108359,22812,102342,106922,61336,19263,53480,1966,31224,74001,5277,45182,98007,30823,108271,1022,6940,114039,31821,498,642,86659,31850,118038,55694,97463,12975,114029,871,114030,120954,131523,122783,122278,115213,116849,20594]],
+    ["Player"] = [[17,47515,45243,45438,45438,115610,110909,12051,12472,80353,12042,32612,110960,108839,111264,108843,48797,48792,49039,87256,49222,55233,50461,49016,51271,96268,33206,47788,62618,47585,6346,10060,114239,119032,27827,104773,110913,108359,113860,113861,113858,88448,22812,102342,106922,61336,117679,102543,102558,102560,16689,132158,106898,1850,106951,29166,52610,69369,112071,124974,19263,53480,51755,54216,34471,3045,3584,131894,90355,90361,31224,74001,5277,45182,51713,114018,2983,121471,11327,108212,57933,79140,13750,98007,30823,108271,16188,2825,79206,16191,8178,58875,108281,108271,16166,114896,1044,1022,1038,6940,114039,31821,498,642,86659,20925,31850,31884,53563,31842,54428,105809,85499,118038,55694,97463,12975,114029,871,114030,18499,1719,23920,114028,46924,3411,107574,120954,131523,122783,122278,115213,116849,125174,116841,20594,59545,20572,26297,68992]],
+    ["Raid"] = [[116281,116784,116417,116942,116161,117708,118303,118048,118135,117878,117949,116835,116778,116525,122761,122760,122740,123812,123180,123474,122835,123081,122125,121885,121949,117436,118091,117519,122752,123011,116161,123121,119985,119086,119775,122151,138349,137371,136767,137641,137359,137972,136903,136753,137633,137731,133767,133768,136050,138569,134691,137440,137408,137360,135000,143436,143579,147383,146124,144851,144358,144774,147207,144215,143990,144330,143494,142990,143919,143766,143773,146589,143777,143385,143974,145183]]
+}
+
+local FilterOverrides = {
+    ["45438"] = 5, ["48797"] = 5, ["87256"] = 4,
+    ["33206"] = 3, ["47585"] = 5, ["22812"] = 2,
+    ["102342"] = 2, ["19263"] = 5, ["5277"] = 5,
+    ["1022"] = 5, ["31821"] = 3, ["498"] = 2,
+    ["642"] = 5, ["86659"] = 4, ["31850"] = 4,
+    ["118038"] = 5, ["114029"] = 2, ["871"] = 3,
+    ["120954"] = 2, ["131523"] = 5
+}
+
+--[[ CACHE DATA ]]--
+
+SVUI.db = {
+    ["cooldown"] = true,
+    ["autoScale"] = true,
+    ["multiMonitor"] = false,
+    ["taintLog"] = false,
+    ["stickyFrames"] = true,
+    ["loginmessage"] = true,
+    ["hideErrorFrame"] = true,
+    ["threatbar"] = false,
+    ["bubbles"] = true,
+    ["comix"] = true,
+    ["bigComix"] = true,
+    ["questWatch"] = true,
+    ["woot"] = true,
+    ["pvpinterrupt"] = true,
+    ["lookwhaticando"] = false,
+    ["reactionChat"] = false,
+    ["reactionEmote"] = false,
+    ["sharingiscaring"] = false,
+    ["arenadrink"] = true,
+    ["stupidhat"] = true,
+    ["totems"] = {
+        ["enable"] = true,
+        ["showBy"] = "VERTICAL",
+        ["sortDirection"] = "ASCENDING",
+        ["size"] = 40,
+        ["spacing"] = 4
+    },
+    ["media"] = {
+        ["fonts"] = {
+            ["default"] = "SVUI System Font",
+            ["name"] = "SVUI Name Font",
+            ["number"] = "SVUI Number Font",
+            ["combat"] = "SVUI Combat Font",
+            ["giant"] = "SVUI Action Font",
+            ["size"] = 10,
+            ["unicodeSize"] = 12,
+        },
+        ["textures"] = {
+            ["pattern"]      = "SVUI Backdrop 1",
+            ["comic"]        = "SVUI Comic 1",
+            ["unitlarge"]    = "SVUI Unit BG 3",
+            ["unitsmall"]    = "SVUI Small BG 3"
+        },
+        ["colors"] = {
+            ["default"]      = {0.2, 0.2, 0.2, 1},
+            ["special"]      = {0.37, 0.32, 0.29, 1},
+        },
+        ["unitframes"] = {
+            ["health"]       = {0.3, 0.5, 0.3},
+            ["power"]        = {
+                ["MANA"]         = {0.41, 0.85, 1},
+                ["RAGE"]         = {1, 0.31, 0.31},
+                ["FOCUS"]        = {1, 0.63, 0.27},
+                ["ENERGY"]       = {0.85, 0.83, 0.25},
+                ["RUNES"]        = {0.55, 0.57, 0.61},
+                ["RUNIC_POWER"] = {0, 0.82, 1},
+                ["FUEL"]         = {0, 0.75, 0.75}
+            },
+            ["reaction"]     = {
+                [1] = {0.92, 0.15, 0.15},
+                [2] = {0.92, 0.15, 0.15},
+                [3] = {0.92, 0.15, 0.15},
+                [4] = {0.85, 0.85, 0.13},
+                [5] = {0.19, 0.85, 0.13},
+                [6] = {0.19, 0.85, 0.13},
+                [7] = {0.19, 0.85, 0.13},
+                [8] = {0.19, 0.85, 0.13},
+            },
+            ["tapped"]           = {0.55, 0.57, 0.61},
+            ["disconnected"]     = {0.84, 0.75, 0.65},
+            ["casting"]          = {0.8, 0.8, 0},
+            ["spark"]            = {1, 0.72, 0},
+            ["interrupt"]        = {0.78, 0.25, 0.25},
+            ["shield_bars"]      = {0.56, 0.4, 0.62},
+            ["buff_bars"]        = {0.31, 0.31, 0.31},
+            ["debuff_bars"]      = {0.8, 0.1, 0.1},
+            ["predict"]          = {
+                ["personal"]         = {0, 1, 0.5, 0.25},
+                ["others"]           = {0, 1, 0, 0.25},
+                ["absorbs"]          = {1, 1, 0, 0.25}
+            },
+            ["spellcolor"] = {
+                [safename(2825)] = {0.98, 0.57, 0.11},  --Bloodlust
+                [safename(32182)] = {0.98, 0.57, 0.11}, --Heroism
+                [safename(80353)] = {0.98, 0.57, 0.11}, --Time Warp
+                [safename(90355)] = {0.98, 0.57, 0.11}, --Ancient Hysteria
+                [safename(84963)] = {0.98, 0.57, 0.11}, --Inquisition
+                [safename(86659)] = {0.98, 0.57, 0.11}, --Guardian of Ancient Kings
+            }
+        }
+    },
+    ["filter"] = {
+        ["CC"] = {},
+        ["Shield"] = {},
+        ["Player"] = {},
+        ["Blocked"] = {},
+        ["Allowed"] = {},
+        ["Strict"] = {},
+        ["Raid"] = {},
+        ["BuffWatch"] = BUFFWATCH_BY_CLASS[filterClass],
+        ["PetBuffWatch"] = {
+            {-- Frenzy
+                ["enabled"] = true,
+                ["id"] = 19615,
+                ["point"] = "TOPLEFT",
+                ["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
+                ["anyUnit"] = true,
+                ["onlyShowMissing"] = false,
+                ['style'] = 'coloredIcon',
+                ['displayText'] = false,
+                ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+                ['textThreshold'] = -1,
+                ['xOffset'] = 0,
+                ['yOffset'] = 0
+            },
+            {-- Mend Pet
+                ["enabled"] = true,
+                ["id"] = 136,
+                ["point"] = "TOPRIGHT",
+                ["color"] = {["r"] = 0.2, ["g"] = 0.8, ["b"] = 0.2},
+                ["anyUnit"] = true,
+                ["onlyShowMissing"] = false,
+                ['style'] = 'coloredIcon',
+                ['displayText'] = false,
+                ['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
+                ['textThreshold'] = -1,
+                ['xOffset'] = 0,
+                ['yOffset'] = 0
+            },
+        }
+    }
+}
+
+for k, x in pairs(FilterIDs) do
+    local src = {};
+    for id in x:gmatch("([^,]+)") do
+        if(id) then
+            local saved
+            local n = safename(id);
+            local p = FilterOverrides[tostring(id)] or 0;
+            if k == "Strict" then
+                saved = {['enable'] = true, ['spellID'] = id, ['priority'] = p}
+            else
+                saved = {['enable'] = true, ['priority'] = p}
+            end
+            src[n] = saved
+        end
+    end
+    SVUI.db.filter[k] = src
+end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/SVUI.toc b/Interface/AddOns/SVUI/SVUI.toc
index 4e786df..e2f5a4e 100644
--- a/Interface/AddOns/SVUI/SVUI.toc
+++ b/Interface/AddOns/SVUI/SVUI.toc
@@ -6,6 +6,8 @@
 ## SavedVariables: SVUI_Global
 ## SavedVariablesPerCharacter: SVUI_Profile, SVUI_Cache
 ## OptionalDeps: Blizzard_DebugTools, Blizzard_PetJournal, SharedMedia
+## X-SVUI-Header: SuperVillain UI
+## X-SVUI-Schema: Core
 ## X-oUF: oUF_Villain
 ## X-Notes: Special thanks to Elv and Tukz for their incredible work.
 ## X-Email: munglunch@gmail.com
diff --git a/Interface/AddOns/SVUI/SVUI.xml b/Interface/AddOns/SVUI/SVUI.xml
index 3c8071d..4a30819 100644
--- a/Interface/AddOns/SVUI/SVUI.xml
+++ b/Interface/AddOns/SVUI/SVUI.xml
@@ -16,7 +16,6 @@
     <Script file="language\chinese_ui.lua"/>
     <Script file="language\portuguese_ui.lua"/>

-    <Script file="system\database.lua"/>
     <Script file="system\media.lua"/>
     <Script file="system\utilities.lua"/>
     <Script file="system\animate.lua"/>
diff --git a/Interface/AddOns/SVUI/language/chinese_ui.lua b/Interface/AddOns/SVUI/language/chinese_ui.lua
index 2360e49..c9730fa 100644
--- a/Interface/AddOns/SVUI/language/chinese_ui.lua
+++ b/Interface/AddOns/SVUI/language/chinese_ui.lua
@@ -1,5 +1,5 @@
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale:SetLocaleData("zhCN");
+local L = LibStub("LibSuperVillain-1.0"):Lang("zhCN");
 if not L then return end
 --[[REACTION TEXTS]]--
 L[" is drinking."] = true;
diff --git a/Interface/AddOns/SVUI/language/english_ui.lua b/Interface/AddOns/SVUI/language/english_ui.lua
index 424a8d4..fabf5c2 100644
--- a/Interface/AddOns/SVUI/language/english_ui.lua
+++ b/Interface/AddOns/SVUI/language/english_ui.lua
@@ -1,5 +1,5 @@
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale:SetLocaleData("enUS", true);
+local L = LibStub("LibSuperVillain-1.0"):Lang("enUS", true);
 if not L then return; end
 --[[REACTION TEXTS]]--
 L[" is drinking."] = true;
diff --git a/Interface/AddOns/SVUI/language/french_ui.lua b/Interface/AddOns/SVUI/language/french_ui.lua
index 7e0c622..c3c0ff7 100644
--- a/Interface/AddOns/SVUI/language/french_ui.lua
+++ b/Interface/AddOns/SVUI/language/french_ui.lua
@@ -1,5 +1,5 @@
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale:SetLocaleData("frFR");
+local L = LibStub("LibSuperVillain-1.0"):Lang("frFR");
 if not L then return; end
 --[[REACTION TEXTS]]--
 L[" is drinking."] = true;
diff --git a/Interface/AddOns/SVUI/language/german_ui.lua b/Interface/AddOns/SVUI/language/german_ui.lua
index 479db1c..26b6391 100644
--- a/Interface/AddOns/SVUI/language/german_ui.lua
+++ b/Interface/AddOns/SVUI/language/german_ui.lua
@@ -1,5 +1,5 @@
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale:SetLocaleData("deDE");
+local L = LibStub("LibSuperVillain-1.0"):Lang("deDE");
 if not L then return end
 --[[REACTION TEXTS]]--
 L[" is drinking."] = true;
diff --git a/Interface/AddOns/SVUI/language/italian_ui.lua b/Interface/AddOns/SVUI/language/italian_ui.lua
index 2b7f338..356b973 100644
--- a/Interface/AddOns/SVUI/language/italian_ui.lua
+++ b/Interface/AddOns/SVUI/language/italian_ui.lua
@@ -1,5 +1,5 @@
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale:SetLocaleData("itIT");
+local L = LibStub("LibSuperVillain-1.0"):Lang("itIT");
 if not L then return; end
 --[[REACTION TEXTS]]--
 L[" is drinking."] = true;
diff --git a/Interface/AddOns/SVUI/language/korean_ui.lua b/Interface/AddOns/SVUI/language/korean_ui.lua
index b6d555c..d4cb309 100644
--- a/Interface/AddOns/SVUI/language/korean_ui.lua
+++ b/Interface/AddOns/SVUI/language/korean_ui.lua
@@ -1,5 +1,5 @@
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale:SetLocaleData("koKR");
+local L = LibStub("LibSuperVillain-1.0"):Lang("koKR");
 if not L then return; end
 --[[REACTION TEXTS]]--
 L[" is drinking."] = true;
diff --git a/Interface/AddOns/SVUI/language/portuguese_ui.lua b/Interface/AddOns/SVUI/language/portuguese_ui.lua
index 44d9bff..5047dee 100644
--- a/Interface/AddOns/SVUI/language/portuguese_ui.lua
+++ b/Interface/AddOns/SVUI/language/portuguese_ui.lua
@@ -1,5 +1,5 @@
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale:SetLocaleData("ptBR");
+local L = LibStub("LibSuperVillain-1.0"):Lang("ptBR");
 if not L then return; end
 --[[REACTION TEXTS]]--
 L[" is drinking."] = true;
diff --git a/Interface/AddOns/SVUI/language/russian_ui.lua b/Interface/AddOns/SVUI/language/russian_ui.lua
index 882b3bb..7fec36f 100644
--- a/Interface/AddOns/SVUI/language/russian_ui.lua
+++ b/Interface/AddOns/SVUI/language/russian_ui.lua
@@ -1,5 +1,5 @@
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale:SetLocaleData("ruRU");
+local L = LibStub("LibSuperVillain-1.0"):Lang("ruRU");
 if not L then return; end
 --[[REACTION TEXTS]]--
 L[" is drinking."] = true;
diff --git a/Interface/AddOns/SVUI/language/spanish_ui.lua b/Interface/AddOns/SVUI/language/spanish_ui.lua
index 7766dd4..ca80ca3 100644
--- a/Interface/AddOns/SVUI/language/spanish_ui.lua
+++ b/Interface/AddOns/SVUI/language/spanish_ui.lua
@@ -1,7 +1,7 @@
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale:SetLocaleData("esES");
+local L = LibStub("LibSuperVillain-1.0"):Lang("esES");
 if not L then
-	L = LibLocale:SetLocaleData("esMX")
+	L = LibStub("LibSuperVillain-1.0"):Lang("esMX")
 end
 if not L then return; end
 --[[REACTION TEXTS]]--
diff --git a/Interface/AddOns/SVUI/language/taiwanese_ui.lua b/Interface/AddOns/SVUI/language/taiwanese_ui.lua
index 8048d63..4ee6b5f 100644
--- a/Interface/AddOns/SVUI/language/taiwanese_ui.lua
+++ b/Interface/AddOns/SVUI/language/taiwanese_ui.lua
@@ -1,5 +1,5 @@
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale:SetLocaleData("zhTW");
+local L = LibStub("LibSuperVillain-1.0"):Lang("zhTW");
 if not L then return; end
 --[[REACTION TEXTS]]--
 L[" is drinking."] = true;
diff --git a/Interface/AddOns/SVUI/libs/LibLocale-1.0/LibLocale-1.0.lua b/Interface/AddOns/SVUI/libs/LibLocale-1.0/LibLocale-1.0.lua
deleted file mode 100644
index a64ec44..0000000
--- a/Interface/AddOns/SVUI/libs/LibLocale-1.0/LibLocale-1.0.lua
+++ /dev/null
@@ -1,66 +0,0 @@
---[[ GLOBALS ]]--
-
-local _G 						= _G;
-local rawset        			= _G.rawset;
-local rawget        			= _G.rawget;
-local getmetatable  			= _G.getmetatable;
-local setmetatable  			= _G.setmetatable;
-
-local MAJOR, MINOR = "LibLocale", 1
-local LibLocale = _G[MAJOR]
-
-if not LibLocale or LibLocale.minor < MINOR then
-    LibLocale = LibLocale or {}
-    _G[MAJOR] = LibLocale
-    LibLocale.minor = MINOR
-
-    local rootstring = function(self) return self.___addonName end
-
-    local failsafe = function() assert(false) end
-
-    local metaread = {
-        __index = function(self, key)
-            rawset(self, key, key)
-            return key
-        end
-    }
-
-    local activeLocale
-
-    local defaultwrite = setmetatable({}, {
-        __newindex = function(self, key, value)
-            if not rawget(activeLocale, key) then
-                rawset(activeLocale, key, value == true and key or value)
-            end
-        end,
-        __index = failsafe
-    })
-
-    local metawrite = setmetatable({}, {
-        __newindex = function(self, key, value)
-            rawset(activeLocale, key, value == true and key or value)
-        end,
-        __index = failsafe
-    })
-
-    local Localization = setmetatable({}, metaread);
-
-    function LibLocale:SetLocaleData(locale, isDefault)
-        local gameLocale = GetLocale()
-        if gameLocale == "enGB" then gameLocale = "enUS" end
-
-        activeLocale = Localization
-
-        if isDefault then
-            return defaultwrite
-        elseif(locale == GAME_LOCALE or locale == gameLocale) then
-            return metawrite
-        end
-    end
-
-    function LibLocale:GetLocaleData()
-        return Localization
-    end
-
-    setmetatable(LibLocale, { __call = LibLocale.GetLocaleData })
-end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua
new file mode 100644
index 0000000..0c8e0b3
--- /dev/null
+++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua
@@ -0,0 +1,1156 @@
+--[[
+  /$$$$$$  /$$   /$$ /$$$$$$$  /$$$$$$$$ /$$$$$$$
+ /$$__  $$| $$  | $$| $$__  $$| $$_____/| $$__  $$
+| $$  \__/| $$  | $$| $$  \ $$| $$      | $$  \ $$
+|  $$$$$$ | $$  | $$| $$$$$$$/| $$$$$   | $$$$$$$/
+ \____  $$| $$  | $$| $$____/ | $$__/   | $$__  $$
+ /$$  \ $$| $$  | $$| $$      | $$      | $$  \ $$
+|  $$$$$$/|  $$$$$$/| $$      | $$$$$$$$| $$  | $$
+ \______/  \______/ |__/      |________/|__/  |__/
+ /$$    /$$ /$$$$$$ /$$       /$$        /$$$$$$  /$$$$$$ /$$   /$$
+| $$   | $$|_  $$_/| $$      | $$       /$$__  $$|_  $$_/| $$$ | $$
+| $$   | $$  | $$  | $$      | $$      | $$  \ $$  | $$  | $$$$| $$
+|  $$ / $$/  | $$  | $$      | $$      | $$$$$$$$  | $$  | $$ $$ $$
+ \  $$ $$/   | $$  | $$      | $$      | $$__  $$  | $$  | $$  $$$$
+  \  $$$/    | $$  | $$      | $$      | $$  | $$  | $$  | $$\  $$$
+   \  $/    /$$$$$$| $$$$$$$$| $$$$$$$$| $$  | $$ /$$$$$$| $$ \  $$
+    \_/    |______/|________/|________/|__/  |__/|______/|__/  \__/
+
+
+LibSuperVillain is a library used to manage localization, packages, scripts and data embedded
+into the SVUI core addon.
+
+It's main purpose is to keep all methods and logic needed to properly keep
+core add-ins functioning outside of the core object.
+--]]
+
+--[[ LOCALIZED GLOBALS ]]--
+
+--LUA
+local unpack        = unpack;
+local select        = select;
+local pairs         = pairs;
+local type          = type;
+local rawset        = rawset;
+local rawget        = rawget;
+local tostring      = tostring;
+local error         = error;
+local next          = next;
+local pcall         = pcall;
+local getmetatable  = getmetatable;
+local setmetatable  = setmetatable;
+--STRING
+local string        = string;
+local upper         = string.upper;
+local format        = string.format;
+local find          = string.find;
+local match         = string.match;
+local gsub          = string.gsub;
+--MATH
+local math          = math;
+local floor         = math.floor
+--TABLE
+local table         = table;
+local twipe         = table.wipe;
+local tsort         = table.sort;
+local tconcat       = table.concat;
+--BLIZZARD
+local _G            = _G;
+local tinsert       = _G.tinsert;
+local tremove       = _G.tremove;
+
+--[[ MUNGLUNCH's FASTER ASSERT FUNCTION ]]--
+
+function enforce(condition, ...)
+	 if not condition then
+			if next({...}) then
+				 local fn = function (...) return(format(...)) end
+				 local s,r = pcall(fn, ...)
+				 if s then
+						error("Error!: " .. r, 2)
+				 end
+			end
+			error("Error!", 2)
+	 end
+end
+
+--[[ LIB CONSTRUCT ]]--
+
+enforce(LibStub, "LibSuperVillain-1.0 requires LibStub")
+
+local lib = LibStub:NewLibrary("LibSuperVillain-1.0", 1)
+
+if not lib then return end
+
+--[[ ADDON DATA ]]--
+
+local AddonName, AddonCore 	= ...
+local AddonVersion 					= GetAddOnMetadata(..., "Version");
+local SchemaFromMeta 				= "X-" .. AddonName .. "-Schema";
+local HeaderFromMeta 				= "X-" .. AddonName .. "-Header";
+local InterfaceVersion 			= select(4, GetBuildInfo());
+local GLOBAL_FILE 					= AddonName.."_Global";
+local PROFILE_FILE 					= AddonName.."_Profile";
+local CACHE_FILE  					= AddonName.."_Cache";
+local BACKUP_DATA 					= {};
+local SOURCE_KEY 						= 1;
+
+--[[ COMMON LOCAL VARS ]]--
+
+local playerClass = select(2,UnitClass("player"));
+
+local INFO_FORMAT = "|cffFFFF00%s|r\n        |cff33FF00Version: %s|r |cff0099FFby %s|r";
+
+if GetLocale() == "ruRU" then
+		INFO_FORMAT = "|cffFFFF00%s|r\n        |cff33FF00Версия: %s|r |cff0099FFот %s|r";
+end
+
+--[[ LIB EVENT LISTENER ]]--
+
+lib.EventManager = CreateFrame("Frame", nil)
+
+--[[ COMMON META METHODS ]]--
+
+local rootstring = function(self) return self.___addonName end
+
+--[[ CUSTOM LUA METHODS ]]--
+
+--LOCAL HELPERS
+local function formatValueString(text)
+		if "string" == type(text) then
+				text = gsub(text,"\n","\\n")
+				if match(gsub(text,"[^'\"]",""),'^"+$') then
+						return "'"..text.."'";
+				else
+						return '"'..gsub(text,'"','\\"')..'"';
+				end
+		else
+				return tostring(text);
+		end
+end
+
+local function formatKeyString(text)
+		if "string"==type(text) and match(text,"^[_%a][_%a%d]*$") then
+				return text;
+		else
+				return "["..formatValueString(text).."]";
+		end
+end
+
+--APPENDED METHODS
+function table.dump(targetTable)
+		local dumpTable = {};
+		local dumpCheck = {};
+		for key,value in ipairs(targetTable) do
+				tinsert(dumpTable, formatValueString(value));
+				dumpCheck[key] = true;
+		end
+		for key,value in pairs(targetTable) do
+				if not dumpCheck[key] then
+						tinsert(dumpTable, "\n    "..formatKeyString(key).." = "..formatValueString(value));
+				end
+		end
+		local output = tconcat(dumpTable, ", ");
+		return "{ "..output.." }";
+end
+
+function math.parsefloat(value,decimal)
+		if decimal and decimal > 0 then
+				local calc1 = 10 ^ decimal;
+				local calc2 = (value * calc1) + 0.5;
+				return floor(calc2) / calc1
+		end
+		return floor(value + 0.5)
+end
+
+function table.copy(targetTable,deepCopy,mergeTable)
+		mergeTable = mergeTable or {};
+		if targetTable==nil then return nil end
+		if mergeTable[targetTable] then return mergeTable[targetTable] end
+		local replacementTable = {}
+		for key,value in pairs(targetTable)do
+				if deepCopy and type(value) == "table" then
+						replacementTable[key] = table.copy(value, deepCopy, mergeTable)
+				else
+						replacementTable[key] = value
+				end
+		end
+		setmetatable(replacementTable, table.copy(getmetatable(targetTable), deepCopy, mergeTable))
+		mergeTable[targetTable] = replacementTable;
+		return replacementTable
+end
+
+function string.trim(this)
+		return find(this, '^%s*$') and '' or match(this, '^%s*(.*%S)')
+end
+
+function string.color(this, color)
+		return format("|cff%s%s|r", color, this)
+end
+
+function string.link(this, prefix, text, color)
+		text = tostring(text)
+		local colorstring = tostring(this):color(color or "ffffff")
+		return format("|H%s:%s|h%s|h", prefix, text, colorstring)
+end
+
+function string.explode(str, delim)
+	 local res = { }
+	 local pattern = format("([^%s]+)%s()", delim, delim)
+	 while (true) do
+			line, pos = match(str, pattern, pos)
+			if line == nil then break end
+			tinsert(res, line)
+	 end
+	 return res
+end
+
+--[[
+ /$$       /$$                               /$$            /$$
+| $$      |__/                              |__/           | $$
+| $$       /$$ /$$$$$$$   /$$$$$$  /$$   /$$ /$$  /$$$$$$$/$$$$$$
+| $$      | $$| $$__  $$ /$$__  $$| $$  | $$| $$ /$$_____/_  $$_/
+| $$      | $$| $$  \ $$| $$  \ $$| $$  | $$| $$|  $$$$$$  | $$
+| $$      | $$| $$  | $$| $$  | $$| $$  | $$| $$ \____  $$ | $$ /$$
+| $$$$$$$$| $$| $$  | $$|  $$$$$$$|  $$$$$$/| $$ /$$$$$$$/ |  $$$$/
+|________/|__/|__/  |__/ \____  $$ \______/ |__/|_______/   \___/
+												 /$$  \ $$
+												|  $$$$$$/
+												 \______/
+
+Linguist is a simple localization component. Seriously, thats it!
+--]]
+
+--LINGUIST HELPERS
+local activeLocale
+
+local failsafe = function() enforce(false) end
+
+--LINGUIST META METHODS
+local metaread = {
+		__index = function(self, key)
+				rawset(self, key, key)
+				return key
+		end
+}
+
+local defaultwrite = setmetatable({}, {
+		__newindex = function(self, key, value)
+				if not rawget(activeLocale, key) then
+						rawset(activeLocale, key, value == true and key or value)
+				end
+		end,
+		__index = failsafe
+})
+
+local metawrite = setmetatable({}, {
+		__newindex = function(self, key, value)
+				rawset(activeLocale, key, value == true and key or value)
+		end,
+		__index = failsafe
+})
+
+--LINGUIST STORAGE
+lib.Localization = setmetatable({}, metaread);
+
+--LINGUIST PUBLIC METHOD
+function lib:Lang(locale, isDefault)
+		if(not locale) then
+				return self.Localization
+		else
+				local gameLocale = GetLocale()
+				if gameLocale == "enGB" then gameLocale = "enUS" end
+
+				activeLocale = self.Localization
+
+				if isDefault then
+						return defaultwrite
+				elseif(locale == GAME_LOCALE or locale == gameLocale) then
+						return metawrite
+				end
+		end
+end
+
+--[[
+ /$$$$$$$             /$$              /$$
+| $$__  $$           | $$             | $$
+| $$  \ $$ /$$$$$$  /$$$$$$   /$$$$$$ | $$$$$$$  /$$$$$$   /$$$$$$$  /$$$$$$
+| $$  | $$|____  $$|_  $$_/  |____  $$| $$__  $$|____  $$ /$$_____/ /$$__  $$
+| $$  | $$ /$$$$$$$  | $$     /$$$$$$$| $$  \ $$ /$$$$$$$|  $$$$$$ | $$$$$$$$
+| $$  | $$/$$__  $$  | $$ /$$/$$__  $$| $$  | $$/$$__  $$ \____  $$| $$_____/
+| $$$$$$$/  $$$$$$$  |  $$$$/  $$$$$$$| $$$$$$$/  $$$$$$$ /$$$$$$$/|  $$$$$$$
+|_______/ \_______/   \___/  \_______/|_______/ \_______/|_______/  \_______/
+
+
+DataBase is a component used to create and manage SVUI data objects.
+
+It's main purpose is to keep all methods and logic needed to properly maintain
+valid data outside of the core object.
+--]]
+
+--DATABASE STORAGE
+lib.configdata   = {};
+
+local IndexExceptions = {};
+
+--DATABASE LOCAL HELPERS
+local function tablecopy(d, s)
+		if(type(s) ~= "table") then return end
+		if type(d) == "table" then
+				for k, v in pairs(s) do
+						if type(v) == "table" then
+								if not rawget(d, k) then rawset(d, k, {}) end
+								tablecopy(d[k], v)
+						else
+								if rawget(d, k) == nil then
+										rawset(d, k, v)
+								end
+						end
+				end
+		end
+end
+
+local function tablesplice(targetTable, mergeTable)
+		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
+				end
+		end
+		return targetTable
+end
+
+local function importdata(s, d)
+		if type(d) ~= "table" then d = {} end
+		if type(s) == "table" then
+				for k,v in pairs(s) do
+						if type(v) == "table" then
+								v = importdata(v, d[k])
+						end
+						d[k] = v
+				end
+		end
+		return d
+end
+
+local function removedefaults(db, src, nometa)
+		if(type(src) ~= "table") then
+				if(db == src) then db = nil end
+				return
+		end
+		if(not nometa) then
+				setmetatable(db, nil)
+		end
+		for k,v in pairs(src) do
+				if type(v) == "table" and type(db[k]) == "table" then
+						removedefaults(db[k], v, nometa)
+						if next(db[k]) == nil then
+								db[k] = nil
+						end
+				else
+						if db[k] == v then
+								db[k] = nil
+						end
+				end
+		end
+end
+
+local function setDefault(t, sub, sub2)
+		local data = t.db
+		local sv = rawget(data, "data")
+		local src = rawget(data, "defaults")
+		local savedProfile
+		if(sub2 and sv and sv[sub]) then
+				savedProfile = sv[sub][sub2]
+		elseif(sub and sv) then
+				savedProfile = sv[sub]
+		else
+				savedProfile = sv
+		end
+		if(savedProfile) then
+				for k,v in pairs(savedProfile) do
+						savedProfile[k] = nil
+				end
+		else
+				sv = {}
+		end
+		tablecopy(sv, src)
+end
+
+--DATABASE META METHODS
+local meta_database = {
+	__index = function(t, k)
+		if(not k or k == "") then return end
+		local sv = rawget(t, "data")
+		local dv = rawget(t, "defaults")
+		local src = dv and dv[k]
+
+		--print(k .. " - " .. tostring(src))
+
+		if(sv[k] == nil) then sv[k] = {} end
+
+		if(src) then
+				tablecopy(sv[k], src)
+		end
+
+		rawset(t, k, sv[k])
+		return rawget(t, k)
+	end,
+}
+
+--DATABASE PUBLIC METHODS
+function lib:Remove(key)
+		if(_G[GLOBAL_FILE].profiles[key]) then _G[GLOBAL_FILE].profiles[key] = nil end
+		twipe(_G[GLOBAL_FILE].profileKeys)
+		for k,v in pairs(_G[GLOBAL_FILE].profiles) do
+				_G[GLOBAL_FILE].profileKeys[k] = k
+		end
+		collectgarbage("collect")
+end
+
+function lib:GetProfiles()
+		local list = _G[GLOBAL_FILE].profileKeys or {}
+		return list
+end
+
+function lib:CheckProfiles()
+		local hasProfile = false
+		local list = _G[GLOBAL_FILE].profileKeys or {}
+		for key,_ in pairs(list) do
+				hasProfile = true
+		end
+		return hasProfile
+end
+
+function lib:ImportDatabase(key)
+		if(not _G[GLOBAL_FILE].profiles[key]) then _G[GLOBAL_FILE].profiles[key] = {} end;
+		local import = _G[GLOBAL_FILE].profiles[key];
+		local saved = self.configdata;
+
+		import.importTest = true; --Testing value, will be removed next time the UI is reloaded
+		tablecopy(saved, import);
+
+		--Ensure that import was successful
+		if(not saved.importTest) then
+			--If no test value found, might need reloading
+			--Not the most clever thing in the world but....
+			ReloadUI()
+		end
+end
+
+function lib:ExportDatabase(key)
+		if(not _G[GLOBAL_FILE].profiles[key]) then _G[GLOBAL_FILE].profiles[key] = {} end;
+		local export = self.configdata;
+		local saved = _G[GLOBAL_FILE].profiles[key];
+		tablecopy(saved, export);
+
+		twipe(_G[GLOBAL_FILE].profileKeys)
+		for k,v in pairs(_G[GLOBAL_FILE].profiles) do
+				_G[GLOBAL_FILE].profileKeys[k] = k
+		end
+end
+
+function lib:WipeDatabase()
+		for schema, _ in pairs(self.configdata) do
+				local obj = AddonCore[schema]
+				if(obj and obj.db) then
+						local data = obj.db
+						local sv = rawget(data, "data")
+						for k,v in pairs(sv) do
+								sv[k] = nil
+						end
+				end
+		end
+end
+
+function lib:UpdateDatabase(event)
+		if event == "PLAYER_LOGOUT" then
+				local sv = self.configdata
+				local src = BACKUP_DATA
+				for k,v in pairs(sv) do
+						if(not IndexExceptions[k] and src[k] ~= nil) then
+								removedefaults(sv[k], src[k])
+						end
+				end
+		elseif(event == "ACTIVE_TALENT_GROUP_CHANGED") then
+				if(_G[PROFILE_FILE].SAFEDATA and _G[PROFILE_FILE].SAFEDATA.dualSpecEnabled) then
+						SOURCE_KEY = GetSpecialization() or 1
+						self.EventManager:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
+				else
+						SOURCE_KEY = 1
+						self.EventManager:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
+				end
+
+				twipe(self.configdata)
+
+				self.configdata      			= setmetatable({}, meta_database)
+				self.configdata.data 			= _G[PROFILE_FILE].STORED[SOURCE_KEY]
+				self.configdata.defaults 	= BACKUP_DATA
+		end
+end
+
+function lib:GetSourceData(schema)
+		return _G[PROFILE_FILE].STORED[SOURCE_KEY][schema]
+end
+
+function lib:SetSourceData(schema, key, value)
+		_G[PROFILE_FILE].STORED[SOURCE_KEY][schema][key] = value
+end
+
+function lib:GetSafeData(index)
+		return _G[PROFILE_FILE].SAFEDATA[index]
+end
+
+function lib:SaveSafeData(index, value)
+		_G[PROFILE_FILE].SAFEDATA[index] = value
+		if(index == "dualSpecEnabled") then
+				if(value) then
+						self.EventManager:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
+						self:UpdateDatabase()
+				else
+						self.EventManager:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
+				end
+		end
+end
+
+function lib:CheckData(schema, key)
+		local file = _G[PROFILE_FILE].STORED[SOURCE_KEY][schema]
+		print("______" .. schema .. ".db[" .. key .. "]_____")
+		print(file[key])
+		print("______SAVED_____")
+end
+
+function lib:NewDatabase(obj)
+		local schema = obj.___schema
+		BACKUP_DATA[schema] = BACKUP_DATA[schema] or {}
+
+		if obj.db then
+				tablecopy(BACKUP_DATA[schema], obj.db)
+				twipe(obj.db)
+		end
+
+		if(not _G[PROFILE_FILE].STORED[SOURCE_KEY][schema]) then
+				_G[PROFILE_FILE].STORED[SOURCE_KEY][schema] = {}
+				tablecopy(_G[PROFILE_FILE].STORED[SOURCE_KEY][schema], BACKUP_DATA[schema])
+		end
+
+		obj.db = self.configdata[schema]
+		obj.ResetData = setDefault
+end
+
+function lib:NewCache(obj, schema)
+		schema = schema or AddonCore.___schema
+
+		if(not _G[CACHE_FILE][schema]) then
+				_G[CACHE_FILE][schema] = {}
+				if obj.cache then
+						tablecopy(_G[CACHE_FILE][schema], obj.cache)
+						twipe(obj.cache)
+				end
+		end
+
+		obj.cache = _G[CACHE_FILE][schema]
+end
+
+--[[
+ /$$$$$$$                      /$$            /$$
+| $$__  $$                    |__/           | $$
+| $$  \ $$  /$$$$$$   /$$$$$$  /$$  /$$$$$$$/$$$$$$    /$$$$$$  /$$   /$$
+| $$$$$$$/ /$$__  $$ /$$__  $$| $$ /$$_____/_  $$_/   /$$__  $$| $$  | $$
+| $$__  $$| $$$$$$$$| $$  \ $$| $$|  $$$$$$  | $$    | $$  \__/| $$  | $$
+| $$  \ $$| $$_____/| $$  | $$| $$ \____  $$ | $$ /$$| $$      | $$  | $$
+| $$  | $$|  $$$$$$$|  $$$$$$$| $$ /$$$$$$$/ |  $$$$/| $$      |  $$$$$$$
+|__/  |__/ \_______/ \____  $$|__/|_______/   \___/  |__/       \____  $$
+										 /$$  \ $$                                  /$$  | $$
+										|  $$$$$$/                                 |  $$$$$$/
+										 \______/                                   \______/
+
+Registry is a component used to manage packages and scripts embedded
+into the SVUI core addon.
+
+It's main purpose is to keep all methods and logic needed to properly keep
+core add-ins functioning outside of the core object.
+--]]
+
+--REGISTRY LOCAL STORAGE
+local PluginString = ""
+local PluginList, Modules, LoadOnDemand, Callbacks, ModuleQueue, ScriptQueue, AllowedIndexes = {},{},{},{},{},{},{};
+
+--REGISTRY LOCAL HELPERS
+local changeDBVar = function(self, value, key, sub1, sub2, sub3)
+		if((sub1 and sub2 and sub3) and (self.db[sub1] and self.db[sub1][sub2] and self.db[sub1][sub2][sub3])) then
+				self.db[sub1][sub2][sub3][key] = value
+		elseif((sub1 and sub2) and (self.db[sub1] and self.db[sub1][sub2])) then
+				self.db[sub1][sub2][key] = value
+		elseif(sub1 and self.db[sub1]) then
+				self.db[sub1][key] = value
+		else
+				self.db[key] = value
+		end
+
+		if(self.UpdateLocals) then
+				self:UpdateLocals()
+		end
+end
+
+local innerOnEvent = function(self, event, ...)
+		local obj = self.module
+		if self[event] and type(self[event]) == "function" then
+				self[event](obj, event, ...)
+		end
+end
+
+local registerEvent = function(self, eventname, eventfunc)
+		if not self.___eventframe then
+				self.___eventframe = CreateFrame("Frame", nil)
+				self.___eventframe.module = self
+				self.___eventframe:SetScript("OnEvent", innerOnEvent)
+		end
+
+		if(not self.___eventframe[eventname]) then
+				local fn = eventfunc
+				if type(eventfunc) == "string" then
+						fn = self[eventfunc]
+				elseif(not fn and self[eventname]) then
+						fn = self[eventname]
+				end
+				self.___eventframe[eventname] = fn
+		end
+
+		self.___eventframe:RegisterEvent(eventname)
+end
+
+local unregisterEvent = function(self, event, ...)
+		if(self.___eventframe) then
+				self.___eventframe:UnregisterEvent(event)
+		end
+end
+
+local innerOnUpdate = function(self, elapsed)
+		if self.elapsed and self.elapsed > (self.throttle) then
+				local obj = self.module
+				local callbacks = self.callbacks
+
+				for name, fn in pairs(callbacks) do
+						local _, error = pcall(fn, obj)
+						if(error and AddonCore.Debugging) then
+								print(error)
+						end
+				end
+
+				self.elapsed = 0
+		else
+				self.elapsed = (self.elapsed or 0) + elapsed
+		end
+end
+
+local registerUpdate = function(self, updatefunc, throttle)
+		if not self.___updateframe then
+				self.___updateframe = CreateFrame("Frame", nil);
+				self.___updateframe.module = self;
+				self.___updateframe.callbacks = {};
+				self.___updateframe.elapsed = 0;
+				self.___updateframe.throttle = throttle or 0.2;
+		end
+
+		if(updatefunc and type(updatefunc) == "string" and self[updatefunc]) then
+				self.___updateframe.callbacks[updatefunc] = self[updatefunc]
+		end
+
+		self.___updateframe:SetScript("OnUpdate", innerOnUpdate)
+end
+
+local unregisterUpdate = function(self, updatefunc)
+		if(updatefunc and type(updatefunc) == "string" and self.___updateframe.callbacks[updatefunc]) then
+				self.___updateframe.callbacks[updatefunc] = nil
+				if(#self.___updateframe.callbacks == 0) then
+						self.___updateframe:SetScript("OnUpdate", nil)
+				end
+		else
+				self.___updateframe:SetScript("OnUpdate", nil)
+		end
+end
+
+local appendOptions = function(self, index, data)
+		local addonName = self.___addonName
+		local schema = self.___schema
+		local header = GetAddOnMetadata(addonName, HeaderFromMeta)
+
+		AddonCore.Options.args.plugins.args.pluginOptions.args[schema].args[index] = data
+end
+
+local function LoadMods()
+		if ModuleQueue then
+				for i=1,#ModuleQueue do
+						local schema = ModuleQueue[i]
+						local obj = AddonCore[schema]
+						if obj and not obj.initialized then
+								obj.initialized = true;
+								local halt = false
+								lib:NewDatabase(obj)
+								if(obj.db.incompatible) then
+										for addon,_ in pairs(obj.db.incompatible) do
+												if IsAddOnLoaded(addon) then halt = true end
+										end
+								end
+								if obj.Load then
+										if(not halt) then
+												obj:Load()
+												obj.Load = nil
+										end
+								end
+						end
+				end
+
+				twipe(ModuleQueue)
+		end
+end
+
+local function SetPluginString(addonName)
+		local author = GetAddOnMetadata(addonName, "Author") or "Unknown"
+		local name = GetAddOnMetadata(addonName, "Title") or addonName
+		local version = GetAddOnMetadata(addonName, "Version") or "???"
+		return INFO_FORMAT:format(name, version, author)
+end
+
+local function SetInternalModule(obj, schema)
+		local addonmeta = {}
+		local oldmeta = getmetatable(obj)
+		if oldmeta then
+				for k, v in pairs(oldmeta) do addonmeta[k] = v end
+		end
+		addonmeta.__tostring = rootstring
+		setmetatable( obj, addonmeta )
+
+		local addonName = ("SVUI [%s]"):format(schema)
+
+		obj.___addonName = addonName
+		obj.___schema = schema
+		obj.___dbDebug = false
+
+		obj.initialized = false
+		obj.CombatLocked = false
+		obj.ChangeDBVar = changeDBVar
+		obj.RegisterEvent = registerEvent
+		obj.UnregisterEvent = unregisterEvent
+		obj.RegisterUpdate = registerUpdate
+		obj.UnregisterUpdate = unregisterUpdate
+
+		return obj
+end
+
+local function SetExternalModule(obj, schema, addonName, header, lod)
+		local addonmeta = {}
+		local oldmeta = getmetatable(obj)
+		if oldmeta then
+				for k, v in pairs(oldmeta) do addonmeta[k] = v end
+		end
+		addonmeta.__tostring = rootstring
+		setmetatable( obj, addonmeta )
+
+		obj.___addonName = addonName
+		obj.___schema = schema
+		obj.___header = header
+		obj.___lod = lod
+
+		obj.initialized = false
+		obj.CombatLocked = false
+		obj.ChangeDBVar = changeDBVar
+		obj.RegisterEvent = registerEvent
+		obj.UnregisterEvent = unregisterEvent
+		obj.RegisterUpdate = registerUpdate
+		obj.UnregisterUpdate = unregisterUpdate
+		obj.AddOption = appendOptions
+
+		if(lod) then
+				-- print("PLUGIN: " .. addonName)
+				AddonCore.Options.args.plugins.args.pluginOptions.args[schema] = {
+						type = "group",
+						name = header,
+						childGroups = "tree",
+						args = {
+								enable = {
+										order = 1,
+										type = "execute",
+										width = "full",
+										name = function()
+												local nameString = "Disable"
+												if(not IsAddOnLoaded(addonName)) then
+														nameString = "Enable"
+												end
+												return nameString
+										end,
+										func = function()
+												if(not IsAddOnLoaded(addonName)) then
+														local loaded, reason = LoadAddOn(addonName)
+														lib:SetSourceData(schema, "enable", true)
+														AddonCore:StaticPopup_Show("RL_CLIENT")
+												else
+														obj:ChangeDBVar(false, "enable")
+														AddonCore:StaticPopup_Show("RL_CLIENT")
+												end
+										end,
+								}
+						}
+				}
+		else
+				AddonCore.Options.args.plugins.args.pluginOptions.args[schema] = {
+						type = "group",
+						name = header,
+						childGroups = "tree",
+						args = {
+								enable = {
+										order = 1,
+										type = "toggle",
+										name = "Enable",
+										get = function() return obj.db.enable end,
+										set = function(key, value) obj:ChangeDBVar(value, "enable"); AddonCore:StaticPopup_Show("RL_CLIENT") end,
+								}
+						}
+				}
+		end
+
+		return obj
+end
+
+--REGISTRY PUBLIC METHODS
+function lib:NewCallback(fn)
+		if(fn and type(fn) == "function") then
+				Callbacks[#Callbacks+1] = fn
+		end
+end
+
+function lib:NewScript(fn)
+		if(fn and type(fn) == "function") then
+				ScriptQueue[#ScriptQueue+1] = fn
+		end
+end
+
+function lib:NewPackage(obj, schema, defaults)
+		if(AddonCore[schema]) then return end
+
+		ModuleQueue[#ModuleQueue+1] = schema
+		Modules[#Modules+1] = schema
+		AllowedIndexes[schema] = true
+
+		AddonCore[schema] = SetInternalModule(obj, schema)
+
+		if(AddonCore.AddonLaunched and not AddonCore[schema].initialized) then
+				--print("NewPackage - " .. schema .. ": New Database")
+				self:NewDatabase(AddonCore[schema])
+				if(AddonCore[schema].Load) then
+						AddonCore[schema]:Load()
+				end
+				AddonCore[schema].initialized = true
+		end
+end
+
+function lib:NewPlugin(obj)
+		local coreName = AddonCore.___addonName
+		local addonName = obj.___addonName
+
+		if(addonName and addonName ~= coreName) then
+				local header = GetAddOnMetadata(addonName, HeaderFromMeta)
+				local schema = GetAddOnMetadata(addonName, SchemaFromMeta)
+				local lod = IsAddOnLoadOnDemand(addonName)
+				if(not schema) then return end
+
+				ModuleQueue[#ModuleQueue+1] = schema
+				Modules[#Modules+1] = schema
+
+				local infoString = SetPluginString(addonName)
+				local oldString = PluginString
+
+				PluginList[addonName] = infoString
+				PluginString = ("%s%s\n"):format(oldString, infoString)
+
+				AddonCore[schema] = SetExternalModule(obj, schema, addonName, header, lod)
+
+				if(AddonCore.AddonLaunched and not AddonCore[schema].initialized) then
+						--print("NewPlugin - " .. schema .. ": New Database")
+						self:NewDatabase(AddonCore[schema])
+						if(AddonCore[schema].Load) then
+								AddonCore[schema]:Load()
+						end
+						AddonCore[schema].initialized = true
+				end
+		end
+end
+
+function lib:RunCallbacks()
+		for i=1, #Callbacks do
+				local fn = Callbacks[i]
+				if(fn and type(fn) == "function") then
+						fn()
+				end
+		end
+end
+
+function lib:Update(schema, dataOnly)
+		local obj = AddonCore[schema]
+		if obj and obj.ReLoad and not dataOnly then
+				obj:ReLoad()
+		end
+end
+
+function lib:UpdateAll()
+		for _,schema in pairs(Modules) do
+				local obj = AddonCore[schema]
+				if obj and obj.ReLoad then
+						obj:ReLoad()
+				end
+		end
+end
+
+function lib:NewPrototype(name)
+		local version = GetAddOnMetadata(name, "Version")
+		local schema = GetAddOnMetadata(name, SchemaFromMeta)
+
+		local obj = {
+				___addonName = name,
+				___version = version,
+				___schema = schema,
+				db = {["enable"] = false}
+		}
+
+		local mt = {}
+		local old = getmetatable(obj)
+		if old then
+				for k, v in pairs(old) do mt[k] = v end
+		end
+		mt.__tostring = rootstring
+		setmetatable(obj, mt)
+
+		AddonCore[schema] = obj
+
+		return obj
+end
+
+function lib:GetPlugins(tableList)
+		if(tableList and tableList ~= false) then
+				return PluginList
+		end
+		return PluginString
+end
+
+
+--[[ CONSTRUCTORS ]]--
+
+local function NewLoadOnDemand(addonName, schema, header)
+		LoadOnDemand[addonName] = schema;
+		IndexExceptions[schema] = true;
+		AddonCore.Options.args.plugins.args.pluginOptions.args[schema] = {
+				type = "group",
+				name = header,
+				childGroups = "tree",
+				args = {
+						enable = {
+								order = 1,
+								type = "execute",
+								width = "full",
+								name = function()
+										local nameString = "Disable"
+										if(not IsAddOnLoaded(addonName)) then
+												nameString = "Enable"
+										end
+										return nameString
+								end,
+								func = function()
+										if(not IsAddOnLoaded(addonName)) then
+												local loaded, reason = LoadAddOn(addonName)
+												AddonCore[schema].db.enable = true
+												LoadMods()
+										else
+												AddonCore[schema].db.enable = false
+												AddonCore:StaticPopup_Show("RL_CLIENT")
+										end
+								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 EVENT HANDLER
+local DataBase_OnEvent = function(self, event)
+		if(event == "PLAYER_LOGOUT" or event == "ACTIVE_TALENT_GROUP_CHANGED") then
+				lib:UpdateDatabase(event)
+		end
+end
+
+function lib:NewCore(gfile, pfile, cfile)
+		local obj = {};
+		--internals
+		AddonCore.___addonName        = AddonName;
+		AddonCore.___version          = AddonVersion;
+		AddonCore.___interface        = tonumber(InterfaceVersion);
+		AddonCore.___debugging        = false;
+		AddonCore.___schema           = GetAddOnMetadata(AddonName, SchemaFromMeta);
+		AddonCore.___header           = GetAddOnMetadata(AddonName, HeaderFromMeta);
+		--meta assurance
+		local mt = {};
+		local old = getmetatable(AddonCore);
+		if old then
+				for k, v in pairs(old) do mt[k] = v end
+		end
+		mt.__tostring = rootstring;
+		setmetatable(AddonCore, mt);
+		--database
+		GLOBAL_FILE = gfile or GLOBAL_FILE
+		PROFILE_FILE = pfile or PROFILE_FILE
+		CACHE_FILE  = cfile or CACHE_FILE
+		--events
+		if(not self.EventManager.Initialized) then
+				self.EventManager:RegisterEvent("PLAYER_LOGOUT")
+				self.EventManager:SetScript("OnEvent", DataBase_OnEvent)
+				self.EventManager.Initialized = true
+		end
+		--set global
+		_G[AddonName] = AddonCore;
+		return AddonCore
+end
+
+function lib:Initialize()
+	local coreSchema = AddonCore.___schema
+
+		--GLOBAL SAVED VARIABLES
+		if not _G[GLOBAL_FILE] then _G[GLOBAL_FILE] = {} end
+		_G[GLOBAL_FILE].profileKeys = {}
+		_G[GLOBAL_FILE].profiles = _G[GLOBAL_FILE].profiles or {}
+		for k,v in pairs(_G[GLOBAL_FILE].profiles) do
+				_G[GLOBAL_FILE].profileKeys[k] = k
+		end
+
+		--CACHE SAVED VARIABLES
+		if not _G[CACHE_FILE] then _G[CACHE_FILE] = {} end
+    _G[CACHE_FILE].anchors = _G[CACHE_FILE].anchors or {}
+
+		--PROFILE SAVED VARIABLES
+		if not _G[PROFILE_FILE] then _G[PROFILE_FILE] = {} end
+		_G[PROFILE_FILE].SAFEDATA = _G[PROFILE_FILE].SAFEDATA or {dualSpecEnabled = false}
+
+		local SOURCE_KEY = 1
+		if(_G[PROFILE_FILE].SAFEDATA and _G[PROFILE_FILE].SAFEDATA.dualSpecEnabled) then
+				SOURCE_KEY = GetSpecialization() or 1
+				self.EventManager:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
+		else
+				SOURCE_KEY = 1
+				self.EventManager:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
+		end
+
+		if(not _G[PROFILE_FILE].STORED) then
+				_G[PROFILE_FILE].STORED = {}
+				_G[PROFILE_FILE].STORED[1] = {}
+				_G[PROFILE_FILE].STORED[1][coreSchema] = {}
+				_G[PROFILE_FILE].STORED[2] = {}
+				_G[PROFILE_FILE].STORED[2][coreSchema] = {}
+				_G[PROFILE_FILE].STORED[3] = {}
+				_G[PROFILE_FILE].STORED[3][coreSchema] = {}
+				if playerClass == "DRUID" then
+						_G[PROFILE_FILE].STORED[4] = {}
+						_G[PROFILE_FILE].STORED[4][coreSchema] = {}
+				end
+
+				--Attempt to copy any prior variables, even outdated
+				if(_G[PROFILE_FILE].system or (ModuleQueue[1] and _G[PROFILE_FILE][ModuleQueue[1]])) then
+						for k,v in pairs(_G[PROFILE_FILE]) do
+								if(k == "system") then
+										tablecopy(v, _G[PROFILE_FILE].STORED[1][coreSchema])
+								elseif(k == "media" or k == "filter") then
+										_G[PROFILE_FILE].STORED[1][coreSchema][k] = v
+								elseif(AllowedIndexes[k]) then
+										_G[PROFILE_FILE].STORED[1][k] = v
+								end
+						end
+				end
+		else
+				_G[PROFILE_FILE].STORED[1] = _G[PROFILE_FILE].STORED[1] or {}
+				_G[PROFILE_FILE].STORED[1][coreSchema] = _G[PROFILE_FILE].STORED[1][coreSchema] or {}
+				SanitizeStorage(_G[PROFILE_FILE].STORED[1])
+
+				_G[PROFILE_FILE].STORED[2] = _G[PROFILE_FILE].STORED[2] or {}
+				_G[PROFILE_FILE].STORED[2][coreSchema] = _G[PROFILE_FILE].STORED[2][coreSchema] or {}
+				SanitizeStorage(_G[PROFILE_FILE].STORED[2])
+
+				_G[PROFILE_FILE].STORED[3] = _G[PROFILE_FILE].STORED[3] or {}
+				_G[PROFILE_FILE].STORED[3][coreSchema] = _G[PROFILE_FILE].STORED[3][coreSchema] or {}
+				SanitizeStorage(_G[PROFILE_FILE].STORED[3])
+
+				if playerClass == "DRUID" then
+						_G[PROFILE_FILE].STORED[4] = _G[PROFILE_FILE].STORED[4] or {}
+						_G[PROFILE_FILE].STORED[4][coreSchema] = _G[PROFILE_FILE].STORED[4][coreSchema] or {}
+						SanitizeStorage(_G[PROFILE_FILE].STORED[4])
+				elseif _G[PROFILE_FILE].STORED[4] then
+						_G[PROFILE_FILE].STORED[4] = nil
+				end
+
+		end
+
+		for k,v in pairs(_G[PROFILE_FILE]) do
+				if(k ~= "STORED" and k ~= "SAFEDATA") then
+						_G[PROFILE_FILE][k] = nil
+				end
+		end
+
+		--construct prime configdata
+		twipe(self.configdata)
+
+		self.configdata      			= setmetatable({}, meta_database)
+		self.configdata.data 			= _G[PROFILE_FILE].STORED[SOURCE_KEY]
+		self.configdata.defaults 	= BACKUP_DATA
+
+		--set core storage
+		self:NewDatabase(AddonCore)
+
+		--check for LOD plugins
+		local addonCount = GetNumAddOns()
+
+		for i = 1, addonCount do
+				local addonName, _, _, _, _, reason = GetAddOnInfo(i)
+				local lod = IsAddOnLoadOnDemand(i)
+				local header = GetAddOnMetadata(i, HeaderFromMeta)
+				local schema = GetAddOnMetadata(i, SchemaFromMeta)
+
+				if(lod and schema) then
+						NewLoadOnDemand(addonName, schema, header)
+				end
+		end
+end
+
+function lib:Launch()
+		if LoadOnDemand then
+				for name,schema in pairs(LoadOnDemand) do
+						local db = self:GetSourceData(schema)
+						if(db and (db.enable or db.enable ~= false)) then
+								if(not IsAddOnLoaded(name)) then
+										local loaded, reason = LoadAddOn(name)
+								end
+								EnableAddOn(name)
+						end
+				end
+		end
+
+		LoadMods()
+
+		if ScriptQueue then
+				for i=1, #ScriptQueue do
+						local fn = ScriptQueue[i]
+						if(fn and type(fn) == "function") then
+								fn()
+						end
+				end
+
+				ScriptQueue = nil
+		end
+end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/database.lua b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/database.lua
new file mode 100644
index 0000000..a77d5ff
--- /dev/null
+++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/database.lua
@@ -0,0 +1,356 @@
+--[[
+ /$$$$$$$             /$$              /$$
+| $$__  $$           | $$             | $$
+| $$  \ $$ /$$$$$$  /$$$$$$   /$$$$$$ | $$$$$$$  /$$$$$$   /$$$$$$$  /$$$$$$
+| $$  | $$|____  $$|_  $$_/  |____  $$| $$__  $$|____  $$ /$$_____/ /$$__  $$
+| $$  | $$ /$$$$$$$  | $$     /$$$$$$$| $$  \ $$ /$$$$$$$|  $$$$$$ | $$$$$$$$
+| $$  | $$/$$__  $$  | $$ /$$/$$__  $$| $$  | $$/$$__  $$ \____  $$| $$_____/
+| $$$$$$$/  $$$$$$$  |  $$$$/  $$$$$$$| $$$$$$$/  $$$$$$$ /$$$$$$$/|  $$$$$$$
+|_______/ \_______/   \___/  \_______/|_______/ \_______/|_______/  \_______/
+
+
+DataBase is a component used to create and manage SVUI data objects.
+
+It's main purpose is to keep all methods and logic needed to properly maintain
+valid data outside of the core object.
+--]]
+
+--LIB DB STORAGE
+lib.ref         = {};
+lib.globals     = {};
+lib.source      = {};
+lib.cache       = {};
+lib.defaults    = {};
+lib.dataset     = {};
+
+--LOCAL HELPERS
+local function tablecopy(d, s)
+    if(type(s) ~= "table") then return end
+    if type(d) == "table" then
+        for k, v in pairs(s) do
+            if type(v) == "table" then
+                if not rawget(d, k) then rawset(d, k, {}) end
+                tablecopy(d[k], v)
+            else
+                if rawget(d, k) == nil then
+                    rawset(d, k, v)
+                end
+            end
+        end
+    end
+end
+
+local function tablesplice(targetTable, mergeTable)
+    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
+        end
+    end
+    return targetTable
+end
+
+local function importdata(s, d)
+    if type(d) ~= "table" then d = {} end
+    if type(s) == "table" then
+        for k,v in pairs(s) do
+            if type(v) == "table" then
+                v = importdata(v, d[k])
+            end
+            d[k] = v
+        end
+    end
+    return d
+end
+
+local function removedefaults(db, src, nometa)
+    if(type(src) ~= "table") then
+        if(db == src) then db = nil end
+        return
+    end
+    if(not nometa) then
+        setmetatable(db, nil)
+    end
+    for k,v in pairs(src) do
+        if type(v) == "table" and type(db[k]) == "table" then
+            removedefaults(db[k], v, nometa)
+            if next(db[k]) == nil then
+                db[k] = nil
+            end
+        else
+            if db[k] == v then
+                db[k] = nil
+            end
+        end
+    end
+end
+
+local function setDefault(t, sub, sub2)
+    local data = t.db
+    local sv = rawget(data, "data")
+    local src = lib.defaults
+    local savedProfile
+    if(sub2 and sv and sv[sub]) then
+        savedProfile = sv[sub][sub2]
+    elseif(sub and sv) then
+        savedProfile = sv[sub]
+    else
+        savedProfile = sv
+    end
+    if(savedProfile) then
+        for k,v in pairs(savedProfile) do
+            savedProfile[k] = nil
+        end
+    else
+        sv = {}
+    end
+    tablecopy(sv, src)
+end
+
+local meta_database = {
+    __index = function(t, k)
+        if(not k or k == "") then return end
+        local sv = rawget(t, "data")
+        local dv = lib.defaults
+        local src = dv and dv[k]
+
+        --print(k .. " - " .. tostring(src))
+
+        if(sv[k] == nil) then sv[k] = {} end
+
+        if(src) then
+            tablecopy(sv[k], src)
+        end
+
+        rawset(t, k, sv[k])
+        return rawget(t, k)
+    end,
+}
+
+function lib:SetDatabaseObject()
+    local sourceKey  = self.ref.key;
+
+    twipe(self.dataset)
+
+    self.dataset      = setmetatable({}, meta_database)
+    self.dataset.data = self.source.STORED[sourceKey]
+end
+
+function lib:Remove(key)
+    if(self.globals.profiles[key]) then self.globals.profiles[key] = nil end
+    if(self.globals.profileKeys[key]) then self.globals.profileKeys[key] = nil end
+    collectgarbage("collect")
+end
+
+function lib:GetProfiles()
+    return self.globals.profileKeys or {}
+end
+
+function lib:CheckProfiles()
+    local hasProfile = false
+    local list = self.globals.profileKeys or {}
+    for key,_ in pairs(list) do
+        hasProfile = true
+    end
+    return hasProfile
+end
+
+function lib:ImportDatabase(key)
+    local reference = self.ref.active;
+    local sourceKey = self.ref.key;
+    local src = self.globals.profiles[key];
+    if(not src) then return end
+    local import = self.source.STORED[sourceKey]
+    tablecopy(import, src)
+
+    ReloadUI()
+end
+
+function lib:ExportDatabase(key)
+    local reference = self.ref.active
+    local coreAddon = _G[self.ref.addon]
+    local export = {}
+    for schema, _ in pairs(reference) do
+        local obj = coreAddon[schema]
+        if(obj and obj.db) then
+            export[schema] = {}
+            local db = obj.db
+            local data = rawget(db, "data")
+            tablecopy(export[schema], data)
+        end
+    end
+
+    if(not self.globals.profiles[key]) then self.globals.profiles[key] = {} end
+    local saved = self.globals.profiles[key]
+    tablecopy(saved, export)
+end
+
+function lib:WipeDatabase()
+    local reference = self.ref.active
+    local coreAddon = _G[self.ref.addon]
+    for schema, _ in pairs(reference) do
+        local obj = coreAddon[schema]
+        if(obj and obj.db) then
+            local data = obj.db
+            local sv = rawget(data, "data")
+            for k,v in pairs(sv) do
+                sv[k] = nil
+            end
+        end
+    end
+end
+
+function lib:SetSourceKey()
+    if(self.source.SAFEDATA and self.source.SAFEDATA.dualSpecEnabled) then
+        self.ref.key = GetSpecialization() or 1
+        databaseListener:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
+    else
+        self.ref.key = 1
+    end
+end
+
+function lib:UpdateDatabase()
+    self:SetSourceKey()
+    local reference = self.ref.active
+    local coreAddon = _G[self.ref.addon]
+    for schema, _ in pairs(reference) do
+        --self:SetDatabaseObject(coreAddon[schema])
+    end
+end
+
+function lib:SanitizeDatabase()
+    local sv = self.dataset
+    local src = self.defaults
+    for k,v in pairs(sv) do
+        if(src[k] ~= nil) then
+            removedefaults(sv[k], src[k])
+        end
+    end
+end
+
+function lib:ToggleSpecSwap(value)
+	if(value) then
+		databaseListener:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
+		self:UpdateDatabase()
+	else
+		databaseListener:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
+    end
+end
+
+function lib:PrepareStorage()
+    local globalfile = self.ref.globalfile
+    self.globals = tablesplice(_G[globalfile], self.globals)
+    self.globals.profileKeys = {}
+    local gProfiles = self.globals.profiles
+    for k,v in pairs(gProfiles) do
+        self.globals.profileKeys[k] = k
+    end
+
+    local cachefile = self.ref.cachefile
+    SVUI_Cache = tablesplice(_G[cachefile], SVUI_Cache)
+
+    local sourcesfile = self.ref.sourcesfile
+    --_G[sourcesfile] = {}
+    if not _G[sourcesfile] then _G[sourcesfile] = {} end
+
+    self.source = tablesplice(_G[sourcesfile], self.source)
+
+    for k,v in pairs(self.source) do
+        if(k ~= "STORED" and k ~= "SAFEDATA") then
+            self.source[k] = nil
+        end
+    end
+
+    self.source.SAFEDATA = self.source.SAFEDATA or {dualSpecEnabled = false}
+
+    local coreSchema = self.ref.schema
+
+    self.source.STORED = self.source.STORED or {}
+
+    self.source.STORED[1] = self.source.STORED[1] or {}
+    self.source.STORED[1][coreSchema] = self.source.STORED[1][coreSchema] or {}
+
+    for k,v in pairs(self.source.STORED[1]) do
+        if(k == "STORED" or k == "SAFEDATA" or k == "LAYOUT") then
+            self.source.STORED[1][k] = nil
+        end
+    end
+
+    self.source.STORED[2] = self.source.STORED[2] or {}
+    self.source.STORED[2][coreSchema] = self.source.STORED[2][coreSchema] or {}
+
+    self.source.STORED[3] = self.source.STORED[3] or {}
+    self.source.STORED[3][coreSchema] = self.source.STORED[3][coreSchema] or {}
+
+    if playerClass == "DRUID" then
+        self.source.STORED[4] = self.source.STORED[4] or {}
+        self.source.STORED[4][coreSchema] = self.source.STORED[4][coreSchema] or {}
+    elseif self.source.STORED[4] then
+        self.source.STORED[4] = nil
+    end
+end
+
+function lib:DefineCore(addon, gfile, pfile, cfile)
+    local coreAddon = _G[addon];
+    local schema = coreAddon.___schema;
+
+    self.ref = {
+        active = {},
+        addon = addon,
+        schema = schema,
+        key = 1,
+        globalfile = gfile,
+        sourcesfile = pfile,
+        cachefile = cfile
+    }
+
+    if(not databaseListener.Initialized) then
+        databaseListener:RegisterEvent("PLAYER_LOGOUT")
+        databaseListener:SetScript("OnEvent", DataBase_OnEvent)
+        databaseListener.Initialized = true
+    end
+end
+
+function lib:Initialize()
+    local sourceKey  = self.ref.key;
+
+    self:SetSourceKey()
+    self:PrepareStorage()
+
+    twipe(self.dataset)
+
+    self.dataset      = setmetatable({}, meta_database)
+    self.dataset.data = self.source.STORED[sourceKey]
+end
+
+function lib:NewDatabase(obj)
+    local schema = obj.___schema
+    local sourceKey = self.ref.key
+    self.ref.active[schema] = true
+    self.defaults[schema] = self.defaults[schema] or {}
+
+    if obj.db then
+        tablecopy(self.defaults[schema], obj.db)
+        twipe(obj.db)
+    end
+
+    if(not self.source.STORED[sourceKey][schema]) then
+        self.source.STORED[sourceKey][schema] = {}
+        tablecopy(self.source.STORED[sourceKey][schema], self.defaults[schema])
+    end
+
+    obj.db = self.dataset[schema]
+    obj.ResetData = setDefault
+end
+
+function lib:CheckData(schema, key)
+    local sourceKey = self.ref.key
+    local file = self.source.STORED[sourceKey][schema]
+    print("______" .. schema .. ".db[" .. key .. "]_____")
+    print(file[key])
+    print("______SAVED_____")
+end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/librarian.lua b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/librarian.lua
new file mode 100644
index 0000000..32b4f42
--- /dev/null
+++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/librarian.lua
@@ -0,0 +1,61 @@
+--[[
+ /$$       /$$ /$$                                    /$$
+| $$      |__/| $$                                   |__/
+| $$       /$$| $$$$$$$   /$$$$$$  /$$$$$$   /$$$$$$  /$$  /$$$$$$  /$$$$$$$
+| $$      | $$| $$__  $$ /$$__  $$|____  $$ /$$__  $$| $$ |____  $$| $$__  $$
+| $$      | $$| $$  \ $$| $$  \__/ /$$$$$$$| $$  \__/| $$  /$$$$$$$| $$  \ $$
+| $$      | $$| $$  | $$| $$      /$$__  $$| $$      | $$ /$$__  $$| $$  | $$
+| $$$$$$$$| $$| $$$$$$$/| $$     |  $$$$$$$| $$      | $$|  $$$$$$$| $$  | $$
+|________/|__/|_______/ |__/      \_______/|__/      |__/ \_______/|__/  |__/
+
+Librarian is a clone of LibStub, meant for use only in SVUI Libraries.
+
+It's main purpose is to keep all SVUI libraries away from the commonly used
+LibStub tables. This helps to keep custom code clean and isolated.
+
+Be aware that the meta '__call' points towards a 'Proxy' method
+instead of the 'Get' method. This is simply due to the higher demand of
+Proxy calls over lib loading.
+
+Librarian also ignores versioning since SVUI code will always be current
+within itself.
+--]]
+
+local _G 						= _G;
+local type          			= _G.type;
+local tostring      			= _G.tostring;
+local error         			= _G.error;
+local setmetatable  			= _G.setmetatable;
+
+local Librarian = _G["Librarian"]
+
+if not Librarian then
+    Librarian = Librarian or {libs = {}}
+    _G["Librarian"] = Librarian
+
+    function LibStub:NewLibrary(libName)
+        assert(type(libName) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
+        self.libs[libName] = self.libs[libName] or {}
+        return self.libs[libName]
+    end
+
+    function LibStub(libName, silent)
+        if not self.libs[libName] and not silent then
+            error(("Cannot find a library instance of %q."):format(tostring(libName)), 2)
+        end
+        return self.libs[libName]
+    end
+
+    function Librarian:Proxy(libName, ...)
+        local thisLib = self.libs[libName]
+        if(not thisLib) then
+            error(("Cannot find a library instance of %q."):format(tostring(libName)), 2)
+        elseif(thisLib and not thisLib.Proxy) then
+            error(("The library '%q' does not have a 'Proxy' method."):format(tostring(libName)), 2)
+        end
+
+        return thisLib:Proxy(...)
+    end
+
+    setmetatable(Librarian, { __call = Librarian.Proxy })
+end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/linguist.lua b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/linguist.lua
new file mode 100644
index 0000000..06a13da
--- /dev/null
+++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/linguist.lua
@@ -0,0 +1,74 @@
+--[[
+ /$$       /$$                               /$$            /$$
+| $$      |__/                              |__/           | $$
+| $$       /$$ /$$$$$$$   /$$$$$$  /$$   /$$ /$$  /$$$$$$$/$$$$$$
+| $$      | $$| $$__  $$ /$$__  $$| $$  | $$| $$ /$$_____/_  $$_/
+| $$      | $$| $$  \ $$| $$  \ $$| $$  | $$| $$|  $$$$$$  | $$
+| $$      | $$| $$  | $$| $$  | $$| $$  | $$| $$ \____  $$ | $$ /$$
+| $$$$$$$$| $$| $$  | $$|  $$$$$$$|  $$$$$$/| $$ /$$$$$$$/ |  $$$$/
+|________/|__/|__/  |__/ \____  $$ \______/ |__/|_______/   \___/
+                         /$$  \ $$
+                        |  $$$$$$/
+                         \______/
+
+Linguist is a simple localization component. Seriously, thats it!
+--]]
+enforce(LibStub, "LibSuperVillain-1.0 requires LibStub")
+
+local _G 						= _G;
+local rawset        			= _G.rawset;
+local rawget        			= _G.rawget;
+local getmetatable  			= _G.getmetatable;
+local setmetatable  			= _G.setmetatable;
+
+local lib = LibStub("LibSuperVillain-1.0", 1)
+
+if not lib then return end
+
+local rootstring = function(self) return self.___addonName end
+
+local failsafe = function() enforce(false) end
+
+local metaread = {
+    __index = function(self, key)
+        rawset(self, key, key)
+        return key
+    end
+}
+
+local activeLocale
+
+local defaultwrite = setmetatable({}, {
+    __newindex = function(self, key, value)
+        if not rawget(activeLocale, key) then
+            rawset(activeLocale, key, value == true and key or value)
+        end
+    end,
+    __index = failsafe
+})
+
+local metawrite = setmetatable({}, {
+    __newindex = function(self, key, value)
+        rawset(activeLocale, key, value == true and key or value)
+    end,
+    __index = failsafe
+})
+
+lib.Localization = setmetatable({}, metaread);
+
+function lib:Lang(locale, isDefault)
+    if(not locale) then
+        return self.Localization
+    else
+        local gameLocale = GetLocale()
+        if gameLocale == "enGB" then gameLocale = "enUS" end
+
+        activeLocale = self.Localization
+
+        if isDefault then
+            return defaultwrite
+        elseif(locale == GAME_LOCALE or locale == gameLocale) then
+            return metawrite
+        end
+    end
+end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/registry.lua b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/registry.lua
new file mode 100644
index 0000000..3ea379c
--- /dev/null
+++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/src/registry.lua
@@ -0,0 +1,527 @@
+--[[
+ /$$$$$$$                      /$$            /$$
+| $$__  $$                    |__/           | $$
+| $$  \ $$  /$$$$$$   /$$$$$$  /$$  /$$$$$$$/$$$$$$    /$$$$$$  /$$   /$$
+| $$$$$$$/ /$$__  $$ /$$__  $$| $$ /$$_____/_  $$_/   /$$__  $$| $$  | $$
+| $$__  $$| $$$$$$$$| $$  \ $$| $$|  $$$$$$  | $$    | $$  \__/| $$  | $$
+| $$  \ $$| $$_____/| $$  | $$| $$ \____  $$ | $$ /$$| $$      | $$  | $$
+| $$  | $$|  $$$$$$$|  $$$$$$$| $$ /$$$$$$$/ |  $$$$/| $$      |  $$$$$$$
+|__/  |__/ \_______/ \____  $$|__/|_______/   \___/  |__/       \____  $$
+                     /$$  \ $$                                  /$$  | $$
+                    |  $$$$$$/                                 |  $$$$$$/
+                     \______/                                   \______/
+
+LibSystemRegistry is a library used to manage packages and scripts embedded
+into the SVUI core addon.
+
+It's main purpose is to keep all methods and logic needed to properly keep
+core add-ins functioning outside of the core object.
+--]]
+
+--REGISTRY LOCAL STORAGE
+local PluginString = ""
+local PluginList, Modules, LoadOnDemand, Callbacks, ModuleQueue, ScriptQueue = {},{},{},{},{},{};
+
+--REGISTRY LOCAL HELPERS
+local changeDBVar = function(self, value, key, sub1, sub2, sub3)
+    if((sub1 and sub2 and sub3) and (self.db[sub1] and self.db[sub1][sub2] and self.db[sub1][sub2][sub3])) then
+        self.db[sub1][sub2][sub3][key] = value
+    elseif((sub1 and sub2) and (self.db[sub1] and self.db[sub1][sub2])) then
+        self.db[sub1][sub2][key] = value
+    elseif(sub1 and self.db[sub1]) then
+        self.db[sub1][key] = value
+    else
+        self.db[key] = value
+    end
+
+    if(self.UpdateLocals) then
+        self:UpdateLocals()
+    end
+end
+
+local innerOnEvent = function(self, event, ...)
+    local obj = self.module
+    if self[event] and type(self[event]) == "function" then
+        self[event](obj, event, ...)
+    end
+end
+
+local registerEvent = function(self, eventname, eventfunc)
+    if not self.___eventframe then
+        self.___eventframe = CreateFrame("Frame", nil)
+        self.___eventframe.module = self
+        self.___eventframe:SetScript("OnEvent", innerOnEvent)
+    end
+
+    if(not self.___eventframe[eventname]) then
+        local fn = eventfunc
+        if type(eventfunc) == "string" then
+            fn = self[eventfunc]
+        elseif(not fn and self[eventname]) then
+            fn = self[eventname]
+        end
+        self.___eventframe[eventname] = fn
+    end
+
+    self.___eventframe:RegisterEvent(eventname)
+end
+
+local unregisterEvent = function(self, event, ...)
+    if(self.___eventframe) then
+        self.___eventframe:UnregisterEvent(event)
+    end
+end
+
+local innerOnUpdate = function(self, elapsed)
+    if self.elapsed and self.elapsed > (self.throttle) then
+        local obj = self.module
+        local callbacks = self.callbacks
+
+        for name, fn in pairs(callbacks) do
+            local _, error = pcall(fn, obj)
+            if(error and AddonCore.Debugging) then
+                print(error)
+            end
+        end
+
+        self.elapsed = 0
+    else
+        self.elapsed = (self.elapsed or 0) + elapsed
+    end
+end
+
+local registerUpdate = function(self, updatefunc, throttle)
+    if not self.___updateframe then
+        self.___updateframe = CreateFrame("Frame", nil);
+        self.___updateframe.module = self;
+        self.___updateframe.callbacks = {};
+        self.___updateframe.elapsed = 0;
+        self.___updateframe.throttle = throttle or 0.2;
+    end
+
+    if(updatefunc and type(updatefunc) == "string" and self[updatefunc]) then
+        self.___updateframe.callbacks[updatefunc] = self[updatefunc]
+    end
+
+    self.___updateframe:SetScript("OnUpdate", innerOnUpdate)
+end
+
+local unregisterUpdate = function(self, updatefunc)
+    if(updatefunc and type(updatefunc) == "string" and self.___updateframe.callbacks[updatefunc]) then
+        self.___updateframe.callbacks[updatefunc] = nil
+        if(#self.___updateframe.callbacks == 0) then
+            self.___updateframe:SetScript("OnUpdate", nil)
+        end
+    else
+        self.___updateframe:SetScript("OnUpdate", nil)
+    end
+end
+
+local add_OptionsIndex = function(self, index, data)
+    local addonName = self.___addonName
+    local schema = self.___schema
+    local header = GetAddOnMetadata(addonName, HeaderFromMeta)
+
+    AddonCore.Options.args.plugins.args.pluginOptions.args[schema].args[index] = data
+end
+
+local function SetPluginString(addonName)
+    local author = GetAddOnMetadata(addonName, "Author") or "Unknown"
+    local name = GetAddOnMetadata(addonName, "Title") or addonName
+    local version = GetAddOnMetadata(addonName, "Version") or "???"
+    return INFO_FORMAT:format(name, version, author)
+end
+
+local function SetInternalModule(obj, schema)
+    local addonmeta = {}
+    local oldmeta = getmetatable(obj)
+    if oldmeta then
+        for k, v in pairs(oldmeta) do addonmeta[k] = v end
+    end
+    addonmeta.__tostring = rootstring
+    setmetatable( obj, addonmeta )
+
+    local addonName = ("SVUI [%s]"):format(schema)
+
+    obj.___addonName = addonName
+    obj.___schema = schema
+    obj.___dbDebug = false
+
+    obj.initialized = false
+    obj.CombatLocked = false
+    obj.ChangeDBVar = changeDBVar
+    obj.RegisterEvent = registerEvent
+    obj.UnregisterEvent = unregisterEvent
+    obj.RegisterUpdate = registerUpdate
+    obj.UnregisterUpdate = unregisterUpdate
+
+    return obj
+end
+
+local function SetExternalModule(obj, schema, addonName, header, lod)
+    local addonmeta = {}
+    local oldmeta = getmetatable(obj)
+    if oldmeta then
+        for k, v in pairs(oldmeta) do addonmeta[k] = v end
+    end
+    addonmeta.__tostring = rootstring
+    setmetatable( obj, addonmeta )
+
+    obj.___addonName = addonName
+    obj.___schema = schema
+    obj.___header = header
+    obj.___lod = lod
+
+    obj.initialized = false
+    obj.CombatLocked = false
+    obj.ChangeDBVar = changeDBVar
+    obj.RegisterEvent = registerEvent
+    obj.UnregisterEvent = unregisterEvent
+    obj.RegisterUpdate = registerUpdate
+    obj.UnregisterUpdate = unregisterUpdate
+    obj.AddOption = add_OptionsIndex
+
+    if(lod) then
+        -- print("PLUGIN: " .. addonName)
+        AddonCore.Options.args.plugins.args.pluginOptions.args[schema] = {
+            type = "group",
+            name = header,
+            childGroups = "tree",
+            args = {
+                enable = {
+                    order = 1,
+                    type = "execute",
+                    width = "full",
+                    name = function()
+                        local nameString = "Disable"
+                        if(not IsAddOnLoaded(addonName)) then
+                            nameString = "Enable"
+                        end
+                        return nameString
+                    end,
+                    func = function()
+                        if(not IsAddOnLoaded(addonName)) then
+                            local loaded, reason = LoadAddOn(addonName)
+                            obj:ChangeDBVar(true, "enable")
+                        else
+                            obj:ChangeDBVar(false, "enable")
+                            AddonCore:StaticPopup_Show("RL_CLIENT")
+                        end
+                    end,
+                }
+            }
+        }
+    else
+        AddonCore.Options.args.plugins.args.pluginOptions.args[schema] = {
+            type = "group",
+            name = header,
+            childGroups = "tree",
+            args = {
+                enable = {
+                    order = 1,
+                    type = "toggle",
+                    name = "Enable",
+                    get = function() return obj.db.enable end,
+                    set = function(key, value) obj:ChangeDBVar(value, "enable"); AddonCore:StaticPopup_Show("RL_CLIENT") end,
+                }
+            }
+        }
+    end
+
+    return obj
+end
+
+
+--REGISTRY PUBLIC METHODS
+function lib:NewCallback(fn)
+    if(fn and type(fn) == "function") then
+        Callbacks[#Callbacks+1] = fn
+    end
+end
+
+function lib:NewScript(fn)
+    if(fn and type(fn) == "function") then
+        ScriptQueue[#ScriptQueue+1] = fn
+    end
+end
+
+function lib:NewPackage(obj, schema, defaults)
+    if(AddonCore[schema]) then return end
+
+    ModuleQueue[#ModuleQueue+1] = schema
+    Modules[#Modules+1] = schema
+
+    AddonCore[schema] = SetInternalModule(obj, schema)
+
+    if(AddonCore.AddonLaunched and not AddonCore[schema].initialized) then
+        --print("NewPackage - " .. schema .. ": New Database")
+        LDB:NewDatabase(AddonCore[schema])
+        if(AddonCore[schema].Load) then
+            AddonCore[schema]:Load()
+        end
+        AddonCore[schema].initialized = true
+    end
+end
+
+function lib:NewPlugin(obj)
+    local coreName = AddonCore.___addonName
+    local addonName = obj.___addonName
+
+    if(addonName and addonName ~= coreName) then
+        local header = GetAddOnMetadata(addonName, HeaderFromMeta)
+        local schema = GetAddOnMetadata(addonName, SchemaFromMeta)
+        local lod = IsAddOnLoadOnDemand(addonName)
+        if(not schema) then return end
+
+        ModuleQueue[#ModuleQueue+1] = schema
+        Modules[#Modules+1] = schema
+
+        local infoString = SetPluginString(addonName)
+        local oldString = PluginString
+
+        PluginList[addonName] = infoString
+        PluginString = ("%s%s\n"):format(oldString, infoString)
+
+        AddonCore[schema] = SetExternalModule(obj, schema, addonName, header, lod)
+
+        if(AddonCore.AddonLaunched and not AddonCore[schema].initialized) then
+            --print("NewPlugin - " .. schema .. ": New Database")
+            LDB:NewDatabase(AddonCore[schema])
+            if(AddonCore[schema].Load) then
+                AddonCore[schema]:Load()
+            end
+            AddonCore[schema].initialized = true
+        end
+    end
+end
+
+function lib:NewAddon(addonName, schema, header)
+    LoadOnDemand[addonName] = schema;
+
+    AddonCore.Options.args.plugins.args.pluginOptions.args[schema] = {
+        type = "group",
+        name = header,
+        childGroups = "tree",
+        args = {
+            enable = {
+                order = 1,
+                type = "execute",
+                width = "full",
+                name = function()
+                    local nameString = "Disable"
+                    if(not IsAddOnLoaded(addonName)) then
+                        nameString = "Enable"
+                    end
+                    return nameString
+                end,
+                func = function()
+                    if(not IsAddOnLoaded(addonName)) then
+                        local loaded, reason = LoadAddOn(addonName)
+                        AddonCore[schema].db.enable = true
+                        self:LoadPackages()
+                    else
+                        AddonCore[schema].db.enable = false
+                        AddonCore:StaticPopup_Show("RL_CLIENT")
+                    end
+                end,
+            }
+        }
+    }
+end
+
+function lib:RunCallbacks()
+    for i=1, #Callbacks do
+        local fn = Callbacks[i]
+        if(fn and type(fn) == "function") then
+            fn()
+        end
+    end
+end
+
+function lib:Update(schema, dataOnly)
+    local obj = AddonCore[schema]
+    if obj and obj.ReLoad and not dataOnly then
+        obj:ReLoad()
+    end
+end
+
+function lib:UpdateAll()
+    for _,schema in pairs(Modules) do
+        local obj = AddonCore[schema]
+        if obj and obj.ReLoad then
+            obj:ReLoad()
+        end
+    end
+end
+
+function lib:Launch()
+    if LoadOnDemand then
+        for name,schema in pairs(LoadOnDemand) do
+            local obj = AddonCore[schema]
+            if(obj and obj.db and (obj.db.enable or obj.db.enable ~= false)) then
+                if(not IsAddOnLoaded(name)) then
+                    local loaded, reason = LoadAddOn(name)
+                end
+                EnableAddOn(name)
+            end
+        end
+    end
+
+    if ModuleQueue then
+        for i=1,#ModuleQueue do
+            local schema = ModuleQueue[i]
+            local obj = AddonCore[schema]
+            if obj and not obj.initialized then
+                obj.initialized = true;
+                local halt = false
+                --print("ModuleLoad - " .. schema .. ": New Database")
+                LDB:NewDatabase(obj)
+                if(obj.db.incompatible) then
+                    for addon,_ in pairs(obj.db.incompatible) do
+                        if IsAddOnLoaded(addon) then halt = true end
+                    end
+                end
+                if obj.Load then
+                    if(not halt) then
+                        obj:Load()
+                        obj.Load = nil
+                        --print(schema)
+                    end
+                end
+            end
+        end
+
+        twipe(ModuleQueue)
+    end
+
+    if ScriptQueue then
+        for i=1, #ScriptQueue do
+            local fn = ScriptQueue[i]
+            if(fn and type(fn) == "function") then
+                fn()
+            end
+        end
+
+        ScriptQueue = nil
+    end
+end
+
+function lib:NewPrototype(name)
+    local version = GetAddOnMetadata(name, "Version")
+    local schema = GetAddOnMetadata(name, SchemaFromMeta)
+
+    local obj = {
+        ___addonName = name,
+        ___version = version,
+        ___schema = schema,
+        db = {["enable"] = false}
+    }
+
+    local mt = {}
+    local old = getmetatable(obj)
+    if old then
+        for k, v in pairs(old) do mt[k] = v end
+    end
+    mt.__tostring = rootstring
+    setmetatable(obj, mt)
+
+    AddonCore[schema] = obj
+
+    return obj
+end
+
+function lib:GetPlugins(tableList)
+    if(tableList and tableList ~= false) then
+        return PluginList
+    end
+    return PluginString
+end
+
+function lib:Initialize()
+    --initialize database
+    LDB:Initialize()
+
+    --set core storage
+    LDB:NewDatabase(AddonCore)
+
+    local addonCount = GetNumAddOns()
+    for i = 1, addonCount do
+        local addonName, _, _, _, _, reason = GetAddOnInfo(i)
+        local lod = IsAddOnLoadOnDemand(i)
+        local header = GetAddOnMetadata(i, HeaderFromMeta)
+        local schema = GetAddOnMetadata(i, SchemaFromMeta)
+
+        if(lod and schema) then
+            self:NewAddon(addonName, schema, header)
+        end
+    end
+end
+
+--[[ CONSTRUCTORS ]]--
+
+local Core_DeadFunction = function() return end
+
+local Core_StaticPopup_Show = function(self, arg)
+    if arg == "ADDON_ACTION_FORBIDDEN" then
+        StaticPopup_Hide(arg)
+    end
+end
+
+local function _sendmessage(msg, prefix)
+    if(type(msg) == "table") then
+        msg = tostring(msg)
+    end
+
+    if(not msg) then return end
+
+    if(prefix) then
+        local outbound = ("%s %s"):format(prefix, msg);
+        print(outbound)
+    else
+        print(msg)
+    end
+end
+
+local Core_Debugger = function(self, msg)
+    if(not self.___debugging) then return end
+    local outbound = (debugPattern):format(self.___addonName, "DEBUG")
+    _sendmessage(msg, outbound)
+end
+
+local Core_AddonMessage = function(self, msg)
+    local outbound = (messagePattern):format(self.___addonName)
+    _sendmessage(msg, outbound)
+end
+
+function lib:NewCore(gfile, pfile, cfile)
+    local obj = {};
+    --internals
+    AddonCore.___addonName        = AddonName;
+    AddonCore.___version          = AddonVersion;
+    AddonCore.___interface        = tonumber(uiVersion);
+    AddonCore.___debugging        = false;
+    AddonCore.___schema           = "SVSystem";
+    --functions
+    AddonCore.fubar               = Core_DeadFunction;
+    AddonCore.AddonMessage        = Core_AddonMessage;
+    AddonCore.Debugger            = Core_Debugger;
+    AddonCore.StaticPopup_Show    = Core_StaticPopup_Show;
+    --storage
+    AddonCore.db                  = {};
+
+    local mt = {};
+    local old = getmetatable(AddonCore);
+    if old then
+        for k, v in pairs(old) do mt[k] = v end
+    end
+    mt.__tostring = rootstring;
+    setmetatable(AddonCore, mt);
+
+    --set global
+    _G[AddonName] = AddonCore;
+
+    --database settings
+    LDB:DefineCore(AddonName, gfile, pfile, cfile)
+
+    return AddonCore
+end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/libs/LibSystemRegistry-1.0/LibSystemRegistry-1.0.lua b/Interface/AddOns/SVUI/libs/LibSystemRegistry-1.0/LibSystemRegistry-1.0.lua
deleted file mode 100644
index d20005d..0000000
--- a/Interface/AddOns/SVUI/libs/LibSystemRegistry-1.0/LibSystemRegistry-1.0.lua
+++ /dev/null
@@ -1,555 +0,0 @@
-local AddonName, AddonCore = ...
-local MAJOR, MINOR = "LibSystemRegistry-1.0", 1
-local lib = LibStub:NewLibrary(MAJOR, MINOR)
-
-if not lib then return end
-
---[[ GLOBALS ]]--
-
-local _G 						= _G;
-local unpack        			= _G.unpack;
-local select        			= _G.select;
-local pairs         			= _G.pairs;
-local type          			= _G.type;
-local rawset        			= _G.rawset;
-local rawget        			= _G.rawget;
-local tostring      			= _G.tostring;
-local error         			= _G.error;
-local getmetatable  			= _G.getmetatable;
-local setmetatable  			= _G.setmetatable;
-local string    				= _G.string;
-local math      				= _G.math;
-local table     				= _G.table;
-local tinsert                   = _G.tinsert;
-local tremove                   = _G.tremove;
-
-local upper 					= string.upper;
-local format, find, match, gsub = string.format, string.find, string.match, string.gsub;
-local floor 					= math.floor
-local twipe, tsort, tconcat 	= table.wipe, table.sort, table.concat;
-
---[[ LOCAL VARS ]]--
-local AddonVersion = GetAddOnMetadata(..., "Version");
-local clientVersion, internalVersion, releaseDate, uiVersion = GetBuildInfo();
-
-local PluginString = ""
-local PluginList, Modules, LoadOnDemand, Callbacks, ModuleQueue, ScriptQueue = {},{},{},{},{},{};
-
-local INFO_FORMAT = "|cffFFFF00%s|r\n        |cff33FF00Version: %s|r |cff0099FFby %s|r";
-
-if GetLocale() == "ruRU" then
-    INFO_FORMAT = "|cffFFFF00%s|r\n        |cff33FF00Версия: %s|r |cff0099FFот %s|r";
-end
-
-local schemaHeader = "X-" .. AddonName .. "-Schema";
-local messagePattern = "|cffFF2F00%s:|r";
-local debugPattern = "|cffFF2F00%s|r [|cff992FFF%s|r]|cffFF2F00:|r";
-
---[[ META METHODS ]]--
-
-local rootstring = function(self) return self.___addonName end
-
---[[ REGISTRY CONSTRUCT ]]--
-
-local changeDBVar = function(self, value, key, sub1, sub2, sub3)
-    local schema = self.___schema
-    local config = AddonCore.db[schema]
-
-    if((sub1 and sub2 and sub3) and (config[sub1] and config[sub1][sub2] and config[sub1][sub2][sub3])) then
-        AddonCore.db[schema][sub1][sub2][sub3][key] = value
-    elseif((sub1 and sub2) and (config[sub1] and config[sub1][sub2])) then
-        AddonCore.db[schema][sub1][sub2][key] = value
-    elseif(sub1 and config[sub1]) then
-        AddonCore.db[schema][sub1][key] = value
-    else
-        AddonCore.db[schema][key] = value
-    end
-
-    self.db = AddonCore.db[schema]
-
-    if(self.UpdateLocals) then
-        self:UpdateLocals()
-    end
-end
-
-local innerOnEvent = function(self, event, ...)
-    local obj = self.module
-    if self[event] and type(self[event]) == "function" then
-        self[event](obj, event, ...)
-    end
-end
-
-local registerEvent = function(self, eventname, eventfunc)
-    if not self.___eventframe then
-        self.___eventframe = CreateFrame("Frame", nil)
-        self.___eventframe.module = self
-        self.___eventframe:SetScript("OnEvent", innerOnEvent)
-    end
-
-    if(not self.___eventframe[eventname]) then
-        local fn = eventfunc
-        if type(eventfunc) == "string" then
-            fn = self[eventfunc]
-        elseif(not fn and self[eventname]) then
-            fn = self[eventname]
-        end
-        self.___eventframe[eventname] = fn
-    end
-
-    self.___eventframe:RegisterEvent(eventname)
-end
-
-local unregisterEvent = function(self, event, ...)
-    if(self.___eventframe) then
-        self.___eventframe:UnregisterEvent(event)
-    end
-end
-
-local innerOnUpdate = function(self, elapsed)
-    if self.elapsed and self.elapsed > (self.throttle) then
-        local obj = self.module
-        local callbacks = self.callbacks
-
-        for name, fn in pairs(callbacks) do
-            local _, error = pcall(fn, obj)
-            if(error and AddonCore.Debugging) then
-                print(error)
-            end
-        end
-
-        self.elapsed = 0
-    else
-        self.elapsed = (self.elapsed or 0) + elapsed
-    end
-end
-
-local registerUpdate = function(self, updatefunc, throttle)
-    if not self.___updateframe then
-        self.___updateframe = CreateFrame("Frame", nil);
-        self.___updateframe.module = self;
-        self.___updateframe.callbacks = {};
-        self.___updateframe.elapsed = 0;
-        self.___updateframe.throttle = throttle or 0.2;
-    end
-
-    if(updatefunc and type(updatefunc) == "string" and self[updatefunc]) then
-        self.___updateframe.callbacks[updatefunc] = self[updatefunc]
-    end
-
-    self.___updateframe:SetScript("OnUpdate", innerOnUpdate)
-end
-
-local unregisterUpdate = function(self, updatefunc)
-    if(updatefunc and type(updatefunc) == "string" and self.___updateframe.callbacks[updatefunc]) then
-        self.___updateframe.callbacks[updatefunc] = nil
-        if(#self.___updateframe.callbacks == 0) then
-            self.___updateframe:SetScript("OnUpdate", nil)
-        end
-    else
-        self.___updateframe:SetScript("OnUpdate", nil)
-    end
-end
-
-local add_OptionsIndex = function(self, index, data)
-    local addonName = self.___addonName
-    local schema = self.___schema
-    local header = GetAddOnMetadata(addonName, "X-SVUI-Header")
-
-    AddonCore.Options.args.plugins.args.pluginOptions.args[schema].args[index] = data
-end
-
-local function SetPluginString(addonName)
-    local author = GetAddOnMetadata(addonName, "Author") or "Unknown"
-    local name = GetAddOnMetadata(addonName, "Title") or addonName
-    local version = GetAddOnMetadata(addonName, "Version") or "???"
-    return INFO_FORMAT:format(name, version, author)
-end
-
-local function SetInternalModule(obj, schema)
-    local addonmeta = {}
-    local oldmeta = getmetatable(obj)
-    if oldmeta then
-        for k, v in pairs(oldmeta) do addonmeta[k] = v end
-    end
-    addonmeta.__tostring = rootstring
-    setmetatable( obj, addonmeta )
-
-    local addonName = ("SVUI [%s]"):format(schema)
-
-    obj.___addonName = addonName
-    obj.___schema = schema
-
-    obj.initialized = false
-    obj.CombatLocked = false
-    obj.ChangeDBVar = changeDBVar
-    obj.RegisterEvent = registerEvent
-    obj.UnregisterEvent = unregisterEvent
-    obj.RegisterUpdate = registerUpdate
-    obj.UnregisterUpdate = unregisterUpdate
-
-    return obj
-end
-
-local function SetExternalModule(obj, schema, addonName, header, lod)
-    local addonmeta = {}
-    local oldmeta = getmetatable(obj)
-    if oldmeta then
-        for k, v in pairs(oldmeta) do addonmeta[k] = v end
-    end
-    addonmeta.__tostring = rootstring
-    setmetatable( obj, addonmeta )
-
-    obj.___addonName = addonName
-    obj.___schema = schema
-    obj.___header = header
-    obj.___lod = lod
-
-    obj.initialized = false
-    obj.CombatLocked = false
-    obj.ChangeDBVar = changeDBVar
-    obj.RegisterEvent = registerEvent
-    obj.UnregisterEvent = unregisterEvent
-    obj.RegisterUpdate = registerUpdate
-    obj.UnregisterUpdate = unregisterUpdate
-    obj.AddOption = add_OptionsIndex
-
-    if(lod) then
-        -- print("PLUGIN: " .. addonName)
-        AddonCore.Options.args.plugins.args.pluginOptions.args[schema] = {
-            type = "group",
-            name = header,
-            childGroups = "tree",
-            args = {
-                enable = {
-                    order = 1,
-                    type = "execute",
-                    width = "full",
-                    name = function()
-                        local nameString = "Disable"
-                        if(not IsAddOnLoaded(addonName)) then
-                            nameString = "Enable"
-                        end
-                        return nameString
-                    end,
-                    func = function()
-                        if(not IsAddOnLoaded(addonName)) then
-                            local loaded, reason = LoadAddOn(addonName)
-                            AddonCore:UpdateDatabase()
-                            obj:ChangeDBVar(true, "enable")
-                        else
-                            obj:ChangeDBVar(false, "enable")
-                            AddonCore:StaticPopup_Show("RL_CLIENT")
-                        end
-                    end,
-                }
-            }
-        }
-    else
-        AddonCore.Options.args.plugins.args.pluginOptions.args[schema] = {
-            type = "group",
-            name = header,
-            childGroups = "tree",
-            args = {
-                enable = {
-                    order = 1,
-                    type = "toggle",
-                    name = "Enable",
-                    get = function() return obj.db.enable end,
-                    set = function(key, value) obj:ChangeDBVar(value, "enable"); AddonCore:StaticPopup_Show("RL_CLIENT") end,
-                }
-            }
-        }
-    end
-
-    return obj
-end
-
---[[ PUBLIC METHODS ]]--
-
-function lib:NewCallback(fn)
-    if(fn and type(fn) == "function") then
-        Callbacks[#Callbacks+1] = fn
-    end
-end
-
-function lib:NewScript(fn)
-    if(fn and type(fn) == "function") then
-        ScriptQueue[#ScriptQueue+1] = fn
-    end
-end
-
-function lib:NewPackage(obj, schema)
-    if(AddonCore[schema]) then return end
-
-    ModuleQueue[#ModuleQueue+1] = schema
-    Modules[#Modules+1] = schema
-
-    AddonCore[schema] = SetInternalModule(obj, schema)
-
-    if(AddonCore.AddonLaunched) then
-        if(AddonCore[schema].Load) then
-            AddonCore[schema]:Load()
-        end
-    end
-end
-
-function lib:NewPlugin(obj)
-    local coreName = AddonCore.___addonName
-    local addonName = obj.___addonName
-
-    if(addonName and addonName ~= coreName) then
-        local schema = GetAddOnMetadata(addonName, "X-SVUI-Schema");
-        local header = GetAddOnMetadata(addonName, "X-SVUI-Header");
-        local lod = IsAddOnLoadOnDemand(addonName)
-        if(not schema) then return end
-
-        ModuleQueue[#ModuleQueue+1] = schema
-        Modules[#Modules+1] = schema
-
-        local infoString = SetPluginString(addonName)
-        local oldString = PluginString
-
-        PluginList[addonName] = infoString
-        PluginString = ("%s%s\n"):format(oldString, infoString)
-
-        AddonCore[schema] = SetExternalModule(obj, schema, addonName, header, lod)
-
-        if(AddonCore.AddonLaunched and AddonCore[schema].Load) then
-            AddonCore[schema]:Load()
-            --print(schema)
-        end
-    end
-end
-
-function lib:NewAddon(addonName, schema, header)
-    LoadOnDemand[addonName] = schema;
-
-    AddonCore.Options.args.plugins.args.pluginOptions.args[schema] = {
-        type = "group",
-        name = header,
-        childGroups = "tree",
-        args = {
-            enable = {
-                order = 1,
-                type = "execute",
-                width = "full",
-                name = function()
-                    local nameString = "Disable"
-                    if(not IsAddOnLoaded(addonName)) then
-                        nameString = "Enable"
-                    end
-                    return nameString
-                end,
-                func = function()
-                    if(not IsAddOnLoaded(addonName)) then
-                        local loaded, reason = LoadAddOn(addonName)
-                        AddonCore:UpdateDatabase()
-                        AddonCore.db[schema].enable = true
-                        self:LoadPackages()
-                    else
-                        AddonCore.db[schema].enable = false
-                        AddonCore:StaticPopup_Show("RL_CLIENT")
-                    end
-                end,
-            }
-        }
-    }
-end
-
-function lib:FindAddons()
-    local addonCount = GetNumAddOns()
-    for i = 1, addonCount do
-        local addonName, _, _, _, _, reason = GetAddOnInfo(i)
-        local lod = IsAddOnLoadOnDemand(i)
-        local header = GetAddOnMetadata(i, "X-SVUI-Header")
-        local schema = GetAddOnMetadata(i, "X-SVUI-Schema")
-
-        if(lod and schema) then
-            self:NewAddon(addonName, schema, header)
-        end
-    end
-end
-
-function lib:RunCallbacks()
-    for i=1, #Callbacks do
-        local fn = Callbacks[i]
-        if(fn and type(fn) == "function") then
-            fn()
-        end
-    end
-end
-
-function lib:Update(name, dataOnly)
-    local obj = AddonCore[name]
-    if obj then
-        if AddonCore.db[name] then
-            obj.db = AddonCore.db[name]
-        end
-        if obj.ReLoad and not dataOnly then
-            obj:ReLoad()
-        end
-    end
-end
-
-function lib:UpdateAll()
-    for _,name in pairs(Modules) do
-        local obj = AddonCore[name]
-
-        if AddonCore.db[name] then
-            obj.db = AddonCore.db[name]
-        end
-
-        if obj and obj.ReLoad then
-            obj:ReLoad()
-        end
-    end
-end
-
-function lib:LoadRegisteredAddons()
-    for name,schema in pairs(LoadOnDemand) do
-        local config = AddonCore.db[schema]
-        if(config and (config.enable or config.enable ~= false)) then
-            if(not IsAddOnLoaded(name)) then
-                local loaded, reason = LoadAddOn(name)
-            end
-            EnableAddOn(name)
-        end
-    end
-end
-
-function lib:LoadPackages()
-    if not ModuleQueue then return end
-
-    for i=1,#ModuleQueue do
-        local name = ModuleQueue[i]
-        local obj = AddonCore[name]
-        if obj and not obj.initialized then
-            if AddonCore.db[name] then
-                obj.db = AddonCore.db[name]
-            end
-
-            if obj.Load then
-                local halt = false
-                if(obj.db.incompatible) then
-                    for addon,_ in pairs(obj.db.incompatible) do
-                        if IsAddOnLoaded(addon) then halt = true end
-                    end
-                end
-                if(not halt) then
-                    obj:Load()
-                    obj.Load = nil
-                    --print(name)
-                end
-            end
-            obj.initialized = true;
-        end
-    end
-
-    twipe(ModuleQueue)
-
-    if not ScriptQueue then return end
-    for i=1, #ScriptQueue do
-        local fn = ScriptQueue[i]
-        if(fn and type(fn) == "function") then
-            fn()
-        end
-    end
-
-    ScriptQueue = nil
-end
-
-function lib:NewPrototype(name)
-    local version = GetAddOnMetadata(name, "Version")
-    local schema = GetAddOnMetadata(name, schemaHeader)
-
-    AddonCore.private[schema] = {["enable"] = false}
-
-    local obj = {
-        ___addonName = name,
-        ___version = version,
-        ___schema = schema
-    }
-
-    local mt = {}
-    local old = getmetatable(obj)
-    if old then
-        for k, v in pairs(old) do mt[k] = v end
-    end
-    mt.__tostring = rootstring
-    setmetatable(obj, mt)
-    return obj
-end
-
-function lib:GetPlugins(tableList)
-    if(tableList and tableList ~= false) then
-        return PluginList
-    end
-    return PluginString
-end
-
---[[ CONSTRUCTORS ]]--
-
-local Core_DeadFunction = function() return end
-
-local Core_StaticPopup_Show = function(self, arg)
-    if arg == "ADDON_ACTION_FORBIDDEN" then
-        StaticPopup_Hide(arg)
-    end
-end
-
-local function _sendmessage(msg, prefix)
-    if(type(msg) == "table") then
-        msg = tostring(msg)
-    end
-
-    if(not msg) then return end
-
-    if(prefix) then
-        local outbound = ("%s %s"):format(prefix, msg);
-        print(outbound)
-    else
-        print(msg)
-    end
-end
-
-local Core_Debugger = function(self, msg)
-    if(not self.___debugging) then return end
-    local outbound = (debugPattern):format(self.___addonName, "DEBUG")
-    _sendmessage(msg, outbound)
-end
-
-local Core_AddonMessage = function(self, msg)
-    local outbound = (messagePattern):format(self.___addonName)
-    _sendmessage(msg, outbound)
-end
-
-function lib:InitializeCore()
-    local obj = {};
-    --internals
-    AddonCore.___addonName        = AddonName;
-    AddonCore.___version          = AddonVersion;
-    AddonCore.___interface        = tonumber(uiVersion);
-    AddonCore.___debugging        = false;
-    --tables
-    AddonCore.db                  = {};
-    AddonCore.private             = {};
-    AddonCore.public              = { profiles = {}, profileKeys = {} };
-    --functions
-    AddonCore.fubar               = Core_DeadFunction;
-    AddonCore.AddonMessage        = Core_AddonMessage;
-    AddonCore.Debugger            = Core_Debugger;
-    AddonCore.StaticPopup_Show    = Core_StaticPopup_Show;
-
-    local mt = {};
-    local old = getmetatable(AddonCore);
-    if old then
-        for k, v in pairs(old) do mt[k] = v end
-    end
-    mt.__tostring = rootstring;
-    setmetatable(AddonCore, mt);
-
-    --set global
-    _G[AddonName] = AddonCore;
-
-    return AddonCore
-end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/libs/libdatabroker-1-1/Changelog-libdatabroker-1-1-v1.1.4.txt b/Interface/AddOns/SVUI/libs/libdatabroker-1-1/Changelog-libdatabroker-1-1-v1.1.4.txt
new file mode 100644
index 0000000..d5b31ed
--- /dev/null
+++ b/Interface/AddOns/SVUI/libs/libdatabroker-1-1/Changelog-libdatabroker-1-1-v1.1.4.txt
@@ -0,0 +1,33 @@
+tag v1.1.4
+ddb0519a000c69ddf3a28c3f9fe2e62bb3fd00c5
+Tekkub <tekkub@gmail.com>
+2008-11-06 22:03:04 -0700
+
+Build 1.1.4
+
+
+--------------------
+
+Tekkub:
+	Add pairs and ipairs iters, since we can't use the normal iters on our dataobjs
+	Simplify readme, all docs have been moved into GitHub wiki pages
+	Documentation on how to use LDB data (for display addons)
+	Add StatBlockCore forum link
+	Add link to Fortress thread
+	And rearrange the addon list a bit too
+	Make field lists into nice pretty tables
+	Add list of who is using LDB
+	Always with the typos, I hate my fingers
+	Add tooltiptext and OnTooltipShow to data addon spec
+	Readme rejiggering
+	Add in some documentation on how to push data into LDB
+	Meh, fuck you textile
+	Adding readme
+	Pass current dataobj with attr change callbacks to avoid excessive calls to :GetDataObjectByName
+Tekkub Stoutwrithe:
+	Make passed dataobj actually work
+	I always forget the 'then'
+	Minor memory optimization
+	- Only hold upvalues to locals in the functions called frequently
+	 - Retain the metatable across future lib upgrades (the one in v1 will be lost)
+	Allow caller to pass a pre-populated table to NewDataObject
diff --git a/Interface/AddOns/SVUI/libs/libdatabroker-1-1/LibDataBroker-1.1.lua b/Interface/AddOns/SVUI/libs/libdatabroker-1-1/LibDataBroker-1.1.lua
new file mode 100644
index 0000000..f47c0cd
--- /dev/null
+++ b/Interface/AddOns/SVUI/libs/libdatabroker-1-1/LibDataBroker-1.1.lua
@@ -0,0 +1,90 @@
+
+assert(LibStub, "LibDataBroker-1.1 requires LibStub")
+assert(LibStub:GetLibrary("CallbackHandler-1.0", true), "LibDataBroker-1.1 requires CallbackHandler-1.0")
+
+local lib, oldminor = LibStub:NewLibrary("LibDataBroker-1.1", 4)
+if not lib then return end
+oldminor = oldminor or 0
+
+
+lib.callbacks = lib.callbacks or LibStub:GetLibrary("CallbackHandler-1.0"):New(lib)
+lib.attributestorage, lib.namestorage, lib.proxystorage = lib.attributestorage or {}, lib.namestorage or {}, lib.proxystorage or {}
+local attributestorage, namestorage, callbacks = lib.attributestorage, lib.namestorage, lib.callbacks
+
+if oldminor < 2 then
+	lib.domt = {
+		__metatable = "access denied",
+		__index = function(self, key) return attributestorage[self] and attributestorage[self][key] end,
+	}
+end
+
+if oldminor < 3 then
+	lib.domt.__newindex = function(self, key, value)
+		if not attributestorage[self] then attributestorage[self] = {} end
+		if attributestorage[self][key] == value then return end
+		attributestorage[self][key] = value
+		local name = namestorage[self]
+		if not name then return end
+		callbacks:Fire("LibDataBroker_AttributeChanged", name, key, value, self)
+		callbacks:Fire("LibDataBroker_AttributeChanged_"..name, name, key, value, self)
+		callbacks:Fire("LibDataBroker_AttributeChanged_"..name.."_"..key, name, key, value, self)
+		callbacks:Fire("LibDataBroker_AttributeChanged__"..key, name, key, value, self)
+	end
+end
+
+if oldminor < 2 then
+	function lib:NewDataObject(name, dataobj)
+		if self.proxystorage[name] then return end
+
+		if dataobj then
+			assert(type(dataobj) == "table", "Invalid dataobj, must be nil or a table")
+			self.attributestorage[dataobj] = {}
+			for i,v in pairs(dataobj) do
+				self.attributestorage[dataobj][i] = v
+				dataobj[i] = nil
+			end
+		end
+		dataobj = setmetatable(dataobj or {}, self.domt)
+		self.proxystorage[name], self.namestorage[dataobj] = dataobj, name
+		self.callbacks:Fire("LibDataBroker_DataObjectCreated", name, dataobj)
+		return dataobj
+	end
+end
+
+if oldminor < 1 then
+	function lib:DataObjectIterator()
+		return pairs(self.proxystorage)
+	end
+
+	function lib:GetDataObjectByName(dataobjectname)
+		return self.proxystorage[dataobjectname]
+	end
+
+	function lib:GetNameByDataObject(dataobject)
+		return self.namestorage[dataobject]
+	end
+end
+
+if oldminor < 4 then
+	local next = pairs(attributestorage)
+	function lib:pairs(dataobject_or_name)
+		local t = type(dataobject_or_name)
+		assert(t == "string" or t == "table", "Usage: ldb:pairs('dataobjectname') or ldb:pairs(dataobject)")
+
+		local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
+		assert(attributestorage[dataobj], "Data object not found")
+
+		return next, attributestorage[dataobj], nil
+	end
+
+	local ipairs_iter = ipairs(attributestorage)
+	function lib:ipairs(dataobject_or_name)
+		local t = type(dataobject_or_name)
+		assert(t == "string" or t == "table", "Usage: ldb:ipairs('dataobjectname') or ldb:ipairs(dataobject)")
+
+		local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
+		assert(attributestorage[dataobj], "Data object not found")
+
+		return ipairs_iter, attributestorage[dataobj], 0
+	end
+end
diff --git a/Interface/AddOns/SVUI/libs/libdatabroker-1-1/README.textile b/Interface/AddOns/SVUI/libs/libdatabroker-1-1/README.textile
new file mode 100644
index 0000000..ef16fed
--- /dev/null
+++ b/Interface/AddOns/SVUI/libs/libdatabroker-1-1/README.textile
@@ -0,0 +1,13 @@
+LibDataBroker is a small WoW addon library designed to provide a "MVC":http://en.wikipedia.org/wiki/Model-view-controller interface for use in various addons.
+LDB's primary goal is to "detach" plugins for TitanPanel and FuBar from the display addon.
+Plugins can provide data into a simple table, and display addons can receive callbacks to refresh their display of this data.
+LDB also provides a place for addons to register "quicklaunch" functions, removing the need for authors to embed many large libraries to create minimap buttons.
+Users who do not wish to be "plagued" by these buttons simply do not install an addon to render them.
+
+Due to it's simple generic design, LDB can be used for any design where you wish to have an addon notified of changes to a table.
+
+h2. Links
+
+* "API documentation":http://github.com/tekkub/libdatabroker-1-1/wikis/api
+* "Data specifications":http://github.com/tekkub/libdatabroker-1-1/wikis/data-specifications
+* "Addons using LDB":http://github.com/tekkub/libdatabroker-1-1/wikis/addons-using-ldb
diff --git a/Interface/AddOns/SVUI/libs/libs.xml b/Interface/AddOns/SVUI/libs/libs.xml
index 0e8898e..0715887 100644
--- a/Interface/AddOns/SVUI/libs/libs.xml
+++ b/Interface/AddOns/SVUI/libs/libs.xml
@@ -1,9 +1,9 @@
 <Ui xmlns="http://www.blizzard.com/wow/ui/">
 	<Script file="LibStub\LibStub.lua"/>
-	<Script file="LibLocale-1.0\LibLocale-1.0.lua"/>
-	<Script file="LibSystemRegistry-1.0\LibSystemRegistry-1.0.lua"/>
+	<Script file="LibSuperVillain-1.0\LibSuperVillain-1.0.lua"/>
     <Script file="CallbackHandler-1.0\CallbackHandler-1.0.lua"/>
     <Script file="LibSharedMedia-3.0\LibSharedMedia-3.0.lua"/>
     <Script file="LibActionButton-1.0\LibActionButton-1.0.lua"/>
+    <Script file="LibDataBroker-1.1\LibDataBroker-1.1.lua"/>
     <Include file="oUF_Villain\oUF_Villain.xml"/>
 </Ui>
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/actionbar/KeyBind.lua b/Interface/AddOns/SVUI/packages/actionbar/KeyBind.lua
index 1588aef..62e5506 100644
--- a/Interface/AddOns/SVUI/packages/actionbar/KeyBind.lua
+++ b/Interface/AddOns/SVUI/packages/actionbar/KeyBind.lua
@@ -37,7 +37,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVBar;

 local _G = getfenv(0);
diff --git a/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua b/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua
index 6bccfd8..aa71bf6 100644
--- a/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua
+++ b/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua
@@ -34,10 +34,10 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
+
 local LSM = LibStub("LibSharedMedia-3.0")
-local CONFIGS = SV.private
 local MOD = {};
 MOD.ButtonCache = {};
 --[[
@@ -592,7 +592,7 @@ function MOD:UpdateBarPagingDefaults()
 		end
 	end

-	if((not SV.db.SVBar.enable or InCombatLockdown()) or not self.isInitialized) then return end
+	if((not self.db.enable or InCombatLockdown()) or not self.isInitialized) then return end
 	local Bar2Option = InterfaceOptionsActionBarsPanelBottomRight
 	local Bar3Option = InterfaceOptionsActionBarsPanelBottomLeft
 	local Bar4Option = InterfaceOptionsActionBarsPanelRightTwo
@@ -1582,13 +1582,9 @@ function MOD:Load()
 	SetSpellFlyoutHook()

 	self.IsLoaded = true
-end
---[[
-##########################################################
-DEFINE CONFIG AND REGISTER
-##########################################################
-]]--
-CONFIGS["SVBar"] = {
+end
+
+MOD.db = {
 	["enable"] = true,
 	["font"] = "Roboto",
 	["fontSize"] = 11,
@@ -1805,4 +1801,4 @@ CONFIGS["SVBar"] = {
 	},
 }

-Registry:NewPackage(MOD, "SVBar")
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVBar")
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/actionbar/config.lua b/Interface/AddOns/SVUI/packages/actionbar/config.lua
new file mode 100644
index 0000000..955f0f7
--- /dev/null
+++ b/Interface/AddOns/SVUI/packages/actionbar/config.lua
@@ -0,0 +1,240 @@
+--[[
+##############################################################################
+_____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_       #
+ ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__      #
+  __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____     #
+   ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____    #
+    ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____   #
+     _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____  #
+      __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ #
+       _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_#
+        ___\///////////___________\///___________\/////////_____\///////////_#
+##############################################################################
+S U P E R - V I L L A I N - U I   By: Munglunch                              #
+##############################################################################
+##########################################################
+GET ADDON DATA
+##########################################################
+]]--
+local SVUI_ADDON_NAME, SV = ...
+--[[
+##########################################################
+DEFINE CONFIG AND REGISTER
+##########################################################
+]]--
+SV.SVBar.db = {
+	["enable"] = true,
+	["font"] = "Roboto",
+	["fontSize"] = 11,
+	["fontOutline"] = "OUTLINE",
+	["countFont"] = "SVUI Number Font",
+	["countFontSize"] = 11,
+	["countFontOutline"] = "OUTLINE",
+	["cooldownSize"] = 18,
+	["rightClickSelf"] = false,
+	["macrotext"] = false,
+	["hotkeytext"] = false,
+	["hotkeyAbbrev"] = true,
+	["showGrid"] = true,
+	["unc"] = {0.8, 0.1, 0.1, 0.7},
+	["unpc"] = {0.5, 0.5, 1, 0.7},
+	["keyDown"] = false,
+	["unlock"] = "SHIFT",
+	["Micro"] = {
+		["enable"] = true,
+		["mouseover"] = true,
+		["alpha"] = 1,
+		["buttonsize"] = 30,
+		["buttonspacing"] = 4,
+		["yOffset"] = 4
+	},
+	["Bar1"] = {
+		["enable"] = true,
+		["buttons"] = 12,
+		["mouseover"] = false,
+		["buttonsPerRow"] = 12,
+		["point"] = "BOTTOMLEFT",
+		["backdrop"] = false,
+		["buttonsize"] = 32,
+		["buttonspacing"] = 2,
+		["useCustomPaging"] = true,
+		["useCustomVisibility"] = false,
+		["customVisibility"] = "[petbattle] hide; show",
+		["customPaging"] = {
+		    ["HUNTER"]  	 = "",
+		    ["WARLOCK"] 	 = "[form:2] 10;",
+		    ["PRIEST"]  	 = "[bonusbar:1] 7;",
+		    ["PALADIN"] 	 = "",
+		    ["MAGE"]    	 = "",
+		    ["ROGUE"]   	 = "[stance:1] 7; [stance:2] 7; [stance:3] 7; [bonusbar:1] 7; [form:3] 7;",
+		    ["DRUID"]   	 = "[bonusbar:1, nostealth] 7; [bonusbar:1, stealth] 8; [bonusbar:2] 8; [bonusbar:3] 9; [bonusbar:4] 10;",
+		    ["SHAMAN"]  	 = "",
+		    ["WARRIOR"] 	 = "",
+		    ["DEATHKNIGHT"]  = "",
+		    ["MONK"]    	 = "[bonusbar:1] 7; [bonusbar:2] 8; [bonusbar:3] 9;",
+		},
+		["alpha"] = 1
+	},
+	["Bar2"] = {
+		["enable"] = false,
+		["mouseover"] = false,
+		["buttons"] = 12,
+		["buttonsPerRow"] = 12,
+		["point"] = "BOTTOMLEFT",
+		["backdrop"] = false,
+		["buttonsize"] = 32,
+		["buttonspacing"] = 2,
+		["useCustomPaging"] = false,
+		["useCustomVisibility"] = false,
+		["customVisibility"] = "[vehicleui] hide; [overridebar] hide; [petbattle] hide; show",
+		["customPaging"] = {
+		    ["HUNTER"]  	 = "",
+		    ["WARLOCK"] 	 = "",
+		    ["PRIEST"]  	 = "",
+		    ["PALADIN"] 	 = "",
+		    ["MAGE"]    	 = "",
+		    ["ROGUE"]   	 = "",
+		    ["DRUID"]   	 = "",
+		    ["SHAMAN"]  	 = "",
+		    ["WARRIOR"] 	 = "",
+		    ["DEATHKNIGHT"]  = "",
+		    ["MONK"]    	 = "",
+		},
+		["alpha"] = 1
+	},
+	["Bar3"] = {
+		["enable"] = true,
+		["mouseover"] = false,
+		["buttons"] = 6,
+		["buttonsPerRow"] = 6,
+		["point"] = "BOTTOMLEFT",
+		["backdrop"] = false,
+		["buttonsize"] = 32,
+		["buttonspacing"] = 2,
+		["useCustomPaging"] = false,
+		["useCustomVisibility"] = false,
+		["customVisibility"] = "[vehicleui] hide; [overridebar] hide; [petbattle] hide; show",
+		["customPaging"] = {
+		    ["HUNTER"]  	 = "",
+		    ["WARLOCK"] 	 = "",
+		    ["PRIEST"]  	 = "",
+		    ["PALADIN"] 	 = "",
+		    ["MAGE"]    	 = "",
+		    ["ROGUE"]   	 = "",
+		    ["DRUID"]   	 = "",
+		    ["SHAMAN"]  	 = "",
+		    ["WARRIOR"] 	 = "",
+		    ["DEATHKNIGHT"]  = "",
+		    ["MONK"]    	 = "",
+		},
+		["alpha"] = 1
+	},
+	["Bar4"] = {
+		["enable"] = true,
+		["mouseover"] = true,
+		["buttons"] = 12,
+		["buttonsPerRow"] = 1,
+		["point"] = "TOPRIGHT",
+		["backdrop"] = false,
+		["buttonsize"] = 32,
+		["buttonspacing"] = 2,
+		["useCustomPaging"] = false,
+		["useCustomVisibility"] = false,
+		["customVisibility"] = "[vehicleui] hide; [overridebar] hide; [petbattle] hide; show",
+		["customPaging"] = {
+		    ["HUNTER"]  	 = "",
+		    ["WARLOCK"] 	 = "",
+		    ["PRIEST"]  	 = "",
+		    ["PALADIN"] 	 = "",
+		    ["MAGE"]    	 = "",
+		    ["ROGUE"]   	 = "",
+		    ["DRUID"]   	 = "",
+		    ["SHAMAN"]  	 = "",
+		    ["WARRIOR"] 	 = "",
+		    ["DEATHKNIGHT"]  = "",
+		    ["MONK"]    	 = "",
+		},
+		["alpha"] = 1
+	},
+	["Bar5"] = {
+		["enable"] = true,
+		["mouseover"] = false,
+		["buttons"] = 6,
+		["buttonsPerRow"] = 6,
+		["point"] = "BOTTOMLEFT",
+		["backdrop"] = false,
+		["buttonsize"] = 32,
+		["buttonspacing"] = 2,
+		["useCustomPaging"] = false,
+		["useCustomVisibility"] = false,
+		["customVisibility"] = "[vehicleui] hide; [overridebar] hide; [petbattle] hide; show",
+		["customPaging"] = {
+		    ["HUNTER"]  	 = "",
+		    ["WARLOCK"] 	 = "",
+		    ["PRIEST"]  	 = "",
+		    ["PALADIN"] 	 = "",
+		    ["MAGE"]    	 = "",
+		    ["ROGUE"]   	 = "",
+		    ["DRUID"]   	 = "",
+		    ["SHAMAN"]  	 = "",
+		    ["WARRIOR"] 	 = "",
+		    ["DEATHKNIGHT"]  = "",
+		    ["MONK"]    	 = "",
+		},
+		["alpha"] = 1
+	},
+	["Bar6"] = {
+		["enable"] = false,
+		["mouseover"] = false,
+		["buttons"] = 12,
+		["buttonsPerRow"] = 12,
+		["point"] = "BOTTOMLEFT",
+		["backdrop"] = false,
+		["buttonsize"] = 32,
+		["buttonspacing"] = 2,
+		["useCustomPaging"] = false,
+		["useCustomVisibility"] = false,
+		["customVisibility"] = "[vehicleui] hide; [overridebar] hide; [petbattle] hide; show",
+		["customPaging"] = {
+		    ["HUNTER"]  	 = "",
+		    ["WARLOCK"] 	 = "",
+		    ["PRIEST"]  	 = "",
+		    ["PALADIN"] 	 = "",
+		    ["MAGE"]    	 = "",
+		    ["ROGUE"]   	 = "",
+		    ["DRUID"]   	 = "",
+		    ["SHAMAN"]  	 = "",
+		    ["WARRIOR"] 	 = "",
+		    ["DEATHKNIGHT"]  = "",
+		    ["MONK"]    	 = "",
+		},
+		["alpha"] = 1
+	},
+	["Pet"] = {
+		["enable"] = true,
+		["mouseover"] = false,
+		["buttons"] = NUM_PET_ACTION_SLOTS,
+		["buttonsPerRow"] = NUM_PET_ACTION_SLOTS,
+		["point"] = "TOPLEFT",
+		["backdrop"] = false,
+		["buttonsize"] = 24,
+		["buttonspacing"] = 3,
+		["useCustomVisibility"] = false,
+		["customVisibility"] = "[petbattle] hide; [pet, novehicleui, nooverridebar, nopossessbar] show; hide",
+		["alpha"] = 1
+	},
+	["Stance"] = {
+		["enable"] = true,
+		["style"] = "darkenInactive",
+		["mouseover"] = false,
+		["buttons"] = NUM_STANCE_SLOTS,
+		["buttonsPerRow"] = NUM_STANCE_SLOTS,
+		["point"] = "BOTTOMRIGHT",
+		["backdrop"] = false,
+		["buttonsize"] = 24,
+		["buttonspacing"] = 5,
+		["useCustomVisibility"] = false,
+		["customVisibility"] = "[petbattle] hide; show",
+		["alpha"] = 1
+	},
+}
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/aura/SVAura.lua b/Interface/AddOns/SVUI/packages/aura/SVAura.lua
index fc7949e..c60a7ea 100644
--- a/Interface/AddOns/SVUI/packages/aura/SVAura.lua
+++ b/Interface/AddOns/SVUI/packages/aura/SVAura.lua
@@ -43,10 +43,9 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local LSM = LibStub("LibSharedMedia-3.0")
-local CONFIGS = SV.private
 local MOD = {};
 --[[
 ##########################################################
@@ -570,8 +569,8 @@ end
 function MOD:Load()
 	CB_HEIGHT = Minimap:GetHeight()
 	CB_WIDTH = (CB_HEIGHT / 5) + 4
-	if not SV.db.SVAura.enable then return end
-	if SV.db.SVAura.disableBlizzard then
+	if not self.db.enable then return end
+	if self.db.disableBlizzard then
 		BuffFrame:Die()
 		ConsolidatedBuffs:Die()
 		TemporaryEnchantFrame:Die()
@@ -602,7 +601,7 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-CONFIGS["SVAura"] = {
+MOD.db = {
 	["enable"] = true,
 	["disableBlizzard"] = true,
 	["font"] = "SVUI Number Font",
@@ -641,4 +640,4 @@ CONFIGS["SVAura"] = {
 	},
 }

-Registry:NewPackage(MOD, "SVAura")
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVAura")
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/bag/SVBag.lua b/Interface/AddOns/SVUI/packages/bag/SVBag.lua
index 1dc4d5d..5cb251a 100644
--- a/Interface/AddOns/SVUI/packages/bag/SVBag.lua
+++ b/Interface/AddOns/SVUI/packages/bag/SVBag.lua
@@ -41,9 +41,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
-local CONFIGS = SV.private
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD = {};
 local TTIP = SV.SVTip;
 --[[
@@ -344,12 +343,12 @@ function MOD:FlushSlotFading(this)
 end

 function MOD:Layout(isBank, isReagent)
-	if SV.db.SVBag.enable ~= true then return; end
+	if self.db.enable ~= true then return; end
 	local f = MOD:GetContainerFrame(isBank, isReagent);
 	if not f then return; end
 	local buttonSize = isBank and MOD.db.bankSize or MOD.db.bagSize;
 	local buttonSpacing = 8;
-	local containerWidth = (MOD.db.alignToChat == true and (isBank and (SV.db.SVDock.dockLeftWidth - 14) or (SV.db.SVDock.dockRightWidth - 14))) or (isBank and MOD.db.bankWidth) or MOD.db.bagWidth
+	local containerWidth = (MOD.db.alignToChat == true and (isBank and (SV.SVDock.db.dockLeftWidth - 14) or (SV.SVDock.db.dockRightWidth - 14))) or (isBank and MOD.db.bankWidth) or MOD.db.bagWidth
 	local numContainerColumns = floor(containerWidth / (buttonSize + buttonSpacing));
 	local holderWidth = ((buttonSize + buttonSpacing) * numContainerColumns) - buttonSpacing;
 	local numContainerRows = 0;
@@ -636,7 +635,7 @@ do
 	end

 	function MOD:ModifyBagBar()
-		if not SV.db.SVBag.bagBar.enable then return end
+		if not self.db.bagBar.enable then return end

 		if not self.BagBarLoaded then
 			LoadBagBar()
@@ -791,7 +790,7 @@ do
 					MOD:Layout(self.isBank, self.isReagent)
 					return
 				end
-				if(SV.db.SVGear.misc.setoverlay) then
+				if(SV.SVGear.db.misc.setoverlay) then
 					for i = 1, numSlots do
 						if self.Bags[id] and self.Bags[id][i] then
 							UpdateEquipmentInfo(self.Bags[id][i], id, i)
@@ -871,7 +870,7 @@ do
 			container = MOD.BagFrame
 			for _,id in ipairs(container.BagIDs) do
 				numSlots = GetContainerNumSlots(id)
-				if(SV.db.SVGear.misc.setoverlay) then
+				if(SV.SVGear.db.misc.setoverlay) then
 					for i=1,numSlots do
 						if container.Bags[id] and container.Bags[id][i] then
 							UpdateEquipmentInfo(container.Bags[id][i], id, i)
@@ -890,7 +889,7 @@ do
 			container = MOD.BankFrame
 			for _,id in ipairs(container.BagIDs) do
 				numSlots = GetContainerNumSlots(id)
-				if(SV.db.SVGear.misc.setoverlay) then
+				if(SV.SVGear.db.misc.setoverlay) then
 					for i=1,numSlots do
 						if container.Bags[id] and container.Bags[id][i] then
 							UpdateEquipmentInfo(container.Bags[id][i], id, i)
@@ -909,7 +908,7 @@ do
 			container = MOD.ReagentFrame
 			for _,id in ipairs(container.BagIDs) do
 				numSlots = GetContainerNumSlots(id)
-				if(SV.db.SVGear.misc.setoverlay) then
+				if(SV.SVGear.db.misc.setoverlay) then
 					for i=1,numSlots do
 						if container.Bags[id] and container.Bags[id][i] then
 							UpdateEquipmentInfo(container.Bags[id][i], id, i)
@@ -1402,7 +1401,7 @@ BUILD FUNCTION / UPDATE
 ##########################################################
 ]]--
 function MOD:ReLoad()
-	if not SV.db.SVBag.enable then return end
+	if not self.db.enable then return end
 	self:Layout();
 	self:Layout(true);
 	self:ModifyBags();
@@ -1413,7 +1412,7 @@ function MOD:Load()
 	if IsAddOnLoaded("AdiBags") then
 		return
 	end
-	if not SV.db.SVBag.enable then return end
+	if not self.db.enable then return end
 	self:ModifyBagBar()
 	SV.bags = self;
 	self.BagFrames = {}
@@ -1437,7 +1436,7 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-CONFIGS["SVBag"] = {
+MOD.db = {
 	["incompatible"] = {
 		["AdiBags"] = true,
 		["ArkInventory"] = true,
@@ -1474,4 +1473,4 @@ CONFIGS["SVBag"] = {
 	},
 }

-Registry:NewPackage(MOD, "SVBag");
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVBag");
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/bag/tools/breakstuff.lua b/Interface/AddOns/SVUI/packages/bag/tools/breakstuff.lua
index 77ab520..91ea628 100644
--- a/Interface/AddOns/SVUI/packages/bag/tools/breakstuff.lua
+++ b/Interface/AddOns/SVUI/packages/bag/tools/breakstuff.lua
@@ -33,7 +33,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVBag;
 local TTIP = SV.SVTip;
 --[[
diff --git a/Interface/AddOns/SVUI/packages/bag/tools/sorting.lua b/Interface/AddOns/SVUI/packages/bag/tools/sorting.lua
index 4a2213f..1aa1574 100644
--- a/Interface/AddOns/SVUI/packages/bag/tools/sorting.lua
+++ b/Interface/AddOns/SVUI/packages/bag/tools/sorting.lua
@@ -43,7 +43,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVBag;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI/packages/chat/SVChat.lua b/Interface/AddOns/SVUI/packages/chat/SVChat.lua
index 698c9b9..e2941e5 100644
--- a/Interface/AddOns/SVUI/packages/chat/SVChat.lua
+++ b/Interface/AddOns/SVUI/packages/chat/SVChat.lua
@@ -35,10 +35,9 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local LSM = LibStub("LibSharedMedia-3.0")
-local CONFIGS = SV.private
 local MOD = {};
 --[[
 ##########################################################
@@ -666,7 +665,7 @@ do
 	end

 	function MOD:RefreshChatFrames(forced)
-		if (not SV.db.SVChat.enable) then return; end
+		if (not MOD.db.enable) then return; end
 		if ((not forced) and refreshLocked and (IsMouseButtonDown("LeftButton") or InCombatLockdown())) then return; end

 		for i,name in pairs(CHAT_FRAMES)do
@@ -904,8 +903,8 @@ do
 end

 function MOD:UpdateLocals()
-	CHAT_WIDTH = (SV.db.SVDock.dockLeftWidth or 350) - 10;
-	CHAT_HEIGHT = (SV.db.SVDock.dockLeftHeight or 180) - 15;
+	CHAT_WIDTH = (SV.SVDock.db.dockLeftWidth or 350) - 10;
+	CHAT_HEIGHT = (SV.SVDock.db.dockLeftHeight or 180) - 15;
 	CHAT_THROTTLE = self.db.throttleInterval;
 	CHAT_ALLOW_URL = self.db.url;
 	CHAT_HOVER_URL = self.db.hyperlinkHover;
@@ -928,12 +927,12 @@ function MOD:UpdateLocals()
 end

 function MOD:ReLoad()
-	if(not SV.db.SVChat.enable) then return end
+	if(not self.db.enable) then return end
 	self:RefreshChatFrames(true)
 end

 function MOD:Load()
-	if(not SV.db.SVChat.enable) then return end
+	if(not self.db.enable) then return end

 	ScrollIndicator:SetParent(SuperDockWindowLeft)
 	ScrollIndicator:SetSize(20,20)
@@ -973,7 +972,7 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-CONFIGS["SVChat"] = {
+MOD.db = {
 	["enable"] = true,
 	["tabHeight"] = 20,
 	["tabWidth"] = 75,
@@ -998,4 +997,4 @@ CONFIGS["SVChat"] = {
 	["basicTools"] = true,
 }

-Registry:NewPackage(MOD, "SVChat")
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVChat")
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/dock/SVDock.lua b/Interface/AddOns/SVUI/packages/dock/SVDock.lua
index 06aae69..e4f9353 100644
--- a/Interface/AddOns/SVUI/packages/dock/SVDock.lua
+++ b/Interface/AddOns/SVUI/packages/dock/SVDock.lua
@@ -34,9 +34,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
-local CONFIGS = SV.private
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD, DOCKLET_CACHE, TOOL_CACHE, SAFETY_CACHE = {}, {}, {}, {};
 local PREV_TOOL, DEFAULT_DOCKLET;
 --[[
@@ -115,16 +114,15 @@ end

 local ToggleDocks = function(self)
 	GameTooltip:Hide()
-	if MOD.SuperDockFaded then
-		MOD.SuperDockFaded = nil;
+	if SVUI_Cache.Docks.SuperDockFaded then
+		SVUI_Cache.Docks.SuperDockFaded = nil;
 		SV:SecureFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1)
 		SV:SecureFadeIn(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 1)
 	else
-		MOD.SuperDockFaded = true;
+		SVUI_Cache.Docks.SuperDockFaded = true;
 		SV:SecureFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0, true)
 		SV:SecureFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0, true)
-	end
-	SVUI_Cache["Dock"].SuperDockFaded = MOD.SuperDockFaded
+	end
 end

 local Docklet_OnShow = function(self)
@@ -158,7 +156,7 @@ local DockButtonDeactivate = function(self)
 end

 local DockletButton_OnEnter = function(self, ...)
-	if MOD.SuperDockFaded then
+	if SVUI_Cache.Docks.SuperDockFaded then
 		LeftSuperDock:Show()
 		SV:SecureFadeIn(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 1)
 		RightSuperDock:Show()
@@ -179,7 +177,7 @@ local DockletButton_OnEnter = function(self, ...)
 end

 local DockletButton_OnLeave = function(self, ...)
-	if MOD.SuperDockFaded then
+	if SVUI_Cache.Docks.SuperDockFaded then
 		SV:SecureFadeOut(LeftSuperDock, 0.2, LeftSuperDock:GetAlpha(), 0, true)
 		SV:SecureFadeOut(RightSuperDock, 0.2, RightSuperDock:GetAlpha(), 0, true)
 	end
@@ -428,18 +426,16 @@ local function BorderColorUpdates()
 	SVUIBottomPanel:SetBackdropBorderColor(0,0,0,1)
 end

-Registry:NewCallback(BorderColorUpdates)
+SVLib:NewCallback(BorderColorUpdates)

 function MOD:CreateDockPanels()
-	self.SuperDockFaded = SVUI_Cache["Dock"].SuperDockFaded
-
 	local leftWidth = self.db.dockLeftWidth or 350;
 	local leftHeight = self.db.dockLeftHeight or 180;
 	local rightWidth = self.db.dockRightWidth or 350;
 	local rightHeight = self.db.dockRightHeight or 180;
 	local buttonsize = self.db.buttonSize or 22;
 	local spacing = self.db.buttonSpacing or 4;
-	local statBarWidth = self.db.dockStatWidth
+	local statBarWidth = self.db.dockStatWidth or defaultStatBarWidth
 	local STATS = SV.SVStats;

 	-- [[ CORNER BUTTON ]] --
@@ -453,7 +449,7 @@ function MOD:CreateDockPanels()
 	leftbutton.icon:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Icons\\SVUI-EMBLEM")
 	leftbutton.TText = L["Toggle Docks"]
 	leftbutton:RegisterForClicks("AnyUp")
-	MOD:ActivateDockletButton(leftbutton, ToggleDocks)
+	self:ActivateDockletButton(leftbutton, ToggleDocks)
 	-- [[ TOOLBARS AND OTHER NONSENSE ]] --

 	local toolbarLeft = CreateFrame("Frame", "SuperDockToolBarLeft", SV.UIParent)
@@ -500,7 +496,7 @@ function MOD:CreateDockPanels()
 	rightbutton.icon:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Icons\DOCK-HENCHMAN]])
 	rightbutton.TText = "Call Henchman!"
 	rightbutton:RegisterForClicks("AnyUp")
-	MOD:ActivateDockletButton(rightbutton, SV.ToggleHenchman)
+	self:ActivateDockletButton(rightbutton, SV.ToggleHenchman)
 	-- [[ TOOLBARS AND OTHER NONSENSE ]] --

 	local toolbarRight = CreateFrame("Frame", "SuperDockToolBarRight", SV.UIParent)
@@ -533,7 +529,7 @@ function MOD:CreateDockPanels()
 	rightwindow:Size(rightWidth, rightHeight)
 	rightdock.backdrop = SetSuperDockStyle(rightwindow)

-	if MOD.SuperDockFaded then LeftSuperDock:Hide()RightSuperDock:Hide() end
+	if SVUI_Cache.Docks.SuperDockFaded then LeftSuperDock:Hide() RightSuperDock:Hide() end

 	local toolbarTop = CreateFrame("Frame", "SuperDockToolBarTop", SV.UIParent)
 	toolbarTop:Point("TOPLEFT", SV.UIParent, "TOPLEFT", 2, -4)
@@ -752,7 +748,6 @@ function SV:IsDockletReady(arg)
 	if arg == "DockletMain" or arg == "DockletExtra" then
 		addon = MOD.db.docklets[arg]
 	end
-	if addon:find("Skada") then addon = "Skada" end
 	if addon == nil or addon == "None" or not IsAddOnLoaded(addon) then
 		return false
 	end
@@ -905,7 +900,7 @@ function MOD:UpdateSuperDock()
 	local rightHeight = self.db.dockRightHeight or 180;
 	local buttonsize = self.db.buttonSize or 22;
 	local spacing = self.db.buttonSpacing or 4;
-	local statBarWidth = self.db.dockStatWidth
+	local statBarWidth = self.db.dockStatWidth or defaultStatBarWidth

 	_G["LeftSuperDock"]:Size(leftWidth, leftHeight)
 	_G["SuperDockAlertLeft"]:Width(leftWidth)
@@ -966,6 +961,8 @@ function MOD:ReLoad()
 end

 function MOD:Load()
+	SVUI_Cache = SVUI_Cache or {}
+	SVUI_Cache.Docks = SVUI_Cache.Docks or { SuperDockFaded = false }
 	self:CreateSuperBorders()
 	self:CreateDockPanels()
 	local width = RightSuperDock:GetWidth();
@@ -1009,7 +1006,7 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-CONFIGS["SVDock"] = {
+MOD.db = {
 	["enable"] = true,
 	["dockLeftWidth"] = 412,
 	["dockLeftHeight"] = 224,
@@ -1032,4 +1029,4 @@ CONFIGS["SVDock"] = {
 	},
 }

-Registry:NewPackage(MOD, "SVDock")
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVDock")
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/gear/SVGear.lua b/Interface/AddOns/SVUI/packages/gear/SVGear.lua
index 479d602..e332801 100644
--- a/Interface/AddOns/SVUI/packages/gear/SVGear.lua
+++ b/Interface/AddOns/SVUI/packages/gear/SVGear.lua
@@ -33,9 +33,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
-local CONFIGS = SV.private
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD = {};
 --[[
 ##########################################################
@@ -306,7 +305,7 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-CONFIGS["SVGear"] = {
+MOD.db = {
 	["enable"] = true,
 	["specialization"] = {
 		["enable"] = false,
@@ -328,4 +327,4 @@ CONFIGS["SVGear"] = {
 		setoverlay = true,
 	}
 }
-Registry:NewPackage(MOD, "SVGear");
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVGear");
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/henchmen/SVHenchmen.lua b/Interface/AddOns/SVUI/packages/henchmen/SVHenchmen.lua
index da42f41..f6cbe17 100644
--- a/Interface/AddOns/SVUI/packages/henchmen/SVHenchmen.lua
+++ b/Interface/AddOns/SVUI/packages/henchmen/SVHenchmen.lua
@@ -14,9 +14,8 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
-local CONFIGS = SV.private
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD = {}
 --[[
 ##########################################################
@@ -694,7 +693,7 @@ INVITE AUTOMATONS
 ##########################################################
 ]]--
 function MOD:PARTY_INVITE_REQUEST(event, arg)
-	if not SV.db.SVHenchmen.autoAcceptInvite then return end
+	if not self.db.autoAcceptInvite then return end

 	if IsInGroup() or QueueStatusMinimapButton:IsShown() then return end

@@ -933,7 +932,7 @@ function MOD:Load()
 		self:RegisterEvent(event)
 	end

-	if SV.db.SVHenchmen.pvpautorelease then
+	if self.db.pvpautorelease then
 		local autoReleaseHandler = CreateFrame("frame")
 		autoReleaseHandler:RegisterEvent("PLAYER_DEAD")
 		autoReleaseHandler:SetScript("OnEvent",function(self,event)
@@ -974,7 +973,7 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-CONFIGS["SVHenchmen"] = {
+MOD.db = {
 	["enable"] = true,
 	["autoRoll"] = false,
 	["vendorGrays"] = true,
@@ -991,4 +990,4 @@ CONFIGS["SVHenchmen"] = {
 	["autoRepair"] = "PLAYER",
 }

-Registry:NewPackage(MOD, "SVHenchmen")
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVHenchmen")
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/map/SVMap.lua b/Interface/AddOns/SVUI/packages/map/SVMap.lua
index 79ffa70..4094ab7 100644
--- a/Interface/AddOns/SVUI/packages/map/SVMap.lua
+++ b/Interface/AddOns/SVUI/packages/map/SVMap.lua
@@ -37,9 +37,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
-local CONFIGS = SV.private
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD = {};
 MOD.MinimapButtons = {}
 --[[
@@ -452,7 +451,7 @@ end
 local WorldMapFrameOnShow_Hook = function()
 	MOD:RegisterEvent("PLAYER_REGEN_DISABLED");
 	if InCombatLockdown()then return end
-	if(not SV.db.SVMap.tinyWorldMap and not Initialized) then
+	if(not SV.SVMap.db.tinyWorldMap and not Initialized) then
       WorldMap_ToggleSizeUp()
       Initialized = true
     end
@@ -633,7 +632,7 @@ local function UpdateSizing()
 end

 function MOD:RefreshMiniMap()
-	if(not SV.db.SVMap.enable) then return; end
+	if(not self.db.enable) then return; end
 	if(InCombatLockdown()) then
 		self.CombatLocked = true
 		return
@@ -857,7 +856,7 @@ local function LoadWorldMap()
 	CoordsHolder.mouseCoords:SetText(MOUSE_LABEL..":   0, 0")

 	DropDownList1:HookScript('OnShow',function(self)
-		if(DropDownList1:GetScale() ~= UIParent:GetScale() and SV.db.SVMap.tinyWorldMap) then
+		if(DropDownList1:GetScale() ~= UIParent:GetScale() and SV.SVMap.db.tinyWorldMap) then
 			DropDownList1:SetScale(UIParent:GetScale())
 		end
 	end)
@@ -904,12 +903,12 @@ BUILD FUNCTION / UPDATE
 ##########################################################
 ]]--
 function MOD:ReLoad()
-	if(not SV.db.SVMap.enable) then return; end
+	if(not self.db.enable) then return; end
 	self:RefreshMiniMap()
 end

 function MOD:Load()
-	if(not SV.db.SVMap.enable) then
+	if(not self.db.enable) then
 		Minimap:SetMaskTexture('Textures\\MinimapMask')
 		return
 	end
@@ -949,7 +948,7 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-CONFIGS["SVMap"] = {
+MOD.db = {
 	["incompatible"] = {
 		["SexyMap"] = true,
 		["SquareMap"] = true,
@@ -973,4 +972,4 @@ CONFIGS["SVMap"] = {
 	},
 }

-Registry:NewPackage(MOD, "SVMap")
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVMap")
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/override/SVOverride.lua b/Interface/AddOns/SVUI/packages/override/SVOverride.lua
index 0ca0d5a..dc5752f 100644
--- a/Interface/AddOns/SVUI/packages/override/SVOverride.lua
+++ b/Interface/AddOns/SVUI/packages/override/SVOverride.lua
@@ -34,10 +34,9 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local LSM = LibStub("LibSharedMedia-3.0")
-local CONFIGS = SV.private
 local MOD = {};
 MOD.LewtRollz = {};
 --[[
@@ -128,7 +127,7 @@ local CaptureBarHandler = function()
 end

 local ErrorFrameHandler = function(self, event)
-	if not SV.db.system.hideErrorFrame then return end
+	if not SV.db.hideErrorFrame then return end
 	if event == 'PLAYER_REGEN_DISABLED' then
 		UIErrorsFrame:UnregisterEvent('UI_ERROR_MESSAGE')
 	else
@@ -438,7 +437,7 @@ local MirrorBarToggleHandler = function(_, event, arg, ...)
 end

 local MirrorBarUpdateHandler = function(_, event)
-	if not GetCVarBool("lockActionBars") and SV.db.SVBar.enable then
+	if not GetCVarBool("lockActionBars") and SV.SVBar.db.enable then
 		SetCVar("lockActionBars", 1)
 	end
 	if(event == "PLAYER_ENTERING_WORLD") then
@@ -960,7 +959,7 @@ local LootComplexEventsHandler = function(_, event, arg1, arg2)
 		rollFrame:SetPoint("CENTER",WorldFrame,"CENTER")
 		rollFrame:Show()
 		AlertFrame_FixAnchors()
-		if SV.db.SVHenchmen.autoRoll and UnitLevel('player') == MAX_PLAYER_LEVEL and quality == 2 and not bindOnPickUp then
+		if SV.SVHenchmen.db.autoRoll and UnitLevel('player') == MAX_PLAYER_LEVEL and quality == 2 and not bindOnPickUp then
 			if canBreak then
 				RollOnLoot(arg1,3)
 			else
@@ -1131,7 +1130,7 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-CONFIGS["SVOverride"] = {
+MOD.db = {
 	["enable"] = true,
 	["loot"] = true,
 	["lootRoll"] = true,
@@ -1139,4 +1138,4 @@ CONFIGS["SVOverride"] = {
 	["lootRollHeight"] = 28,
 }

-Registry:NewPackage(MOD, "SVOverride");
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVOverride");
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/plates/SVPlate.lua b/Interface/AddOns/SVUI/packages/plates/SVPlate.lua
index 1a6931a..0e4fa9f 100644
--- a/Interface/AddOns/SVUI/packages/plates/SVPlate.lua
+++ b/Interface/AddOns/SVUI/packages/plates/SVPlate.lua
@@ -50,10 +50,9 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local LSM = LibStub("LibSharedMedia-3.0")
-local CONFIGS = SV.private
 local MOD = {};
 --[[
 ##########################################################
@@ -1568,7 +1567,7 @@ function MOD:ReLoad()
 end

 function MOD:Load()
-	if SV.db["SVPlate"].enable ~= true then return end
+	if self.db.enable ~= true then return end
 	self:UpdateLocals()
 	self:RegisterEvent("PLAYER_ENTERING_WORLD")
 	self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
@@ -1583,7 +1582,7 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-CONFIGS["SVPlate"] = {
+MOD.db = {
 	["enable"] = true,
 	["filter"] = {},
 	["font"] = "SVUI Name Font",
@@ -1648,4 +1647,4 @@ CONFIGS["SVPlate"] = {
 	},
 }

-Registry:NewPackage(MOD, "SVPlate")
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVPlate")
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/stats/SVStats.lua b/Interface/AddOns/SVUI/packages/stats/SVStats.lua
index 1bef13e..bbbb839 100644
--- a/Interface/AddOns/SVUI/packages/stats/SVStats.lua
+++ b/Interface/AddOns/SVUI/packages/stats/SVStats.lua
@@ -34,10 +34,10 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local LSM = LibStub("LibSharedMedia-3.0")
-local CONFIGS = SV.private
+local LDB = LibStub("LibDataBroker-1.1")
 local MOD = {};
 MOD.Anchors = {};
 MOD.Statistics = {};
@@ -620,7 +620,52 @@ do
 		end
 		if ForceHideBGStats then ForceHideBGStats = nil end
 	end
-end
+end
+
+local function LoadStatBroker()
+	local OnEnter, OnLeave, lastObj;
+  	for dataName, dataObj in LDB:DataObjectIterator()do
+	    OnEnter = nil;
+	    OnLeave = nil;
+	    lastObj = nil;
+	    if dataObj.OnEnter then
+	      	OnEnter = function(self)
+				MOD:Tip(self)
+				dataObj.OnTooltipShow(MOD.tooltip)
+				MOD:ShowTip()
+			end
+	    elseif dataObj.OnTooltipShow then
+	      	OnEnter = function(self)
+				MOD:Tip(self)
+				dataObj.OnTooltipShow(MOD.tooltip)
+				MOD:ShowTip()
+			end
+	    end;
+	    if dataObj.OnLeave then
+			OnLeave = function(self)
+				dataObj.OnLeave(self)
+				MOD.tooltip:Hide()
+			end
+	    end;
+	    local OnClick = function(self, e)
+	      	dataObj.OnClick(self, e)
+	    end;
+	    local CallBack = function(_, name, _, value, _)
+			if(value == nil or len(value) > 5 or value == "n / a" or name == value) then
+				lastObj.text:SetText(value ~= "n / a" and value or name)
+			else
+				lastObj.text:SetText(name..": "..hexString..value.."|r")
+			end
+	    end;
+	    local OnEvent = function(self)
+			lastObj = self;
+			LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..dataName.."_text", CallBack)
+			LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..dataName.."_value", CallBack)
+			LDB.callbacks:Fire("LibDataBroker_AttributeChanged_"..dataName.."_text", dataName, nil, dataObj.text, dataObj)
+	    end;
+	    MOD:Extend(dataName, {"PLAYER_ENTER_WORLD"}, OnEvent, nil, OnClick, OnEnter, OnLeave)
+  	end
+end
 --[[
 ##########################################################
 BUILD FUNCTION / UPDATE
@@ -631,15 +676,18 @@ function MOD:ReLoad()
 end

 function MOD:Load()
+	local SVUI_Global = _G.SVUI_Global
 	local hexHighlight = SV:HexColor("highlight") or "FFFFFF"
 	local hexClass = classColor.colorStr
 	BGStatString = "|cff" .. hexHighlight .. "%s: |c" .. hexClass .. "%s|r";
-	SVUI_Global["Accountant"] = SVUI_Global["Accountant"] or {};
-	SVUI_Global["Accountant"][playerRealm] = SVUI_Global["Accountant"][playerRealm] or {};
-	SVUI_Global["Accountant"][playerRealm]["gold"] = SVUI_Global["Accountant"][playerRealm]["gold"] or {};
-	SVUI_Global["Accountant"][playerRealm]["gold"][playerName] = SVUI_Global["Accountant"][playerRealm]["gold"][playerName] or 0;
-	SVUI_Global["Accountant"][playerRealm]["tokens"] = SVUI_Global["Accountant"][playerRealm]["tokens"] or {};
-	SVUI_Global["Accountant"][playerRealm]["tokens"][playerName] = SVUI_Global["Accountant"][playerRealm]["tokens"][playerName] or 738;
+	SVUI_Global.Accountant = SVUI_Global.Accountant or {};
+	SVUI_Global.Accountant[playerRealm] = SVUI_Global.Accountant[playerRealm] or {};
+	SVUI_Global.Accountant[playerRealm]["gold"] = SVUI_Global.Accountant[playerRealm]["gold"] or {};
+	SVUI_Global.Accountant[playerRealm]["gold"][playerName] = SVUI_Global.Accountant[playerRealm]["gold"][playerName] or 0;
+	SVUI_Global.Accountant[playerRealm]["tokens"] = SVUI_Global.Accountant[playerRealm]["tokens"] or {};
+	SVUI_Global.Accountant[playerRealm]["tokens"][playerName] = SVUI_Global.Accountant[playerRealm]["tokens"][playerName] or 738;
+
+	LoadStatBroker()

 	self:LoadServerGold()
 	self:CacheRepData()
@@ -663,7 +711,7 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-CONFIGS["SVStats"] = {
+MOD.db = {
 	["enable"] = true,
 	["font"] = "SVUI Number Font",
 	["fontSize"] = 12,
@@ -701,4 +749,4 @@ CONFIGS["SVStats"] = {
 	["panelTransparency"] = false,
 }

-Registry:NewPackage(MOD, "SVStats")
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVStats")
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/bags.lua b/Interface/AddOns/SVUI/packages/stats/stats/bags.lua
index aa9cba7..dea4390 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/bags.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/bags.lua
@@ -50,8 +50,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD = SV.SVStats;
 --[[
 ##########################################################
@@ -100,5 +100,5 @@ local BagsColorUpdate = function()
 	end
 end

-Registry:NewCallback(BagsColorUpdate)
+SVLib:NewCallback(BagsColorUpdate)
 MOD:Extend("Bags", StatEvents,	bags_events, nil, bags_click, bags_focus);
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/cta.lua b/Interface/AddOns/SVUI/packages/stats/stats/cta.lua
index 5901ec0..020ed42 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/cta.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/cta.lua
@@ -50,8 +50,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD = SV.SVStats;
 --[[
 ##########################################################
@@ -156,6 +156,6 @@ local CTAColorUpdate = function()
 		CTA_OnEvent(currentObject)
 	end
 end
-Registry:NewCallback(CTAColorUpdate)
+SVLib:NewCallback(CTAColorUpdate)

 MOD:Extend('Call to Arms', StatEvents, CTA_OnEvent, nil, CTA_OnClick, CTA_OnEnter)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/dps.lua b/Interface/AddOns/SVUI/packages/stats/stats/dps.lua
index c791785..caea669 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/dps.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/dps.lua
@@ -32,8 +32,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD = SV.SVStats;
 --[[
 ##########################################################
@@ -125,5 +125,5 @@ local DPSColorUpdate = function()
 	end
 end

-Registry:NewCallback(DPSColorUpdate)
+SVLib:NewCallback(DPSColorUpdate)
 MOD:Extend('DPS', StatEvents, DPS_OnEvent, nil, DPS_OnClick, DPS_OnEnter)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/durability.lua b/Interface/AddOns/SVUI/packages/stats/stats/durability.lua
index d6fd41e..70a32e4 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/durability.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/durability.lua
@@ -50,8 +50,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local LSM = LibStub("LibSharedMedia-3.0")
 local MOD = SV.SVStats;
 --[[
@@ -86,7 +86,7 @@ local function Durability_OnEvent(self, ...)
 		self.text:SetAllPoints(self)
 		self.text:SetJustifyH("CENTER")
 		self.barframe:Hide()
-		self.text:SetFontTemplate(LSM:Fetch("font",SV.db.SVStats.font),SV.db.SVStats.fontSize,SV.db.SVStats.fontOutline)
+		self.text:SetFontTemplate(LSM:Fetch("font",MOD.db.font),MOD.db.fontSize,MOD.db.fontOutline)
 	end
 	for slot,name in pairs(inventoryMap)do
 		local slotID = GetInventorySlotInfo(slot)
@@ -107,7 +107,7 @@ local function DurabilityBar_OnEvent(self, ...)
 	if not self.barframe:IsShown() then
 		self.barframe:Show()
 		self.barframe.icon.texture:SetTexture("Interface\\Addons\\SVUI\\assets\\artwork\\Icons\\STAT-DUR")
-		self.text:SetFontTemplate(LSM:Fetch("font",SV.db.SVStats.font),SV.db.SVStats.fontSize,"NONE")
+		self.text:SetFontTemplate(LSM:Fetch("font",MOD.db.font),MOD.db.fontSize,"NONE")
 	end
 	for slot,name in pairs(inventoryMap)do
 		local slotID = GetInventorySlotInfo(slot)
@@ -145,7 +145,7 @@ local DurColorUpdate = function()
 		Durability_OnEvent(currentObject)
 	end
 end
-Registry:NewCallback(DurColorUpdate)
+SVLib:NewCallback(DurColorUpdate)

 MOD:Extend("Durability", StatEvents, Durability_OnEvent, nil, Durability_OnClick, Durability_OnEnter)
 MOD:Extend("Durability Bar", StatEvents, DurabilityBar_OnEvent, nil, Durability_OnClick, Durability_OnEnter)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/experience.lua b/Interface/AddOns/SVUI/packages/stats/stats/experience.lua
index e28184e..b7c1dc6 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/experience.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/experience.lua
@@ -33,7 +33,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local LSM = LibStub("LibSharedMedia-3.0")
 local MOD = SV.SVStats;
 --[[
@@ -68,7 +68,7 @@ local function Experience_OnEvent(self, ...)
 		self.text:SetAllPoints(self)
 		self.text:SetJustifyH("CENTER")
 		self.barframe:Hide()
-		self.text:SetFontTemplate(LSM:Fetch("font",SV.db.SVStats.font),SV.db.SVStats.fontSize,SV.db.SVStats.fontOutline)
+		self.text:SetFontTemplate(LSM:Fetch("font",SV.SVStats.db.font),SV.SVStats.db.fontSize,SV.SVStats.db.fontOutline)
 	end
 	local f, g = getUnitXP("player")
 	local h = GetXPExhaustion()
@@ -90,7 +90,7 @@ local function ExperienceBar_OnEvent(self, ...)
 	if (not self.barframe:IsShown())then
 		self.barframe:Show()
 		self.barframe.icon.texture:SetTexture("Interface\\Addons\\SVUI\\assets\\artwork\\Icons\\STAT-XP")
-		self.text:SetFontTemplate(LSM:Fetch("font",SV.db.SVStats.font),SV.db.SVStats.fontSize,"NONE")
+		self.text:SetFontTemplate(LSM:Fetch("font",SV.SVStats.db.font),SV.SVStats.db.fontSize,"NONE")
 	end
 	if not self.barframe.bar.extra:IsShown() then
 		self.barframe.bar.extra:Show()
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/friends.lua b/Interface/AddOns/SVUI/packages/stats/stats/friends.lua
index d009f08..1a51468 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/friends.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/friends.lua
@@ -50,8 +50,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD = SV.SVStats;
 --[[
 ##########################################################
@@ -381,6 +381,6 @@ local FriendsColorUpdate = function()
 	end
 end

-Registry:NewCallback(FriendsColorUpdate)
+SVLib:NewCallback(FriendsColorUpdate)

 MOD:Extend('Friends', StatEvents, OnEvent, nil, Click, OnEnter)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/gold.lua b/Interface/AddOns/SVUI/packages/stats/stats/gold.lua
index 9976ff6..5619fd8 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/gold.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/gold.lua
@@ -50,7 +50,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVStats;
 --[[
 ##########################################################
@@ -101,7 +101,7 @@ end
 local function Gold_OnEvent(self, event,...)
 	if not IsLoggedIn() then return end
 	local current = GetMoney()
-	recorded = SVUI_Global["Accountant"][playerRealm]["gold"][playerName] or GetMoney();
+	recorded = SVUI_Global.Accountant[playerRealm]["gold"][playerName] or GetMoney();
 	local adjusted = current - recorded;
 	if recorded > current then
 		loss = loss - adjusted
@@ -109,13 +109,13 @@ local function Gold_OnEvent(self, event,...)
 		gains = gains + adjusted
 	end
 	self.text:SetText(FormatCurrency(current, MOD.db.shortGold))
-	SVUI_Global["Accountant"][playerRealm]["gold"][playerName] = GetMoney()
+	SVUI_Global.Accountant[playerRealm]["gold"][playerName] = GetMoney()
 end

 local function Gold_OnClick(self, button)
 	if IsLeftControlKeyDown() and IsShiftKeyDown() then
-		SVUI_Global["Accountant"][playerRealm]["gold"] = {};
-		SVUI_Global["Accountant"][playerRealm]["gold"][playerName] = GetMoney();
+		SVUI_Global.Accountant[playerRealm]["gold"] = {};
+		SVUI_Global.Accountant[playerRealm]["gold"][playerName] = GetMoney();
 		Gold_OnEvent(self)
 		MOD.tooltip:Hide()
 	else
@@ -134,7 +134,7 @@ local function Gold_OnEnter(self)
 		MOD.tooltip:AddDoubleLine(L["Profit:"],FormatCurrency(gains - loss),0,1,0,1,1,1)
 	end
 	MOD.tooltip:AddLine(" ")
-	local cash = SVUI_Global["Accountant"][playerRealm]["gold"][playerName];
+	local cash = SVUI_Global.Accountant[playerRealm]["gold"][playerName];
 	MOD.tooltip:AddLine(L[playerName..": "])
 	MOD.tooltip:AddDoubleLine(L["Total: "], FormatCurrency(cash), 1,1,1,1,1,1)
 	MOD.tooltip:AddLine(" ")
@@ -157,9 +157,10 @@ end
 MOD:Extend('Gold', StatEvents, Gold_OnEvent, nil, Gold_OnClick, Gold_OnEnter);

 function MOD:LoadServerGold()
+	local SVUI_Global = _G.SVUI_Global
 	local totalGold = 0;
-	for name,amount in pairs(SVUI_Global["Accountant"][playerRealm]["gold"])do
-		if SVUI_Global["Accountant"][playerRealm]["gold"][name] then
+	for name,amount in pairs(SVUI_Global.Accountant[playerRealm]["gold"])do
+		if SVUI_Global.Accountant[playerRealm]["gold"][name] then
 			serverGold[name] = amount;
 			totalGold = totalGold + amount
 		end
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/guild.lua b/Interface/AddOns/SVUI/packages/stats/stats/guild.lua
index 81aa645..675aab6 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/guild.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/guild.lua
@@ -37,8 +37,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD = SV.SVStats;
 --[[
 ##########################################################
@@ -306,6 +306,6 @@ local GuildColorUpdate = function()
 		Guild_OnEvent(currentObject, 'SVUI_COLOR_UPDATE')
 	end
 end
-Registry:NewCallback(GuildColorUpdate)
+SVLib:NewCallback(GuildColorUpdate)

 MOD:Extend('Guild', StatEvents, Guild_OnEvent, nil, Guild_OnClick, Guild_OnEnter)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/hps.lua b/Interface/AddOns/SVUI/packages/stats/stats/hps.lua
index 912b008..bc9bf17 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/hps.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/hps.lua
@@ -33,8 +33,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD = SV.SVStats;
 --[[
 ##########################################################
@@ -132,5 +132,5 @@ local HPSColorUpdate = function()
 	end
 end

-Registry:NewCallback(HPSColorUpdate)
+SVLib:NewCallback(HPSColorUpdate)
 MOD:Extend('HPS', StatEvents, HPS_OnEvent, nil, HPS_OnClick, HPS_OnEnter)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/reputation.lua b/Interface/AddOns/SVUI/packages/stats/stats/reputation.lua
index 58beb27..c735793 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/reputation.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/reputation.lua
@@ -34,7 +34,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVStats;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/system.lua b/Interface/AddOns/SVUI/packages/stats/stats/system.lua
index 194cc27..c1af43e 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/system.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/system.lua
@@ -38,7 +38,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVStats;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/time.lua b/Interface/AddOns/SVUI/packages/stats/stats/time.lua
index 3c759d5..f61e803 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/time.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/time.lua
@@ -36,8 +36,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local MOD = SV.SVStats;
 --[[
 ##########################################################
@@ -233,6 +233,6 @@ local ColorUpdate = function()
 	end
 end

-Registry:NewCallback(ColorUpdate)
+SVLib:NewCallback(ColorUpdate)

 MOD:Extend('Time', {"UPDATE_INSTANCE_INFO"}, OnEvent, Update, Click, OnEnter, OnLeave)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua b/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua
index 464ea65..16f0da8 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/tokens.lua
@@ -32,7 +32,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVStats;
 --[[
 ##########################################################
@@ -80,7 +80,7 @@ end

 local function TokensEventHandler(self, event,...)
     if not IsLoggedIn() or not self then return end
-    local id = SVUI_Global["Accountant"][playerRealm]["tokens"][playerName];
+    local id = SVUI_Global.Accountant[playerRealm]["tokens"][playerName];
     local _, current, tex = GetCurrencyInfo(id)
     local currentText = ("\124T%s:12\124t %s"):format(tex, current);
     self.text:SetText(currentText)
@@ -90,7 +90,7 @@ local function AddToTokenMenu(id)
 	local name, _, tex, _, _, _, _ = GetCurrencyInfo(id)
 	local itemName = "\124T"..tex..":12\124t "..name;
 	local fn = function()
-		SVUI_Global["Accountant"][playerRealm]["tokens"][playerName] = id;
+		SVUI_Global.Accountant[playerRealm]["tokens"][playerName] = id;
 		TokensEventHandler(TokenParent)
 	end
 	tinsert(TokenMenuList, {text = itemName, func = fn});
diff --git a/Interface/AddOns/SVUI/packages/tip/SVTip.lua b/Interface/AddOns/SVUI/packages/tip/SVTip.lua
index 1384ff4..ad02c44 100644
--- a/Interface/AddOns/SVUI/packages/tip/SVTip.lua
+++ b/Interface/AddOns/SVUI/packages/tip/SVTip.lua
@@ -37,10 +37,9 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local LSM = LibStub("LibSharedMedia-3.0")
-local CONFIGS = SV.private
 local MOD = {};
 --[[
 ##########################################################
@@ -664,7 +663,7 @@ local _hook_GameTooltip_OnTooltipSetSpell = function(self)
 end

 local _hook_GameTooltip_SetDefaultAnchor = function(self, parent)
-	if SV.db.SVTip.enable ~= true then return end
+	if MOD.db.enable ~= true then return end
 	if(self:GetAnchorType() ~= "ANCHOR_NONE") then return end
 	if InCombatLockdown() and MOD.db.visibility.combat then
 		self:Hide()
@@ -786,7 +785,7 @@ local _hook_OnTipHide = function(self)
 end

 local function ApplyTooltipSkins()
-	local barHeight = SV.db.SVTip.healthBar.height
+	local barHeight = MOD.db.healthBar.height

 	for i, tooltip in pairs(tooltips) do
 		if(not tooltip) then return end
@@ -956,7 +955,7 @@ function MOD:Load()
 	BNToastFrame:Point("TOPRIGHT", SVUI_MinimapFrame, "BOTTOMLEFT", 0, -10)
 	SV:SetSVMovable(BNToastFrame, L["BNet Frame"], nil, nil, nil, nil, "BNET")
 	NewHook(BNToastFrame, "SetPoint", _hook_BNToastOnShow)
-	if not SV.db.SVTip.enable then return end
+	if not self.db.enable then return end

 	local anchor = CreateFrame("Frame", "SVUI_ToolTip", SV.UIParent)
 	anchor:Point("BOTTOMRIGHT", RightSuperDock, "TOPRIGHT", 0, 60)
@@ -1012,7 +1011,7 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-CONFIGS["SVTip"] = {
+MOD.db = {
 	["enable"] = true,
 	["cursorAnchor"] = false,
 	["targetInfo"] = true,
@@ -1034,4 +1033,4 @@ CONFIGS["SVTip"] = {
 	},
 }

-Registry:NewPackage(MOD, "SVTip")
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVTip")
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/unit/SVUnit.lua b/Interface/AddOns/SVUI/packages/unit/SVUnit.lua
index 6e0a8de..52650b3 100644
--- a/Interface/AddOns/SVUI/packages/unit/SVUnit.lua
+++ b/Interface/AddOns/SVUI/packages/unit/SVUnit.lua
@@ -45,9 +45,9 @@ local SVUI_ADDON_NAME, SV = ...
 local oUF_Villain = SV.oUF
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
-local LSM = LibStub("LibSharedMedia-3.0")
+local SVLib = LibStub("LibSuperVillain-1.0");
+local L = SVLib:Lang();
+local LSM = LibStub("LibSharedMedia-3.0");
 --[[
 ##########################################################
 MODULE AND INNER CLASSES
@@ -158,7 +158,7 @@ do
 	end

 	function oUF_Villain:DisableBlizzard(unit)
-		if(not SV.db.SVUnit.enable) then return end
+		if(not MOD.db.enable) then return end
 		if (not unit) or InCombatLockdown() then return end

 		if (unit == "player") then
@@ -298,7 +298,7 @@ function MOD:RestrictChildren(parentFrame, ...)
 end

 function MOD:ResetUnitOptions(unit)
-	SV.db:SetDefault("SVUnit", unit)
+	self.db:Reset(unit)
 	self:RefreshUnitFrames()
 end

@@ -324,9 +324,9 @@ function MOD:RefreshUnitColors()
 	local r, g, b = db.health[1], db.health[2], db.health[3]
 	oUF_Villain.colors.smooth = {1, 0, 0, 1, 1, 0, r, g, b}

-	oUF_Villain.SVConfigs.classbackdrop = SV.db.SVUnit.classbackdrop
-	oUF_Villain.SVConfigs.healthclass = SV.db.SVUnit.healthclass
-	oUF_Villain.SVConfigs.colorhealthbyvalue = SV.db.SVUnit.colorhealthbyvalue
+	oUF_Villain.SVConfigs.classbackdrop = self.db.classbackdrop
+	oUF_Villain.SVConfigs.healthclass = self.db.healthclass
+	oUF_Villain.SVConfigs.colorhealthbyvalue = self.db.colorhealthbyvalue
 end

 function MOD:RefreshAllUnitMedia()
@@ -372,7 +372,7 @@ function MOD:RefreshUnitFrames()
 		  group:SetConfigEnvironment()
 		end
 	end
-	if SV.db.SVUnit.disableBlizzard then
+	if self.db.disableBlizzard then
 		oUF_Villain:DisableBlizzard('party')
 	end
 	collectgarbage("collect")
@@ -1417,12 +1417,12 @@ BUILD FUNCTION / UPDATE
 ##########################################################
 ]]--
 function MOD:ReLoad()
-	if(not SV.db.SVUnit.enable) then return end
+	if(not self.db.enable) then return end
 	self:RefreshUnitFrames()
 end

 function MOD:Load()
-	if(not SV.db.SVUnit.enable) then return end
+	if(not self.db.enable) then return end
 	self:RefreshUnitColors()

 	local SVUI_UnitFrameParent = CreateFrame("Frame", "SVUI_UnitFrameParent", SV.UIParent, "SecureHandlerStateTemplate")
@@ -1432,7 +1432,7 @@ function MOD:Load()
 	self:RegisterEvent("PLAYER_ENTERING_WORLD")
 	self:RegisterEvent("PLAYER_REGEN_DISABLED")

-	if(SV.db.SVUnit.disableBlizzard) then
+	if(self.db.disableBlizzard) then
 		self:KillBlizzardRaidFrames()
 		NewHook("CompactUnitFrame_RegisterEvents", CompactUnitFrame_UnregisterEvents)
 		NewHook("UnitFrameThreatIndicator_Initialize", UnitFrameThreatIndicator_Hook)
@@ -1479,4 +1479,4 @@ end
 DEFINE CONFIG AND REGISTER
 ##########################################################
 ]]--
-Registry:NewPackage(MOD, "SVUnit")
\ No newline at end of file
+SVLib:NewPackage(MOD, "SVUnit")
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/packages/unit/SVUnit.xml b/Interface/AddOns/SVUI/packages/unit/SVUnit.xml
index b95f83d..4eb15f2 100644
--- a/Interface/AddOns/SVUI/packages/unit/SVUnit.xml
+++ b/Interface/AddOns/SVUI/packages/unit/SVUnit.xml
@@ -40,8 +40,8 @@
         </Frames>
     </Button>

-    <Script file="config.lua"/>
 	<Script file="SVUnit.lua"/>
+    <Script file="config.lua"/>

 	<Script file="elements\tags.lua"/>
     <Script file="elements\essentials.lua"/>
diff --git a/Interface/AddOns/SVUI/packages/unit/config.lua b/Interface/AddOns/SVUI/packages/unit/config.lua
index 5b0c2f0..5f36d22 100644
--- a/Interface/AddOns/SVUI/packages/unit/config.lua
+++ b/Interface/AddOns/SVUI/packages/unit/config.lua
@@ -26,14 +26,13 @@ GET ADDON DATA AND TEST FOR oUF
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
-local CONFIGS = SV.private
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 --[[
 ##########################################################
 LOCALS
 ##########################################################
 ]]--
-CONFIGS["SVUnit"] = {
+SV.SVUnit.db = {
 	["enable"] = true,
 	["disableBlizzard"] = true,

@@ -71,7 +70,6 @@ CONFIGS["SVUnit"] = {
 	["auraBarShield"] = true,
 	["castClassColor"] = false,
 	["xrayFocus"] = true,
-	["gpsLowHealth"] = false,
 	["grid"] = {
 		["enable"] = false,
 		["size"] = 28,
diff --git a/Interface/AddOns/SVUI/packages/unit/elements/auras.lua b/Interface/AddOns/SVUI/packages/unit/elements/auras.lua
index d27cce4..a7392fc 100644
--- a/Interface/AddOns/SVUI/packages/unit/elements/auras.lua
+++ b/Interface/AddOns/SVUI/packages/unit/elements/auras.lua
@@ -46,7 +46,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.");

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local LSM = LibStub("LibSharedMedia-3.0")
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua b/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua
index d93765f..04feec8 100644
--- a/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua
+++ b/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua
@@ -46,7 +46,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.");

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 --[[
diff --git a/Interface/AddOns/SVUI/packages/unit/elements/essentials.lua b/Interface/AddOns/SVUI/packages/unit/elements/essentials.lua
index b5e12e8..99dd0df 100644
--- a/Interface/AddOns/SVUI/packages/unit/elements/essentials.lua
+++ b/Interface/AddOns/SVUI/packages/unit/elements/essentials.lua
@@ -34,7 +34,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.");

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local LSM = LibStub("LibSharedMedia-3.0")
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/packages/unit/elements/misc.lua b/Interface/AddOns/SVUI/packages/unit/elements/misc.lua
index e7b0220..179ac9e 100644
--- a/Interface/AddOns/SVUI/packages/unit/elements/misc.lua
+++ b/Interface/AddOns/SVUI/packages/unit/elements/misc.lua
@@ -19,7 +19,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.");

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 --[[
diff --git a/Interface/AddOns/SVUI/packages/unit/elements/tags.lua b/Interface/AddOns/SVUI/packages/unit/elements/tags.lua
index 53ef010..07cdb37 100644
--- a/Interface/AddOns/SVUI/packages/unit/elements/tags.lua
+++ b/Interface/AddOns/SVUI/packages/unit/elements/tags.lua
@@ -31,7 +31,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local oUF_Villain = SV.oUF
 --[[ MUNGLUNCH's FASTER ASSERT FUNCTION ]]--
 local assert = enforce;
diff --git a/Interface/AddOns/SVUI/packages/unit/frames.lua b/Interface/AddOns/SVUI/packages/unit/frames.lua
index dfcf07d..fcb2057 100644
--- a/Interface/AddOns/SVUI/packages/unit/frames.lua
+++ b/Interface/AddOns/SVUI/packages/unit/frames.lua
@@ -35,7 +35,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local LSM = LibStub("LibSharedMedia-3.0")
 local MOD = SV.SVUnit
 if(not MOD) then return end
@@ -938,7 +938,7 @@ local ArenaPrepHandler = CreateFrame("Frame")
 local ArenaPrepHandler_OnEvent = function(self, event)
     local prepframe
     local _, instanceType = IsInInstance()
-    if(not SV.db.SVUnit.arena.enable or instanceType ~= "arena") then return end
+    if(not MOD.db.arena.enable or instanceType ~= "arena") then return end
     if event == "PLAYER_LOGIN" then
         for i = 1, 5 do
             prepframe = _G["SVUI_Arena"..i.."PrepFrame"]
diff --git a/Interface/AddOns/SVUI/packages/unit/resources/deathknight.lua b/Interface/AddOns/SVUI/packages/unit/resources/deathknight.lua
index 4801c25..cd4569e 100644
--- a/Interface/AddOns/SVUI/packages/unit/resources/deathknight.lua
+++ b/Interface/AddOns/SVUI/packages/unit/resources/deathknight.lua
@@ -41,7 +41,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 if(SV.class ~= "DEATHKNIGHT") then return end
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/packages/unit/resources/druid.lua b/Interface/AddOns/SVUI/packages/unit/resources/druid.lua
index b0f85c4..3393b92 100644
--- a/Interface/AddOns/SVUI/packages/unit/resources/druid.lua
+++ b/Interface/AddOns/SVUI/packages/unit/resources/druid.lua
@@ -41,7 +41,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local LSM = LibStub("LibSharedMedia-3.0")
 if(SV.class ~= "DRUID") then return end
 local MOD = SV.SVUnit
diff --git a/Interface/AddOns/SVUI/packages/unit/resources/hunter.lua b/Interface/AddOns/SVUI/packages/unit/resources/hunter.lua
index 6e870d2..fda1e73 100644
--- a/Interface/AddOns/SVUI/packages/unit/resources/hunter.lua
+++ b/Interface/AddOns/SVUI/packages/unit/resources/hunter.lua
@@ -31,7 +31,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 if(SV.class ~= "HUNTER") then return end
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/packages/unit/resources/mage.lua b/Interface/AddOns/SVUI/packages/unit/resources/mage.lua
index eaaa29e..e7333c4 100644
--- a/Interface/AddOns/SVUI/packages/unit/resources/mage.lua
+++ b/Interface/AddOns/SVUI/packages/unit/resources/mage.lua
@@ -41,7 +41,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 if(SV.class ~= "MAGE") then return end
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/packages/unit/resources/monk.lua b/Interface/AddOns/SVUI/packages/unit/resources/monk.lua
index 58d37c6..a0a4a1b 100644
--- a/Interface/AddOns/SVUI/packages/unit/resources/monk.lua
+++ b/Interface/AddOns/SVUI/packages/unit/resources/monk.lua
@@ -41,7 +41,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 if(SV.class ~= "MONK") then return end
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/packages/unit/resources/paladin.lua b/Interface/AddOns/SVUI/packages/unit/resources/paladin.lua
index 2f2fad1..ede5682 100644
--- a/Interface/AddOns/SVUI/packages/unit/resources/paladin.lua
+++ b/Interface/AddOns/SVUI/packages/unit/resources/paladin.lua
@@ -41,7 +41,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 if(SV.class ~= "PALADIN") then return end
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/packages/unit/resources/priest.lua b/Interface/AddOns/SVUI/packages/unit/resources/priest.lua
index b32d7ed..2e28227 100644
--- a/Interface/AddOns/SVUI/packages/unit/resources/priest.lua
+++ b/Interface/AddOns/SVUI/packages/unit/resources/priest.lua
@@ -41,7 +41,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 if(SV.class ~= "PRIEST") then return end
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/packages/unit/resources/rogue.lua b/Interface/AddOns/SVUI/packages/unit/resources/rogue.lua
index 3290d26..d424cbe 100644
--- a/Interface/AddOns/SVUI/packages/unit/resources/rogue.lua
+++ b/Interface/AddOns/SVUI/packages/unit/resources/rogue.lua
@@ -41,7 +41,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 if(SV.class ~= "ROGUE") then return end
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/packages/unit/resources/shaman.lua b/Interface/AddOns/SVUI/packages/unit/resources/shaman.lua
index 500ea1b..e25ec32 100644
--- a/Interface/AddOns/SVUI/packages/unit/resources/shaman.lua
+++ b/Interface/AddOns/SVUI/packages/unit/resources/shaman.lua
@@ -41,7 +41,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 if(SV.class ~= "SHAMAN") then return end
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/packages/unit/resources/warlock.lua b/Interface/AddOns/SVUI/packages/unit/resources/warlock.lua
index 0db2e3d..f61250c 100644
--- a/Interface/AddOns/SVUI/packages/unit/resources/warlock.lua
+++ b/Interface/AddOns/SVUI/packages/unit/resources/warlock.lua
@@ -41,7 +41,7 @@ local oUF_Villain = SV.oUF
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")

-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 if(SV.class ~= "WARLOCK") then return end
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/packages/unit/resources/warrior.lua b/Interface/AddOns/SVUI/packages/unit/resources/warrior.lua
index d6fffa0..e75786c 100644
--- a/Interface/AddOns/SVUI/packages/unit/resources/warrior.lua
+++ b/Interface/AddOns/SVUI/packages/unit/resources/warrior.lua
@@ -30,7 +30,7 @@ local oUF_Villain = SV.oUF
 --[[ MUNGLUNCH's FASTER ASSERT FUNCTION ]]--
 local assert = enforce;
 assert(oUF_Villain, "SVUI was unable to locate oUF.")
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 if(SV.class ~= "WARRIOR") then return end
 local MOD = SV.SVUnit
 if(not MOD) then return end
diff --git a/Interface/AddOns/SVUI/scripts/comix.lua b/Interface/AddOns/SVUI/scripts/comix.lua
index f6fcbe0..780c054 100644
--- a/Interface/AddOns/SVUI/scripts/comix.lua
+++ b/Interface/AddOns/SVUI/scripts/comix.lua
@@ -29,8 +29,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local Comix = CreateFrame("Frame");
 --[[
 ##########################################################
@@ -128,7 +128,7 @@ local Comix_OnEvent = function(self, event, ...)
 	if subEvent == "PARTY_KILL" and guid == playerGUID and ready then
 		self:ReadyState(false)
 		local rng = random(1,15)
-		if((rng < 3) and SV.db.system.bigComix) then
+		if((rng < 3) and SV.db.bigComix) then
 			self:LaunchPopup("PREMIUM")
 		elseif rng < 8 then
 			self:LaunchPopup("DELUXE")
@@ -139,7 +139,7 @@ local Comix_OnEvent = function(self, event, ...)
 end

 function SV:ToggleComix()
-	if not SV.db.system.comix then
+	if not SV.db.comix then
 		Comix:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
 		Comix:SetScript("OnEvent", nil)
 	else
@@ -222,4 +222,4 @@ local function LoadSVComix()
 	Comix:ReadyState(true)
 	SV:ToggleComix()
 end
-Registry:NewScript(LoadSVComix)
\ No newline at end of file
+SVLib:NewScript(LoadSVComix)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/scripts/misc.lua b/Interface/AddOns/SVUI/scripts/misc.lua
index 2b8a639..44aa8d7 100644
--- a/Interface/AddOns/SVUI/scripts/misc.lua
+++ b/Interface/AddOns/SVUI/scripts/misc.lua
@@ -32,8 +32,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local toonclass = select(2, UnitClass('player'))
 --[[
 ##########################################################
@@ -65,7 +65,7 @@ local function LoadStyledChatBubbles()
 		end
 	end)

-	if(SV.db.system.bubbles == true) then
+	if(SV.db.bubbles == true) then
 		local ChatBubbleHandler = CreateFrame("Frame", nil, UIParent)
 		local total = 0
 		local numKids = 0
@@ -126,7 +126,7 @@ local function LoadStyledChatBubbles()
 	end
 end

-Registry:NewScript(LoadStyledChatBubbles)
+SVLib:NewScript(LoadStyledChatBubbles)
 --[[
 ##########################################################
 DRESSUP HELPERS by: Leatrix
@@ -216,6 +216,7 @@ local DressUp_OnLeave = function(self)
 end

 local function LoadDressupHelper()
+	if IsAddOnLoaded("DressingRoomFunctions") then return end
 	--[[ PAPER DOLL ENHANCEMENT ]]--
 	local tabard1 = SV:CreateButton(DressUpFrame, "Tabard", "BOTTOMLEFT", 12, 12, 80, 22, "")
 	tabard1:SetScript("OnClick", function()
@@ -285,7 +286,7 @@ local function LoadDressupHelper()
 	CharacterModelFrame:HookScript("OnShow", SetVanityPlacement)
 end

-Registry:NewScript(LoadDressupHelper)
+SVLib:NewScript(LoadDressupHelper)
 --[[
 ##########################################################
 RAIDMARKERS
@@ -418,10 +419,10 @@ local Totems_OnEvent = function(self, event)
 end

 function SV:UpdateTotems()
-	local totemSize = self.db.system.totems.size;
-	local totemSpace = self.db.system.totems.spacing;
-	local totemGrowth = self.db.system.totems.showBy;
-	local totemSort = self.db.system.totems.sortDirection;
+	local totemSize = self.db.totems.size;
+	local totemSpace = self.db.totems.spacing;
+	local totemGrowth = self.db.totems.showBy;
+	local totemSort = self.db.totems.sortDirection;

 	for i = 1, MAX_TOTEMS do
 		local button = TotemBar[i]
@@ -473,8 +474,8 @@ local Totem_OnLeave = function()
 end

 local function CreateTotemBar()
-	if(not SV.db.system.totems.enable) then return; end
-	local xOffset = SV.db.SVDock.dockLeftWidth + 12
+	if(not SV.db.totems.enable) then return; end
+	local xOffset = SV.SVDock.db.dockLeftWidth + 12
 	TotemBar = CreateFrame("Frame", "SVUI_TotemBar", SV.UIParent)
 	TotemBar:SetPoint("BOTTOMLEFT", SV.UIParent, "BOTTOMLEFT", xOffset, 40)
 	for i = 1, MAX_TOTEMS do
@@ -542,7 +543,7 @@ local function CreateTotemBar()
 	SV:SetSVMovable(TotemBar, frame_name)
 end

-Registry:NewScript(CreateTotemBar)
+SVLib:NewScript(CreateTotemBar)
 --[[
 ##########################################################
 THREAT THERMOMETER
@@ -624,7 +625,7 @@ local function ThreatBar_OnEvent(self, event)
 end

 local function LoadThreatBar()
-	if(SV.db.system.threatbar == true) then
+	if(SV.db.threatbar == true) then
 		local ThreatBar = CreateFrame('StatusBar', 'SVUI_ThreatBar', SV.UIParent);
 		ThreatBar:SetStatusBarTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Doodads\\THREAT-BAR")
 		ThreatBar:SetSize(50,100)
@@ -653,4 +654,4 @@ local function LoadThreatBar()
 	end
 end

-Registry:NewScript(LoadThreatBar);
\ No newline at end of file
+SVLib:NewScript(LoadThreatBar);
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/scripts/mounts.lua b/Interface/AddOns/SVUI/scripts/mounts.lua
index f286bad..d04f9c3 100644
--- a/Interface/AddOns/SVUI/scripts/mounts.lua
+++ b/Interface/AddOns/SVUI/scripts/mounts.lua
@@ -34,8 +34,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 -- SVUI_Cache.Mounts.types
 -- SVUI_Cache.Mounts.names
 --[[
@@ -446,4 +446,4 @@ end
 LOADER
 ##########################################################
 ]]--
-Registry:NewScript(SetMountCheckButtons);
\ No newline at end of file
+SVLib:NewScript(SetMountCheckButtons);
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/scripts/questwatch.lua b/Interface/AddOns/SVUI/scripts/questwatch.lua
index ca7ffb9..a621c06 100644
--- a/Interface/AddOns/SVUI/scripts/questwatch.lua
+++ b/Interface/AddOns/SVUI/scripts/questwatch.lua
@@ -52,8 +52,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local QuestDocklet = CreateFrame("Frame", "SVQuestFrameEventListener", UIParent)
 --[[
 ##########################################################
@@ -348,7 +348,7 @@ local function CreateQuestDocklet()
 		ObjectiveTrackerFrame.BlockDropDown:RemoveTextures(true)

 		SV:SetSVMovable(frame, "Quest Watch");
-	elseif(not SV.db.system.questWatch) then
+	elseif(not SV.db.questWatch) then
 		local frame = CreateFrame("Frame", "SVUI_QuestFrame", UIParent);
 		frame:SetSize(200, WatchFrame:GetHeight());
 		frame:SetPoint("RIGHT", UIParent, "RIGHT", -100, 0);
@@ -469,4 +469,4 @@ local function CreateQuestDocklet()
 	end
 end

-Registry:NewScript(CreateQuestDocklet)
\ No newline at end of file
+SVLib:NewScript(CreateQuestDocklet)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/scripts/raid.lua b/Interface/AddOns/SVUI/scripts/raid.lua
index be40dd4..ce85636 100644
--- a/Interface/AddOns/SVUI/scripts/raid.lua
+++ b/Interface/AddOns/SVUI/scripts/raid.lua
@@ -27,8 +27,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 --[[
 ##########################################################
 RAID UTILITY By: Elv
@@ -260,4 +260,4 @@ local function LoadRaidUtility()
 		end
 	end
 end
-Registry:NewScript(LoadRaidUtility);
\ No newline at end of file
+SVLib:NewScript(LoadRaidUtility);
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/scripts/reactions.lua b/Interface/AddOns/SVUI/scripts/reactions.lua
index bada875..67f3013 100644
--- a/Interface/AddOns/SVUI/scripts/reactions.lua
+++ b/Interface/AddOns/SVUI/scripts/reactions.lua
@@ -33,8 +33,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 --[[
 ##########################################################
 LOCALS (from ShestakUI  by:Shestak)
@@ -294,7 +294,7 @@ CONFIG TOGGLE
 ##########################################################
 ]]--
 function SV:ToggleReactions()
-	local settings = self.db.system
+	local settings = self.db

 	REACTION_INTERRUPT = settings.pvpinterrupt
 	REACTION_WOOT = settings.woot
@@ -328,4 +328,4 @@ local function LoadReactions()
 	SV:ToggleReactions()
 end

-Registry:NewScript(LoadReactions)
\ No newline at end of file
+SVLib:NewScript(LoadReactions)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/scripts/spellbind.lua b/Interface/AddOns/SVUI/scripts/spellbind.lua
index 75af259..a141c02 100644
--- a/Interface/AddOns/SVUI/scripts/spellbind.lua
+++ b/Interface/AddOns/SVUI/scripts/spellbind.lua
@@ -25,6 +25,8 @@ local ipairs 	= _G.ipairs;
 local type 		= _G.type;
 local tinsert 	= _G.tinsert;
 local string 	= _G.string;
+
+local SVLib = LibStub("LibSuperVillain-1.0")
 --[[
 ##########################################################
 Simple click2cast spell SpellBinder(sBinder by Fernir)
@@ -61,11 +63,6 @@ for _, gName in pairs(UnitParseListing) do
 	end
 end

-local DB = {};
-DB.spells = DB.spells or {}
-DB.frames = DB.frames or {}
-DB.keys = DB.keys or {}
-
 local SpellBinder = CreateFrame("Frame", "SVUI_SpellBinder", SpellBookFrame, "ButtonFrameTemplate")
 SpellBinder:SetPoint("TOPLEFT", SpellBookFrame, "TOPRIGHT", 100, 0)
 SpellBinder:SetSize(300, 400)
@@ -83,6 +80,12 @@ SpellBinder.list.child = CreateFrame("Frame", nil, SpellBinder.list)
 SpellBinder.list:SetPoint("TOPLEFT", _G["SVUI_SpellBinderInset"], "TOPLEFT", 0, -5)
 SpellBinder.list:SetPoint("BOTTOMRIGHT", _G["SVUI_SpellBinderInset"], "BOTTOMRIGHT", -30, 5)
 SpellBinder.list:SetScrollChild(SpellBinder.list.child)
+
+SVUI_Cache = SVUI_Cache or {}
+SVUI_Cache.SpellBinder = SVUI_Cache.SpellBinder or {}
+SVUI_Cache.SpellBinder.spells = SVUI_Cache.SpellBinder.spells or {}
+SVUI_Cache.SpellBinder.frames = SVUI_Cache.SpellBinder.frames or {}
+SVUI_Cache.SpellBinder.keys = SVUI_Cache.SpellBinder.keys or {}
 --[[
 ##########################################################
 SCRIPT HANDLERS
@@ -168,9 +171,9 @@ local SpellBindMask_OnClick = function(self, button)
 				button = SecureButton_GetButtonSuffix(button)
 			end

-			for i, v in pairs(DB.spells) do if v.spell == spellname then return end end
+			for i, v in pairs(SVUI_Cache.SpellBinder.spells) do if v.spell == spellname then return end end

-			tinsert(DB.spells, {["id"] = slot, ["modifier"] = modifier, ["button"] = button, ["spell"] = spellname, ["rank"] = rank, ["texture"] = texture, ["origbutton"] = originalbutton,})
+			tinsert(SVUI_Cache.SpellBinder.spells, {["id"] = slot, ["modifier"] = modifier, ["button"] = button, ["spell"] = spellname, ["rank"] = rank, ["texture"] = texture, ["origbutton"] = originalbutton,})
 			SpellBinder:BuildSpells(false)
 		end
 	end
@@ -178,8 +181,8 @@ end

 local SpellBindDelete_OnClick = function(self)
 	local spell = self.spell
-	for j, k in ipairs(DB.spells) do
-		if k ~= spell then
+	for j, k in ipairs(SVUI_Cache.SpellBinder.spells) do
+		if k ~= spell.spell then
 			k.checked = false
 			_G[j.."_cbs"]:SetBackdropColor(0, 0, 0, 0)
 		end
@@ -192,37 +195,8 @@ end
 EVENT HANDLERS
 ##########################################################
 ]]--
-local SpellBind_OnEvent = function(self, event, ...)
-	if event == "PLAYER_LOGIN" then
-		DB = SVUI_Cache["Bindings"] or {}
-		DB.spells = DB.spells or {}
-		DB.frames = DB.frames or {}
-		DB.keys = DB.keys or {}
-		SpellBinder:BuildList()
-		SpellBinder:BuildSpells(true)
-
-		for i = 1, SPELLS_PER_PAGE do
-			local parent = _G["SpellButton"..i]
-			local button = CreateFrame("Button", "SpellButtonMask"..i, parent)
-			button:SetID(parent:GetID())
-			button:RegisterForClicks("AnyDown")
-			button:SetAllPoints(parent)
-			button:SetScript("OnClick", SpellBindMask_OnClick)
-
-			button.shine = SpellBook_GetAutoCastShine()
-			button.shine:Show()
-			button.shine:SetParent(button)
-			button.shine:SetAllPoints()
-			AutoCastShine_AutoCastStart(button.shine)
-
-			button:Hide()
-			SpellBinder.spellbuttons[i] = button
-		end
-
-		self:UnregisterEvent("PLAYER_LOGIN")
-	elseif event == "PLAYER_ENTERING_WORLD" or event == "GROUP_ROSTER_UPDATE" or event == "ZONE_CHANGED" or event == "ZONE_CHANGED_NEW_AREA" then
-		SpellBinder:UpdateAll()
-	end
+local SpellBind_OnEvent = function(self)
+	self:UpdateAll()
 end
 --[[
 ##########################################################
@@ -247,7 +221,7 @@ function SpellBinder:BuildSpells(delete)
 		end
 	end

-	for i, spell in ipairs(DB.spells) do
+	for i, spell in ipairs(SVUI_Cache.SpellBinder.spells) do
 		spellName = spell.spell
 		if spellName then
 			local bf = _G[i.."_cbs"] or CreateFrame("Button", i.."_cbs", scroll)
@@ -276,7 +250,7 @@ function SpellBinder:BuildSpells(delete)
 			bf.delete:GetNormalTexture():SetVertexColor(0.8, 0, 0)
 			bf.delete:SetPushedTexture("Interface\\BUTTONS\\UI-GroupLoot-Pass-Up")
 			bf.delete:SetHighlightTexture("Interface\\BUTTONS\\UI-GroupLoot-Pass-Up")
-			bf.delete.spell = spellName
+			bf.delete.spell = spell
 			bf.delete:SetScript("OnClick", SpellBindDelete_OnClick)

 			bf:SetScript("OnEnter", BoundSpell_OnEnter)
@@ -287,7 +261,7 @@ function SpellBinder:BuildSpells(delete)
 			bf.fs:SetPoint("RIGHT", bf.delete, "LEFT", -4, 0)

 			for frame,_ in pairs(ClickCastFrames) do
-				if frame and DB.frames[frame] then
+				if frame and SVUI_Cache.SpellBinder.frames[frame] then
 					if frame:CanChangeAttribute() or frame:CanChangeProtectedState() then
 						if frame:GetAttribute(spell.modifier.."type"..spell.button) ~= "menu" then
 							--frame:RegisterForClicks("AnyDown")
@@ -296,15 +270,15 @@ function SpellBinder:BuildSpells(delete)
 								frame:SetAttribute(spell.modifier.."type-"..spell.spell, "spell")
 								frame:SetAttribute(spell.modifier.."spell-"..spell.spell, spell.spell)

-								DB.keys[spell.modifier..spell.button] = spell.spell
-								DB.keys[spell.modifier.."type-"..spell.spell] = "spell"
-								DB.keys[spell.modifier.."spell-"..spell.spell] = spell.spell
+								SVUI_Cache.SpellBinder.keys[spell.modifier..spell.button] = spell.spell
+								SVUI_Cache.SpellBinder.keys[spell.modifier.."type-"..spell.spell] = "spell"
+								SVUI_Cache.SpellBinder.keys[spell.modifier.."spell-"..spell.spell] = spell.spell
 							else
 								frame:SetAttribute(spell.modifier.."type"..spell.button, "spell")
 								frame:SetAttribute(spell.modifier.."spell"..spell.button, spell.spell)

-								DB.keys[spell.modifier.."type"..spell.button] = "spell"
-								DB.keys[spell.modifier.."spell"..spell.button] = spell.spell
+								SVUI_Cache.SpellBinder.keys[spell.modifier.."type"..spell.button] = "spell"
+								SVUI_Cache.SpellBinder.keys[spell.modifier.."spell"..spell.button] = spell.spell
 							end
 						end
 					end
@@ -318,34 +292,36 @@ function SpellBinder:BuildSpells(delete)
 end

 function SpellBinder:BuildList()
-	for frame,_ in pairs(ClickCastFrames) do
-		DB.frames[frame] = DB.frames[frame] or true
+	if(SVUI_Cache.SpellBinder and SVUI_Cache.SpellBinder.frames) then
+		for frame,_ in pairs(ClickCastFrames) do
+			SVUI_Cache.SpellBinder.frames[frame] = SVUI_Cache.SpellBinder.frames[frame] or true
+		end
 	end
 end

 function SpellBinder:ToggleButtons()
 	for i = 1, SPELLS_PER_PAGE do
-		if(SpellBinder.spellbuttons[i]) then
-			SpellBinder.spellbuttons[i]:Hide()
-			if SpellBinder.sbOpen and SpellBookFrame.bookType ~= BOOKTYPE_PROFESSION then
-				local slot = SpellBook_GetSpellBookSlot(SpellBinder.spellbuttons[i]:GetParent())
+		if(self.spellbuttons[i]) then
+			self.spellbuttons[i]:Hide()
+			if self.sbOpen and SpellBookFrame.bookType ~= BOOKTYPE_PROFESSION then
+				local slot = SpellBook_GetSpellBookSlot(self.spellbuttons[i]:GetParent())
 				if slot then
 					local spellname, subtype = GetSpellBookItemName(slot, SpellBookFrame.bookType)
 					if spellname then
-						SpellBinder.spellbuttons[i]:Show()
+						self.spellbuttons[i]:Show()
 					end
 				end
 			end
 		end
 	end
-	SpellBinder:BuildList()
-	SpellBinder:BuildSpells(true)
-	if SpellBinder:IsVisible() then SpellBinder.tab:SetChecked(true) else SpellBinder.tab:SetChecked(false) end
+	self:BuildList()
+	self:BuildSpells(true)
+	if self:IsVisible() then self.tab:SetChecked(true) else self.tab:SetChecked(false) end
 end

 function SpellBinder:DeleteSpell()
-	local count = table.getn(DB.spells)
-	for i, spell in ipairs(DB.spells) do
+	local count = table.getn(SVUI_Cache.SpellBinder.spells)
+	for i, spell in ipairs(SVUI_Cache.SpellBinder.spells) do
 		if spell.checked then
 			for frame,_ in pairs(ClickCastFrames) do
 				local f
@@ -365,7 +341,7 @@ function SpellBinder:DeleteSpell()
 					end
 				end
 			end
-			tremove(DB.spells, i)
+			tremove(SVUI_Cache.SpellBinder.spells, i)
 		end
 	end
 	self:BuildSpells(true)
@@ -451,4 +427,36 @@ SpellBinder:RegisterEvent("PLAYER_ENTERING_WORLD")
 SpellBinder:RegisterEvent("PLAYER_LOGIN")
 SpellBinder:RegisterEvent("ZONE_CHANGED_NEW_AREA")
 SpellBinder:RegisterEvent("ZONE_CHANGED")
-SpellBinder:SetScript("OnEvent", SpellBind_OnEvent)
\ No newline at end of file
+
+local function LoadSpellBinder()
+	SVUI_Cache = SVUI_Cache or {}
+	SVUI_Cache.SpellBinder = SVUI_Cache.SpellBinder or {}
+	SVUI_Cache.SpellBinder.spells = SVUI_Cache.SpellBinder.spells or {}
+	SVUI_Cache.SpellBinder.frames = SVUI_Cache.SpellBinder.frames or {}
+	SVUI_Cache.SpellBinder.keys = SVUI_Cache.SpellBinder.keys or {}
+
+	SpellBinder:BuildList()
+	SpellBinder:BuildSpells(true)
+
+	for i = 1, SPELLS_PER_PAGE do
+		local parent = _G["SpellButton"..i]
+		local button = CreateFrame("Button", "SpellButtonMask"..i, parent)
+		button:SetID(parent:GetID())
+		button:RegisterForClicks("AnyDown")
+		button:SetAllPoints(parent)
+		button:SetScript("OnClick", SpellBindMask_OnClick)
+
+		button.shine = SpellBook_GetAutoCastShine()
+		button.shine:Show()
+		button.shine:SetParent(button)
+		button.shine:SetAllPoints()
+		AutoCastShine_AutoCastStart(button.shine)
+
+		button:Hide()
+		SpellBinder.spellbuttons[i] = button
+	end
+
+	SpellBinder:SetScript("OnEvent", SpellBind_OnEvent)
+end
+
+SVLib:NewScript(LoadSpellBinder)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/system/alerts.lua b/Interface/AddOns/SVUI/system/alerts.lua
index a0a0c4a..f37631d 100644
--- a/Interface/AddOns/SVUI/system/alerts.lua
+++ b/Interface/AddOns/SVUI/system/alerts.lua
@@ -42,7 +42,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local SVLib = LibStub("LibSuperVillain-1.0");
+local L = SVLib:Lang();
 --[[
 ##########################################################
 LOCAL VARS
@@ -50,17 +51,17 @@ LOCAL VARS
 ]]--
 local BUFFER = {};
 local function UpdateActionBarOptions()
-	if InCombatLockdown() or not SV.db.SVBar.IsLoaded then return end
-	if (SV.db.SVBar.Bar2.enable ~= InterfaceOptionsActionBarsPanelBottomRight:GetChecked()) then
+	if InCombatLockdown() or not SV.SVBar.db.IsLoaded then return end
+	if (SV.SVBar.db.Bar2.enable ~= InterfaceOptionsActionBarsPanelBottomRight:GetChecked()) then
 		InterfaceOptionsActionBarsPanelBottomRight:Click()
 	end
-	if (SV.db.SVBar.Bar3.enable ~= InterfaceOptionsActionBarsPanelRightTwo:GetChecked()) then
+	if (SV.SVBar.db.Bar3.enable ~= InterfaceOptionsActionBarsPanelRightTwo:GetChecked()) then
 		InterfaceOptionsActionBarsPanelRightTwo:Click()
 	end
-	if (SV.db.SVBar.Bar4.enable ~= InterfaceOptionsActionBarsPanelRight:GetChecked()) then
+	if (SV.SVBar.db.Bar4.enable ~= InterfaceOptionsActionBarsPanelRight:GetChecked()) then
 		InterfaceOptionsActionBarsPanelRight:Click()
 	end
-	if (SV.db.SVBar.Bar5.enable ~= InterfaceOptionsActionBarsPanelBottomLeft:GetChecked()) then
+	if (SV.SVBar.db.Bar5.enable ~= InterfaceOptionsActionBarsPanelBottomLeft:GetChecked()) then
 		InterfaceOptionsActionBarsPanelBottomLeft:Click()
 	end
   	SV.SVBar:RefreshBar("Bar1")
@@ -86,7 +87,7 @@ SV.SystemAlert["FAILED_UISCALE"] = {
 	text = L["You have changed your UIScale, however you still have the AutoScale option enabled in SVUI. Press accept if you would like to disable the Auto Scale option."],
 	button1 = ACCEPT,
 	button2 = CANCEL,
-	OnAccept = function() SV.db.system.autoScale = false; ReloadUI(); end,
+	OnAccept = function() SV.db.autoScale = false; ReloadUI(); end,
 	OnCancel = function() ReloadUI() end,
 	timeout = 0,
 	whileDead = 1,
@@ -191,7 +192,7 @@ SV.SystemAlert["RESET_PROFILE_PROMPT"] = {
 	timeout = 0,
 	hideOnEscape = 1,
 	OnAccept = function()
-		SV.db:Reset()
+		SVLib:WipeDatabase()
 	end
 };
 SV.SystemAlert["COPY_PROFILE_PROMPT"] = {
@@ -207,11 +208,11 @@ SV.SystemAlert["BAR6_CONFIRMATION"] = {
 	button1 = YES,
 	button2 = NO,
 	OnAccept = function(a)
-		if SV.db.SVBar["BAR6"].enable ~= true then
-			SV.db.SVBar.Bar6.enable = true;
+		if SV.SVBar.db["BAR6"].enable ~= true then
+			SV.SVBar.db.Bar6.enable = true;
 			UpdateActionBarOptions()
 		else
-			SV.db.SVBar.Bar6.enable = false;
+			SV.SVBar.db.Bar6.enable = false;
 			UpdateActionBarOptions()
 		end
 	end,
@@ -249,7 +250,7 @@ SV.SystemAlert["CONFIRM_LOSE_BINDING_CHANGES"] = {
 SV.SystemAlert["INCOMPATIBLE_ADDON"] = {
 	text = L["INCOMPATIBLE_ADDON"],
 	OnAccept = function(a)DisableAddOn(SV.SystemAlert["INCOMPATIBLE_ADDON"].addon)ReloadUI()end,
-	OnCancel = function(a)SV.db[lower(SV.SystemAlert["INCOMPATIBLE_ADDON"].package)].enable = false;ReloadUI()end,
+	OnCancel = function(a)SV[lower(SV.SystemAlert["INCOMPATIBLE_ADDON"].package)].db.enable = false; ReloadUI()end,
 	timeout = 0,
 	whileDead = 1,
 	hideOnEscape = false
diff --git a/Interface/AddOns/SVUI/system/animate.lua b/Interface/AddOns/SVUI/system/animate.lua
index f5958f3..c28cc87 100644
--- a/Interface/AddOns/SVUI/system/animate.lua
+++ b/Interface/AddOns/SVUI/system/animate.lua
@@ -26,8 +26,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0")
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 --[[
 ##########################################################
 LOCALS
diff --git a/Interface/AddOns/SVUI/system/common.lua b/Interface/AddOns/SVUI/system/common.lua
index 0c3de1c..34ac86f 100644
--- a/Interface/AddOns/SVUI/system/common.lua
+++ b/Interface/AddOns/SVUI/system/common.lua
@@ -43,8 +43,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0")
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 --[[
 ##########################################################
 LOCAL VARS
@@ -80,6 +80,13 @@ function SV:ScreenCalibration(event)
     local scale, evalwidth
     local gxWidth, gxHeight, gxMod = GetUsableScreen()

+    if(not SVUI_Cache["screenheight"] or (SVUI_Cache["screenheight"] and type(SVUI_Cache["screenheight"]) ~= "number")) then
+        SVUI_Cache["screenheight"] = gxHeight
+    end
+    if(not SVUI_Cache["screenwidth"] or (SVUI_Cache["screenwidth"] and type(SVUI_Cache["screenwidth"]) ~= "number")) then
+        SVUI_Cache["screenwidth"] = gxWidth
+    end
+
     if(IsMacClient() and SVUI_Cache and SVUI_Cache.screenheight and SVUI_Cache.screenwidth) then
         if(gxHeight ~= SVUI_Cache.screenheight or gxWidth ~= SVUI_Cache.screenwidth) then
             gxHeight = SVUI_Cache.screenheight;
@@ -87,7 +94,7 @@ function SV:ScreenCalibration(event)
         end
     end

-    if self.db.system.autoScale then
+    if self.db.autoScale then
         scale = max(0.64, min(1.15, gxMod))
     else
         scale = max(0.64, min(1.15, GetCVar("uiScale") or UIParent:GetScale() or gxMod))
@@ -102,7 +109,7 @@ function SV:ScreenCalibration(event)
     elseif gxWidth >= 3840 then
         local width = gxWidth;
         local height = gxHeight;
-        if(self.db.system.multiMonitor) then
+        if(self.db.multiMonitor) then
             if width >= 9840 then width = 3280; end
             if width >= 7680 and width < 9840 then width = 2560; end
             if width >= 5760 and width < 7680 then width = 1920; end
@@ -143,7 +150,7 @@ function SV:ScreenCalibration(event)
         if evalwidth then
             local width = evalwidth
             local height = gxHeight;
-            if not self.db.system.autoScale or height > 1200 then
+            if not self.db.autoScale or height > 1200 then
                 height = UIParent:GetHeight();
                 local ratio = gxHeight / height;
                 width = evalwidth / ratio;
@@ -157,7 +164,7 @@ function SV:ScreenCalibration(event)
         self.UIParent:SetPoint("CENTER")

         local change = abs((parsefloat(UIParent:GetScale(),5) * 100) - (parsefloat(scale,5) * 100))
-        if(event == 'UI_SCALE_CHANGED' and change > 1 and self.db.system.autoScale) then
+        if(event == 'UI_SCALE_CHANGED' and change > 1 and self.db.autoScale) then
             self:StaticPopup_Show('FAILED_UISCALE')
         elseif(event == 'UI_SCALE_CHANGED' and change > 1) then
             self:StaticPopup_Show('RL_CLIENT')
@@ -186,15 +193,22 @@ do
     end

     function SizeScaled(self, width, height)
-        self:SetSize(scaled(width), scaled(height or width))
+        if(type(width) == "number") then
+            local h = (height and type(height) == "number") and height or width
+            self:SetSize(scaled(width), scaled(h))
+        end
     end

     function WidthScaled(self, width)
-        self:SetWidth(scaled(width))
+        if(type(width) == "number") then
+            self:SetWidth(scaled(width))
+        end
     end

     function HeightScaled(self, height)
-        self:SetHeight(scaled(height))
+        if(type(height) == "number") then
+            self:SetHeight(scaled(height))
+        end
     end

     function PointScaled(self, ...)
@@ -211,7 +225,7 @@ do
     end

     function WrapOuter(self, parent, x, y)
-        x = x or 1
+        x = type(x) == "number" and x or 1
         y = y or x
         local nx = scaled(x);
         local ny = scaled(y);
@@ -224,7 +238,7 @@ do
     end

     function FillInner(self, parent, x, y)
-        x = x or 1
+        x = type(x) == "number" and x or 1
         y = y or x
         local nx = scaled(x);
         local ny = scaled(y);
@@ -287,7 +301,7 @@ APPENDED FONT TEMPLATING METHODS
 ##########################################################
 ]]--
 local function SetFontTemplate(self, font, fontSize, fontStyle, fontJustifyH, fontJustifyV, noUpdate)
-    local STANDARDFONTSIZE = SV.db.media.fonts.size
+    local STANDARDFONTSIZE = SV.db.media.fonts and SV.db.media.fonts.size or 12
     font = font or STANDARD_TEXT_FONT
     fontSize = fontSize or STANDARDFONTSIZE;
     fontJustifyH = fontJustifyH or "CENTER";
@@ -333,7 +347,7 @@ function SV:UpdateFontTemplates()
     FontTemplateUpdates()
 end

-Registry:NewCallback(FontTemplateUpdates)
+SVLib:NewCallback(FontTemplateUpdates)
 --[[
 ##########################################################
 APPENDED TEMPLATING METHODS
@@ -1553,7 +1567,7 @@ local function FrameTemplateUpdates()
     end
 end

-Registry:NewCallback(FrameTemplateUpdates)
+SVLib:NewCallback(FrameTemplateUpdates)
 --[[
 ##########################################################
 ENUMERATION
diff --git a/Interface/AddOns/SVUI/system/database.lua b/Interface/AddOns/SVUI/system/database.lua
deleted file mode 100644
index 2729d3f..0000000
--- a/Interface/AddOns/SVUI/system/database.lua
+++ /dev/null
@@ -1,1031 +0,0 @@
---[[
-##############################################################################
-_____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_       #
- ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__      #
-  __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____     #
-   ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____    #
-    ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____   #
-     _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____  #
-      __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ #
-       _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_#
-        ___\///////////___________\///___________\/////////_____\///////////_#
-##############################################################################
-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 select    = _G.select;
-local pairs     = _G.pairs;
-local next 		= _G.next;
-local type      = _G.type;
-local error 	= _G.error;
-local rawset    = _G.rawset;
-local rawget    = _G.rawget;
-local table     = _G.table;
---[[ TABLE METHODS ]]--
-local tremove, tcopy, twipe, tsort, tconcat, tdump = table.remove, table.copy, table.wipe, table.sort, table.concat, table.dump;
---[[
-##########################################################
-GET ADDON DATA
-##########################################################
-]]--
-local SV = SVUI
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
-local realm = GetRealmName()
-local name = UnitName("player")
-local pkey = ("%s - %s"):format(name, realm)
-local databaseListener = CreateFrame("Frame", nil)
-local CONFIGS = SV.private
---[[
-##########################################################
-DB BUILD HELPERS
-##########################################################
-]]--
-local function SpellName(id)
-	local name, _, _, _, _, _, _, _, _ = GetSpellInfo(id)
-	if not name then
-		SV:Debugger('|cffFF9900SVUI:|r Spell not found: (#ID) '..id)
-		name = "Voodoo Doll";
-	end
-	return name
-end
---[[
-##########################################################
-DB PROFILE
-##########################################################
-]]--
-CONFIGS["copyKey"] = pkey
-CONFIGS["profileKey"] = pkey
-CONFIGS["framelocations"] = {}
-CONFIGS["system"] = {
-	["cooldown"] = true,
-	["autoScale"] = true,
-	["multiMonitor"] = false,
-	["taintLog"] = false,
-	["stickyFrames"] = true,
-	["loginmessage"] = true,
-	["hideErrorFrame"] = true,
-	["threatbar"] = false,
-	["bubbles"] = true,
-	["comix"] = true,
-	["bigComix"] = true,
-	["questWatch"] = true,
-	["woot"] = true,
-	["pvpinterrupt"] = true,
-	["lookwhaticando"] = false,
-	["reactionChat"] = false,
-	["reactionEmote"] = false,
-	["sharingiscaring"] = false,
-	["arenadrink"] = true,
-	["stupidhat"] = true,
-	["totems"] = {
-		["enable"] = true,
-		["showBy"] = "VERTICAL",
-		["sortDirection"] = "ASCENDING",
-		["size"] = 40,
-		["spacing"] = 4
-	},
-}
-CONFIGS["media"] = {
-	["fonts"] = {
-		["default"] = "SVUI System Font",
-		["name"] = "SVUI Name Font",
-		["number"] = "SVUI Number Font",
-		["combat"] = "SVUI Combat Font",
-		["giant"] = "SVUI Action Font",
-		["size"] = 10,
-		["unicodeSize"] = 12,
-	},
-	["textures"] = {
-		["pattern"] 	 = "SVUI Backdrop 1",
-		["comic"] 		 = "SVUI Comic 1",
-		["unitlarge"] 	 = "SVUI Unit BG 3",
-		["unitsmall"] 	 = "SVUI Small BG 3"
-	},
-	["colors"] = {
-		["default"] 	 = {0.2, 0.2, 0.2, 1},
-		["special"] 	 = {0.37, 0.32, 0.29, 1},
-	},
-	["unitframes"] = {
-		["health"] 		 = {0.3, 0.5, 0.3},
-		["power"] 		 = {
-			["MANA"] 		 = {0.41, 0.85, 1},
-			["RAGE"] 		 = {1, 0.31, 0.31},
-			["FOCUS"] 		 = {1, 0.63, 0.27},
-			["ENERGY"] 		 = {0.85, 0.83, 0.25},
-			["RUNES"] 		 = {0.55, 0.57, 0.61},
-			["RUNIC_POWER"] = {0, 0.82, 1},
-			["FUEL"] 		 = {0, 0.75, 0.75}
-		},
-		["reaction"] 	 = {
-			[1] = {0.92, 0.15, 0.15},
-			[2] = {0.92, 0.15, 0.15},
-			[3] = {0.92, 0.15, 0.15},
-			[4] = {0.85, 0.85, 0.13},
-			[5] = {0.19, 0.85, 0.13},
-			[6] = {0.19, 0.85, 0.13},
-			[7] = {0.19, 0.85, 0.13},
-			[8] = {0.19, 0.85, 0.13},
-		},
-		["tapped"] 			 = {0.55, 0.57, 0.61},
-		["disconnected"] 	 = {0.84, 0.75, 0.65},
-		["casting"] 		 = {0.8, 0.8, 0},
-		["spark"] 			 = {1, 0.72, 0},
-		["interrupt"] 		 = {0.78, 0.25, 0.25},
-		["shield_bars"] 	 = {0.56, 0.4, 0.62},
-		["buff_bars"] 		 = {0.31, 0.31, 0.31},
-		["debuff_bars"] 	 = {0.8, 0.1, 0.1},
-		["predict"] 		 = {
-			["personal"] 		 = {0, 1, 0.5, 0.25},
-			["others"] 			 = {0, 1, 0, 0.25},
-			["absorbs"] 		 = {1, 1, 0, 0.25}
-		},
-		["spellcolor"] = {
-			[SpellName(2825)] = {0.98, 0.57, 0.11}, 	--Bloodlust
-			[SpellName(32182)] = {0.98, 0.57, 0.11}, --Heroism
-			[SpellName(80353)] = {0.98, 0.57, 0.11}, --Time Warp
-			[SpellName(90355)] = {0.98, 0.57, 0.11}, --Ancient Hysteria
-			[SpellName(84963)] = {0.98, 0.57, 0.11}, --Inquisition
-			[SpellName(86659)] = {0.98, 0.57, 0.11}, --Guardian of Ancient Kings
-		}
-	}
-}
-CONFIGS["filter"] = {
-	["CC"] = {},
-	["Shield"] = {},
-	["Player"] = {},
-	["Blocked"] = {},
-	["Allowed"] = {},
-	["Strict"] = {},
-	["Raid"] = {},
-}
-
---[[
-##########################################################
-CONSTRUCT FILTER DEFAULTS
-##########################################################
-]]--
-local CLASS_WATCH_INDEX = {
-	PRIEST = {
-		{-- Weakened Soul
-			["enabled"] = true,
-			["id"] = 6788,
-			["point"] = "TOPRIGHT",
-			["color"] = {["r"] = 1, ["g"] = 0, ["b"] = 0},
-			["anyUnit"] = true,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Prayer of Mending
-			["enabled"] = true,
-			["id"] = 41635,
-			["point"] = "BOTTOMRIGHT",
-			["color"] = {["r"] = 0.2, ["g"] = 0.7, ["b"] = 0.2},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Renew
-			["enabled"] = true,
-			["id"] = 139,
-			["point"] = "BOTTOMLEFT",
-			["color"] = {["r"] = 0.4, ["g"] = 0.7, ["b"] = 0.2},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Power Word: Shield
-			["enabled"] = true,
-			["id"] = 17,
-			["point"] = "TOPLEFT",
-			["color"] = {["r"] = 0.81, ["g"] = 0.85, ["b"] = 0.1},
-			["anyUnit"] = true,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Power Word: Shield Power Insight
-			["enabled"] = true,
-			["id"] = 123258,
-			["point"] = "TOPLEFT",
-			["color"] = {["r"] = 0.81, ["g"] = 0.85, ["b"] = 0.1},
-			["anyUnit"] = true,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Power Infusion
-			["enabled"] = true,
-			["id"] = 10060,
-			["point"] = "RIGHT",
-			["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Guardian Spirit
-			["enabled"] = true,
-			["id"] = 47788,
-			["point"] = "LEFT",
-			["color"] = {["r"] = 0.86, ["g"] = 0.44, ["b"] = 0},
-			["anyUnit"] = true,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Pain Suppression
-			["enabled"] = true,
-			["id"] = 33206,
-			["point"] = "LEFT",
-			["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
-			["anyUnit"] = true,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-	},
-	DRUID = {
-		{-- Rejuvenation
-			["enabled"] = true,
-			["id"] = 774,
-			["point"] = "TOPRIGHT",
-			["color"] = {["r"] = 0.8, ["g"] = 0.4, ["b"] = 0.8},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Regrowth
-			["enabled"] = true,
-			["id"] = 8936,
-			["point"] = "BOTTOMLEFT",
-			["color"] = {["r"] = 0.2, ["g"] = 0.8, ["b"] = 0.2},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Lifebloom
-			["enabled"] = true,
-			["id"] = 33763,
-			["point"] = "TOPLEFT",
-			["color"] = {["r"] = 0.4, ["g"] = 0.8, ["b"] = 0.2},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Wild Growth
-			["enabled"] = true,
-			["id"] = 48438,
-			["point"] = "BOTTOMRIGHT",
-			["color"] = {["r"] = 0.8, ["g"] = 0.4, ["b"] = 0},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-	},
-	PALADIN = {
-		{-- Beacon of Light
-			["enabled"] = true,
-			["id"] = 53563,
-			["point"] = "TOPRIGHT",
-			["color"] = {["r"] = 0.7, ["g"] = 0.3, ["b"] = 0.7},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Hand of Protection
-			["enabled"] = true,
-			["id"] = 1022,
-			["point"] = "BOTTOMRIGHT",
-			["color"] = {["r"] = 0.2, ["g"] = 0.2, ["b"] = 1},
-			["anyUnit"] = true,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Hand of Freedom
-			["enabled"] = true,
-			["id"] = 1044,
-			["point"] = "BOTTOMRIGHT",
-			["color"] = {["r"] = 0.89, ["g"] = 0.45, ["b"] = 0},
-			["anyUnit"] = true,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Hand of Salvation
-			["enabled"] = true,
-			["id"] = 1038,
-			["point"] = "BOTTOMRIGHT",
-			["color"] = {["r"] = 0.93, ["g"] = 0.75, ["b"] = 0},
-			["anyUnit"] = true,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Hand of Sacrifice
-			["enabled"] = true,
-			["id"] = 6940,
-			["point"] = "BOTTOMRIGHT",
-			["color"] = {["r"] = 0.89, ["g"] = 0.1, ["b"] = 0.1},
-			["anyUnit"] = true,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Hand of Purity
-			["enabled"] = true,
-			["id"] = 114039,
-			["point"] = "BOTTOMRIGHT",
-			["color"] = {["r"] = 0.64, ["g"] = 0.41, ["b"] = 0.72},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Sacred Shield
-			["enabled"] = true,
-			["id"] = 20925,
-			["point"] = "TOPLEFT",
-			["color"] = {["r"] = 0.93, ["g"] = 0.75, ["b"] = 0},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Eternal Flame
-			["enabled"] = true,
-			["id"] = 114163,
-			["point"] = "BOTTOMLEFT",
-			["color"] = {["r"] = 0.87, ["g"] = 0.7, ["b"] = 0.03},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-	},
-	SHAMAN = {
-		{-- Riptide
-			["enabled"] = true,
-			["id"] = 61295,
-			["point"] = "TOPRIGHT",
-			["color"] = {["r"] = 0.7, ["g"] = 0.3, ["b"] = 0.7},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Earth Shield
-			["enabled"] = true,
-			["id"] = 974,
-			["point"] = "BOTTOMLEFT",
-			["color"] = {["r"] = 0.2, ["g"] = 0.7, ["b"] = 0.2},
-			["anyUnit"] = true,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Earthliving
-			["enabled"] = true,
-			["id"] = 51945,
-			["point"] = "BOTTOMRIGHT",
-			["color"] = {["r"] = 0.7, ["g"] = 0.4, ["b"] = 0.4},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-	},
-	MONK = {
-		{--Renewing Mist
-			["enabled"] = true,
-			["id"] = 119611,
-			["point"] = "TOPLEFT",
-			["color"] = {["r"] = 0.8, ["g"] = 0.4, ["b"] = 0.8},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Life Cocoon
-			["enabled"] = true,
-			["id"] = 116849,
-			["point"] = "TOPRIGHT",
-			["color"] = {["r"] = 0.2, ["g"] = 0.8, ["b"] = 0.2},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Enveloping Mist
-			["enabled"] = true,
-			["id"] = 132120,
-			["point"] = "BOTTOMLEFT",
-			["color"] = {["r"] = 0.4, ["g"] = 0.8, ["b"] = 0.2},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Zen Sphere
-			["enabled"] = true,
-			["id"] = 124081,
-			["point"] = "BOTTOMRIGHT",
-			["color"] = {["r"] = 0.7, ["g"] = 0.4, ["b"] = 0},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-	},
-	ROGUE = {
-		{-- Tricks of the Trade
-			["enabled"] = true,
-			["id"] = 57934,
-			["point"] = "TOPRIGHT",
-			["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-	},
-	MAGE = {
-		{-- Ice Ward
-			["enabled"] = true,
-			["id"] = 111264,
-			["point"] = "TOPLEFT",
-			["color"] = {["r"] = 0.2, ["g"] = 0.2, ["b"] = 1},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-	},
-	WARRIOR = {
-		{-- Vigilance
-			["enabled"] = true,
-			["id"] = 114030,
-			["point"] = "TOPLEFT",
-			["color"] = {["r"] = 0.2, ["g"] = 0.2, ["b"] = 1},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Intervene
-			["enabled"] = true,
-			["id"] = 3411,
-			["point"] = "TOPRIGHT",
-			["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-		{-- Safe Guard
-			["enabled"] = true,
-			["id"] = 114029,
-			["point"] = "TOPRIGHT",
-			["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-	},
-	DEATHKNIGHT = {
-		{-- Unholy Frenzy
-			["enabled"] = true,
-			["id"] = 49016,
-			["point"] = "TOPRIGHT",
-			["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
-			["anyUnit"] = false,
-			["onlyShowMissing"] = false,
-			['style'] = 'coloredIcon',
-			['displayText'] = false,
-			['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-			['textThreshold'] = -1,
-			['xOffset'] = 0,
-			['yOffset'] = 0
-		},
-	},
-}
-
-local PET_WATCH = {
-	{-- Frenzy
-		["enabled"] = true,
-		["id"] = 19615,
-		["point"] = "TOPLEFT",
-		["color"] = {["r"] = 0.89, ["g"] = 0.09, ["b"] = 0.05},
-		["anyUnit"] = true,
-		["onlyShowMissing"] = false,
-		['style'] = 'coloredIcon',
-		['displayText'] = false,
-		['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-		['textThreshold'] = -1,
-		['xOffset'] = 0,
-		['yOffset'] = 0
-	},
-	{-- Mend Pet
-		["enabled"] = true,
-		["id"] = 136,
-		["point"] = "TOPRIGHT",
-		["color"] = {["r"] = 0.2, ["g"] = 0.8, ["b"] = 0.2},
-		["anyUnit"] = true,
-		["onlyShowMissing"] = false,
-		['style'] = 'coloredIcon',
-		['displayText'] = false,
-		['textColor'] = {["r"] = 1, ["g"] = 1, ["b"] = 1},
-		['textThreshold'] = -1,
-		['xOffset'] = 0,
-		['yOffset'] = 0
-	},
-}
-
-local FilterIDs = {
-	["Blocked"] = [[36900,36901,36893,114216,97821,36032,132365,8733,57724,25771,57723,36032,58539,26013,6788,71041,41425,55711,8326,23445,24755,25163,80354,95809,95223,124275,124274,124273,117870,123981,15007,113942,89140]],
-
-	["Allowed"] = [[31821,2825,32182,80353,90355,47788,33206,116849,22812,1490,116202,123059,136431,137332,137375,144351,142863,142864,142865,143198]],
-
-	["Strict"] = [[123059,136431,137332,137375,144351,142863,142864,142865,143198]],
-
-	["CC"] = [[47476,91800,91807,91797,108194,115001,33786,2637,339,78675,22570,5211,9005,102359,99,127797,45334,102795,114238,113004,3355,1513,19503,34490,24394,64803,19386,117405,128405,50519,91644,90337,54706,4167,90327,56626,50245,50541,96201,96201,31661,118,55021,122,82691,118271,44572,33395,102051,20066,10326,853,105593,31935,105421,605,64044,8122,9484,15487,114404,88625,113792,87194,2094,1776,6770,1833,51722,1330,408,88611,115197,113953,51514,64695,63685,76780,118905,118345,710,6789,118699,5484,6358,30283,24259,115782,115268,118093,89766,137143,20511,7922,676,105771,107566,132168,107570,118895,18498,116706,117368,115078,122242,119392,119381,120086,116709,123407,140023,25046,20549,107079]],
-
-	["Shield"] = [[17,47515,45243,45438,115610,48797,48792,49039,87256,55233,50461,33206,47788,62618,47585,104773,110913,108359,22812,102342,106922,61336,19263,53480,1966,31224,74001,5277,45182,98007,30823,108271,1022,6940,114039,31821,498,642,86659,31850,118038,55694,97463,12975,114029,871,114030,120954,131523,122783,122278,115213,116849,20594]],
-
-	["Player"] = [[17,47515,45243,45438,45438,115610,110909,12051,12472,80353,12042,32612,110960,108839,111264,108843,48797,48792,49039,87256,49222,55233,50461,49016,51271,96268,33206,47788,62618,47585,6346,10060,114239,119032,27827,104773,110913,108359,113860,113861,113858,88448,22812,102342,106922,61336,117679,102543,102558,102560,16689,132158,106898,1850,106951,29166,52610,69369,112071,124974,19263,53480,51755,54216,34471,3045,3584,131894,90355,90361,31224,74001,5277,45182,51713,114018,2983,121471,11327,108212,57933,79140,13750,98007,30823,108271,16188,2825,79206,16191,8178,58875,108281,108271,16166,114896,1044,1022,1038,6940,114039,31821,498,642,86659,20925,31850,31884,53563,31842,54428,105809,85499,118038,55694,97463,12975,114029,871,114030,18499,1719,23920,114028,46924,3411,107574,120954,131523,122783,122278,115213,116849,125174,116841,20594,59545,20572,26297,68992]],
-
-	["Raid"] = [[116281,116784,116417,116942,116161,117708,118303,118048,118135,117878,117949,116835,116778,116525,122761,122760,122740,123812,123180,123474,122835,123081,122125,121885,121949,117436,118091,117519,122752,123011,116161,123121,119985,119086,119775,122151,138349,137371,136767,137641,137359,137972,136903,136753,137633,137731,133767,133768,136050,138569,134691,137440,137408,137360,135000,143436,143579,147383,146124,144851,144358,144774,147207,144215,143990,144330,143494,142990,143919,143766,143773,146589,143777,143385,143974,145183]]
-}
-
-local FilterOverrides = {
-	["45438"] = 5, ["48797"] = 5, ["87256"] = 4,
-	["33206"] = 3, ["47585"] = 5, ["22812"] = 2,
-	["102342"] = 2, ["19263"] = 5, ["5277"] = 5,
-	["1022"] = 5, ["31821"] = 3, ["498"] = 2,
-	["642"] = 5, ["86659"] = 4, ["31850"] = 4,
-	["118038"] = 5, ["114029"] = 2, ["871"] = 3,
-	["120954"] = 2, ["131523"] = 5
-}
-
-local function safename(id)
-	local n = GetSpellInfo(id)
-	if not n then
-		if type(id) == "string" then
-			n = id
-		else
-			SV:Debugger('|cffFF9900SVUI:|r Spell not found: (#ID) '..id)
-			n = "Voodoo Doll";
-		end
-	end
-	return n
-end
-
-for k, x in pairs(FilterIDs) do
-	local src = {};
-	for id in x:gmatch("([^,]+)") do
-		if(id) then
-			local saved
-			local n = safename(id);
-			local p = FilterOverrides[tostring(id)] or 0;
-			if k == "Strict" then
-				saved = {['enable'] = true, ['spellID'] = id, ['priority'] = p}
-			else
-				saved = {['enable'] = true, ['priority'] = p}
-			end
-			src[n] = saved
-		end
-	end
-	CONFIGS.filter[k] = src
-end
-
-CONFIGS.filter.BuffWatch = CLASS_WATCH_INDEX[SV.class] or {}
-CONFIGS.filter.PetBuffWatch = PET_WATCH
---[[
-##########################################################
-CREATE DB
-##########################################################
-]]--
-local function tablecopy(d, s)
-    if type(s) ~= "table" then return end
-    if type(d) == "table" then
-        for k, v in pairs(s) do
-            if type(v) == "table" then
-                if not rawget(d, k) then rawset(d, k, {}) end
-                tablecopy(d[k], v)
-            else
-                if rawget(d, k) == nil then
-                    rawset(d, k, v)
-                end
-            end
-        end
-    end
-end
-
-local function importdata(s, d)
-    if type(d) ~= "table" then d = {} end
-    if type(s) == "table" then
-        for k,v in pairs(s) do
-            if type(v) == "table" then
-                v = importdata(v, d[k])
-            end
-            d[k] = v
-        end
-    end
-    return d
-end
-
-local function setdefaults(t, key, sub, sub2)
-    local sv = rawget(t, "profile")
-    local src = rawget(t, "defaults")
-    local savedProfile = sv[key]
-    if(sub2 and sv[key] and sv[key][sub]) then
-        savedProfile = sv[key][sub][sub2]
-    elseif(sub and sv[key]) then
-        savedProfile = sv[key][sub]
-    else
-        savedProfile = sv[key]
-    end
-    if(savedProfile) then
-        for k,v in pairs(savedProfile) do
-            savedProfile[k] = nil
-        end
-    else
-        sv[key] = {}
-    end
-    tablecopy(sv[key], src[key])
-end
-
-local function getdefaults(t, key)
-    local src = rawget(t, "defaults")
-    return src[key] or {}
-end
-
-local function removedefaults(db, src, nometa)
-    if(type(src) ~= "table") then return end
-    if(not nometa) then
-        setmetatable(db, nil)
-    end
-    for k,v in pairs(src) do
-        if type(v) == "table" and type(db[k]) == "table" then
-            removedefaults(db[k], v, nometa)
-            if next(db[k]) == nil then
-                db[k] = nil
-            end
-        else
-            if db[k] == v then
-                db[k] = nil
-            end
-        end
-    end
-end
-
-local function resetprofile(t)
-    local sv = rawget(t, "profile")
-    local src = rawget(t, "defaults")
-    for k,v in pairs(sv) do
-        sv[k] = nil
-    end
-end
-
-local function importprofile(t, key)
-    local sv = rawget(t, "profile")
-    local dv = rawget(t, "defaults")
-    local globals = SV.public
-    local src = globals.profiles[key]
-    if(not src) then return end
-    for k,v in pairs(sv) do
-        sv[k] = nil
-    end
-    tablecopy(sv, src)
-    sv.copyKey = key
-    ReloadUI()
-end
-
-local function importprompt(t, key)
-    SV.SystemAlert["COPY_PROFILE_PROMPT"].text = L["Are you sure you want to copy the profile '" .. key .. "'?"]
-    SV.SystemAlert["COPY_PROFILE_PROMPT"].OnAccept = function() importprofile(t, key) end
-    SV:StaticPopup_Show("COPY_PROFILE_PROMPT")
-end
-
-local function exportprofile(t, key)
-    local sv = rawget(t, "profile")
-    local dv = rawget(t, "defaults")
-    local globals = SV.public
-    if(not globals.profiles[key]) then globals.profiles[key] = {} end
-    local saved = globals.profiles[key]
-    tablecopy(saved, sv)
-    for k,v in pairs(saved) do
-        removedefaults(saved[k], dv[k])
-    end
-    globals.profileKeys[key] = key
-    SV:SavedPopup()
-end
-
-local function removeprofile(t, key)
-    local globals = SV.public
-    if(globals.profiles[key]) then globals.profiles[key] = nil end
-    if(globals.profileKeys[key]) then globals.profileKeys[key] = nil end
-    collectgarbage("collect")
-end
-
-local function insertdata(t, src)
-    local sv = rawget(t, "profile")
-    local dv = rawget(t, "defaults")
-    for k,v in pairs(src) do
-        if(not sv[k]) then sv[k] = {} end
-        tablecopy(sv[k], src[k])
-        if(not dv[k]) then dv[k] = {} end
-        tablecopy(dv[k], src[k])
-
-        rawset(t, k, sv[k])
-    end
-end
-
-local function initializedata(t)
-    local sv = rawget(t, "profile")
-    if(not sv.copyKey or (sv.copyKey and type(sv.copyKey) ~= "string")) then
-        sv.copyKey = pkey
-    end
-end
-
-local function SanitizeDatabase()
-    if(not SV.db) then return end
-    local db = SV.db
-    local src = SV.private
-    for k,v in pairs(db) do
-        if(src[k]) then
-            removedefaults(db[k], src[k])
-        end
-    end
-end
-
-local DataBase_OnEvent = function(self, event)
-    if event == "PLAYER_LOGOUT" then
-        SanitizeDatabase()
-    elseif(event == "ACTIVE_TALENT_GROUP_CHANGED") then
-    	SV:UpdateDatabase()
-    end
-end
-
-local metadatabase = {
-    __index = function(t, k)
-        if(not k or k == "") then return end
-        local sv = rawget(t, "profile")
-        local dv = rawget(t, "defaults")
-        local src = dv and dv[k]
-        if(not sv[k]) then sv[k] = {} end
-        if(src) then
-            tablecopy(sv[k], src)
-        end
-        rawset(t, k, sv[k])
-        return rawget(t, k)
-    end,
-}
-
-local METAPROFILE = function(sv)
-	local key 		= 1
-	if(sv.SAFEDATA.dualSpecEnabled) then
-		key = GetSpecialization() or 1
-		databaseListener:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
-	end
-
-    local db        = setmetatable({}, metadatabase)
-
-    db.profile 	    = sv.STORED[key]
-    db.protected    = sv.SAFEDATA
-    db.defaults     = SV.private
-    db.Init         = initializedata
-    db.Append       = insertdata
-    db.Reset        = resetprofile
-    db.SetDefault   = setdefaults
-    db.GetDefault   = getdefaults
-    db.TalentSwap 	= changespec
-    db.ToggleSpec   = togglespec
-    db.Import       = importprompt
-    db.Export       = exportprofile
-    db.Remove       = removeprofile
-
-    return db
-end
-
-function SV:AppendDefaults(newIndex, newData)
-    self.private[newIndex] = newData
-end
-
-function SV:GetProfiles()
-    return self.public.profileKeys or {}
-end
-
-function SV:CheckProfiles()
-    local hasProfile = false
-    local list = self.public.profileKeys or {}
-    for key,_ in pairs(list) do
-        hasProfile = true
-    end
-    return hasProfile
-end
-
-function SV:UpdateDatabase(partial)
-	local sv = _G["SVUI_Profile"]
-    twipe(self.db)
-
-    self.db = METAPROFILE(sv)
-    self.db:Init()
-    self.db.profileKey = pkey
-
-    --print("Update db")
-    if(not partial) then
-    	Registry:UpdateAll()
-    end
-end
-
-function SV:ToggleSpecSwap(value)
-	if(value) then
-		databaseListener:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
-		self:UpdateDatabase()
-	else
-		databaseListener:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
-    end
-end
-
-function SV:TableSplice(targetTable, mergeTable)
-    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 = self:TableSplice(targetTable[key], val)
-            end
-            targetTable[key] = val
-        end
-    end
-    return targetTable
-end
-
-function SV:SetDatabaseObjects(init)
-    if(init) then
-        self.db = tcopy(self.private, true)
-    else
-        self.public = self:TableSplice(SVUI_Global, self.public)
-        self.public.profileKeys = {}
-        for k,v in pairs(self.public.profiles) do
-            self.public.profileKeys[k] = k
-        end
-
-        local sv = _G["SVUI_Profile"]
-
-        twipe(self.db)
-
-        --print("Init db")
-        self.db = METAPROFILE(sv)
-        self.db:Init()
-        self.db.profileKey = pkey
-
-        databaseListener:RegisterEvent("PLAYER_LOGOUT")
-        databaseListener:SetScript("OnEvent", DataBase_OnEvent)
-    end
-end
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/system/load.lua b/Interface/AddOns/SVUI/system/load.lua
index 2fec16b..359bd96 100644
--- a/Interface/AddOns/SVUI/system/load.lua
+++ b/Interface/AddOns/SVUI/system/load.lua
@@ -36,8 +36,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0")
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 --[[
 ##########################################################
 LOCALS
@@ -94,8 +94,8 @@ function SV:RefreshEverything(bypass)
 	SV.UIParent:Hide();

 	self:SetSVMovablesPositions();
-	Registry:Update('SVUnit');
-	Registry:UpdateAll();
+	SVLib:Update('SVUnit');
+	SVLib:UpdateAll();

 	SV.UIParent:Show();

@@ -108,73 +108,17 @@ end
 SVUI LOAD PROCESS
 ##########################################################
 ]]--
-local function PrepareStorage()
-	if(not SVUI_Profile) then return end
-	SVUI_Profile.STORED = {}
-	local old = SVUI_Profile.SAFEDATA
-	local media = old.mediastyle or ""
-	local bars = old.barstyle or ""
-	local units = old.unitstyle or ""
-	local groups = old.groupstyle or ""
-	local auras = old.aurastyle or ""
-	local spec = GetSpecialization() or 1
-	SVUI_Profile.STORED[1] = tcopy(SVUI_Profile, true)
-	SVUI_Profile.STORED[1].LAYOUT = {
-		mediastyle = media,
-		barstyle = bars,
-		unitstyle = units,
-		groupstyle = groups,
-		aurastyle = auras
-	}
-	SVUI_Profile.SAFEDATA.mediastyle = nil
-	SVUI_Profile.SAFEDATA.barstyle = nil
-	SVUI_Profile.SAFEDATA.unitstyle = nil
-	SVUI_Profile.SAFEDATA.groupstyle = nil
-	SVUI_Profile.SAFEDATA.aurastyle = nil
-	SVUI_Profile.SAFEDATA.dualSpecEnabled = false
-end
-
 function SV:Load()
 	self.Timers:ClearAllTimers()

 	local rez = GetCVar("gxResolution");
 	local gxHeight = tonumber(match(rez,"%d+x(%d+)"));
 	local gxWidth = tonumber(match(rez,"(%d+)x%d+"));
-
-	if not SVUI_Global then SVUI_Global = {} end
-    if not SVUI_Global["profiles"] then SVUI_Global["profiles"] = {} end
-    if SVUI_Global["gold"] then SVUI_Global["gold"] = nil end
-    if SVUI_Global["profileKeys"] then SVUI_Global["profileKeys"] = nil end
-
-    if not SVUI_Profile then SVUI_Profile = {} end
-    if not SVUI_Profile.SAFEDATA then SVUI_Profile.SAFEDATA = {dualSpecEnabled = false} end
-    if not SVUI_Profile.STORED then PrepareStorage() end

-    if not SVUI_Profile.STORED[2] then
-    	SVUI_Profile.STORED[2] = {}
-	    SVUI_Profile.STORED[2].LAYOUT = SVUI_Profile.STORED[1].LAYOUT
-	end
-
-	if not SVUI_Profile.STORED[3] then
-		SVUI_Profile.STORED[3] = {}
-	    SVUI_Profile.STORED[3].LAYOUT = SVUI_Profile.STORED[1].LAYOUT
-	end
+    SVLib:Initialize()

-	if playerClass == "DRUID" and not SVUI_Profile.STORED[4] then
-		SVUI_Profile.STORED[4] = {}
-	    SVUI_Profile.STORED[4].LAYOUT = SVUI_Profile.STORED[1].LAYOUT
-	end
-
-    for k,v in pairs(SVUI_Profile) do
-    	if(k ~= "STORED" and k ~= "SAFEDATA") then
-    		SVUI_Profile[k] = nil
-    	end
-    end
-
-    if not SVUI_Cache then SVUI_Cache = {} end
-    if not SVUI_Cache["Dock"] then SVUI_Cache["Dock"] = {} end
-    if not SVUI_Cache["Mentalo"] then SVUI_Cache["Mentalo"] = {} end
-    if not SVUI_Cache["Bindings"] then SVUI_Cache["Bindings"] = {} end
+    SVUI_Cache = SVUI_Cache or {}
+    SVUI_Cache.anchors = SVUI_Cache.anchors or {}
     if(not SVUI_Cache["screenheight"] or (SVUI_Cache["screenheight"] and type(SVUI_Cache["screenheight"]) ~= "number")) then
     	SVUI_Cache["screenheight"] = gxHeight
     end
@@ -182,9 +126,6 @@ function SV:Load()
     	SVUI_Cache["screenwidth"] = gxWidth
     end

-    self:SetDatabaseObjects(true)
-    Registry:FindAddons()
-
 	self:ScreenCalibration();
 	self:RefreshSystemFonts();
 	self:LoadSystemAlerts();
@@ -194,11 +135,9 @@ function SV:Load()
 end

 function SV:Launch()
-	self:SetDatabaseObjects();
+	SVLib:Launch();
+
 	self:ScreenCalibration("PLAYER_LOGIN");
-	Registry:LoadRegisteredAddons();
-	self:UpdateDatabase(true);
-	Registry:LoadPackages();
 	self:DefinePlayerRole();
 	self:LoadMovables();
 	self:SetSVMovablesPositions();
@@ -222,15 +161,15 @@ function SV:Launch()
 	self.UIParent:RegisterEvent("ADDON_ACTION_FORBIDDEN");
 	self.UIParent:RegisterEvent("SPELLS_CHANGED");

-	Registry:Update("SVMap");
-	Registry:Update("SVUnit", true);
+	SVLib:Update("SVMap");
+	SVLib:Update("SVUnit", true);
 	collectgarbage("collect")

 	_G["SVUI_Mentalo"]:SetFixedPanelTemplate("Component")
 	_G["SVUI_Mentalo"]:SetPanelColor("yellow")
 	_G["SVUI_MentaloPrecision"]:SetPanelTemplate("Transparent")

-	if self.db.system.loginmessage then
+	if self.db.loginmessage then
 		local logMsg = (L["LOGIN_MSG"]):format("|cffFFFF1A", "|cffAA78FF", self.___version)
 		self:AddonMessage(logMsg);
 	end
diff --git a/Interface/AddOns/SVUI/system/media.lua b/Interface/AddOns/SVUI/system/media.lua
index c51778a..ba227b1 100644
--- a/Interface/AddOns/SVUI/system/media.lua
+++ b/Interface/AddOns/SVUI/system/media.lua
@@ -38,8 +38,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0")
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local LSM = LibStub("LibSharedMedia-3.0")
 --[[
 ##########################################################
@@ -223,8 +223,6 @@ function SV:HexColor(arg1,arg2,arg3)
         local t
         if(self.Media or self.db.media) then
             t = self.Media.color[arg1] or self.db.media.unitframes[arg1]
-        else
-            t = self.private.media.colors[arg1] or self.private.media.unitframes[arg1]
         end
         if t then
             r,g,b = t[1],t[2],t[3]
@@ -258,7 +256,7 @@ function SV:MediaUpdate()

   self.Media.gradient.special = {"VERTICAL",r1,g1,b1,r2,g2,b2}

-  Registry:RunCallbacks()
+  SVLib:RunCallbacks()
 end

 function SV:RefreshSystemFonts()
diff --git a/Interface/AddOns/SVUI/system/mentalo.lua b/Interface/AddOns/SVUI/system/mentalo.lua
index ec0a078..08a00b3 100644
--- a/Interface/AddOns/SVUI/system/mentalo.lua
+++ b/Interface/AddOns/SVUI/system/mentalo.lua
@@ -34,8 +34,13 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang();
+
 SV.MentaloFrames = {}
+
+local MentaloMover = CreateFrame("Frame", nil)
+
 local Sticky = {};
 Sticky.scripts = Sticky.scripts or {}
 Sticky.rangeX = 15
@@ -328,7 +333,7 @@ local function Mentalo_OnSizeChanged(frame)
 	end
 end

-local function MakeMovable(frame)
+function MentaloMover:MakeMovable(frame)
 	if HandledFrames then
 		for _, f in pairs(HandledFrames)do
 			if frame:GetName() == f then return end
@@ -347,11 +352,11 @@ local function MakeMovable(frame)
 		if this.IsMoving then return end
 		this:ClearAllPoints()
 		if this:GetName() == "QuestFrame" then
-			if SVUI_Cache["Mentalo"]["GossipFrame"].Points  ~= nil then
-				this:SetPoint(unpack(SVUI_Cache["Mentalo"]["GossipFrame"].Points))
+			if SVUI_Cache.Mentalo["GossipFrame"].Points  ~= nil then
+				this:SetPoint(unpack(SVUI_Cache.Mentalo["GossipFrame"].Points))
 			end
-		elseif SVUI_Cache["Mentalo"][this:GetName()].Points  ~= nil then
-			this:SetPoint(unpack(SVUI_Cache["Mentalo"][this:GetName()].Points))
+		elseif SVUI_Cache.Mentalo[this:GetName()].Points  ~= nil then
+			this:SetPoint(unpack(SVUI_Cache.Mentalo[this:GetName()].Points))
 		end
 	end)
 	frame:SetScript("OnDragStart", function(this)
@@ -369,13 +374,25 @@ local function MakeMovable(frame)
 		this:ClearAllPoints()
 		this:SetPoint(anchor1, parent, anchor2, x, y)
 		if this:GetName() == "QuestFrame" then
-			SVUI_Cache["Mentalo"]["GossipFrame"].Points = {anchor1, parent, anchor2, x, y}
+			SVUI_Cache.Mentalo["GossipFrame"].Points = {anchor1, parent, anchor2, x, y}
 		else
-			SVUI_Cache["Mentalo"][this:GetName()].Points = {anchor1, parent, anchor2, x, y}
+			SVUI_Cache.Mentalo[this:GetName()].Points = {anchor1, parent, anchor2, x, y}
 		end
 	end)
 	tinsert(HandledFrames, frame:GetName())
-end
+end
+
+local Movable_OnEvent = function(self)
+	for _, frame in pairs(DraggableFrames)do
+		if _G[frame] then
+			if SVUI_Cache.Mentalo[frame] == nil then
+				SVUI_Cache.Mentalo[frame] = {}
+			end
+			SVUI_Cache.Mentalo["GameMenuFrame"] = {}
+			MakeMovable(_G[frame])
+		end
+	end
+end

 local function GrabUsableRegions(frame)
 	local parent = frame or SV.UIParent
@@ -432,13 +449,13 @@ local function SetSVMovable(frame, moveName, title, raised, snap, dragStopFunc)
 		movable:SetFrameStrata("BACKGROUND")
 	end
 	local anchor1, anchorParent, anchor2, xPos, yPos = split("\031", FindLoc(frame))
-	if SV.db.framelocations and SV.db.framelocations[moveName] then
-		if type(SV.db.framelocations[moveName]) == "table"then
-			movable:SetPoint(SV.db.framelocations[moveName]["p"], SV.UIParent, SV.db.framelocations[moveName]["p2"], SV.db.framelocations[moveName]["p3"], SV.db.framelocations[moveName]["p4"])
-			SV.db.framelocations[moveName] = FindLoc(movable)
+	if SVUI_Cache.anchors and SVUI_Cache.anchors[moveName] then
+		if type(SVUI_Cache.anchors[moveName]) == "table"then
+			movable:SetPoint(SVUI_Cache.anchors[moveName]["p"], SV.UIParent, SVUI_Cache.anchors[moveName]["p2"], SVUI_Cache.anchors[moveName]["p3"], SVUI_Cache.anchors[moveName]["p4"])
+			SVUI_Cache.anchors[moveName] = FindLoc(movable)
 			movable:ClearAllPoints()
 		end
-		anchor1, anchorParent, anchor2, xPos, yPos = split("\031", SV.db.framelocations[moveName])
+		anchor1, anchorParent, anchor2, xPos, yPos = split("\031", SVUI_Cache.anchors[moveName])
 		movable:SetPoint(anchor1, anchorParent, anchor2, xPos, yPos)
 	else
 		movable:SetPoint(anchor1, anchorParent, anchor2, xPos, yPos)
@@ -575,7 +592,7 @@ function SV:MentaloForced(frame)
 end

 function SV:TestMovableMoved(frame)
-	if SV.db.framelocations and SV.db.framelocations[frame] then
+	if SVUI_Cache.anchors and SVUI_Cache.anchors[frame] then
 		return true
 	else
 		return false
@@ -584,10 +601,10 @@ end

 function SV:SaveMovableLoc(frame)
 	if not _G[frame] then return end
-	if not SV.db.framelocations then
-		SV.db.framelocations = {}
+	if not SVUI_Cache.anchors then
+		SVUI_Cache.anchors = {}
 	end
-	SV.db.framelocations[frame] = FindLoc(_G[frame])
+	SVUI_Cache.anchors[frame] = FindLoc(_G[frame])
 end

 function SV:SetSnapOffset(frame, snapOffset)
@@ -657,7 +674,7 @@ function SV:ResetMovables(request)
 				end
 			end
 		end
-		SV.db:SetDefault("framelocations")
+		SVUI_Cache.Mentalo:Reset("anchors")
 	else
 		for name, _ in pairs(SV.MentaloFrames)do
 			if SV.MentaloFrames[name]["point"] then
@@ -669,8 +686,8 @@ function SV:ResetMovables(request)
 							local u, v, w, x, y = split("\031", SV.MentaloFrames[name]["point"])
 							frame:ClearAllPoints()
 							frame:SetPoint(u, v, w, x, y)
-							if SV.db.framelocations then
-								SV.db.framelocations[name] = nil
+							if SVUI_Cache.anchors then
+								SVUI_Cache.anchors[name] = nil
 							end
 							if (SV.MentaloFrames[name]["postdrag"] ~= nil and type(SV.MentaloFrames[name]["postdrag"]) == "function")then
 								SV.MentaloFrames[name]["postdrag"](frame, Pinpoint(frame))
@@ -688,8 +705,8 @@ function SV:SetSVMovablesPositions()
 		local frame = _G[name];
 		local anchor1, parent, anchor2, x, y;
 		if frame then
-			if (SV.db.framelocations and SV.db.framelocations[name] and type(SV.db.framelocations[name]) == "string") then
-				anchor1, parent, anchor2, x, y = split("\031", SV.db.framelocations[name])
+			if (SVUI_Cache.anchors and SVUI_Cache.anchors[name] and type(SVUI_Cache.anchors[name]) == "string") then
+				anchor1, parent, anchor2, x, y = split("\031", SVUI_Cache.anchors[name])
 				frame:ClearAllPoints()
 				frame:SetPoint(anchor1, parent, anchor2, x, y)
 			elseif SV.MentaloFrames[name]["point"] then
@@ -702,6 +719,9 @@ function SV:SetSVMovablesPositions()
 end

 function SV:LoadMovables()
+	SVUI_Cache.Mentalo = SVUI_Cache.Mentalo or {}
+	MentaloMover:SetScript("OnEvent", Movable_OnEvent)
+
 	for name, _ in pairs(self.MentaloFrames)do
 		local parent, text, overlay, snapoffset, postdrag;
 		for key, value in pairs(self.MentaloFrames[name])do
@@ -805,20 +825,6 @@ end
 XML FRAME SCRIPT HANDLERS
 ##########################################################
 ]]--
-function SVUI_MoveEventHandler_OnEvent()
-	if not SVUI_Cache then SVUI_Cache = {} end
-    if not SVUI_Cache["Mentalo"] then SVUI_Cache["Mentalo"] = {} end
-	for _, frame in pairs(DraggableFrames)do
-		if _G[frame] then
-			if SVUI_Cache["Mentalo"][frame] == nil then
-				SVUI_Cache["Mentalo"][frame] = {}
-			end
-			SVUI_Cache["Mentalo"]["GameMenuFrame"] = {}
-			MakeMovable(_G[frame])
-		end
-	end
-end
-
 function SVUI_MentaloEventHandler_Update(self)
 	_G["SVUI_MentaloEventHandler"] = self;
 	local frame = UpdateFrameTarget;
diff --git a/Interface/AddOns/SVUI/system/setup.lua b/Interface/AddOns/SVUI/system/setup.lua
index ffd317a..840c3c4 100644
--- a/Interface/AddOns/SVUI/system/setup.lua
+++ b/Interface/AddOns/SVUI/system/setup.lua
@@ -31,8 +31,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0");
+local L = SVLib:Lang();
 --[[
 ##########################################################
 LOCAL VARS
@@ -1150,6 +1150,7 @@ local function LoadAllPresets()
 end

 local function _copyPresets(saved, preset)
+	--if not saved then return end
 	if(type(preset) == 'table') then
         for key,val in pairs(preset) do
         	if(not saved[key]) then saved[key] = {} end
@@ -1207,110 +1208,110 @@ local function ShowLayout(show40)
 end

 local function BarShuffle()
-	local bar2 = SV.db.SVBar.Bar2.enable;
+	local bar2 = SV.SVBar.db.Bar2.enable;
 	local base = 30;
-	local bS = SV.db.SVBar.Bar1.buttonspacing;
-	local tH = SV.db.SVBar.Bar1.buttonsize  +  (base - bS);
+	local bS = SV.SVBar.db.Bar1.buttonspacing;
+	local tH = SV.SVBar.db.Bar1.buttonsize  +  (base - bS);
 	local b2h = bar2 and tH or base;
 	local sph = (400 - b2h);
-	if not SV.db.framelocations then SV.db.framelocations = {} end
-	SV.db.framelocations.SVUI_SpecialAbility_MOVE = "BOTTOMSVUIParentBOTTOM0"..sph;
-	SV.db.framelocations.SVUI_ActionBar2_MOVE = "BOTTOMSVUI_ActionBar1TOP0"..(-bS);
-	SV.db.framelocations.SVUI_ActionBar3_MOVE = "BOTTOMLEFTSVUI_ActionBar1BOTTOMRIGHT40";
-	SV.db.framelocations.SVUI_ActionBar5_MOVE = "BOTTOMRIGHTSVUI_ActionBar1BOTTOMLEFT-40";
+	if not SVUI_Cache.anchors then SVUI_Cache.anchors = {} end
+	SVUI_Cache.anchors.SVUI_SpecialAbility_MOVE = "BOTTOMSVUIParentBOTTOM0"..sph;
+	SVUI_Cache.anchors.SVUI_ActionBar2_MOVE = "BOTTOMSVUI_ActionBar1TOP0"..(-bS);
+	SVUI_Cache.anchors.SVUI_ActionBar3_MOVE = "BOTTOMLEFTSVUI_ActionBar1BOTTOMRIGHT40";
+	SVUI_Cache.anchors.SVUI_ActionBar5_MOVE = "BOTTOMRIGHTSVUI_ActionBar1BOTTOMLEFT-40";
 	if bar2 then
-		SV.db.framelocations.SVUI_PetActionBar_MOVE = "BOTTOMLEFTSVUI_ActionBar2TOPLEFT04"
-		SV.db.framelocations.SVUI_StanceBar_MOVE = "BOTTOMRIGHTSVUI_ActionBar2TOPRIGHT04";
+		SVUI_Cache.anchors.SVUI_PetActionBar_MOVE = "BOTTOMLEFTSVUI_ActionBar2TOPLEFT04"
+		SVUI_Cache.anchors.SVUI_StanceBar_MOVE = "BOTTOMRIGHTSVUI_ActionBar2TOPRIGHT04";
 	else
-		SV.db.framelocations.SVUI_PetActionBar_MOVE = "BOTTOMLEFTSVUI_ActionBar1TOPLEFT04"
-		SV.db.framelocations.SVUI_StanceBar_MOVE = "BOTTOMRIGHTSVUI_ActionBar1TOPRIGHT04";
+		SVUI_Cache.anchors.SVUI_PetActionBar_MOVE = "BOTTOMLEFTSVUI_ActionBar1TOPLEFT04"
+		SVUI_Cache.anchors.SVUI_StanceBar_MOVE = "BOTTOMRIGHTSVUI_ActionBar1TOPRIGHT04";
 	end
 end

 local function UFMoveBottomQuadrant(toggle)
-	if not SV.db.framelocations then SV.db.framelocations = {} end
+	if not SVUI_Cache.anchors then SVUI_Cache.anchors = {} end
 	if not toggle then
-		SV.db.framelocations.SVUI_Player_MOVE = "BOTTOMSVUIParentBOTTOM-278182"
-		SV.db.framelocations.SVUI_PlayerCastbar_MOVE = "BOTTOMSVUIParentBOTTOM-278122"
-		SV.db.framelocations.SVUI_Target_MOVE = "BOTTOMSVUIParentBOTTOM278182"
-		SV.db.framelocations.SVUI_TargetCastbar_MOVE = "BOTTOMSVUIParentBOTTOM278122"
-		SV.db.framelocations.SVUI_Pet_MOVE = "BOTTOMSVUIParentBOTTOM0181"
-		SV.db.framelocations.SVUI_TargetTarget_MOVE = "BOTTOMSVUIParentBOTTOM0214"
-		SV.db.framelocations.SVUI_Focus_MOVE = "BOTTOMSVUIParentBOTTOM310432"
-		SV.db.framelocations.SVUI_ThreatBar_MOVE = "BOTTOMRIGHTSVUIParentBOTTOMRIGHT-495182"
+		SVUI_Cache.anchors.SVUI_Player_MOVE = "BOTTOMSVUIParentBOTTOM-278182"
+		SVUI_Cache.anchors.SVUI_PlayerCastbar_MOVE = "BOTTOMSVUIParentBOTTOM-278122"
+		SVUI_Cache.anchors.SVUI_Target_MOVE = "BOTTOMSVUIParentBOTTOM278182"
+		SVUI_Cache.anchors.SVUI_TargetCastbar_MOVE = "BOTTOMSVUIParentBOTTOM278122"
+		SVUI_Cache.anchors.SVUI_Pet_MOVE = "BOTTOMSVUIParentBOTTOM0181"
+		SVUI_Cache.anchors.SVUI_TargetTarget_MOVE = "BOTTOMSVUIParentBOTTOM0214"
+		SVUI_Cache.anchors.SVUI_Focus_MOVE = "BOTTOMSVUIParentBOTTOM310432"
+		SVUI_Cache.anchors.SVUI_ThreatBar_MOVE = "BOTTOMRIGHTSVUIParentBOTTOMRIGHT-495182"
 	elseif toggle == "shift" then
-		SV.db.framelocations.SVUI_Player_MOVE = "BOTTOMSVUIParentBOTTOM-278210"
-		SV.db.framelocations.SVUI_PlayerCastbar_MOVE = "BOTTOMSVUIParentBOTTOM-278150"
-		SV.db.framelocations.SVUI_Target_MOVE = "BOTTOMSVUIParentBOTTOM278210"
-		SV.db.framelocations.SVUI_TargetCastbar_MOVE = "BOTTOMSVUIParentBOTTOM278150"
-		SV.db.framelocations.SVUI_Pet_MOVE = "BOTTOMSVUIParentBOTTOM0209"
-		SV.db.framelocations.SVUI_TargetTarget_MOVE = "BOTTOMSVUIParentBOTTOM0242"
-		SV.db.framelocations.SVUI_Focus_MOVE = "BOTTOMSVUIParentBOTTOM310432"
-		SV.db.framelocations.SVUI_ThreatBar_MOVE = "BOTTOMRIGHTSVUIParentBOTTOMRIGHT-495210"
+		SVUI_Cache.anchors.SVUI_Player_MOVE = "BOTTOMSVUIParentBOTTOM-278210"
+		SVUI_Cache.anchors.SVUI_PlayerCastbar_MOVE = "BOTTOMSVUIParentBOTTOM-278150"
+		SVUI_Cache.anchors.SVUI_Target_MOVE = "BOTTOMSVUIParentBOTTOM278210"
+		SVUI_Cache.anchors.SVUI_TargetCastbar_MOVE = "BOTTOMSVUIParentBOTTOM278150"
+		SVUI_Cache.anchors.SVUI_Pet_MOVE = "BOTTOMSVUIParentBOTTOM0209"
+		SVUI_Cache.anchors.SVUI_TargetTarget_MOVE = "BOTTOMSVUIParentBOTTOM0242"
+		SVUI_Cache.anchors.SVUI_Focus_MOVE = "BOTTOMSVUIParentBOTTOM310432"
+		SVUI_Cache.anchors.SVUI_ThreatBar_MOVE = "BOTTOMRIGHTSVUIParentBOTTOMRIGHT-495210"
 	else
 		local c = 136;
 		local d = 135;
 		local e = 80;
-		SV.db.framelocations.SVUI_Player_MOVE = "BOTTOMSVUIParentBOTTOM"..-c..""..d;
-		SV.db.framelocations.SVUI_PlayerCastbar_MOVE = "BOTTOMSVUIParentBOTTOM"..-c..""..(d-60);
-		SV.db.framelocations.SVUI_Target_MOVE = "BOTTOMSVUIParentBOTTOM"..c..""..d;
-		SV.db.framelocations.SVUI_TargetCastbar_MOVE = "BOTTOMSVUIParentBOTTOM"..c..""..(d-60);
-		SV.db.framelocations.SVUI_Pet_MOVE = "BOTTOMSVUIParentBOTTOM"..-c..""..e;
-		SV.db.framelocations.SVUI_TargetTarget_MOVE = "BOTTOMSVUIParentBOTTOM"..c..""..e;
-		SV.db.framelocations.SVUI_Focus_MOVE = "BOTTOMSVUIParentBOTTOM"..c..""..(d + 150);
-		SV.db.framelocations.SVUI_ThreatBar_MOVE = "BOTTOMRIGHTSVUIParentBOTTOMRIGHT-495"..d;
+		SVUI_Cache.anchors.SVUI_Player_MOVE = "BOTTOMSVUIParentBOTTOM"..-c..""..d;
+		SVUI_Cache.anchors.SVUI_PlayerCastbar_MOVE = "BOTTOMSVUIParentBOTTOM"..-c..""..(d-60);
+		SVUI_Cache.anchors.SVUI_Target_MOVE = "BOTTOMSVUIParentBOTTOM"..c..""..d;
+		SVUI_Cache.anchors.SVUI_TargetCastbar_MOVE = "BOTTOMSVUIParentBOTTOM"..c..""..(d-60);
+		SVUI_Cache.anchors.SVUI_Pet_MOVE = "BOTTOMSVUIParentBOTTOM"..-c..""..e;
+		SVUI_Cache.anchors.SVUI_TargetTarget_MOVE = "BOTTOMSVUIParentBOTTOM"..c..""..e;
+		SVUI_Cache.anchors.SVUI_Focus_MOVE = "BOTTOMSVUIParentBOTTOM"..c..""..(d + 150);
+		SVUI_Cache.anchors.SVUI_ThreatBar_MOVE = "BOTTOMRIGHTSVUIParentBOTTOMRIGHT-495"..d;
 	end
 end

 local function UFMoveLeftQuadrant(toggle)
-	if not SV.db.framelocations then SV.db.framelocations = {} end
+	if not SVUI_Cache.anchors then SVUI_Cache.anchors = {} end
 	if not toggle then
-		SV.db.framelocations.SVUI_Assist_MOVE = "TOPLEFTSVUIParentTOPLEFT"..XOFF.."-250"
-		SV.db.framelocations.SVUI_Tank_MOVE = "TOPLEFTSVUIParentTOPLEFT"..XOFF.."-175"
-		SV.db.framelocations.SVUI_Raidpet_MOVE = "TOPLEFTSVUIParentTOPLEFT"..XOFF.."-325"
-		SV.db.framelocations.SVUI_Party_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT"..XOFF.."400"
-		SV.db.framelocations.SVUI_Raid10_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT"..XOFF.."400"
-		SV.db.framelocations.SVUI_Raid25_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT"..XOFF.."400"
-		SV.db.framelocations.SVUI_Raid40_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT"..XOFF.."400"
+		SVUI_Cache.anchors.SVUI_Assist_MOVE = "TOPLEFTSVUIParentTOPLEFT"..XOFF.."-250"
+		SVUI_Cache.anchors.SVUI_Tank_MOVE = "TOPLEFTSVUIParentTOPLEFT"..XOFF.."-175"
+		SVUI_Cache.anchors.SVUI_Raidpet_MOVE = "TOPLEFTSVUIParentTOPLEFT"..XOFF.."-325"
+		SVUI_Cache.anchors.SVUI_Party_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT"..XOFF.."400"
+		SVUI_Cache.anchors.SVUI_Raid10_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT"..XOFF.."400"
+		SVUI_Cache.anchors.SVUI_Raid25_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT"..XOFF.."400"
+		SVUI_Cache.anchors.SVUI_Raid40_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT"..XOFF.."400"
 	else
-		SV.db.framelocations.SVUI_Assist_MOVE = "TOPLEFTSVUIParentTOPLEFT4-250"
-		SV.db.framelocations.SVUI_Tank_MOVE = "TOPLEFTSVUIParentTOPLEFT4-175"
-		SV.db.framelocations.SVUI_Raidpet_MOVE = "TOPLEFTSVUIParentTOPLEFT4-325"
-		SV.db.framelocations.SVUI_Party_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT4300"
-		SV.db.framelocations.SVUI_Raid40_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT4300"
-		SV.db.framelocations.SVUI_Raid10_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT4300"
-		SV.db.framelocations.SVUI_Raid25_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT4300"
+		SVUI_Cache.anchors.SVUI_Assist_MOVE = "TOPLEFTSVUIParentTOPLEFT4-250"
+		SVUI_Cache.anchors.SVUI_Tank_MOVE = "TOPLEFTSVUIParentTOPLEFT4-175"
+		SVUI_Cache.anchors.SVUI_Raidpet_MOVE = "TOPLEFTSVUIParentTOPLEFT4-325"
+		SVUI_Cache.anchors.SVUI_Party_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT4300"
+		SVUI_Cache.anchors.SVUI_Raid40_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT4300"
+		SVUI_Cache.anchors.SVUI_Raid10_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT4300"
+		SVUI_Cache.anchors.SVUI_Raid25_MOVE = "BOTTOMLEFTSVUIParentBOTTOMLEFT4300"
 	end
 end

 local function UFMoveTopQuadrant(toggle)
-	if not SV.db.framelocations then SV.db.framelocations = {} end
+	if not SVUI_Cache.anchors then SVUI_Cache.anchors = {} end
 	if not toggle then
-		SV.db.framelocations.GM_MOVE = "TOPLEFTSVUIParentTOPLEFT250-25"
-		SV.db.framelocations.SVUI_LootFrame_MOVE = "BOTTOMSVUIParentBOTTOM0350"
-		SV.db.framelocations.SVUI_AltPowerBar_MOVE = "TOPSVUIParentTOP0-40"
-		SV.db.framelocations.LoC_MOVE = "BOTTOMSVUIParentBOTTOM0350"
-		SV.db.framelocations.BNET_MOVE = "TOPRIGHTSVUIParentTOPRIGHT-4-250"
+		SVUI_Cache.anchors.GM_MOVE = "TOPLEFTSVUIParentTOPLEFT250-25"
+		SVUI_Cache.anchors.SVUI_LootFrame_MOVE = "BOTTOMSVUIParentBOTTOM0350"
+		SVUI_Cache.anchors.SVUI_AltPowerBar_MOVE = "TOPSVUIParentTOP0-40"
+		SVUI_Cache.anchors.LoC_MOVE = "BOTTOMSVUIParentBOTTOM0350"
+		SVUI_Cache.anchors.BNET_MOVE = "TOPRIGHTSVUIParentTOPRIGHT-4-250"
 	else
-		SV.db.framelocations.GM_MOVE = "TOPLEFTSVUIParentTOPLEFT344-25"
-		SV.db.framelocations.SVUI_LootFrame_MOVE = "BOTTOMSVUIParentBOTTOM0254"
-		SV.db.framelocations.SVUI_AltPowerBar_MOVE = "TOPSVUIParentTOP0-39"
-		SV.db.framelocations.LoC_MOVE = "BOTTOMSVUIParentBOTTOM0443"
-		SV.db.framelocations.BNET_MOVE = "TOPRIGHTSVUIParentTOPRIGHT-4-248"
+		SVUI_Cache.anchors.GM_MOVE = "TOPLEFTSVUIParentTOPLEFT344-25"
+		SVUI_Cache.anchors.SVUI_LootFrame_MOVE = "BOTTOMSVUIParentBOTTOM0254"
+		SVUI_Cache.anchors.SVUI_AltPowerBar_MOVE = "TOPSVUIParentTOP0-39"
+		SVUI_Cache.anchors.LoC_MOVE = "BOTTOMSVUIParentBOTTOM0443"
+		SVUI_Cache.anchors.BNET_MOVE = "TOPRIGHTSVUIParentTOPRIGHT-4-248"
 	end
 end

 local function UFMoveRightQuadrant(toggle)
-	if not SV.db.framelocations then SV.db.framelocations = {} end
-	local dH = SV.db.SVDock.dockRightHeight  +  60
+	if not SVUI_Cache.anchors then SVUI_Cache.anchors = {} end
+	local dH = SV.SVDock.db.dockRightHeight  +  60
 	if not toggle or toggle == "high" then
-		SV.db.framelocations.SVUI_BossHolder_MOVE = "RIGHTSVUIParentRIGHT-1050"
-		SV.db.framelocations.SVUI_ArenaHolder_MOVE = "RIGHTSVUIParentRIGHT-1050"
-		SV.db.framelocations.Tooltip_MOVE = "BOTTOMRIGHTSVUIParentBOTTOMRIGHT-284"..dH;
+		SVUI_Cache.anchors.SVUI_BossHolder_MOVE = "RIGHTSVUIParentRIGHT-1050"
+		SVUI_Cache.anchors.SVUI_ArenaHolder_MOVE = "RIGHTSVUIParentRIGHT-1050"
+		SVUI_Cache.anchors.Tooltip_MOVE = "BOTTOMRIGHTSVUIParentBOTTOMRIGHT-284"..dH;
 	else
-		SV.db.framelocations.SVUI_BossHolder_MOVE = "RIGHTSVUIParentRIGHT-1050"
-		SV.db.framelocations.SVUI_ArenaHolder_MOVE = "RIGHTSVUIParentRIGHT-1050"
-		SV.db.framelocations.Tooltip_MOVE = "BOTTOMRIGHTSVUIParentBOTTOMRIGHT-284"..dH;
+		SVUI_Cache.anchors.SVUI_BossHolder_MOVE = "RIGHTSVUIParentRIGHT-1050"
+		SVUI_Cache.anchors.SVUI_ArenaHolder_MOVE = "RIGHTSVUIParentRIGHT-1050"
+		SVUI_Cache.anchors.Tooltip_MOVE = "BOTTOMRIGHTSVUIParentBOTTOMRIGHT-284"..dH;
 	end
 end

@@ -1442,37 +1443,37 @@ local function SetUserScreen(rez, preserve)
 		if okToResetMOVE then
 			SV:ResetMovables("")
 			okToResetMOVE = false;
-		end
-		SV.db:SetDefault("SVUnit")
+		end
+		SV.SVUnit:ResetData()
 	end

-	if not SV.db.framelocations then SV.db.framelocations = {} end
+	if not SVUI_Cache.anchors then SVUI_Cache.anchors = {} end
 	if rez == "low" then
 		if not preserve then
-			SV.db.SVDock.dockLeftWidth = 350;
-			SV.db.SVDock.dockLeftHeight = 180;
-			SV.db.SVDock.dockRightWidth = 350;
-			SV.db.SVDock.dockRightHeight = 180;
-			SV.db.SVAura.wrapAfter = 10
-			SV.db.SVUnit.fontSize = 10;
-			SV.db.SVUnit.player.width = 200;
-			SV.db.SVUnit.player.castbar.width = 200;
-			SV.db.SVUnit.player.classbar.fill = "fill"
-			SV.db.SVUnit.player.health.tags = "[health:color][health:current]"
-			SV.db.SVUnit.target.width = 200;
-			SV.db.SVUnit.target.castbar.width = 200;
-			SV.db.SVUnit.target.health.tags = "[health:color][health:current]"
-			SV.db.SVUnit.pet.power.enable = false;
-			SV.db.SVUnit.pet.width = 200;
-			SV.db.SVUnit.pet.height = 26;
-			SV.db.SVUnit.targettarget.debuffs.enable = false;
-			SV.db.SVUnit.targettarget.power.enable = false;
-			SV.db.SVUnit.targettarget.width = 200;
-			SV.db.SVUnit.targettarget.height = 26;
-			SV.db.SVUnit.boss.width = 200;
-			SV.db.SVUnit.boss.castbar.width = 200;
-			SV.db.SVUnit.arena.width = 200;
-			SV.db.SVUnit.arena.castbar.width = 200
+			SV.SVDock.db.dockLeftWidth = 350;
+			SV.SVDock.db.dockLeftHeight = 180;
+			SV.SVDock.db.dockRightWidth = 350;
+			SV.SVDock.db.dockRightHeight = 180;
+			SV.SVAura.db.wrapAfter = 10
+			SV.SVUnit.db.fontSize = 10;
+			SV.SVUnit.db.player.width = 200;
+			SV.SVUnit.db.player.castbar.width = 200;
+			SV.SVUnit.db.player.classbar.fill = "fill"
+			SV.SVUnit.db.player.health.tags = "[health:color][health:current]"
+			SV.SVUnit.db.target.width = 200;
+			SV.SVUnit.db.target.castbar.width = 200;
+			SV.SVUnit.db.target.health.tags = "[health:color][health:current]"
+			SV.SVUnit.db.pet.power.enable = false;
+			SV.SVUnit.db.pet.width = 200;
+			SV.SVUnit.db.pet.height = 26;
+			SV.SVUnit.db.targettarget.debuffs.enable = false;
+			SV.SVUnit.db.targettarget.power.enable = false;
+			SV.SVUnit.db.targettarget.width = 200;
+			SV.SVUnit.db.targettarget.height = 26;
+			SV.SVUnit.db.boss.width = 200;
+			SV.SVUnit.db.boss.castbar.width = 200;
+			SV.SVUnit.db.arena.width = 200;
+			SV.SVUnit.db.arena.castbar.width = 200
 		end
 		if not mungs then
 			UFMoveBottomQuadrant(true)
@@ -1482,8 +1483,8 @@ local function SetUserScreen(rez, preserve)
 		end
 		SV.ghettoMonitor = true
 	else
-		SV.db:SetDefault("SVDock")
-		SV.db:SetDefault("SVAura")
+		SV.SVDock:ResetData()
+		SV.SVAura:ResetData()
 		if not mungs then
 			UFMoveBottomQuadrant()
 			UFMoveLeftQuadrant()
@@ -1496,10 +1497,10 @@ local function SetUserScreen(rez, preserve)
 	if(not preserve and not mungs) then
 		BarShuffle()
     	SV:SetSVMovablesPositions()
-		Registry:Update('SVDock')
-		Registry:Update('SVAura')
-		Registry:Update('SVBar')
-		Registry:Update('SVUnit')
+		SVLib:Update('SVDock')
+		SVLib:Update('SVAura')
+		SVLib:Update('SVBar')
+		SVLib:Update('SVUnit')
 		SV:SavedPopup()
 	end
 end
@@ -1514,7 +1515,11 @@ local function LoadPresetData(category, theme)
 		theme = theme or "default"
 		local saved = PRESET_DATA[category]["link"]
 		local preset =  PRESET_DATA[category][theme]
-	    _copyPresets(SV.db[saved], preset)
+		local data = SV[saved] and SV[saved].db or SV.db[saved]
+
+		if(data) then
+	    	_copyPresets(data, preset)
+	    end
 	end
 end

@@ -1522,22 +1527,23 @@ local function SetColorTheme(style, preserve)
 	style = style or "default";

 	if not preserve then
-		SV.db:SetDefault("media")
+		SV:ResetData("media")
 	end

 	local presets = LoadPresetData("media", style)
+	print(table.dump(SV.db))
 	SV.db.LAYOUT.mediastyle = style;

 	if(style == "default") then
-		SV.db.SVUnit.healthclass = true;
+		SV.SVUnit.db.healthclass = true;
 	else
-		SV.db.SVUnit.healthclass = false;
+		SV.SVUnit.db.healthclass = false;
 	end

 	if(not mungs) then
 		SV:MediaUpdate()
-		Registry:Update('SVStats')
-		Registry:Update('SVUnit')
+		SVLib:Update('SVStats')
+		SVLib:Update('SVUnit')
 		if(not preserve) then
 			SV:SavedPopup()
 		end
@@ -1547,11 +1553,11 @@ end
 local function SetUnitframeLayout(style, preserve)
 	style = style or "default";

-	if not SV.db.framelocations then SV.db.framelocations = {} end
+	if not SVUI_Cache.anchors then SVUI_Cache.anchors = {} end

 	if not preserve then
-		SV.db:SetDefault("SVUnit")
-		SV.db:SetDefault("SVStats")
+		SV.SVUnit:ResetData()
+		SV.SVStats:ResetData()
 		if okToResetMOVE then
 			SV:ResetMovables('')
 			okToResetMOVE = false
@@ -1562,7 +1568,7 @@ local function SetUnitframeLayout(style, preserve)
 	SV.db.LAYOUT.unitstyle = style

 	if(SV.db.LAYOUT.mediastyle == "default") then
-		SV.db.SVUnit.healthclass = true;
+		SV.SVUnit.db.healthclass = true;
 	end

 	if(not mungs) then
@@ -1574,8 +1580,8 @@ local function SetUnitframeLayout(style, preserve)
 			end
 			SV:SetSVMovablesPositions()
 		end
-		Registry:Update('SVStats')
-		Registry:Update('SVUnit')
+		SVLib:Update('SVStats')
+		SVLib:Update('SVUnit')
 		if(not preserve) then
 			SV:SavedPopup()
 		end
@@ -1589,7 +1595,7 @@ local function SetGroupframeLayout(style, preserve)
 	SV.db.LAYOUT.groupstyle = style

 	if(not mungs) then
-		Registry:Update('SVUnit')
+		SVLib:Update('SVUnit')
 		if(not preserve) then
 			SV:SavedPopup()
 		end
@@ -1599,9 +1605,9 @@ end
 local function SetupBarLayout(style, preserve)
 	style = style or "default";

-	if not SV.db.framelocations then SV.db.framelocations={} end
+	if not SVUI_Cache.anchors then SVUI_Cache.anchors = {} end
 	if not preserve then
-		SV.db:SetDefault("SVBar")
+		SV.SVBar:ResetData()
 		if okToResetMOVE then
 			SV:ResetMovables('')
 			okToResetMOVE=false
@@ -1623,23 +1629,24 @@ local function SetupBarLayout(style, preserve)
 			BarShuffle()
 			SV:SetSVMovablesPositions()
 		end
-		Registry:Update('SVStats')
-		Registry:Update('SVBar')
+		SVLib:Update('SVStats')
+		SVLib:Update('SVBar')
 		if(not preserve) then
 			SV:SavedPopup()
 		end
 	end
 end

-local function SetupAuralayout(style, preserve)
+local function SetupAuralayout(self, style, preserve)
 	style = style or "default";
 	local presets = LoadPresetData("auras", style)
+
 	SV.db.LAYOUT.aurastyle = style;

 	if(not mungs) then
-		Registry:Update('SVStats')
-		Registry:Update('SVAura')
-		Registry:Update('SVUnit')
+		SVLib:Update('SVStats')
+		SVLib:Update('SVAura')
+		SVLib:Update('SVUnit')
 		if(not preserve) then
 			SV:SavedPopup()
 		end
@@ -1669,13 +1676,13 @@ local function InstallMungsChoice()
 	okToResetMOVE = false;
 	InitializeChatFrames(true);
 	SetUserScreen('high');
-	SV:SetColorTheme();
+	SetColorTheme();
 	SV.db.LAYOUT.unitstyle = nil;
-	SV:SetUnitframeLayout();
+	SetUnitframeLayout();
 	SV.db.LAYOUT.groupstyle = nil;
 	SV.db.LAYOUT.barstyle = nil;
-	SV:SetupBarLayout();
-	SV:SetupAuralayout();
+	SetupBarLayout();
+	SetupAuralayout();
 	SVUI_Profile.SAFEDATA.install_version = SV.___version;
 	StopMusic()
 	SetCVar("Sound_MusicVolume",user_music_vol)
@@ -1786,7 +1793,7 @@ local function SetPage(newPage)
 		end
 		SVUI_InstallOption1Button:Show()
 		SVUI_InstallOption1Button:SetScript("OnClick", function()
-			SetUserScreen("high")
+			SetUserScreen(nil, "high")
 			SVUI_SetupHolder.Desc1:SetText(L["|cffFF9F00"..HIGH.." "..RESOLUTION.."!|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["So what you think your better than me with your big monitor? HUH?!?!"])
 			SVUI_SetupHolder.Desc3:SetText(L["Dont forget whos in charge here! But enjoy the incredible detail."])
@@ -1794,7 +1801,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption1Button:SetText(HIGH)
 		SVUI_InstallOption2Button:Show()
 		SVUI_InstallOption2Button:SetScript("OnClick", function()
-			SetUserScreen("low")
+			SetUserScreen(nil, "low")
 			SVUI_SetupHolder.Desc1:SetText(L["|cffFF9F00"..LOW.." "..RESOLUTION.."|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["Why are you playing this on what I would assume is a calculator display?"])
 			SVUI_SetupHolder.Desc3:SetText(L["Enjoy the ONE incredible pixel that fits on this screen."])
@@ -1808,7 +1815,7 @@ local function SetPage(newPage)
 		setupFrame.Desc3:SetText(L["CHOOSE_OR_DIE"])
 		SVUI_InstallOption1Button:Show()
 		SVUI_InstallOption1Button:SetScript("OnClick", function()
-			SetColorTheme("kaboom")
+			SetColorTheme(nil, "kaboom")
 			SVUI_SetupHolder.Desc1:SetText(L["|cffFF9F00KABOOOOM!|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["This theme tells the world that you are a villain who can put on a show"]..CONTINUED)
 			SVUI_SetupHolder.Desc3:SetText(CONTINUED..L["or better yet, you ARE the show!"])
@@ -1816,7 +1823,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption1Button:SetText(L["Kaboom!"])
 		SVUI_InstallOption2Button:Show()
 		SVUI_InstallOption2Button:SetScript("OnClick", function()
-			SetColorTheme("dark")
+			SetColorTheme(nil, "dark")
 			SVUI_SetupHolder.Desc1:SetText(L["|cffAF30FFThe Darkest Night|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["This theme indicates that you have no interest in wasting time"]..CONTINUED)
 			SVUI_SetupHolder.Desc3:SetText(CONTINUED..L[" the dying begins NOW!"])
@@ -1824,7 +1831,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption2Button:SetText(L["Darkness"])
 		SVUI_InstallOption3Button:Show()
 		SVUI_InstallOption3Button:SetScript("OnClick", function()
-			SetColorTheme("classy")
+			SetColorTheme(nil, "classy")
 			SVUI_SetupHolder.Desc1:SetText(L["|cffFFFF00"..CLASS_COLORS.."|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["This theme is for villains who take pride in their class"]..CONTINUED)
 			SVUI_SetupHolder.Desc3:SetText(CONTINUED..L[" villains know how to reprezent!"])
@@ -1848,7 +1855,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption1Button:Show()
 		SVUI_InstallOption1Button:SetScript("OnClick", function()
 			SV.db.LAYOUT.unitstyle = nil;
-			SetUnitframeLayout("super")
+			SetUnitframeLayout(nil, "super")
 			SVUI_SetupHolder.Desc1:SetText(L["|cff00FFFFLets Do This|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["This layout is anything but minimal! Using this is like being at a rock concert"]..CONTINUED)
 			SVUI_SetupHolder.Desc3:SetText(CONTINUED..L["then annihilating the crowd with frickin lazer beams!"])
@@ -1857,7 +1864,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption2Button:Show()
 		SVUI_InstallOption2Button:SetScript("OnClick", function()
 			SV.db.LAYOUT.unitstyle = nil;
-			SetUnitframeLayout("simple")
+			SetUnitframeLayout(nil, "simple")
 			SVUI_SetupHolder.Desc1:SetText(L["|cff00FFFFSimply Simple|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["This layout is for the villain who just wants to get things done!"]..CONTINUED)
 			SVUI_SetupHolder.Desc3:SetText(CONTINUED..L["but he still wants to see your face before he hits you!"])
@@ -1866,7 +1873,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption3Button:Show()
 		SVUI_InstallOption3Button:SetScript("OnClick", function()
 			SV.db.LAYOUT.unitstyle = nil;
-			SetUnitframeLayout("compact")
+			SetUnitframeLayout(nil, "compact")
 			SVUI_SetupHolder.Desc1:SetText(L["|cff00FFFFEl Compacto|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["Just the necessities so you can see more of the world around you"]..CONTINUED)
 			SVUI_SetupHolder.Desc3:SetText(CONTINUED..L["you dont need no fanciness getting in the way of world domination do you?"])
@@ -1883,7 +1890,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption1Button:Show()
 		SVUI_InstallOption1Button:SetScript("OnClick", function()
 			SV.db.LAYOUT.groupstyle = "default";
-			SetGroupframeLayout("default")
+			SetGroupframeLayout(nil, "default")
 			SVUI_SetupHolder.Desc1:SetText(L["|cff00FFFFStandard|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["You are good to go with the default layout"]..CONTINUED)
 			SVUI_SetupHolder.Desc3:SetText(CONTINUED..L["frames schmames, lets kill some stuff!"])
@@ -1893,7 +1900,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption2Button:Show()
 		SVUI_InstallOption2Button:SetScript("OnClick", function()
 			SV.db.LAYOUT.groupstyle = nil;
-			SetGroupframeLayout("healer")
+			SetGroupframeLayout(nil, "healer")
 			SVUI_SetupHolder.Desc1:SetText(L["|cff00FFFFMEDIC!!|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["You are pretty helpful.. for a VILLAIN!"]..CONTINUED)
 			SVUI_SetupHolder.Desc3:SetText(CONTINUED..L["Hey, even a super villain gets his ass kicked once in awhile. We need the likes of you!"])
@@ -1903,7 +1910,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption3Button:Show()
 		SVUI_InstallOption3Button:SetScript("OnClick", function()
 			SV.db.LAYOUT.groupstyle = nil;
-			SetGroupframeLayout("dps")
+			SetGroupframeLayout(nil, "dps")
 			SVUI_SetupHolder.Desc1:SetText(L["|cff00FFFFDeath Dealer|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["You are the kings of our craft. Handing out pain like its halloween candy."]..CONTINUED)
 			SVUI_SetupHolder.Desc3:SetText(CONTINUED..L["I will move and squeeze group frames out of your way so you have more room for BOOM!"])
@@ -1913,7 +1920,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption4Button:Show()
 		SVUI_InstallOption4Button:SetScript("OnClick", function()
 			SV.db.LAYOUT.groupstyle = nil;
-			SetGroupframeLayout("grid")
+			SetGroupframeLayout(nil, "grid")
 			SVUI_SetupHolder.Desc1:SetText(L["|cff00FFFFCubed|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["You are cold and calculated, your frames should reflect as much."]..CONTINUED)
 			SVUI_SetupHolder.Desc3:SetText(CONTINUED..L["I'm gonna make these frames so precise that you can cut your finger on them!"])
@@ -1928,7 +1935,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption1Button:Show()
 		SVUI_InstallOption1Button:SetScript("OnClick", function()
 			SV.db.LAYOUT.barstyle = nil;
-			SetupBarLayout("default")
+			SetupBarLayout(nil, "default")
 			SVUI_SetupHolder.Desc1:SetText(L["|cff00FFFFLean And Clean|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["Lets keep it slim and deadly, not unlike a ninja sword."])
 			SVUI_SetupHolder.Desc3:SetText(L["You dont ever even look at your bar hardly, so pick this one!"])
@@ -1937,7 +1944,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption2Button:Show()
 		SVUI_InstallOption2Button:SetScript("OnClick", function()
 			SV.db.LAYOUT.barstyle = nil;
-			SetupBarLayout("twosmall")
+			SetupBarLayout(nil, "twosmall")
 			SVUI_SetupHolder.Desc1:SetText(L["|cff00FFFFMore For Less|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["Granted, you dont REALLY need the buttons due to your hotkey-leetness, you just like watching cooldowns!"])
 			SVUI_SetupHolder.Desc3:SetText(L["Sure thing cowboy, your secret is safe with me!"])
@@ -1946,7 +1953,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption3Button:Show()
 		SVUI_InstallOption3Button:SetScript("OnClick", function()
 			SV.db.LAYOUT.barstyle = nil;
-			SetupBarLayout("onebig")
+			SetupBarLayout(nil, "onebig")
 			SVUI_SetupHolder.Desc1:SetText(L["|cff00FFFFWhat Big Buttons You Have|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["The better to PEW-PEW you with my dear!"])
 			SVUI_SetupHolder.Desc3:SetText(L["When you have little time for mouse accuracy, choose this set!"])
@@ -1955,7 +1962,7 @@ local function SetPage(newPage)
 		SVUI_InstallOption4Button:Show()
 		SVUI_InstallOption4Button:SetScript("OnClick", function()
 			SV.db.LAYOUT.barstyle = nil;
-			SetupBarLayout("twobig")
+			SetupBarLayout(nil, "twobig")
 			SVUI_SetupHolder.Desc1:SetText(L["|cff00FFFFThe Double Down|r"])
 			SVUI_SetupHolder.Desc2:SetText(L["Lets be honest for a moment. Who doesnt like a huge pair in their face?"])
 			SVUI_SetupHolder.Desc3:SetText(L["Double your bars then double their size for maximum button goodness!"])
@@ -1976,19 +1983,19 @@ local function SetPage(newPage)

 		SVUI_InstallOption2Button:Show()
 		SVUI_InstallOption2Button:SetScript("OnClick", function()
-			SetupAuralayout("icons")
+			SetupAuralayout(nil, "icons")
 		end)
 		SVUI_InstallOption2Button:SetText(L["Icons"])

 		SVUI_InstallOption3Button:Show()
 		SVUI_InstallOption3Button:SetScript("OnClick", function()
-			SetupAuralayout("bars")
+			SetupAuralayout(nil, "bars")
 		end)
 		SVUI_InstallOption3Button:SetText(L["Bars"])

 		SVUI_InstallOption4Button:Show()
 		SVUI_InstallOption4Button:SetScript("OnClick", function()
-			SetupAuralayout("theworks")
+			SetupAuralayout(nil, "theworks")
 		end)
 		SVUI_InstallOption4Button:SetText(L["The" .. "\n" .. "Works!"])

@@ -2029,7 +2036,7 @@ local function Reset()
 	mungs = true;
 	okToResetMOVE = false;
 	InitializeChatFrames(true);
-	SV.db:Reset()
+	SVLib:WipeDatabase()
 	SetUserScreen();

 	if SV.db.LAYOUT.mediastyle then
@@ -2069,6 +2076,23 @@ function Setup:Install(autoLoaded)
 	if(not user_music_vol) then
 		user_music_vol = GetCVar("Sound_MusicVolume")
 	end
+
+    if (not SV.db.LAYOUT) then
+    	local old = SVUI_Profile.SAFEDATA
+	    local media = old.mediastyle or ""
+	    local bars = old.barstyle or ""
+	    local units = old.unitstyle or ""
+	    local groups = old.groupstyle or ""
+	    local auras = old.aurastyle or ""
+
+        SV.db.LAYOUT = {
+            mediastyle = media,
+            barstyle = bars,
+            unitstyle = units,
+            groupstyle = groups,
+            aurastyle = auras
+        }
+    end

 	-- frame
 	if not SVUI_SetupHolder then
diff --git a/Interface/AddOns/SVUI/system/slash.lua b/Interface/AddOns/SVUI/system/slash.lua
index f35afed..e8df230 100644
--- a/Interface/AddOns/SVUI/system/slash.lua
+++ b/Interface/AddOns/SVUI/system/slash.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 --[[
 ##########################################################
 LOCAL VARS
@@ -49,7 +49,7 @@ local function SVUIMasterCommand(msg)
 			SV.Setup:Install()
 		elseif (msg == "move" or msg == "mentalo") then
 			SV:UseMentalo()
-		elseif (msg == "kb" or msg == "bind") and SV.db.SVBar.enable then
+		elseif (msg == "kb" or msg == "bind") and SV.SVBar.db.enable then
 			SV.SVBar:ToggleKeyBindingMode()
 		elseif (msg == "reset" or msg == "resetui") then
 			SV:ResetAllUI()
diff --git a/Interface/AddOns/SVUI/system/timers.lua b/Interface/AddOns/SVUI/system/timers.lua
index a8201e5..1181447 100644
--- a/Interface/AddOns/SVUI/system/timers.lua
+++ b/Interface/AddOns/SVUI/system/timers.lua
@@ -37,7 +37,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 --[[
 ##########################################################
 LOCAL VARS
@@ -251,7 +251,7 @@ local Cooldown_OnLoad = function(self, start, duration, elapsed)
 end

 function Timers:AddCooldown(origin)
-	if(origin.HookedCooldown or not SV.db.system.cooldown) then return end
+	if(origin.HookedCooldown or not SV.db.cooldown) then return end
 	hooksecurefunc(origin, "SetCooldown", Cooldown_OnLoad)
 	origin.HookedCooldown = true
 end
diff --git a/Interface/AddOns/SVUI/system/utilities.lua b/Interface/AddOns/SVUI/system/utilities.lua
index b2146cd..55729ec 100644
--- a/Interface/AddOns/SVUI/system/utilities.lua
+++ b/Interface/AddOns/SVUI/system/utilities.lua
@@ -38,7 +38,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale()
+local L = LibStub("LibSuperVillain-1.0"):Lang()
 --[[
 ##########################################################
 MISC UTILITY FUNCTIONS
diff --git a/Interface/AddOns/SVUI/system/visibility.lua b/Interface/AddOns/SVUI/system/visibility.lua
index 4a0d18d..59463c0 100644
--- a/Interface/AddOns/SVUI/system/visibility.lua
+++ b/Interface/AddOns/SVUI/system/visibility.lua
@@ -27,7 +27,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SVUI_ADDON_NAME, SV = ...
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 --[[
 ##########################################################
 LOCALS
diff --git a/Interface/AddOns/SVUI_AnsweringService/SVUI_AnsweringService.lua b/Interface/AddOns/SVUI_AnsweringService/SVUI_AnsweringService.lua
index cdb4e40..28988a0 100644
--- a/Interface/AddOns/SVUI_AnsweringService/SVUI_AnsweringService.lua
+++ b/Interface/AddOns/SVUI_AnsweringService/SVUI_AnsweringService.lua
@@ -49,12 +49,11 @@ GET ADDON DATA
 ]]--
 local SVUIAddOnName, PLUGIN = ...;
 local SV = SVUI
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
-local CONFIGS = SV.private
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local NewHook = hooksecurefunc;

-PLUGIN = Registry:NewPrototype(SVUIAddOnName)
+PLUGIN = SVLib:NewPrototype(SVUIAddOnName)
 local SCHEMA = PLUGIN.___schema;

 _G["WhisperVillain"] = PLUGIN;
@@ -438,7 +437,7 @@ LOCAL FUNCTIONS
 ##########################################################
 ]]--
 local function ServiceMessage(msg)
-    local msgFrom = SV.db[SCHEMA].prefix == true and "Minion Answering Service" or "";
+    local msgFrom = MOD.db.prefix == true and "Minion Answering Service" or "";
     print("|cffffcc1a" .. msgFrom .. ":|r", msg)
 end

@@ -686,7 +685,7 @@ do
 		if(not outbound) then
 			outbound = PhraseSearch(sInput, mapkey, data)
 		end
-		if(SV.db[SCHEMA].prefix == true) then
+		if(self.db.prefix == true) then
 			return ("%s's Answering Service: %s"):format(PlayersName, outbound)
 		else
 			return outbound
@@ -891,9 +890,9 @@ LOAD AND CONSTRUCT
 ##########################################################
 ]]--
 function PLUGIN:Load()
-	if(not SV.db[SCHEMA].enable) then return end
+	if(not self.db.enable) then return end

-	self.db = SV.db[SCHEMA]
+	self.db = self.db

 	self:RegisterEvent("CHAT_MSG_WHISPER")
 	self:RegisterEvent("CHAT_MSG_BN_WHISPER")
@@ -967,7 +966,7 @@ function PLUGIN:Load()


 	local strMsg
-	if SV.db[SCHEMA].autoAnswer == true then
+	if self.db.autoAnswer == true then
 		strMsg = "The Henchmen Operators Are Screening Your Calls.."
 	else
 		strMsg = "The Henchmen Operators Are Standing By.."
@@ -978,8 +977,8 @@ function PLUGIN:Load()
 		order = 2,
 		type = "toggle",
 		name = "Auto Answer",
-		get = function(a) return SV.db[SCHEMA].autoAnswer end,
-		set = function(a,b) SV.db[SCHEMA].autoAnswer = b end
+		get = function(a) return self.db.autoAnswer end,
+		set = function(a,b) self.db.autoAnswer = b end
 	};
 	self:AddOption("autoAnswer", option)

@@ -987,16 +986,16 @@ function PLUGIN:Load()
 		order = 3,
 		type = "toggle",
 		name = "Prefix Messages",
-		get = function(a) return SV.db[SCHEMA].prefix end,
-		set = function(a,b) SV.db[SCHEMA].prefix = b end
+		get = function(a) return self.db.prefix end,
+		set = function(a,b) self.db.prefix = b end
 	};
 	self:AddOption("prefix", option)
 end

-CONFIGS[SCHEMA] = {
+PLUGIN.db = {
 	["enable"] = true,
 	["autoAnswer"] = false,
 	["prefix"] = true
 }

-Registry:NewPlugin(PLUGIN)
\ No newline at end of file
+SVLib:NewPlugin(PLUGIN)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_ArtOfWar/SVUI_ArtOfWar.lua b/Interface/AddOns/SVUI_ArtOfWar/SVUI_ArtOfWar.lua
index 328cdde..599c081 100644
--- a/Interface/AddOns/SVUI_ArtOfWar/SVUI_ArtOfWar.lua
+++ b/Interface/AddOns/SVUI_ArtOfWar/SVUI_ArtOfWar.lua
@@ -55,12 +55,11 @@ GET ADDON DATA
 ]]--
 local SVUIAddOnName, PLUGIN = ...;
 local SV = SVUI
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
-local CONFIGS = SV.private
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local NewHook = hooksecurefunc;

-PLUGIN = Registry:NewPrototype(SVUIAddOnName)
+PLUGIN = SVLib:NewPrototype(SVUIAddOnName)
 local SCHEMA = PLUGIN.___schema;

 _G["WarVillain"] = PLUGIN;
@@ -992,14 +991,12 @@ BUILD FUNCTION
 ##########################################################
 ]]--
 function PLUGIN:Load()
-	if(not SV.db[SCHEMA].enable) then return end
+	if(not self.db.enable) then return end

 	local ALERT_HEIGHT = 60;
 	local DOCK_WIDTH = SuperDockWindowRight:GetWidth();
 	local DOCK_HEIGHT = SuperDockWindowRight:GetHeight();
 	local BUTTON_SIZE = (DOCK_HEIGHT * 0.25) - 4;
-
-	self.db = SV.db[SCHEMA]

 	if(not SVAOW_Data) then SVAOW_Data = {} end
 	if(not SVAOW_Cache) then SVAOW_Cache = {} end
@@ -1165,8 +1162,8 @@ function PLUGIN:Load()
 	--SVUI_Target.Health.LowAlertFunc = LowHealth_TargetEmote
 end

-CONFIGS[SCHEMA] = {
+PLUGIN.db = {
 	["enable"] = true
 }

-Registry:NewPlugin(PLUGIN)
\ No newline at end of file
+SVLib:NewPlugin(PLUGIN)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua
index fa7c078..a7520d3 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local Ace3Config = LibStub("AceConfig-3.0");
 local Ace3ConfigDialog = LibStub("AceConfigDialog-3.0");
 Ace3Config:RegisterOptionsTable("SVUI", SV.Options);
@@ -46,73 +46,73 @@ local function CommonFontSizeUpdate()
     local STANDARDFONTSIZE = SV.db.media.fonts.size;
     local smallfont = STANDARDFONTSIZE - 2;
     local largefont = STANDARDFONTSIZE + 2;
-    SV.db.SVAura.fontSize = STANDARDFONTSIZE;
-    SV.db.SVStats.fontSize = STANDARDFONTSIZE;
-    SV.db.SVUnit.fontSize = STANDARDFONTSIZE;
-    SV.db.SVUnit.auraFontSize = smallfont;
+    SV.SVAura.db.fontSize = STANDARDFONTSIZE;
+    SV.SVStats.db.fontSize = STANDARDFONTSIZE;
+    SV.SVUnit.db.fontSize = STANDARDFONTSIZE;
+    SV.SVUnit.db.auraFontSize = smallfont;

-    SV.db.SVBar.fontSize = smallfont;
-    SV.db.SVPlate.fontSize = smallfont;
+    SV.SVBar.db.fontSize = smallfont;
+    SV.SVPlate.db.fontSize = smallfont;

-    SV.db.SVLaborer.fontSize = largefont;
+    SV.SVLaborer.db.fontSize = largefont;

-    SV.db.SVUnit.player.health.fontSize = largefont;
-    SV.db.SVUnit.player.power.fontSize = largefont;
-    SV.db.SVUnit.player.name.fontSize = largefont;
-    SV.db.SVUnit.player.aurabar.fontSize = STANDARDFONTSIZE;
+    SV.SVUnit.db.player.health.fontSize = largefont;
+    SV.SVUnit.db.player.power.fontSize = largefont;
+    SV.SVUnit.db.player.name.fontSize = largefont;
+    SV.SVUnit.db.player.aurabar.fontSize = STANDARDFONTSIZE;

-    SV.db.SVUnit.target.health.fontSize = largefont;
-    SV.db.SVUnit.target.power.fontSize = largefont;
-    SV.db.SVUnit.target.name.fontSize = largefont;
-    SV.db.SVUnit.target.aurabar.fontSize = STANDARDFONTSIZE;
+    SV.SVUnit.db.target.health.fontSize = largefont;
+    SV.SVUnit.db.target.power.fontSize = largefont;
+    SV.SVUnit.db.target.name.fontSize = largefont;
+    SV.SVUnit.db.target.aurabar.fontSize = STANDARDFONTSIZE;

-    SV.db.SVUnit.focus.health.fontSize = largefont;
-    SV.db.SVUnit.focus.power.fontSize = largefont;
-    SV.db.SVUnit.focus.name.fontSize = largefont;
-    SV.db.SVUnit.focus.aurabar.fontSize = STANDARDFONTSIZE;
+    SV.SVUnit.db.focus.health.fontSize = largefont;
+    SV.SVUnit.db.focus.power.fontSize = largefont;
+    SV.SVUnit.db.focus.name.fontSize = largefont;
+    SV.SVUnit.db.focus.aurabar.fontSize = STANDARDFONTSIZE;

-    SV.db.SVUnit.targettarget.health.fontSize = largefont;
-    SV.db.SVUnit.targettarget.power.fontSize = largefont;
-    SV.db.SVUnit.targettarget.name.fontSize = largefont;
+    SV.SVUnit.db.targettarget.health.fontSize = largefont;
+    SV.SVUnit.db.targettarget.power.fontSize = largefont;
+    SV.SVUnit.db.targettarget.name.fontSize = largefont;

-    SV.db.SVUnit.focustarget.health.fontSize = largefont;
-    SV.db.SVUnit.focustarget.power.fontSize = largefont;
-    SV.db.SVUnit.focustarget.name.fontSize = largefont;
+    SV.SVUnit.db.focustarget.health.fontSize = largefont;
+    SV.SVUnit.db.focustarget.power.fontSize = largefont;
+    SV.SVUnit.db.focustarget.name.fontSize = largefont;

-    SV.db.SVUnit.pet.health.fontSize = largefont;
-    SV.db.SVUnit.pet.power.fontSize = largefont;
-    SV.db.SVUnit.pet.name.fontSize = largefont;
+    SV.SVUnit.db.pet.health.fontSize = largefont;
+    SV.SVUnit.db.pet.power.fontSize = largefont;
+    SV.SVUnit.db.pet.name.fontSize = largefont;

-    SV.db.SVUnit.pettarget.health.fontSize = largefont;
-    SV.db.SVUnit.pettarget.power.fontSize = largefont;
-    SV.db.SVUnit.pettarget.name.fontSize = largefont;
+    SV.SVUnit.db.pettarget.health.fontSize = largefont;
+    SV.SVUnit.db.pettarget.power.fontSize = largefont;
+    SV.SVUnit.db.pettarget.name.fontSize = largefont;

-    SV.db.SVUnit.party.health.fontSize = largefont;
-    SV.db.SVUnit.party.power.fontSize = largefont;
-    SV.db.SVUnit.party.name.fontSize = largefont;
+    SV.SVUnit.db.party.health.fontSize = largefont;
+    SV.SVUnit.db.party.power.fontSize = largefont;
+    SV.SVUnit.db.party.name.fontSize = largefont;

-    SV.db.SVUnit.boss.health.fontSize = largefont;
-    SV.db.SVUnit.boss.power.fontSize = largefont;
-    SV.db.SVUnit.boss.name.fontSize = largefont;
+    SV.SVUnit.db.boss.health.fontSize = largefont;
+    SV.SVUnit.db.boss.power.fontSize = largefont;
+    SV.SVUnit.db.boss.name.fontSize = largefont;

-    SV.db.SVUnit.arena.health.fontSize = largefont;
-    SV.db.SVUnit.arena.power.fontSize = largefont;
-    SV.db.SVUnit.arena.name.fontSize = largefont;
+    SV.SVUnit.db.arena.health.fontSize = largefont;
+    SV.SVUnit.db.arena.power.fontSize = largefont;
+    SV.SVUnit.db.arena.name.fontSize = largefont;

-    SV.db.SVUnit.raid10.health.fontSize = largefont;
-    SV.db.SVUnit.raid10.power.fontSize = largefont;
-    SV.db.SVUnit.raid10.name.fontSize = largefont;
+    SV.SVUnit.db.raid10.health.fontSize = largefont;
+    SV.SVUnit.db.raid10.power.fontSize = largefont;
+    SV.SVUnit.db.raid10.name.fontSize = largefont;

-    SV.db.SVUnit.raid25.health.fontSize = largefont;
-    SV.db.SVUnit.raid25.power.fontSize = largefont;
-    SV.db.SVUnit.raid25.name.fontSize = largefont;
+    SV.SVUnit.db.raid25.health.fontSize = largefont;
+    SV.SVUnit.db.raid25.power.fontSize = largefont;
+    SV.SVUnit.db.raid25.name.fontSize = largefont;

-    SV.db.SVUnit.raid40.health.fontSize = largefont;
-    SV.db.SVUnit.raid40.power.fontSize = largefont;
-    SV.db.SVUnit.raid40.name.fontSize = largefont;
+    SV.SVUnit.db.raid40.health.fontSize = largefont;
+    SV.SVUnit.db.raid40.power.fontSize = largefont;
+    SV.SVUnit.db.raid40.name.fontSize = largefont;

-    SV.db.SVUnit.tank.health.fontSize = largefont;
-    SV.db.SVUnit.assist.health.fontSize = largefont;
+    SV.SVUnit.db.tank.health.fontSize = largefont;
+    SV.SVUnit.db.assist.health.fontSize = largefont;

     SV:RefreshSystemFonts()
 end
@@ -132,8 +132,8 @@ SV.Options.args.primary = {
 	type = "group",
 	order = 1,
 	name = L["Main"],
-	get = function(j)return SV.db.system[j[#j]]end,
-	set = function(j, value)SV.db.system[j[#j]] = value end,
+	get = function(j)return SV.db[j[#j]]end,
+	set = function(j, value)SV.db[j[#j]] = value end,
 	args = {
 		introGroup1 = {
 			order = 1,
@@ -190,7 +190,7 @@ SV.Options.args.primary = {
 						SV:ToggleConfig()
 						GameTooltip:Hide()
 					end,
-					disabled = function() return not SV.db.SVBar.enable end
+					disabled = function() return not SV.SVBar.db.enable end
 				}
 			},
 		},
@@ -210,8 +210,8 @@ SV.Options.args.common = {
 	order = 2,
 	name = L["General"],
 	childGroups = "tab",
-	get = function(j)return SV.db.system[j[#j]]end,
-	set = function(j, value)SV.db.system[j[#j]] = value end,
+	get = function(j)return SV.db[j[#j]]end,
+	set = function(j, value)SV.db[j[#j]] = value end,
 	args = {
 		commonGroup = {
 			order = 1,
@@ -235,31 +235,31 @@ SV.Options.args.common = {
 									name = L["Auto Scale"],
 									desc = L["Automatically scale the User Interface based on your screen resolution"],
 									type = "toggle",
-									get = function(j)return SV.db.system.autoScale end,
-									set = function(j,value)SV.db.system.autoScale = value;SV:StaticPopup_Show("RL_CLIENT")end
+									get = function(j)return SV.db.autoScale end,
+									set = function(j,value)SV.db.autoScale = value;SV:StaticPopup_Show("RL_CLIENT")end
 								},
 								multiMonitor = {
 									order = 2,
 									name = L["Multi Monitor"],
 									desc = L["Adjust UI dimensions to accomodate for multiple monitor setups"],
 									type = "toggle",
-									get = function(j)return SV.db.system.multiMonitor end,
-									set = function(j,value)SV.db.system.multiMonitor = value;SV:StaticPopup_Show("RL_CLIENT")end
+									get = function(j)return SV.db.multiMonitor end,
+									set = function(j,value)SV.db.multiMonitor = value;SV:StaticPopup_Show("RL_CLIENT")end
 								},
 								hideErrorFrame = {
 									order = 3,
 									name = L["Hide Error Text"],
 									desc = L["Hides the red error text at the top of the screen while in combat."],
 									type = "toggle",
-									get = function(j)return SV.db.system.hideErrorFrame end,
-									set = function(j,value)SV.db.system.hideErrorFrame = value;SV:StaticPopup_Show("RL_CLIENT")end
+									get = function(j)return SV.db.hideErrorFrame end,
+									set = function(j,value)SV.db.hideErrorFrame = value;SV:StaticPopup_Show("RL_CLIENT")end
 								},
 								LoginMessage = {
 									order = 4,
 									type = 'toggle',
 									name = L['Login Message'],
-									get = function(j)return SV.db.system.loginmessage end,
-									set = function(j,value)SV.db.system.loginmessage = value end
+									get = function(j)return SV.db.loginmessage end,
+									set = function(j,value)SV.db.loginmessage = value end
 								},
 							}
 						},
@@ -274,16 +274,16 @@ SV.Options.args.common = {
 									type = "toggle",
 									name = L['Loot Frame'],
 									desc = L['Enable/Disable the loot frame.'],
-									get = function()return SV.db.SVOverride.loot end,
-									set = function(j,value)SV.db.SVOverride.loot = value;SV:StaticPopup_Show("RL_CLIENT")end
+									get = function()return SV.SVOverride.db.loot end,
+									set = function(j,value)SV.SVOverride.db.loot = value;SV:StaticPopup_Show("RL_CLIENT")end
 								},
 								lootRoll = {
 									order = 2,
 									type = "toggle",
 									name = L['Loot Roll'],
 									desc = L['Enable/Disable the loot roll frame.'],
-									get = function()return SV.db.SVOverride.lootRoll end,
-									set = function(j,value)SV.db.SVOverride.lootRoll = value;SV:StaticPopup_Show("RL_CLIENT")end
+									get = function()return SV.SVOverride.db.lootRoll end,
+									set = function(j,value)SV.SVOverride.db.lootRoll = value;SV:StaticPopup_Show("RL_CLIENT")end
 								},
 								lootRollWidth = {
 									order = 3,
@@ -293,7 +293,7 @@ SV.Options.args.common = {
 									min = 100,
 									max = 328,
 									step = 1,
-									get = function()return SV.db.SVOverride.lootRollWidth end,
+									get = function()return SV.SVOverride.db.lootRollWidth end,
 									set = function(a,b)OVR:ChangeDBVar(b,a[#a]); end,
 								},
 								lootRollHeight = {
@@ -304,7 +304,7 @@ SV.Options.args.common = {
 									min = 14,
 									max = 58,
 									step = 1,
-									get = function()return SV.db.SVOverride.lootRollHeight end,
+									get = function()return SV.SVOverride.db.lootRollHeight end,
 									set = function(a,b)OVR:ChangeDBVar(b,a[#a]); end,
 								},
 							}
@@ -319,72 +319,72 @@ SV.Options.args.common = {
 									order = 1,
 									type = 'toggle',
 									name = L["Enable Comic Popups"],
-									get = function(j)return SV.db.system.comix end,
-									set = function(j,value)SV.db.system.comix = value;SV:ToggleComix()end
+									get = function(j)return SV.db.comix end,
+									set = function(j,value)SV.db.comix = value;SV:ToggleComix()end
 								},
 								bigComix = {
 									order = 1,
 									type = 'toggle',
 									name = L["Include Large Comics"],
-									disabled = function() return not SV.db.system.comix end,
-									get = function(j) return SV.db.system.bigComix end,
-									set = function(j,value) SV.db.system.bigComix = value end
+									disabled = function() return not SV.db.comix end,
+									get = function(j) return SV.db.bigComix end,
+									set = function(j,value) SV.db.bigComix = value end
 								},
 								bubbles = {
 									order = 2,
 									type = "toggle",
 									name = L['Chat Bubbles Style'],
 									desc = L['Style the blizzard chat bubbles.'],
-									get = function(j)return SV.db.system.bubbles end,
-									set = function(j,value)SV.db.system.bubbles = value;SV:StaticPopup_Show("RL_CLIENT")end
+									get = function(j)return SV.db.bubbles end,
+									set = function(j,value)SV.db.bubbles = value;SV:StaticPopup_Show("RL_CLIENT")end
 								},
 								woot = {
 									order = 3,
 									type = 'toggle',
 									name = L["Say Thanks"],
 									desc = L["Thank someone when they cast specific spells on you. Typically resurrections"],
-									get = function(j)return SV.db.system.woot end,
-									set = function(j,value)SV.db.system.woot = value;SV:ToggleReactions()end
+									get = function(j)return SV.db.woot end,
+									set = function(j,value)SV.db.woot = value;SV:ToggleReactions()end
 								},
 								pvpinterrupt = {
 									order = 4,
 									type = 'toggle',
 									name = L["Report PVP Actions"],
 									desc = L["Announce your interrupts, as well as when you have been sapped!"],
-									get = function(j)return SV.db.system.pvpinterrupt end,
-									set = function(j,value)SV.db.system.pvpinterrupt = value;SV:ToggleReactions()end
+									get = function(j)return SV.db.pvpinterrupt end,
+									set = function(j,value)SV.db.pvpinterrupt = value;SV:ToggleReactions()end
 								},
 								lookwhaticando = {
 									order = 5,
 									type = 'toggle',
 									name = L["Report Spells"],
 									desc = L["Announce various helpful spells cast by players in your party/raid"],
-									get = function(j)return SV.db.system.lookwhaticando end,
-									set = function(j,value)SV.db.system.lookwhaticando = value;SV:ToggleReactions()end
+									get = function(j)return SV.db.lookwhaticando end,
+									set = function(j,value)SV.db.lookwhaticando = value;SV:ToggleReactions()end
 								},
 								sharingiscaring = {
 									order = 6,
 									type = 'toggle',
 									name = L["Report Shareables"],
 									desc = L["Announce when someone in your party/raid has laid a feast or repair bot"],
-									get = function(j)return SV.db.system.sharingiscaring end,
-									set = function(j,value)SV.db.system.sharingiscaring = value;SV:ToggleReactions()end
+									get = function(j)return SV.db.sharingiscaring end,
+									set = function(j,value)SV.db.sharingiscaring = value;SV:ToggleReactions()end
 								},
 								reactionChat = {
 									order = 7,
 									type = 'toggle',
 									name = L["Report in Chat"],
 									desc = L["Announcements will be sent to group chat channels"],
-									get = function(j)return SV.db.system.reactionChat end,
-									set = function(j,value)SV.db.system.reactionChat = value;SV:ToggleReactions()end
+									get = function(j)return SV.db.reactionChat end,
+									set = function(j,value)SV.db.reactionChat = value;SV:ToggleReactions()end
 								},
 								reactionEmote = {
 									order = 8,
 									type = 'toggle',
 									name = L["Auto Emotes"],
 									desc = L["Some announcements are accompanied by player emotes."],
-									get = function(j)return SV.db.system.reactionEmote end,
-									set = function(j,value)SV.db.system.reactionEmote = value;SV:ToggleReactions()end
+									get = function(j)return SV.db.reactionEmote end,
+									set = function(j,value)SV.db.reactionEmote = value;SV:ToggleReactions()end
 								},
 							}
 						},
@@ -398,18 +398,18 @@ SV.Options.args.common = {
 									order = 1,
 									type = "toggle",
 									name = L['Threat Thermometer'],
-									get = function(j)return SV.db.system.threatbar end,
-									set = function(j, value)SV.db.system.threatbar = value;SV:StaticPopup_Show("RL_CLIENT")end
+									get = function(j)return SV.db.threatbar end,
+									set = function(j, value)SV.db.threatbar = value;SV:StaticPopup_Show("RL_CLIENT")end
 								},
 								totems = {
 									order = 2,
 									type = "toggle",
 									name = L["Totems"],
 									get = function(j)
-										return SV.db.system.totems.enable
+										return SV.db.totems.enable
 									end,
 									set = function(j, value)
-										SV.db.system.totems.enable = value;
+										SV.db.totems.enable = value;
 										SV:StaticPopup_Show("RL_CLIENT")
 									end
 								},
@@ -418,8 +418,8 @@ SV.Options.args.common = {
 									order = 3,
 									name = L['Cooldown Text'],
 									desc = L["Display cooldown text on anything with the cooldown spiral."],
-									get = function(j)return SV.db.system.cooldown end,
-									set = function(j,value)SV.db.system.cooldown = value;SV:StaticPopup_Show("RL_CLIENT")end
+									get = function(j)return SV.db.cooldown end,
+									set = function(j,value)SV.db.cooldown = value;SV:StaticPopup_Show("RL_CLIENT")end
 								},
 								size = {
 									order = 4,
@@ -430,10 +430,10 @@ SV.Options.args.common = {
 									max = 60,
 									step = 1,
 									get = function(j)
-										return SV.db.system.totems[j[#j]]
+										return SV.db.totems[j[#j]]
 									end,
 									set = function(j, value)
-										SV.db.system.totems[j[#j]] = value
+										SV.db.totems[j[#j]] = value
 									end
 								},
 								spacing = {
@@ -445,10 +445,10 @@ SV.Options.args.common = {
 									max = 10,
 									step = 1,
 									get = function(j)
-										return SV.db.system.totems[j[#j]]
+										return SV.db.totems[j[#j]]
 									end,
 									set = function(j, value)
-										SV.db.system.totems[j[#j]] = value
+										SV.db.totems[j[#j]] = value
 									end
 								},
 								sortDirection = {
@@ -460,10 +460,10 @@ SV.Options.args.common = {
 										['DESCENDING'] = L['Descending']
 									},
 									get = function(j)
-										return SV.db.system.totems[j[#j]]
+										return SV.db.totems[j[#j]]
 									end,
 									set = function(j, value)
-										SV.db.system.totems[j[#j]] = value
+										SV.db.totems[j[#j]] = value
 									end
 								},
 								showBy = {
@@ -475,10 +475,10 @@ SV.Options.args.common = {
 										['HORIZONTAL'] = L['Horizontal']
 									},
 									get = function(j)
-										return SV.db.system.totems[j[#j]]
+										return SV.db.totems[j[#j]]
 									end,
 									set = function(j, value)
-										SV.db.system.totems[j[#j]] = value
+										SV.db.totems[j[#j]] = value
 									end
 								}
 							}
@@ -489,8 +489,8 @@ SV.Options.args.common = {
 					order = 2,
 					type = "group",
 					name = L["Media"],
-					get = function(j)return SV.db.system[j[#j]]end,
-					set = function(j, value)SV.db.system[j[#j]] = value end,
+					get = function(j)return SV.db[j[#j]]end,
+					set = function(j, value)SV.db[j[#j]] = value end,
 					args = {
 						texture = {
 							order = 1,
@@ -657,8 +657,8 @@ SV.Options.args.common = {
 					order = 3,
 					type = 'group',
 					name = L['Gear Managment'],
-					get = function(a)return SV.db.SVGear[a[#a]]end,
-					set = function(a,b)SV.db.SVGear[a[#a]]=b;GEAR:ReLoad()end,
+					get = function(a)return SV.SVGear.db[a[#a]]end,
+					set = function(a,b)SV.SVGear.db[a[#a]]=b;GEAR:ReLoad()end,
 					args={
 						intro={
 							order = 1,
@@ -683,15 +683,15 @@ SV.Options.args.common = {
 									order=1,
 									name=L["Enable"],
 									desc=L['Enable/Disable the specialization switch.'],
-									get=function(e)return SV.db.SVGear.specialization.enable end,
-									set=function(e,value) SV.db.SVGear.specialization.enable = value end
+									get=function(e)return SV.SVGear.db.specialization.enable end,
+									set=function(e,value) SV.SVGear.db.specialization.enable = value end
 								},
 								primary={
 									type="select",
 									order=2,
 									name=L["Primary Talent"],
 									desc=L["Choose the equipment set to use for your primary specialization."],
-									disabled=function()return not SV.db.SVGear.specialization.enable end,
+									disabled=function()return not SV.SVGear.db.specialization.enable end,
 									values=function()
 										local h={["none"]=L["No Change"]}
 										for i=1,GetNumEquipmentSets()do
@@ -707,7 +707,7 @@ SV.Options.args.common = {
 									order=3,
 									name=L["Secondary Talent"],
 									desc=L["Choose the equipment set to use for your secondary specialization."],
-									disabled=function()return not SV.db.SVGear.specialization.enable end,
+									disabled=function()return not SV.SVGear.db.specialization.enable end,
 									values=function()
 										local h={["none"]=L["No Change"]}
 										for i=1,GetNumEquipmentSets()do
@@ -733,15 +733,15 @@ SV.Options.args.common = {
 									order = 1,
 									name = L["Enable"],
 									desc = L["Enable/Disable the battleground switch."],
-									get = function(e)return SV.db.SVGear.battleground.enable end,
-									set = function(e,value)SV.db.SVGear.battleground.enable = value end
+									get = function(e)return SV.SVGear.db.battleground.enable end,
+									set = function(e,value)SV.SVGear.db.battleground.enable = value end
 								},
 								equipmentset = {
 									type = "select",
 									order = 2,
 									name = L["Equipment Set"],
 									desc = L["Choose the equipment set to use when you enter a battleground or arena."],
-									disabled = function()return not SV.db.SVGear.battleground.enable end,
+									disabled = function()return not SV.SVGear.db.battleground.enable end,
 									values = function()
 										local h = {["none"] = L["No Change"]}
 										for i = 1,GetNumEquipmentSets()do
@@ -764,8 +764,8 @@ SV.Options.args.common = {
 							name = DURABILITY,
 							guiInline = true,
 							order = 5,
-							get = function(e)return SV.db.SVGear.durability[e[#e]]end,
-							set = function(e,value)SV.db.SVGear.durability[e[#e]] = value;GEAR:ReLoad()end,
+							get = function(e)return SV.SVGear.db.durability[e[#e]]end,
+							set = function(e,value)SV.SVGear.db.durability[e[#e]] = value;GEAR:ReLoad()end,
 							args = {
 								enable = {
 									type = "toggle",
@@ -778,7 +778,7 @@ SV.Options.args.common = {
 									order = 2,
 									name = L["Damaged Only"],
 									desc = L["Only show durability information for items that are damaged."],
-									disabled = function()return not SV.db.SVGear.durability.enable end
+									disabled = function()return not SV.SVGear.db.durability.enable end
 								}
 							}
 						},
@@ -792,8 +792,8 @@ SV.Options.args.common = {
 							name = STAT_AVERAGE_ITEM_LEVEL,
 							guiInline = true,
 							order = 7,
-							get = function(e)return SV.db.SVGear.itemlevel[e[#e]]end,
-							set = function(e,value)SV.db.SVGear.itemlevel[e[#e]] = value;GEAR:ReLoad()end,
+							get = function(e)return SV.SVGear.db.itemlevel[e[#e]]end,
+							set = function(e,value)SV.SVGear.db.itemlevel[e[#e]] = value;GEAR:ReLoad()end,
 							args = {
 								enable = {
 									type = "toggle",
@@ -808,9 +808,9 @@ SV.Options.args.common = {
 							name = L["Miscellaneous"],
 							guiInline = true,
 							order = 8,
-							get = function(e)return SV.db.SVGear.misc[e[#e]]end,
-							set = function(e,value)SV.db.SVGear.misc[e[#e]] = value end,
-							disabled = function()return not SV.db.SVBag.enable end,
+							get = function(e)return SV.SVGear.db.misc[e[#e]]end,
+							set = function(e,value)SV.SVGear.db.misc[e[#e]] = value end,
+							disabled = function()return not SV.SVBag.db.enable end,
 							args = {
 								setoverlay = {
 									type = "toggle",
@@ -818,7 +818,7 @@ SV.Options.args.common = {
 									name = L["Equipment Set Overlay"],
 									desc = L["Show the associated equipment sets for the items in your bags (or bank)."],
 									set = function(e,value)
-										SV.db.SVGear.misc[e[#e]] = value;
+										SV.SVGear.db.misc[e[#e]] = value;
 										BAG:ToggleEquipmentOverlay()
 									end
 								}
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/language/generic.lua b/Interface/AddOns/SVUI_ConfigOMatic/language/generic.lua
index 927ef13..4328a6c 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/language/generic.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/language/generic.lua
@@ -17,7 +17,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local gameLocale = GetLocale()
 if gameLocale == "enUS" then
 	L["AURAS_DESC"] = "Configure the aura icons that appear near the minimap."
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/art.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/art.lua
index 0691044..be801da 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/art.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/art.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 SV.Options.args.SVStyle={
 	type = "group",
 	name = L["UI Styling"],
@@ -45,23 +45,23 @@ SV.Options.args.SVStyle={
 			order = 2,
 			type = "toggle",
 			name = "Standard UI Styling",
-			get = function(a)return SV.db.SVStyle.blizzard.enable end,
-			set = function(a,b)SV.db.SVStyle.blizzard.enable = b;SV:StaticPopup_Show("RL_CLIENT")end
+			get = function(a)return SV.SVStyle.db.blizzard.enable end,
+			set = function(a,b)SV.SVStyle.db.blizzard.enable = b;SV:StaticPopup_Show("RL_CLIENT")end
 		},
 		addonEnable = {
 			order = 3,
 			type = "toggle",
 			name = "Addon Styling",
-			get = function(a)return SV.db.SVStyle.addons.enable end,
-			set = function(a,b)SV.db.SVStyle.addons.enable = b;SV:StaticPopup_Show("RL_CLIENT")end
+			get = function(a)return SV.SVStyle.db.addons.enable end,
+			set = function(a,b)SV.SVStyle.db.addons.enable = b;SV:StaticPopup_Show("RL_CLIENT")end
 		},
 		blizzard = {
 			order = 300,
 			type = "group",
 			name = "Individual Mods",
-			get = function(a)return SV.db.SVStyle.blizzard[a[#a]]end,
-			set = function(a,b)SV.db.SVStyle.blizzard[a[#a]] = b;SV:StaticPopup_Show("RL_CLIENT")end,
-			disabled = function()return not SV.db.SVStyle.blizzard.enable end,
+			get = function(a)return SV.SVStyle.db.blizzard[a[#a]]end,
+			set = function(a,b)SV.SVStyle.db.blizzard[a[#a]] = b;SV:StaticPopup_Show("RL_CLIENT")end,
+			disabled = function()return not SV.SVStyle.db.blizzard.enable end,
 			guiInline = true,
 			args = {
 				bmah = {
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/aura.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/aura.lua
index 01d30e3..cecaa21 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/aura.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/aura.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVAura;
 local MAP = SV.SVMap;
 --[[
@@ -160,7 +160,7 @@ SV.Options.args.SVAura = {
 	type = "group",
 	name = BUFFOPTIONS_LABEL,
 	childGroups = "tab",
-	get = function(a)return SV.db.SVAura[a[#a]]end,
+	get = function(a)return SV.SVAura.db[a[#a]]end,
 	set = function(a,b)
 		MOD:ChangeDBVar(b,a[#a]);
 		MOD:UpdateAuraHeader(SVUI_PlayerBuffs, "buffs")
@@ -176,15 +176,15 @@ SV.Options.args.SVAura = {
 			order = 2,
 			type = "toggle",
 			name = L["Enable"],
-			get = function(a)return SV.db.SVAura.enable end,
-			set = function(a,b)SV.db.SVAura.enable = b;SV:StaticPopup_Show("RL_CLIENT")end
+			get = function(a)return SV.SVAura.db.enable end,
+			set = function(a,b)SV.SVAura.db.enable = b;SV:StaticPopup_Show("RL_CLIENT")end
 		},
 		disableBlizzard = {
 			order = 3,
 			type = "toggle",
 			name = L["Disabled Blizzard"],
-			get = function(a)return SV.db.SVAura.disableBlizzard end,
-			set = function(a,b)SV.db.SVAura.disableBlizzard = b;SV:StaticPopup_Show("RL_CLIENT")end
+			get = function(a)return SV.SVAura.db.disableBlizzard end,
+			set = function(a,b)SV.SVAura.db.disableBlizzard = b;SV:StaticPopup_Show("RL_CLIENT")end
 		},
 		auraGroups = {
 			order = 4,
@@ -271,7 +271,7 @@ SV.Options.args.SVAura = {
 					order = 20,
 					type = "group",
 					name = L["Hyper Buffs"],
-					get = function(b)return SV.db.SVAura.hyperBuffs[b[#b]]end,
+					get = function(b)return SV.SVAura.db.hyperBuffs[b[#b]]end,
 					set = function(a,b)MOD:ChangeDBVar(b,a[#a],"hyperBuffs");MOD:ToggleConsolidatedBuffs();MAP:ReLoad();MOD:UpdateAuraHeader(SVUI_PlayerBuffs, "buffs")end,
 					args = {
 						enable = {
@@ -279,14 +279,14 @@ SV.Options.args.SVAura = {
 							type = "toggle",
 							name = L["Enable"],
 							desc = L["Display the consolidated buffs bar."],
-							disabled = function()return not SV.db.SVMap.enable end,
+							disabled = function()return not SV.SVMap.db.enable end,
 						},
 						filter = {
 							order = 2,
 							name = L["Filter Hyper"],
 							desc = L["Only show consolidated icons on the consolidated bar that your class/spec is interested in. This is useful for raid leading."],
 							type = "toggle",
-							disabled = function()return not SV.db.SVAura.hyperBuffs.enable end,
+							disabled = function()return not SV.SVAura.db.hyperBuffs.enable end,
 						}
 					}
 				},
@@ -294,7 +294,7 @@ SV.Options.args.SVAura = {
 					order = 30,
 					type = "group",
 					name = L["Buffs"],
-					get = function(b)return SV.db.SVAura.buffs[b[#b]]end,
+					get = function(b)return SV.SVAura.db.buffs[b[#b]]end,
 					set = function(a,b)MOD:ChangeDBVar(b,a[#a],"buffs");MOD:UpdateAuraHeader(SVUI_PlayerBuffs, "buffs")end,
 					args = auraOptionsTemplate
 				},
@@ -302,7 +302,7 @@ SV.Options.args.SVAura = {
 					order = 40,
 					type = "group",
 					name = L["Debuffs"],
-					get = function(b)return SV.db.SVAura.debuffs[b[#b]]end,
+					get = function(b)return SV.SVAura.db.debuffs[b[#b]]end,
 					set = function(a,b)MOD:ChangeDBVar(b,a[#a],"debuffs");MOD:UpdateAuraHeader(SVUI_PlayerDebuffs, "debuffs")end,
 					args = auraOptionsTemplate
 				}
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/bag.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/bag.lua
index 34fa3db..d0aacd2 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/bag.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/bag.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();

 local MOD = SV.SVBag

@@ -45,7 +45,7 @@ SV.Options.args.SVBag = {
 	type = 'group',
 	name = L['Bags'],
 	childGroups = "tab",
-	get = function(a)return SV.db.SVBag[a[#a]]end,
+	get = function(a)return SV.SVBag.db[a[#a]]end,
 	set = function(a,b)MOD:ChangeDBVar(b,a[#a]) end,
 	args = {
 		intro = {
@@ -58,8 +58,8 @@ SV.Options.args.SVBag = {
 			type = "toggle",
 			name = L["Enable"],
 			desc = L["Enable/Disable the all-in-one bag."],
-			get = function(a)return SV.db.SVBag.enable end,
-			set = function(a,b)SV.db.SVBag.enable = b;SV:StaticPopup_Show("RL_CLIENT")end
+			get = function(a)return SV.SVBag.db.enable end,
+			set = function(a,b)SV.SVBag.db.enable = b;SV:StaticPopup_Show("RL_CLIENT")end
 		},
 		bagGroups={
 			order = 3,
@@ -72,7 +72,7 @@ SV.Options.args.SVBag = {
 						type = "group",
 						guiInline = true,
 						name = L["General"],
-						disabled = function()return not SV.db.SVBag.enable end,
+						disabled = function()return not SV.SVBag.db.enable end,
 						args = {
 						bagSize = {
 							order = 1,
@@ -109,7 +109,7 @@ SV.Options.args.SVBag = {
 							max = 700,
 							step = 1,
 							set = function(a,b)MOD:ChangeDBVar(b,a[#a])MOD:Layout()end,
-							disabled = function()return SV.db.SVBag.alignToChat end
+							disabled = function()return SV.SVBag.db.alignToChat end
 						},
 						bankWidth = {
 							order = 5,
@@ -120,7 +120,7 @@ SV.Options.args.SVBag = {
 							max = 700,
 							step = 1,
 							set = function(a,b)MOD:ChangeDBVar(b,a[#a])MOD:Layout(true)end,
-							disabled = function()return SV.db.SVBag.alignToChat end
+							disabled = function()return SV.SVBag.db.alignToChat end
 						},
 						currencyFormat = {
 							order = 6,
@@ -147,7 +147,7 @@ SV.Options.args.SVBag = {
 							type = "input",
 							width = "full",
 							multiline = true,
-							set = function(a,b) SV.db.SVBag[a[#a]] = b end
+							set = function(a,b) SV.SVBag.db[a[#a]] = b end
 						}
 					}
 				},
@@ -156,7 +156,7 @@ SV.Options.args.SVBag = {
 					type = "group",
 					guiInline = true,
 					name = L["Bag/Bank Positioning"],
-					disabled = function()return not SV.db.SVBag.enable end,
+					disabled = function()return not SV.SVBag.db.enable end,
 					args = {
 						alignToChat = {
 							order = 1,
@@ -170,9 +170,9 @@ SV.Options.args.SVBag = {
 							type = "group",
 							name = L["Bag Position"],
 							guiInline = true,
-							get = function(key) return SV.db.SVBag.bags[key[#key]] end,
+							get = function(key) return SV.SVBag.db.bags[key[#key]] end,
 							set = function(key, value) MOD:ChangeDBVar(value, key[#key], "bags"); MOD:ModifyBags() end,
-							disabled = function() return not SV.db.SVBag.enable end,
+							disabled = function() return not SV.SVBag.db.enable end,
 							args = {
 								point = {
 									order = 1,
@@ -205,9 +205,9 @@ SV.Options.args.SVBag = {
 							type = "group",
 							name = L["Bank Position"],
 							guiInline = true,
-							get = function(key) return SV.db.SVBag.bank[key[#key]] end,
+							get = function(key) return SV.SVBag.db.bank[key[#key]] end,
 							set = function(key, value) MOD:ChangeDBVar(value, key[#key], "bank"); MOD:ModifyBags() end,
-							disabled = function() return not SV.db.SVBag.enable end,
+							disabled = function() return not SV.SVBag.db.enable end,
 							args = {
 								point = {
 									order = 1,
@@ -243,7 +243,7 @@ SV.Options.args.SVBag = {
 					type = "group",
 					name = L["Bag-Bar"],
 					guiInline = true,
-					get = function(key) return SV.db.SVBag.bagBar[key[#key]] end,
+					get = function(key) return SV.SVBag.db.bagBar[key[#key]] end,
 					set = function(key, value) MOD:ChangeDBVar(value, key[#key], "bagBar"); MOD:ModifyBagBar() end,
 					args={
 						enable = {
@@ -251,7 +251,7 @@ SV.Options.args.SVBag = {
 							type = "toggle",
 							name = L["Enable"],
 							desc = L["Enable/Disable the Bag-Bar."],
-							get = function() return SV.db.SVBag.bagBar.enable end,
+							get = function() return SV.SVBag.db.bagBar.enable end,
 							set = function(key, value) MOD:ChangeDBVar(value, key[#key], "bagBar"); SV:StaticPopup_Show("RL_CLIENT")end
 						},
 						mouseover = {
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/bar.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/bar.lua
index dd4799c..2e39c38 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/bar.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/bar.lua
@@ -30,7 +30,8 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local SVLib = LibStub("LibSuperVillain-1.0");
+local L = SVLib:Lang();
 local MOD = SV.SVBar;
 --[[
 ##########################################################
@@ -48,9 +49,9 @@ local function BarConfigLoader()
 			type = "group",
 			order = (d  +  10),
 			guiInline = false,
-			disabled = function()return not SV.db.SVBar.enable end,
+			disabled = function()return not SV.SVBar.db.enable end,
 			get = function(key)
-				return SV.db.SVBar["Bar"..d][key[#key]]
+				return SV.SVBar.db["Bar"..d][key[#key]]
 			end,
 			set = function(key, value)
 				MOD:ChangeDBVar(value, key[#key], "Bar"..d);
@@ -66,14 +67,14 @@ local function BarConfigLoader()
 					order = 2,
 					name = L["Background"],
 					type = "toggle",
-					disabled = function()return not SV.db.SVBar["Bar"..d].enable end,
+					disabled = function()return not SV.SVBar.db["Bar"..d].enable end,
 				},
 				mouseover = {
 					order = 3,
 					name = L["Mouse Over"],
 					desc = L["The frame is not shown unless you mouse over the frame."],
 					type = "toggle",
-					disabled = function()return not SV.db.SVBar["Bar"..d].enable end,
+					disabled = function()return not SV.SVBar.db["Bar"..d].enable end,
 				},
 				restorePosition = {
 					order = 4,
@@ -81,18 +82,18 @@ local function BarConfigLoader()
 					name = L["Restore Bar"],
 					desc = L["Restore the actionbars default settings"],
 					func = function()
-						SV.db:SetDefault("SVBar", "Bar"..d)
+						MOD.db:Reset("Bar"..d)
 						SV:ResetMovables("Bar "..d)
 						MOD:RefreshBar("Bar"..d)
 					end,
-					disabled = function()return not SV.db.SVBar["Bar"..d].enable end,
+					disabled = function()return not SV.SVBar.db["Bar"..d].enable end,
 				},
 				adjustGroup = {
 					name = L["Bar Adjustments"],
 					type = "group",
 					order = 5,
 					guiInline = true,
-					disabled = function()return not SV.db.SVBar["Bar"..d].enable end,
+					disabled = function()return not SV.SVBar.db["Bar"..d].enable end,
 					args = {
 						point = {
 							order = 1,
@@ -153,16 +154,16 @@ local function BarConfigLoader()
 					type = "group",
 					order = 6,
 					guiInline = true,
-					disabled = function()return not SV.db.SVBar["Bar"..d].enable end,
+					disabled = function()return not SV.SVBar.db["Bar"..d].enable end,
 					args = {
 						useCustomPaging = {
 							order = 1,
 							type = "toggle",
 							name = L["Enable"],
 							desc = L["Allow the use of custom paging for this bar"],
-							get = function()return SV.db.SVBar["Bar"..d].useCustomPaging end,
+							get = function()return SV.SVBar.db["Bar"..d].useCustomPaging end,
 							set = function(e, f)
-								SV.db.SVBar["Bar"..d].useCustomPaging = f;
+								SV.SVBar.db["Bar"..d].useCustomPaging = f;
 								MOD.db["Bar"..d].useCustomPaging = f;
 								MOD:UpdateBarPagingDefaults();
 								MOD:RefreshBar("Bar"..d)
@@ -174,7 +175,7 @@ local function BarConfigLoader()
 							name = L["Restore Defaults"],
 							desc = L["Restore default paging attributes for this bar"],
 							func = function()
-								SV.db:SetDefault("SVBar", "Bar"..d, "customPaging")
+								MOD.db:Reset("Bar"..d, "customPaging")
 								MOD:UpdateBarPagingDefaults();
 								MOD:RefreshBar("Bar"..d)
 							end
@@ -185,23 +186,23 @@ local function BarConfigLoader()
 							width = "full",
 							name = L["Paging"],
 							desc = L["|cffFF0000ADVANCED:|r Set the paging attributes for this bar"],
-							get = function(e)return SV.db.SVBar["Bar"..d].customPaging[SV.class] end,
+							get = function(e)return SV.SVBar.db["Bar"..d].customPaging[SV.class] end,
 							set = function(e, f)
-								SV.db.SVBar["Bar"..d].customPaging[SV.class] = f;
+								SV.SVBar.db["Bar"..d].customPaging[SV.class] = f;
 								MOD.db["Bar"..d].customPaging[SV.class] = f;
 								MOD:UpdateBarPagingDefaults();
 								MOD:RefreshBar("Bar"..d)
 							end,
-							disabled = function()return not SV.db.SVBar["Bar"..d].useCustomPaging end,
+							disabled = function()return not SV.SVBar.db["Bar"..d].useCustomPaging end,
 						},
 						useCustomVisibility = {
 							order = 4,
 							type = "toggle",
 							name = L["Enable"],
 							desc = L["Allow the use of custom paging for this bar"],
-							get = function()return SV.db.SVBar["Bar"..d].useCustomVisibility end,
+							get = function()return SV.SVBar.db["Bar"..d].useCustomVisibility end,
 							set = function(e, f)
-								SV.db.SVBar["Bar"..d].useCustomVisibility = f;
+								SV.SVBar.db["Bar"..d].useCustomVisibility = f;
 								MOD.db["Bar"..d].useCustomVisibility = f;
 								MOD:UpdateBarPagingDefaults();
 								MOD:RefreshBar("Bar"..d)
@@ -213,7 +214,7 @@ local function BarConfigLoader()
 							name = L["Restore Defaults"],
 							desc = L["Restore default visibility attributes for this bar"],
 							func = function()
-								SV.db:SetDefault("SVBar", "Bar"..d, "customVisibility")
+								MOD.db:Reset("Bar"..d, "customVisibility")
 								MOD:UpdateBarPagingDefaults();
 								MOD:RefreshBar("Bar"..d)
 							end
@@ -224,14 +225,14 @@ local function BarConfigLoader()
 							width = "full",
 							name = L["Visibility"],
 							desc = L["|cffFF0000ADVANCED:|r Set the visibility attributes for this bar"],
-							get = function(e)return SV.db.SVBar["Bar"..d].customVisibility end,
+							get = function(e)return SV.SVBar.db["Bar"..d].customVisibility end,
 							set = function(e, f)
-								SV.db.SVBar["Bar"..d].customVisibility = f;
+								SV.SVBar.db["Bar"..d].customVisibility = f;
 								MOD.db["Bar"..d].customVisibility = f;
 								MOD:UpdateBarPagingDefaults();
 								MOD:RefreshBar("Bar"..d)
 							end,
-							disabled = function()return not SV.db.SVBar["Bar"..d].useCustomVisibility end,
+							disabled = function()return not SV.SVBar.db["Bar"..d].useCustomVisibility end,
 						},

 					}
@@ -246,9 +247,9 @@ local function BarConfigLoader()
 		type = "group",
 		order = 100,
 		guiInline = false,
-		disabled = function()return not SV.db.SVBar.enable end,
+		disabled = function()return not SV.SVBar.db.enable end,
 		get = function(key)
-			return SV.db.SVBar["Micro"][key[#key]]
+			return SV.SVBar.db["Micro"][key[#key]]
 		end,
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], "Micro");
@@ -264,7 +265,7 @@ local function BarConfigLoader()
 				order = 2,
 				name = L["Mouse Over"],
 				desc = L["The frame is not shown unless you mouse over the frame."],
-				disabled = function()return not SV.db.SVBar["Micro"].enable end,
+				disabled = function()return not SV.SVBar.db["Micro"].enable end,
 				type = "toggle"
 			},
 			buttonsize = {
@@ -275,7 +276,7 @@ local function BarConfigLoader()
 				min = 15,
 				max = 60,
 				step = 1,
-				disabled = function()return not SV.db.SVBar["Micro"].enable end,
+				disabled = function()return not SV.SVBar.db["Micro"].enable end,
 			},
 			buttonspacing = {
 				order = 4,
@@ -285,7 +286,7 @@ local function BarConfigLoader()
 				min = 1,
 				max = 10,
 				step = 1,
-				disabled = function()return not SV.db.SVBar["Micro"].enable end,
+				disabled = function()return not SV.SVBar.db["Micro"].enable end,
 			},
 		}
 	};
@@ -296,8 +297,8 @@ local function BarConfigLoader()
 		type = "group",
 		order = 200,
 		guiInline = false,
-		disabled = function()return not SV.db.SVBar.enable end,
-		get = function(e)return SV.db.SVBar["Pet"][e[#e]]end,
+		disabled = function()return not SV.SVBar.db.enable end,
+		get = function(e)return SV.SVBar.db["Pet"][e[#e]]end,
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], "Pet");
 			MOD:RefreshBar("Pet")
@@ -312,14 +313,14 @@ local function BarConfigLoader()
 				order = 2,
 				name = L["Background"],
 				type = "toggle",
-				disabled = function()return not SV.db.SVBar["Pet"].enable end,
+				disabled = function()return not SV.SVBar.db["Pet"].enable end,
 			},
 			mouseover = {
 				order = 3,
 				name = L["Mouse Over"],
 				desc = L["The frame is not shown unless you mouse over the frame."],
 				type = "toggle",
-				disabled = function()return not SV.db.SVBar["Pet"].enable end,
+				disabled = function()return not SV.SVBar.db["Pet"].enable end,
 			},
 			restorePosition = {
 				order = 4,
@@ -327,18 +328,18 @@ local function BarConfigLoader()
 				name = L["Restore Bar"],
 				desc = L["Restore the actionbars default settings"],
 				func = function()
-					SV.db:SetDefault("SVBar", "Pet")
+					MOD.db:Reset("Pet")
 					SV:ResetMovables("Pet Bar")
 					MOD:RefreshBar("Pet")
 				end,
-				disabled = function()return not SV.db.SVBar["Pet"].enable end,
+				disabled = function()return not SV.SVBar.db["Pet"].enable end,
 			},
 			adjustGroup = {
 				name = L["Bar Adjustments"],
 				type = "group",
 				order = 5,
 				guiInline = true,
-				disabled = function()return not SV.db.SVBar["Pet"].enable end,
+				disabled = function()return not SV.SVBar.db["Pet"].enable end,
 				args = {
 					point = {
 						order = 1,
@@ -373,7 +374,7 @@ local function BarConfigLoader()
 						min = 15,
 						max = 60,
 						step = 1,
-						disabled = function()return not SV.db.SVBar.enable end
+						disabled = function()return not SV.SVBar.db.enable end
 					},
 					buttonspacing = {
 						order = 5,
@@ -383,7 +384,7 @@ local function BarConfigLoader()
 						min = 1,
 						max = 10,
 						step = 1,
-						disabled = function()return not SV.db.SVBar.enable end
+						disabled = function()return not SV.SVBar.db.enable end
 					},
 					alpha = {
 						order = 6,
@@ -407,9 +408,9 @@ local function BarConfigLoader()
 						type = "toggle",
 						name = L["Enable"],
 						desc = L["Allow the use of custom paging for this bar"],
-						get = function()return SV.db.SVBar["Pet"].useCustomVisibility end,
+						get = function()return SV.SVBar.db["Pet"].useCustomVisibility end,
 						set = function(e,f)
-							SV.db.SVBar["Pet"].useCustomVisibility = f;
+							SV.SVBar.db["Pet"].useCustomVisibility = f;
 							MOD.db["Pet"].useCustomVisibility = f;
 							MOD:RefreshBar("Pet")
 						end
@@ -420,7 +421,7 @@ local function BarConfigLoader()
 						name = L["Restore Defaults"],
 						desc = L["Restore default visibility attributes for this bar"],
 						func = function()
-							SV.db:SetDefault("SVBar", "Pet", "customVisibility")
+							MOD.db:Reset("Pet", "customVisibility")
 							MOD:RefreshBar("Pet")
 						end
 					},
@@ -430,13 +431,13 @@ local function BarConfigLoader()
 						width = "full",
 						name = L["Visibility"],
 						desc = L["|cffFF0000ADVANCED:|r Set the visibility attributes for this bar"],
-						get = function(e)return SV.db.SVBar["Pet"].customVisibility end,
+						get = function(e)return SV.SVBar.db["Pet"].customVisibility end,
 						set = function(e,f)
-							SV.db.SVBar["Pet"].customVisibility = f;
+							SV.SVBar.db["Pet"].customVisibility = f;
 							MOD.db["Pet"].customVisibility = f;
 							MOD:RefreshBar("Pet")
 						end,
-						disabled = function()return not SV.db.SVBar["Pet"].useCustomVisibility end,
+						disabled = function()return not SV.SVBar.db["Pet"].useCustomVisibility end,
 					},
 				}
 			}
@@ -449,8 +450,8 @@ local function BarConfigLoader()
 		type = "group",
 		order = 300,
 		guiInline = false,
-		disabled = function()return not SV.db.SVBar.enable end,
-		get = function(e)return SV.db.SVBar["Stance"][e[#e]]end,
+		disabled = function()return not SV.SVBar.db.enable end,
+		get = function(e)return SV.SVBar.db["Stance"][e[#e]]end,
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], "Stance");
 			MOD:RefreshBar("Stance")
@@ -465,14 +466,14 @@ local function BarConfigLoader()
 				order = 2,
 				name = L["Background"],
 				type = "toggle",
-				disabled = function()return not SV.db.SVBar["Stance"].enable end,
+				disabled = function()return not SV.SVBar.db["Stance"].enable end,
 			},
 			mouseover = {
 				order = 3,
 				name = L["Mouse Over"],
 				desc = L["The frame is not shown unless you mouse over the frame."],
 				type = "toggle",
-				disabled = function()return not SV.db.SVBar["Stance"].enable end,
+				disabled = function()return not SV.SVBar.db["Stance"].enable end,
 			},
 			restorePosition = {
 				order = 4,
@@ -480,18 +481,18 @@ local function BarConfigLoader()
 				name = L["Restore Bar"],
 				desc = L["Restore the actionbars default settings"],
 				func = function()
-					SV.db:SetDefault("SVBar","Stance")
+					SVLib:SetDefault("SVBar","Stance")
 					SV:ResetMovables("Stance Bar")
 					MOD:RefreshBar("Stance")
 				end,
-				disabled = function()return not SV.db.SVBar["Stance"].enable end,
+				disabled = function()return not SV.SVBar.db["Stance"].enable end,
 			},
 			adjustGroup = {
 				name = L["Bar Adjustments"],
 				type = "group",
 				order = 5,
 				guiInline = true,
-				disabled = function()return not SV.db.SVBar["Stance"].enable end,
+				disabled = function()return not SV.SVBar.db["Stance"].enable end,
 				args = {
 					point = {
 						order = 1,
@@ -552,7 +553,7 @@ local function BarConfigLoader()
 				type = "group",
 				order = 6,
 				guiInline = true,
-				disabled = function()return not SV.db.SVBar["Stance"].enable end,
+				disabled = function()return not SV.SVBar.db["Stance"].enable end,
 				args = {
 					style = {
 						order = 1,
@@ -579,9 +580,9 @@ local function BarConfigLoader()
 						type = "toggle",
 						name = L["Enable"],
 						desc = L["Allow the use of custom paging for this bar"],
-						get = function()return SV.db.SVBar["Stance"].useCustomVisibility end,
+						get = function()return SV.SVBar.db["Stance"].useCustomVisibility end,
 						set = function(e,f)
-							SV.db.SVBar["Stance"].useCustomVisibility = f;
+							SV.SVBar.db["Stance"].useCustomVisibility = f;
 							MOD.db["Stance"].useCustomVisibility = f;
 							MOD:RefreshBar("Stance")
 						end
@@ -592,7 +593,7 @@ local function BarConfigLoader()
 						name = L["Restore Defaults"],
 						desc = L["Restore default visibility attributes for this bar"],
 						func = function()
-							SV.db:SetDefault("SVBar", "Stance", "customVisibility")
+							MOD.db:Reset("Stance", "customVisibility")
 							MOD:RefreshBar("Stance")
 						end
 					},
@@ -602,13 +603,13 @@ local function BarConfigLoader()
 						width = "full",
 						name = L["Visibility"],
 						desc = L["|cffFF0000ADVANCED:|r Set the visibility attributes for this bar"],
-						get = function(e)return SV.db.SVBar["Stance"].customVisibility end,
+						get = function(e)return SV.SVBar.db["Stance"].customVisibility end,
 						set = function(e,f)
-							SV.db.SVBar["Stance"].customVisibility = f;
+							SV.SVBar.db["Stance"].customVisibility = f;
 							MOD.db["Stance"].customVisibility = f;
 							MOD:RefreshBar("Stance")
 						end,
-						disabled = function()return not SV.db.SVBar["Stance"].useCustomVisibility end,
+						disabled = function()return not SV.SVBar.db["Stance"].useCustomVisibility end,
 					},
 				}
 			}
@@ -621,7 +622,7 @@ SV.Options.args.SVBar = {
 	name = L["ActionBars"],
 	childGroups = "tab",
 	get = function(key)
-		return SV.db.SVBar[key[#key]]
+		return SV.SVBar.db[key[#key]]
 	end,
 	set = function(key, value)
 		MOD:ChangeDBVar(value, key[#key]);
@@ -632,15 +633,15 @@ SV.Options.args.SVBar = {
 			order = 1,
 			type = "toggle",
 			name = L["Enable"],
-			get = function(e)return SV.db.SVBar[e[#e]]end,
-			set = function(e, f)SV.db.SVBar[e[#e]] = f;SV:StaticPopup_Show("RL_CLIENT")end
+			get = function(e)return SV.SVBar.db[e[#e]]end,
+			set = function(e, f)SV.SVBar.db[e[#e]] = f;SV:StaticPopup_Show("RL_CLIENT")end
 		},
 		barGroup = {
 			order = 2,
 			type = "group",
 			name = L["Bar Options"],
 			childGroups = "tree",
-			disabled = function()return not SV.db.SVBar.enable end,
+			disabled = function()return not SV.SVBar.db.enable end,
 			args = {
 				commonGroup = {
 					order = 1,
@@ -690,11 +691,11 @@ SV.Options.args.SVBar = {
 							desc = L["Color of the actionbutton when out of range."],
 							hasAlpha = true,
 							get = function(key)
-								local color = SV.db.SVBar[key[#key]]
+								local color = SV.SVBar.db[key[#key]]
 								return color[1], color[2], color[3], color[4]
 							end,
 							set = function(key, rValue, gValue, bValue, aValue)
-								SV.db.SVBar[key[#key]] = {rValue, gValue, bValue, aValue}
+								SV.SVBar.db[key[#key]] = {rValue, gValue, bValue, aValue}
 								MOD:RefreshActionBars()
 							end,
 						},
@@ -705,11 +706,11 @@ SV.Options.args.SVBar = {
 							desc = L["Color of the actionbutton when out of power (Mana, Rage, Focus, Holy Power)."],
 							hasAlpha = true,
 							get = function(key)
-								local color = SV.db.SVBar[key[#key]]
+								local color = SV.SVBar.db[key[#key]]
 								return color[1], color[2], color[3], color[4]
 							end,
 							set = function(key, rValue, gValue, bValue, aValue)
-								SV.db.SVBar[key[#key]] = {rValue, gValue, bValue, aValue}
+								SV.SVBar.db[key[#key]] = {rValue, gValue, bValue, aValue}
 								MOD:RefreshActionBars()
 							end,
 						},
@@ -724,7 +725,7 @@ SV.Options.args.SVBar = {
 				fontGroup = {
 					order = 2,
 					type = "group",
-					disabled = function()return not SV.db.SVBar.enable end,
+					disabled = function()return not SV.SVBar.db.enable end,
 					name = L["Fonts"],
 					args = {
 						font = {
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/chat.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/chat.lua
index 9213842..a8d8443 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/chat.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/chat.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVChat;
 --[[
 ##########################################################
@@ -40,7 +40,7 @@ SET PACKAGE OPTIONS
 SV.Options.args.SVChat={
 	type = "group",
 	name = L["Chat"],
-	get = function(a)return SV.db.SVChat[a[#a]]end,
+	get = function(a)return SV.SVChat.db[a[#a]]end,
 	set = function(a,b)MOD:ChangeDBVar(b,a[#a]); end,
 	args = {
 		intro = {
@@ -52,8 +52,8 @@ SV.Options.args.SVChat={
 			order = 2,
 			type = "toggle",
 			name = L["Enable"],
-			get = function(a)return SV.db.SVChat.enable end,
-			set = function(a,b)SV.db.SVChat.enable = b;SV:StaticPopup_Show("RL_CLIENT")end
+			get = function(a)return SV.SVChat.db.enable end,
+			set = function(a,b)SV.SVChat.db.enable = b;SV:StaticPopup_Show("RL_CLIENT")end
 		},
 		common = {
 			order = 3,
@@ -113,7 +113,7 @@ SV.Options.args.SVChat={
 					type = "select",
 					dialogControl = "LSM30_Sound",
 					name = L["Whisper Alert"],
-					disabled = function()return not SV.db.SVChat.psst end,
+					disabled = function()return not SV.SVChat.db.psst end,
 					values = AceGUIWidgetLSMlists.sound,
 					set = function(a,b) MOD:ChangeDBVar(b,a[#a]) end
 				},
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/dock.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/dock.lua
index 28a7fa8..4ea7f7c 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/dock.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/dock.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVDock
 local CHAT = SV.SVChat
 local BAG = SV.SVBag
@@ -58,7 +58,7 @@ SV.Options.args.SVDock.args["common"] = {
 			type = 'toggle',
 			name = L['Bottom Panel'],
 			desc = L['Display a border across the bottom of the screen.'],
-			get = function(j)return SV.db.SVDock.bottomPanel end,
+			get = function(j)return SV.SVDock.db.bottomPanel end,
 			set = function(key,value)MOD:ChangeDBVar(value,key[#key]);MOD:BottomPanelVisibility()end
 		},
 		topPanel = {
@@ -66,7 +66,7 @@ SV.Options.args.SVDock.args["common"] = {
 			type = 'toggle',
 			name = L['Top Panel'],
 			desc = L['Display a border across the top of the screen.'],
-			get = function(j)return SV.db.SVDock.topPanel end,
+			get = function(j)return SV.SVDock.db.topPanel end,
 			set = function(key,value)MOD:ChangeDBVar(value,key[#key]);MOD:TopPanelVisibility()end
 		},
 		dockStatWidth = {
@@ -78,7 +78,7 @@ SV.Options.args.SVDock.args["common"] = {
 			max = 1200,
 			step = 1,
 			width = "full",
-			get = function()return SV.db.SVDock.dockStatWidth end,
+			get = function()return SV.SVDock.db.dockStatWidth end,
 			set = function(key,value)
 				MOD:ChangeDBVar(value,key[#key]);
 				MOD:UpdateSuperDock(true)
@@ -98,7 +98,7 @@ SV.Options.args.SVDock.args["leftDockGroup"] = {
 				type = 'toggle',
 				name = L['Left Dock Backdrop'],
 				desc = L['Display a backdrop behind the left-side dock.'],
-				get = function(j)return SV.db.SVDock.leftDockBackdrop end,
+				get = function(j)return SV.SVDock.db.leftDockBackdrop end,
 				set = function(key,value)
 					MOD:ChangeDBVar(value,key[#key]);
 					MOD:UpdateDockBackdrops()
@@ -113,7 +113,7 @@ SV.Options.args.SVDock.args["leftDockGroup"] = {
 				max = 600,
 				step = 1,
 				width = "full",
-				get = function()return SV.db.SVDock.dockLeftHeight;end,
+				get = function()return SV.SVDock.db.dockLeftHeight;end,
 				set = function(key,value)
 					MOD:ChangeDBVar(value,key[#key]);
 					MOD:UpdateSuperDock(true)
@@ -129,7 +129,7 @@ SV.Options.args.SVDock.args["leftDockGroup"] = {
 				max = 700,
 				step = 1,
 				width = "full",
-				get = function()return SV.db.SVDock.dockLeftWidth;end,
+				get = function()return SV.SVDock.db.dockLeftWidth;end,
 				set = function(key,value)
 					MOD:ChangeDBVar(value,key[#key]);
 					MOD:UpdateSuperDock(true)
@@ -148,7 +148,7 @@ local acceptableDocklets = {
 };

 local function GetLiveDockletsA()
-	local test = SV.db.SVDock.docklets.DockletExtra;
+	local test = SV.SVDock.db.docklets.DockletExtra;
 	local t = {["None"] = L["None"]};
 	for n,l in pairs(acceptableDocklets) do
 		if IsAddOnLoaded(n) or IsAddOnLoaded(l) then
@@ -166,7 +166,7 @@ local function GetLiveDockletsA()
 end

 local function GetLiveDockletsB()
-	local test = SV.db.SVDock.docklets.DockletMain;
+	local test = SV.SVDock.db.docklets.DockletMain;
 	local t = {["None"] = L["None"]};
 	for n,l in pairs(acceptableDocklets) do
 		if IsAddOnLoaded(n) or IsAddOnLoaded(l) then
@@ -194,7 +194,7 @@ SV.Options.args.SVDock.args["rightDockGroup"] = {
 			type = 'toggle',
 			name = L['Right Dock Backdrop'],
 			desc = L['Display a backdrop behind the right-side dock.'],
-			get = function(j)return SV.db.SVDock.rightDockBackdrop end,
+			get = function(j)return SV.SVDock.db.rightDockBackdrop end,
 			set = function(key,value)
 				MOD:ChangeDBVar(value,key[#key]);
 				MOD:UpdateDockBackdrops()
@@ -209,7 +209,7 @@ SV.Options.args.SVDock.args["rightDockGroup"] = {
 			max = 600,
 			step = 1,
 			width = "full",
-			get = function()return SV.db.SVDock.dockRightHeight;end,
+			get = function()return SV.SVDock.db.dockRightHeight;end,
 			set = function(key,value)
 				MOD:ChangeDBVar(value,key[#key]);
 				MOD:UpdateSuperDock(true)
@@ -225,7 +225,7 @@ SV.Options.args.SVDock.args["rightDockGroup"] = {
 			max = 700,
 			step = 1,
 			width = "full",
-			get = function()return SV.db.SVDock.dockRightWidth;end,
+			get = function()return SV.SVDock.db.dockRightWidth;end,
 			set = function(key,value)
 				MOD:ChangeDBVar(value,key[#key]);
 				MOD:UpdateSuperDock(true)
@@ -243,8 +243,8 @@ SV.Options.args.SVDock.args["rightDockGroup"] = {
 					order = 1,
 					type = "toggle",
 					name = L["Enable"],
-					get = function()return SV.db.system.questWatch end,
-				 	set = function(j, value) SV.db.system.questWatch = value; SV:StaticPopup_Show("RL_CLIENT") end
+					get = function()return SV.db.questWatch end,
+				 	set = function(j, value) SV.db.questWatch = value; SV:StaticPopup_Show("RL_CLIENT") end
 				}
 			}
 		},
@@ -266,33 +266,33 @@ SV.Options.args.SVDock.args["rightDockGroup"] = {
 							name = "Primary Docklet",
 							desc = "Select an addon to occupy the primary docklet window",
 							values = function()return GetLiveDockletsA()end,
-							get = function()return SV.db.SVDock.docklets.DockletMain end,
-							set = function(a,value)SV.db.SVDock.docklets.DockletMain = value;SV:ReloadDocklets()end,
+							get = function()return SV.SVDock.db.docklets.DockletMain end,
+							set = function(a,value)SV.SVDock.db.docklets.DockletMain = value;SV:ReloadDocklets()end,
 						},
 						DockletCombatFade = {
 							type = "toggle",
 							order = 2,
 							name = "Out of Combat (Hide)",
-							get = function()return SV.db.SVDock.docklets.DockletCombatFade end,
-							set = function(a,value)SV.db.SVDock.docklets.DockletCombatFade = value;end
+							get = function()return SV.SVDock.db.docklets.DockletCombatFade end,
+							set = function(a,value)SV.SVDock.db.docklets.DockletCombatFade = value;end
 						},
 						enableExtra = {
 							type = "toggle",
 							order = 3,
 							name = "Split Docklet",
 							desc = "Split the primary docklet window for 2 addons.",
-							get = function()return SV.db.SVDock.docklets.enableExtra end,
-							set = function(a,value)SV.db.SVDock.docklets.enableExtra = value;SV:ReloadDocklets()end,
+							get = function()return SV.SVDock.db.docklets.enableExtra end,
+							set = function(a,value)SV.SVDock.db.docklets.enableExtra = value;SV:ReloadDocklets()end,
 						},
 						DockletExtra = {
 							type = "select",
 							order = 4,
 							name = "Secondary Docklet",
 							desc = "Select another addon",
-							disabled = function()return (not SV.db.SVDock.docklets.enableExtra or SV.db.SVDock.docklets.DockletMain == "None") end,
+							disabled = function()return (not SV.SVDock.db.docklets.enableExtra or SV.SVDock.db.docklets.DockletMain == "None") end,
 							values = function()return GetLiveDockletsB()end,
-							get = function()return SV.db.SVDock.docklets.DockletExtra end,
-							set = function(a,value)SV.db.SVDock.docklets.DockletExtra = value;SV:ReloadDocklets()end,
+							get = function()return SV.SVDock.db.docklets.DockletExtra end,
+							set = function(a,value)SV.SVDock.db.docklets.DockletExtra = value;SV:ReloadDocklets()end,
 						}
 					}
 				}
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/dynamic.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/dynamic.lua
index e2212dd..e7913d9 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/dynamic.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/dynamic.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local queue = SV.DynamicOptions;

 do
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/filter.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/filter.lua
index d66de3b..add8ab7 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/filter.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/filter.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 local _, ns = ...;
@@ -740,7 +740,7 @@ SV.Options.args.filters = {
 			values = function()
 				filters = {}
 				filters[""] = NONE;
-				for g in pairs(SV.db.filter) do
+				for g in pairs(SV.db.filter) do
 					filters[g] = nameMapping[g] or g
 				end
 				return filters
@@ -763,7 +763,7 @@ SV.Options.args.filters = {
 			values = function()
 				filters = {}
 				filters[""] = NONE;
-				for g in pairs(SV.db.filter) do
+				for g in pairs(SV.db.filter) do
 					filters[g] = nameMapping[g] or g
 				end
 				filters["AuraBar Colors"] = "AuraBar Colors"
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/henchmen.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/henchmen.lua
index 97220d5..f0e49e2 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/henchmen.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/henchmen.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVHenchmen;
 --[[
 ##########################################################
@@ -40,7 +40,7 @@ SET PACKAGE OPTIONS
 SV.Options.args.SVHenchmen={
 	type = "group",
 	name = L["Henchmen"],
-	get = function(a)return SV.db.SVHenchmen[a[#a]]end,
+	get = function(a)return SV.SVHenchmen.db[a[#a]]end,
 	set = function(a,b)MOD:ChangeDBVar(b,a[#a]); end,
 	args = {
 		intro = {
@@ -65,57 +65,57 @@ SV.Options.args.SVHenchmen={
 							order = 1,
 							type = 'toggle',
 							name = L["Enable Mail Helper"],
-							get = function(j)return SV.db.SVHenchmen.mailOpener end,
-							set = function(j,value)SV.db.SVHenchmen.mailOpener = value;MOD:ToggleMailMinions()end
+							get = function(j)return SV.SVHenchmen.db.mailOpener end,
+							set = function(j,value)SV.SVHenchmen.db.mailOpener = value;MOD:ToggleMailMinions()end
 						},
 						autoAcceptInvite = {
 							order = 2,
 							name = L['Accept Invites'],
 							desc = L['Automatically accept invites from guild/friends.'],
 							type = 'toggle',
-							get = function(j)return SV.db.SVHenchmen.autoAcceptInvite end,
-							set = function(j,value)SV.db.SVHenchmen.autoAcceptInvite = value end
+							get = function(j)return SV.SVHenchmen.db.autoAcceptInvite end,
+							set = function(j,value)SV.SVHenchmen.db.autoAcceptInvite = value end
 						},
 						vendorGrays = {
 							order = 3,
 							name = L['Vendor Grays'],
 							desc = L['Automatically vendor gray items when visiting a vendor.'],
 							type = 'toggle',
-							get = function(j)return SV.db.SVHenchmen.vendorGrays end,
-							set = function(j,value)SV.db.SVHenchmen.vendorGrays = value end
+							get = function(j)return SV.SVHenchmen.db.vendorGrays end,
+							set = function(j,value)SV.SVHenchmen.db.vendorGrays = value end
 						},
 						autoRoll = {
 							order = 4,
 							name = L['Auto Greed/DE'],
 							desc = L['Automatically select greed or disenchant (when available) on green quality items. This will only work if you are the max level.'],
 							type = 'toggle',
-							get = function(j)return SV.db.SVHenchmen.autoRoll end,
-							set = function(j,value)SV.db.SVHenchmen.autoRoll = value end,
-							disabled = function()return not SV.db.SVOverride.lootRoll end
+							get = function(j)return SV.SVHenchmen.db.autoRoll end,
+							set = function(j,value)SV.SVHenchmen.db.autoRoll = value end,
+							disabled = function()return not SV.SVOverride.db.lootRoll end
 						},
 						pvpautorelease = {
 							order = 5,
 							type = "toggle",
 							name = L['PvP Autorelease'],
 							desc = L['Automatically release body when killed inside a battleground.'],
-							get = function(j)return SV.db.SVHenchmen.pvpautorelease end,
-							set = function(j,value)SV.db.SVHenchmen.pvpautorelease = value;SV:StaticPopup_Show("RL_CLIENT")end
+							get = function(j)return SV.SVHenchmen.db.pvpautorelease end,
+							set = function(j,value)SV.SVHenchmen.db.pvpautorelease = value;SV:StaticPopup_Show("RL_CLIENT")end
 						},
 						autorepchange = {
 							order = 6,
 							type = "toggle",
 							name = L['Track Reputation'],
 							desc = L['Automatically change your watched faction on the reputation bar to the faction you got reputation points for.'],
-							get = function(j)return SV.db.SVHenchmen.autorepchange end,
-							set = function(j,value)SV.db.SVHenchmen.autorepchange = value end
+							get = function(j)return SV.SVHenchmen.db.autorepchange end,
+							set = function(j,value)SV.SVHenchmen.db.autorepchange = value end
 						},
 						skipcinematics = {
 							order = 7,
 							type = "toggle",
 							name = L['Skip Cinematics'],
 							desc = L['Automatically skip any cinematic sequences.'],
-							get = function(j)return SV.db.SVHenchmen.skipcinematics end,
-							set = function(j,value)SV.db.SVHenchmen.skipcinematics = value;SV:StaticPopup_Show("RL_CLIENT") end
+							get = function(j)return SV.SVHenchmen.db.skipcinematics end,
+							set = function(j,value)SV.SVHenchmen.db.skipcinematics = value;SV:StaticPopup_Show("RL_CLIENT") end
 						},
 						autoRepair = {
 							order = 8,
@@ -127,8 +127,8 @@ SV.Options.args.SVHenchmen={
 								['GUILD'] = GUILD,
 								['PLAYER'] = PLAYER
 							},
-							get = function(j)return SV.db.SVHenchmen.autoRepair end,
-							set = function(j,value)SV.db.SVHenchmen.autoRepair = value end
+							get = function(j)return SV.SVHenchmen.db.autoRepair end,
+							set = function(j,value)SV.SVHenchmen.db.autoRepair = value end
 						},
 					}
 				},
@@ -144,39 +144,39 @@ SV.Options.args.SVHenchmen={
 							type = "toggle",
 							name = L['Accept Quests'],
 							desc = L['Automatically accepts quests as they are presented to you.'],
-							get = function(j)return SV.db.SVHenchmen.autoquestaccept end,
-							set = function(j,value) SV.db.SVHenchmen.autoquestaccept = value end
+							get = function(j)return SV.SVHenchmen.db.autoquestaccept end,
+							set = function(j,value) SV.SVHenchmen.db.autoquestaccept = value end
 						},
 						autoquestcomplete = {
 							order = 2,
 							type = "toggle",
 							name = L['Complete Quests'],
 							desc = L['Automatically complete quests when possible.'],
-							get = function(j)return SV.db.SVHenchmen.autoquestcomplete end,
-							set = function(j,value)SV.db.SVHenchmen.autoquestcomplete = value end
+							get = function(j)return SV.SVHenchmen.db.autoquestcomplete end,
+							set = function(j,value)SV.SVHenchmen.db.autoquestcomplete = value end
 						},
 						autoquestreward = {
 							order = 3,
 							type = "toggle",
 							name = L['Select Quest Reward'],
 							desc = L['Automatically select the quest reward with the highest vendor sell value.'],
-							get = function(j)return SV.db.SVHenchmen.autoquestreward end,
-							set = function(j,value)SV.db.SVHenchmen.autoquestreward = value end
+							get = function(j)return SV.SVHenchmen.db.autoquestreward end,
+							set = function(j,value)SV.SVHenchmen.db.autoquestreward = value end
 						},
 						autodailyquests = {
 							order = 4,
 							type = "toggle",
 							name = L['Only Automate Dailies'],
 							desc = L['Force the auto accept functions to only respond to daily quests. NOTE: This does not apply to daily heroics for some reason.'],
-							get = function(j)return SV.db.SVHenchmen.autodailyquests end,
-							set = function(j,value)SV.db.SVHenchmen.autodailyquests = value end
+							get = function(j)return SV.SVHenchmen.db.autodailyquests end,
+							set = function(j,value)SV.SVHenchmen.db.autodailyquests = value end
 						},
 						autopvpquests = {
 							order = 5,
 							type = "toggle",
 							name = L['Accept PVP Quests'],
-							get = function(j)return SV.db.SVHenchmen.autopvpquests end,
-							set = function(j,value)SV.db.SVHenchmen.autopvpquests = value end
+							get = function(j)return SV.SVHenchmen.db.autopvpquests end,
+							set = function(j,value)SV.SVHenchmen.db.autopvpquests = value end
 						},
 					}
 				},
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/map.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/map.lua
index 1cd9598..ced9aa4 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/map.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/map.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVMap
 --[[
 ##########################################################
@@ -56,7 +56,7 @@ SV.Options.args.SVMap = {
 	type = 'group',
 	childGroups = "tree",
 	name = L['Minimap'],
-	get = function(a)return SV.db.SVMap[a[#a]]end,
+	get = function(a)return SV.SVMap.db[a[#a]]end,
 	set = function(a,b)MOD:ChangeDBVar(b,a[#a]);MOD:ReLoad()end,
 	args={
 		intro={
@@ -69,8 +69,8 @@ SV.Options.args.SVMap = {
 			order = 2,
 			name = L['Enable'],
 			desc = L['Enable/Disable the Custom Minimap.'],
-			get = function(a)return SV.db.SVMap.enable end,
-			set = function(a,b)SV.db.SVMap.enable=b; SV:StaticPopup_Show("RL_CLIENT") end
+			get = function(a)return SV.SVMap.db.enable end,
+			set = function(a,b)SV.SVMap.db.enable=b; SV:StaticPopup_Show("RL_CLIENT") end
 		},
 		common = {
 			order = 3,
@@ -78,7 +78,7 @@ SV.Options.args.SVMap = {
 			name = MINIMAP_LABEL,
 			desc = L['General display settings'],
 			guiInline = true,
-			disabled = function()return not SV.db.SVMap.enable end,
+			disabled = function()return not SV.SVMap.db.enable end,
 			args = {
 				size = {
 					order = 1,
@@ -128,7 +128,7 @@ SV.Options.args.SVMap = {
 			name = "Labels and Info",
 			desc = L['Configure various minimap texts'],
 			guiInline = true,
-			disabled = function()return not SV.db.SVMap.enable end,
+			disabled = function()return not SV.SVMap.db.enable end,
 			args = {
 				locationText = {
 					order = 1,
@@ -157,9 +157,9 @@ SV.Options.args.SVMap = {
 			order = 7,
 			type = "group",
 			name = "Minimap Buttons",
-			get = function(j)return SV.db.SVMap.minimapbar[j[#j]]end,
+			get = function(j)return SV.SVMap.db.minimapbar[j[#j]]end,
 			guiInline = true,
-			disabled = function()return not SV.db.SVMap.enable end,
+			disabled = function()return not SV.SVMap.db.enable end,
 			args = {
 				enable = {
 					order = 1,
@@ -181,7 +181,7 @@ SV.Options.args.SVMap = {
 					name = L['Button Bar Layout'],
 					desc = L['Change settings for how the minimap buttons are styled.'],
 					set = function(a,b)MOD:ChangeDBVar(b,a[#a],"minimapbar")MOD:UpdateMinimapButtonSettings()end,
-					disabled = function()return not SV.db.SVMap.minimapbar.enable end,
+					disabled = function()return not SV.SVMap.db.minimapbar.enable end,
 					values = {
 						['NOANCHOR'] = L['No Anchor Bar'],
 						['HORIZONTAL'] = L['Horizontal Anchor Bar'],
@@ -198,7 +198,7 @@ SV.Options.args.SVMap = {
 					step = 1,
 					width = "full",
 					set = function(a,b)MOD:ChangeDBVar(b,a[#a],"minimapbar")MOD:UpdateMinimapButtonSettings()end,
-					disabled = function()return not SV.db.SVMap.minimapbar.enable or SV.db.SVMap.minimapbar.styleType == 'NOANCHOR'end
+					disabled = function()return not SV.SVMap.db.minimapbar.enable or SV.SVMap.db.minimapbar.styleType == 'NOANCHOR'end
 				},
 			}
 		},
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/mode.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/mode.lua
index db5409e..eddd0ea 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/mode.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/mode.lua
@@ -30,12 +30,12 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVLaborer
 SV.Options.args.SVLaborer = {
 	type = 'group',
 	name = L['Laborer'],
-	get = function(key)return SV.db.SVLaborer[key[#key]]end,
+	get = function(key)return SV.SVLaborer.db[key[#key]]end,
 	set = function(key, value)MOD:ChangeDBVar(value, key[#key]) end,
 	args = {
 		intro = {
@@ -48,8 +48,8 @@ SV.Options.args.SVLaborer = {
 			order = 2,
 			name = L['Enable'],
 			desc = L['Enable/Disable the Laborer dock.'],
-			get = function(key)return SV.db.SVLaborer[key[#key]]end,
-			set = function(key, value)SV.db.SVLaborer.enable = value;SV:StaticPopup_Show("RL_CLIENT")end
+			get = function(key)return SV.SVLaborer.db[key[#key]]end,
+			set = function(key, value)SV.SVLaborer.db.enable = value;SV:StaticPopup_Show("RL_CLIENT")end
 		},
 		fontSize = {
 			order = 3,
@@ -72,7 +72,7 @@ SV.Options.args.SVLaborer = {
 					order = 1,
 					name = L['AutoEquip'],
 					desc = L['Enable/Disable automatically equipping fishing gear.'],
-					get = function(key)return SV.db.SVLaborer.fishing[key[#key]]end,
+					get = function(key)return SV.SVLaborer.db.fishing[key[#key]]end,
 					set = function(key, value)MOD:ChangeDBVar(value, key[#key], "fishing")end
 				}
 			}
@@ -88,7 +88,7 @@ SV.Options.args.SVLaborer = {
 					order = 1,
 					name = L['AutoEquip'],
 					desc = L['Enable/Disable automatically equipping cooking gear.'],
-					get = function(key)return SV.db.SVLaborer.cooking[key[#key]]end,
+					get = function(key)return SV.SVLaborer.db.cooking[key[#key]]end,
 					set = function(key, value)MOD:ChangeDBVar(value, key[#key], "cooking")end
 				}
 			}
@@ -98,8 +98,8 @@ SV.Options.args.SVLaborer = {
 			type = "group",
 			name = L["Farming Mode Settings"],
 			guiInline = true,
-			get = function(key)return SV.db.SVLaborer.farming[key[#key]]end,
-			set = function(key, value)SV.db.SVLaborer.farming[key[#key]] = value end,
+			get = function(key)return SV.SVLaborer.db.farming[key[#key]]end,
+			set = function(key, value)SV.SVLaborer.db.farming[key[#key]] = value end,
 			args = {
 				buttonsize = {
 					type = 'range',
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/plate.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/plate.lua
index 9254132..10c0b15 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/plate.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/plate.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVPlate;
 local _, ns = ...;
 --[[
@@ -139,16 +139,16 @@ SV.Options.args.SVPlate={
 				intro={order=1,type="description",name=L["NAMEPLATE_DESC"]},
 				enable={
 					order=2,type="toggle",name=L["Enable"],
-					get=function(d)return SV.db.SVPlate[d[#d]]end,
-					set=function(d,e)SV.db.SVPlate[d[#d]]=e;SV:StaticPopup_Show("RL_CLIENT")end,
+					get=function(d)return SV.SVPlate.db[d[#d]]end,
+					set=function(d,e)SV.SVPlate.db[d[#d]]=e;SV:StaticPopup_Show("RL_CLIENT")end,
 				},
 				common = {
 					order = 1,
 					type = "group",
 					name = L["General"],
-					get = function(d)return SV.db.SVPlate[d[#d]]end,
+					get = function(d)return SV.SVPlate.db[d[#d]]end,
 					set = function(d,e)MOD:ChangeDBVar(e,d[#d]);MOD:UpdateAllPlates() end,
-					disabled = function()return not SV.db.SVPlate.enable end,
+					disabled = function()return not SV.SVPlate.db.enable end,
 					args = {
 						combatHide = {
 							type = "toggle",
@@ -231,7 +231,7 @@ SV.Options.args.SVPlate={
 							name = L["Reaction Coloring"],
 							guiInline = true,
 							get = function(key)
-								local color = SV.db.SVPlate.reactions[key[#key]]
+								local color = SV.SVPlate.db.reactions[key[#key]]
 								if color then
 									return color[1],color[2],color[3],color[4]
 								end
@@ -280,8 +280,8 @@ SV.Options.args.SVPlate={
 					type = "group",
 					order = 2,
 					name = L["Health Bar"],
-					disabled = function()return not SV.db.SVPlate.enable end,
-					get = function(d)return SV.db.SVPlate.healthBar[d[#d]]end,
+					disabled = function()return not SV.SVPlate.db.enable end,
+					get = function(d)return SV.SVPlate.db.healthBar[d[#d]]end,
 					set = function(d,e)MOD:ChangeDBVar(e,d[#d],"healthBar");MOD:UpdateAllPlates()end,
 					args = {
 						width = {
@@ -319,7 +319,7 @@ SV.Options.args.SVPlate={
 							type = "group",
 							name = L["Fonts"],
 							guiInline = true,
-							get = function(d)return SV.db.SVPlate.healthBar.text[d[#d]]end,
+							get = function(d)return SV.SVPlate.db.healthBar.text[d[#d]]end,
 							set = function(d,e)MOD:ChangeDBVar(e,d[#d],"healthBar","text");MOD:UpdateAllPlates()end,
 							args = {
 								enable = {
@@ -380,8 +380,8 @@ SV.Options.args.SVPlate={
 					type = "group",
 					order = 3,
 					name = L["Cast Bar"],
-					disabled = function()return not SV.db.SVPlate.enable end,
-					get = function(d)return SV.db.SVPlate.castBar[d[#d]]end,
+					disabled = function()return not SV.SVPlate.db.enable end,
+					get = function(d)return SV.SVPlate.db.castBar[d[#d]]end,
 					set = function(d,e)MOD:ChangeDBVar(e,d[#d],"castBar");MOD:UpdateAllPlates()end,
 					args = {
 						height = {
@@ -399,7 +399,7 @@ SV.Options.args.SVPlate={
 							name = L["Colors"],
 							guiInline = true,
 							get = function(key)
-								local color = SV.db.SVPlate.castBar[key[#key]]
+								local color = SV.SVPlate.db.castBar[key[#key]]
 								if color then
 									return color[1],color[2],color[3],color[4]
 								end
@@ -430,7 +430,7 @@ SV.Options.args.SVPlate={
 					type = "group",
 					order = 4,
 					name = L["Target Indicator"],
-					get = function(d)return SV.db.SVPlate.pointer[d[#d]]end,
+					get = function(d)return SV.SVPlate.db.pointer[d[#d]]end,
 					set = function(d,e)MOD:ChangeDBVar(e,d[#d],"pointer");WorldFrame.elapsed = 3;MOD:UpdateAllPlates()end,
 					args = {
 						enable = {
@@ -454,9 +454,9 @@ SV.Options.args.SVPlate={
 							type = "color",
 							name = L["Color"],
 							order = 3,
-							disabled = function()return SV.db.SVPlate.pointer.colorMatchHealthBar end,
+							disabled = function()return SV.SVPlate.db.pointer.colorMatchHealthBar end,
 							get = function(key)
-								local color = SV.db.SVPlate.pointer[key[#key]]
+								local color = SV.SVPlate.db.pointer[key[#key]]
 								if color then
 									return color[1],color[2],color[3],color[4]
 								end
@@ -473,7 +473,7 @@ SV.Options.args.SVPlate={
 					type = "group",
 					order = 5,
 					name = L["Raid Icon"],
-					get = function(d)return SV.db.SVPlate.raidHealIcon[d[#d]]end,
+					get = function(d)return SV.SVPlate.db.raidHealIcon[d[#d]]end,
 					set = function(d,e)MOD:ChangeDBVar(e,d[#d],"raidHealIcon")MOD:UpdateAllPlates()end,
 					args = {
 						attachTo = {
@@ -513,7 +513,7 @@ SV.Options.args.SVPlate={
 					type = "group",
 					order = 4,
 					name = L["Auras"],
-					get = function(d)return SV.db.SVPlate.auras[d[#d]]end,
+					get = function(d)return SV.SVPlate.db.auras[d[#d]]end,
 					set = function(d,e)MOD:ChangeDBVar(e,d[#d],"auras")MOD:UpdateAllPlates()end,
 					args = {
 						numAuras = {
@@ -528,14 +528,21 @@ SV.Options.args.SVPlate={
 							type = "select",
 							order = 2,
 							name = L["Additional Filter"],
-							values = function()filters = {}filters[""] = NONE;for j in pairs(SV.db.filter)do filters[j] = j end return filters end
+							values = function()
+								filters = {}
+								filters[""] = NONE;
+								for j in pairs(SV.db.filter) do
+									filters[j] = j
+								end
+								return filters
+							end
 						},
 						configureButton = {
 							order = 4,
 							name = L["Configure Selected Filter"],
 							type = "execute",
 							width = "full",
-							func = function()ns:SetToFilterConfig(SV.db.SVPlate.auras.additionalFilter)end
+							func = function()ns:SetToFilterConfig(SV.SVPlate.db.auras.additionalFilter)end
 						},
 						fontGroup = {
 							order = 100,
@@ -578,7 +585,7 @@ SV.Options.args.SVPlate={
 					type = "group",
 					order = 6,
 					name = L["Threat"],
-					get = function(d)return SV.db.SVPlate.threat[d[#d]]end,
+					get = function(d)return SV.SVPlate.db.threat[d[#d]]end,
 					set = function(d,e)MOD:ChangeDBVar(e,d[#d],"threat")MOD:UpdateAllPlates()end,
 					args = {
 						enable = {
@@ -618,7 +625,7 @@ SV.Options.args.SVPlate={
 							name = L["Colors"],
 							guiInline = true,
 							get = function(key)
-								local color = SV.db.SVPlate.threat[key[#key]]
+								local color = SV.SVPlate.db.threat[key[#key]]
 								if color then
 									return color[1],color[2],color[3],color[4]
 								end
@@ -661,7 +668,7 @@ SV.Options.args.SVPlate={
 					type = "group",
 					order = 200,
 					name = L["Filters"],
-					disabled = function()return not SV.db.SVPlate.enable end,
+					disabled = function()return not SV.SVPlate.db.enable end,
 					args = {
 						addname = {
 							type = "input",
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/profiles.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/profiles.lua
index 140d844..6914aa3 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/profiles.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/profiles.lua
@@ -30,7 +30,12 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local SVLib = LibStub("LibSuperVillain-1.0");
+local L = SVLib:Lang();
+
+local playerRealm = GetRealmName()
+local playerName = UnitName("player")
+local profileKey = ("%s - %s"):format(playerName, playerRealm)

 SV.Options.args.profiles = {
 	order = 9999,
@@ -59,8 +64,8 @@ SV.Options.args.profiles = {
 			order = 4,
 			type = "execute",
 			name = SAVE,
-			desc = function() return SAVE .. " " .. L["current"] .. " " .. NORMAL_FONT_COLOR_CODE .. SV.db.profileKey .. FONT_COLOR_CODE_CLOSE end,
-			func = function() SV.db:Export(SV.db.profileKey) end,
+			desc = function() return SAVE .. " " .. L["current"] .. " " .. NORMAL_FONT_COLOR_CODE .. profileKey .. FONT_COLOR_CODE_CLOSE end,
+			func = function() SVLib:ExportDatabase(profileKey) SV:SavedPopup() end,
 		},
 		export = {
 			name = L["export"],
@@ -68,7 +73,7 @@ SV.Options.args.profiles = {
 			type = "input",
 			order = 5,
 			get = false,
-			set = function(key, value) SV.db:Export(value) end,
+			set = function(key, value) SVLib:ExportDatabase(value) SV:SavedPopup() end,
 		},
 		import = {
 			name = L["import"],
@@ -76,9 +81,9 @@ SV.Options.args.profiles = {
 			type = "select",
 			order = 6,
 			get = function() return " SELECT ONE" end,
-			set = function(key, value) SV.db:Import(value) end,
-			disabled = function() local t = SV:CheckProfiles() return (not t) end,
-			values = SV:GetProfiles(),
+			set = function(key, value) SV:ImportProfile(value) end,
+			disabled = function() local t = SVLib:CheckProfiles() return (not t) end,
+			values = SVLib:GetProfiles(),
 		},
 		spacer2 = {
 			order = 7,
@@ -97,9 +102,9 @@ SV.Options.args.profiles = {
 			name = L["delete"],
 			desc = L["delete_sub"],
 			get = function() return " SELECT ONE" end,
-			set = function(key, value) SV.db:Remove(value) end,
-			values = SV:GetProfiles(),
-			disabled = function() local t = SV:CheckProfiles() return (not t) 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"],
 		},
@@ -117,7 +122,7 @@ SV.Options.args.profiles = {
 		reset = {
 			order = 12,
 			type = "execute",
-			name = function() return L["reset"] .. " " .. NORMAL_FONT_COLOR_CODE .. SV.db.profileKey .. FONT_COLOR_CODE_CLOSE end,
+			name = function() return L["reset"] .. " " .. NORMAL_FONT_COLOR_CODE .. profileKey .. FONT_COLOR_CODE_CLOSE end,
 			desc = L["reset_sub"],
 			func = function() SV:StaticPopup_Show("RESET_PROFILE_PROMPT") end,
 			width = "full",
@@ -132,8 +137,8 @@ SV.Options.args.profiles = {
 			order = 14,
 			type = "toggle",
 			name = "Dual-Spec Switching",
-			get = function() return SV.db.protected.dualSpecEnabled end,
-			set = function(key, value) SV.db.protected.dualSpecEnabled = value; SV:ToggleSpecSwap(value) end,
+			get = function() return SVLib:GetSafeData("dualSpecEnabled") end,
+			set = function(key, value) SVLib:SaveSafeData("dualSpecEnabled", value) end,
 		},
 	}
 }
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/stat.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/stat.lua
index 1a5f238..25c0378 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/stat.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/stat.lua
@@ -29,7 +29,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVStats;
 --[[
 ##########################################################
@@ -40,7 +40,7 @@ SV.Options.args.SVStats = {
 	type = "group",
 	name = L["Statistics"],
 	childGroups = "tab",
-	get = function(key) return SV.db.SVStats[key[#key]] end,
+	get = function(key) return SV.SVStats.db[key[#key]] end,
 	set = function(key, value) MOD:ChangeDBVar(value, key[#key]); MOD:Generate() end,
 	args = {
 		intro = {
@@ -127,7 +127,7 @@ SV.Options.args.SVStats = {
 do
 	local orderIncrement = 0;
 	local statValues = MOD.StatListing
-	local configTable = SV.db.SVStats.panels;
+	local configTable = SV.SVStats.db.panels;
 	local optionTable = SV.Options.args.SVStats.args.panels.args;

 	for panelName, panelPositions in pairs(configTable)do
@@ -149,7 +149,7 @@ do
 					type = 'select',
 					name = L[position] or upper(position),
 					values = statValues,
-					get = function(key) return SV.db.SVStats.panels[panelName][key[#key]] end,
+					get = function(key) return SV.SVStats.db.panels[panelName][key[#key]] end,
 					set = function(key, value) MOD:ChangeDBVar(value, key[#key], "panels", panelName); MOD:Generate() end
 				}
 			end
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/tip.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/tip.lua
index 0c321a9..9b1902b 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/tip.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/tip.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVTip;
 local LSM = LibStub("LibSharedMedia-3.0");
 --[[
@@ -42,8 +42,8 @@ SV.Options.args.SVTip = {
 	type = "group",
 	name = L["Tooltip"],
 	childGroups = "tab",
-	get = function(a)return SV.db.SVTip[a[#a]] end,
-	set = function(a, b)SV.db.SVTip[a[#a]] = b end,
+	get = function(a)return SV.SVTip.db[a[#a]] end,
+	set = function(a, b)SV.SVTip.db[a[#a]] = b end,
 	args = {
 		commonGroup = {
 			order = 1,
@@ -60,14 +60,14 @@ SV.Options.args.SVTip = {
 					order = 2,
 					type = "toggle",
 					name = L["Enable"],
-					get = function(a)return SV.db.SVTip[a[#a]]end,
-					set = function(a, b)SV.db.SVTip[a[#a]] = b;SV:StaticPopup_Show("RL_CLIENT") end
+					get = function(a)return SV.SVTip.db[a[#a]]end,
+					set = function(a, b)SV.SVTip.db[a[#a]] = b;SV:StaticPopup_Show("RL_CLIENT") end
 				},
 				common = {
 					order = 3,
 					type = "group",
 					name = L["General"],
-					disabled = function() return not SV.db.SVTip.enable end,
+					disabled = function() return not SV.SVTip.db.enable end,
 					args = {
 						cursorAnchor = {
 							order = 1,
@@ -104,8 +104,8 @@ SV.Options.args.SVTip = {
 							type = "toggle",
 							name = L["Spell/Item IDs"],
 							desc = L["Display the spell or item ID when mousing over a spell or item tooltip."],
-							get = function(a)return SV.db.SVTip.spellID end,
-							set = function(a, b)SV.db.SVTip.spellID = b;SV:StaticPopup_Show("RL_CLIENT") end,
+							get = function(a)return SV.SVTip.db.spellID end,
+							set = function(a, b)SV.SVTip.db.spellID = b;SV:StaticPopup_Show("RL_CLIENT") end,
 						}
 					}

@@ -114,8 +114,8 @@ SV.Options.args.SVTip = {
 					order=100,
 					type="group",
 					name=L["Visibility"],
-					get=function(a)return SV.db.SVTip.visibility[a[#a]]end,
-					set=function(a,b)SV.db.SVTip.visibility[a[#a]]=b end,
+					get=function(a)return SV.SVTip.db.visibility[a[#a]]end,
+					set=function(a,b)SV.SVTip.db.visibility[a[#a]]=b end,
 					args={
 						combat={order=1,type='toggle',name=COMBAT,desc=L["Hide tooltip while in combat."]},
 						unitFrames={order=2,type='select',name=L['Unitframes'],desc=L["Don't display the tooltip when mousing over a unitframe."],values={['ALL']=L['Always Hide'],['NONE']=L['Never Hide'],['SHIFT']=SHIFT_KEY,['ALT']=ALT_KEY,['CTRL']=CTRL_KEY}}
@@ -125,8 +125,8 @@ SV.Options.args.SVTip = {
 					order=200,
 					type="group",
 					name=L["Health Bar"],
-					get=function(a)return SV.db.SVTip.healthBar[a[#a]]end,
-					set=function(a,b)SV.db.SVTip.healthBar[a[#a]]=b end,
+					get=function(a)return SV.SVTip.db.healthBar[a[#a]]end,
+					set=function(a,b)SV.SVTip.db.healthBar[a[#a]]=b end,
 					args={
 						height = {
 							order = 1,
@@ -136,7 +136,7 @@ SV.Options.args.SVTip = {
 							max = 15,
 							step = 1,
 							width = "full",
-							set = function(a,b)SV.db.SVTip.healthBar.height = b;GameTooltipStatusBar:Height(b)end
+							set = function(a,b)SV.SVTip.db.healthBar.height = b;GameTooltipStatusBar:Height(b)end
 						},
 						fontGroup = {
 							order = 2,
@@ -148,7 +148,7 @@ SV.Options.args.SVTip = {
 									order = 1,
 									type = "toggle",
 									name = L["Text"],
-									set = function(a,b)SV.db.SVTip.healthBar.text = b;if b then GameTooltipStatusBar.text:Show()else GameTooltipStatusBar.text:Hide()end end
+									set = function(a,b)SV.SVTip.db.healthBar.text = b;if b then GameTooltipStatusBar.text:Show()else GameTooltipStatusBar.text:Hide()end end
 								},
 								font = {
 									type = "select",
@@ -157,7 +157,7 @@ SV.Options.args.SVTip = {
 									width = "full",
 									name = L["Font"],
 									values = AceGUIWidgetLSMlists.font,
-									set = function(a,b)SV.db.SVTip.healthBar.font = b;GameTooltipStatusBar.text:SetFontTemplate(LSM:Fetch("font",SV.db.SVTip.healthBar.font), SV.db.SVTip.healthBar.fontSize,"OUTLINE")end
+									set = function(a,b)SV.SVTip.db.healthBar.font = b;GameTooltipStatusBar.text:SetFontTemplate(LSM:Fetch("font",SV.SVTip.db.healthBar.font), SV.SVTip.db.healthBar.fontSize,"OUTLINE")end
 								},
 								fontSize = {
 									order = 3,
@@ -167,7 +167,7 @@ SV.Options.args.SVTip = {
 									max = 22,
 									step = 1,
 									width = "full",
-									set = function(a,b)SV.db.SVTip.healthBar.fontSize = b;GameTooltipStatusBar.text:SetFontTemplate(LSM:Fetch("font",SV.db.SVTip.healthBar.font),SV.db.SVTip.healthBar.fontSize,"OUTLINE")end
+									set = function(a,b)SV.SVTip.db.healthBar.fontSize = b;GameTooltipStatusBar.text:SetFontTemplate(LSM:Fetch("font",SV.SVTip.db.healthBar.font),SV.SVTip.db.healthBar.fontSize,"OUTLINE")end
 								}
 							}
 						}
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/core.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/core.lua
index 819fe39..c481207 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/core.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/core.lua
@@ -32,7 +32,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 local _, ns = ...;
@@ -63,7 +63,7 @@ function ns:SetCastbarConfigGroup(updateFunction, unitName, count)
 		type = "group",
 		name = L["Castbar"],
 		get = function(key)
-			return SV.db.SVUnit[unitName]["castbar"][key[#key]]
+			return SV.SVUnit.db[unitName]["castbar"][key[#key]]
 		end,
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], unitName, "castbar")
@@ -153,7 +153,7 @@ function ns:SetCastbarConfigGroup(updateFunction, unitName, count)
 						name = L["Match Frame Width"],
 						desc = "Set the castbar width to match its unitframe.",
 						func = function()
-							SV.db.SVUnit[unitName]["castbar"]["width"] = SV.db.SVUnit[unitName]["width"]
+							SV.SVUnit.db[unitName]["castbar"]["width"] = SV.SVUnit.db[unitName]["width"]
 							updateFunction(MOD, unitName, count)
 						end
 					},
@@ -193,28 +193,28 @@ function ns:SetCastbarConfigGroup(updateFunction, unitName, count)
 						name = L["Custom Bar Color"],
 						type = "color",
 						get = function(key)
-							local color = SV.db.SVUnit[unitName]["castbar"]["castingColor"]
+							local color = SV.SVUnit.db[unitName]["castbar"]["castingColor"]
 							return color[1], color[2], color[3], color[4]
 						end,
 						set = function(key, rValue, gValue, bValue)
-							SV.db.SVUnit[unitName]["castbar"]["castingColor"] = {rValue, gValue, bValue}
+							SV.SVUnit.db[unitName]["castbar"]["castingColor"] = {rValue, gValue, bValue}
 							MOD:RefreshUnitFrames()
 						end,
-						disabled = function() return not SV.db.SVUnit[unitName]["castbar"].useCustomColor end
+						disabled = function() return not SV.SVUnit.db[unitName]["castbar"].useCustomColor end
 					},
 					sparkColor = {
 						order = 3,
 						name = L["Custom Spark Color"],
 						type = "color",
 						get = function(key)
-							local color = SV.db.SVUnit[unitName]["castbar"]["sparkColor"]
+							local color = SV.SVUnit.db[unitName]["castbar"]["sparkColor"]
 							return color[1], color[2], color[3], color[4]
 						end,
 						set = function(key, rValue, gValue, bValue)
-							SV.db.SVUnit[unitName]["castbar"]["sparkColor"] = {rValue, gValue, bValue}
+							SV.SVUnit.db[unitName]["castbar"]["sparkColor"] = {rValue, gValue, bValue}
 							MOD:RefreshUnitFrames()
 						end,
-						disabled = function() return not SV.db.SVUnit[unitName]["castbar"].useCustomColor end
+						disabled = function() return not SV.SVUnit.db[unitName]["castbar"].useCustomColor end
 					},
 				}
 			},
@@ -257,7 +257,7 @@ function ns:SetAuraConfigGroup(custom, auraType, unused, updateFunction, unitNam
 		type = "group",
 		name = auraType == "buffs" and L["Buffs"] or L["Debuffs"],
 		get = function(key)
-			return SV.db.SVUnit[unitName][auraType][key[#key]]
+			return SV.SVUnit.db[unitName][auraType][key[#key]]
 		end,
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], unitName, auraType)
@@ -318,7 +318,7 @@ function ns:SetAuraConfigGroup(custom, auraType, unused, updateFunction, unitNam
 			values = function()
 				filterList = {}
 				filterList[""] = NONE;
-				for n in pairs(SV.db.filter)do
+				for n in pairs(SV.db.filter) do
 					filterList[n] = n
 				end
 				return filterList
@@ -337,9 +337,9 @@ function ns:SetAuraConfigGroup(custom, auraType, unused, updateFunction, unitNam
 					type = "toggle",
 					name = L["Friendly"],
 					desc = L["If the unit is friendly to you."].." "..L["Don't display auras that are not yours."],
-					get = function(l)return SV.db.SVUnit[unitName][auraType].filterPlayer.friendly end,
+					get = function(l)return SV.SVUnit.db[unitName][auraType].filterPlayer.friendly end,
 					set = function(l, m)
-					SV.db.SVUnit[unitName][auraType].filterPlayer.friendly = m;
+					SV.SVUnit.db[unitName][auraType].filterPlayer.friendly = m;
 						updateFunction(MOD, unitName, count)
 					end
 				},
@@ -348,9 +348,9 @@ function ns:SetAuraConfigGroup(custom, auraType, unused, updateFunction, unitNam
 					type = "toggle",
 					name = L["Enemy"],
 					desc = L["If the unit is an enemy to you."].." "..L["Don't display auras that are not yours."],
-					get = function(l)return SV.db.SVUnit[unitName][auraType].filterPlayer.enemy end,
+					get = function(l)return SV.SVUnit.db[unitName][auraType].filterPlayer.enemy end,
 					set = function(l, m)
-						SV.db.SVUnit[unitName][auraType].filterPlayer.enemy = m;
+						SV.SVUnit.db[unitName][auraType].filterPlayer.enemy = m;
 						updateFunction(MOD, unitName, count)
 					end
 				}
@@ -367,16 +367,16 @@ function ns:SetAuraConfigGroup(custom, auraType, unused, updateFunction, unitNam
 					type = "toggle",
 					name = L["Friendly"],
 					desc = L["If the unit is friendly to you."].." "..L["Don't display any auras found on the Blocked filter."],
-					get = function(l)return SV.db.SVUnit[unitName][auraType].filterBlocked.friendly end,
-					set = function(l, m)SV.db.SVUnit[unitName][auraType].filterBlocked.friendly = m;updateFunction(MOD, unitName, count)end
+					get = function(l)return SV.SVUnit.db[unitName][auraType].filterBlocked.friendly end,
+					set = function(l, m)SV.SVUnit.db[unitName][auraType].filterBlocked.friendly = m;updateFunction(MOD, unitName, count)end
 				},
 				enemy = {
 					order = 3,
 					type = "toggle",
 					name = L["Enemy"],
 					desc = L["If the unit is an enemy to you."].." "..L["Don't display any auras found on the Blocked filter."],
-					get = function(l)return SV.db.SVUnit[unitName][auraType].filterBlocked.enemy end,
-					set = function(l, m)SV.db.SVUnit[unitName][auraType].filterBlocked.enemy = m;updateFunction(MOD, unitName, count)end
+					get = function(l)return SV.SVUnit.db[unitName][auraType].filterBlocked.enemy end,
+					set = function(l, m)SV.SVUnit.db[unitName][auraType].filterBlocked.enemy = m;updateFunction(MOD, unitName, count)end
 				}
 			}
 		}
@@ -391,16 +391,16 @@ function ns:SetAuraConfigGroup(custom, auraType, unused, updateFunction, unitNam
 					type = "toggle",
 					name = L["Friendly"],
 					desc = L["If the unit is friendly to you."].." "..L["If no other filter options are being used then it will block anything not on the Allowed filter."],
-					get = function(l)return SV.db.SVUnit[unitName][auraType].filterAllowed.friendly end,
-					set = function(l, m)SV.db.SVUnit[unitName][auraType].filterAllowed.friendly = m;updateFunction(MOD, unitName, count)end
+					get = function(l)return SV.SVUnit.db[unitName][auraType].filterAllowed.friendly end,
+					set = function(l, m)SV.SVUnit.db[unitName][auraType].filterAllowed.friendly = m;updateFunction(MOD, unitName, count)end
 				},
 				enemy = {
 					order = 3,
 					type = "toggle",
 					name = L["Enemy"],
 					desc = L["If the unit is an enemy to you."].." "..L["If no other filter options are being used then it will block anything not on the Allowed filter."],
-					get = function(l)return SV.db.SVUnit[unitName][auraType].filterAllowed.enemy end,
-					set = function(l, m)SV.db.SVUnit[unitName][auraType].filterAllowed.enemy = m;updateFunction(MOD, unitName, count)end
+					get = function(l)return SV.SVUnit.db[unitName][auraType].filterAllowed.enemy end,
+					set = function(l, m)SV.SVUnit.db[unitName][auraType].filterAllowed.enemy = m;updateFunction(MOD, unitName, count)end
 				}
 			}
 		}
@@ -415,16 +415,16 @@ function ns:SetAuraConfigGroup(custom, auraType, unused, updateFunction, unitNam
 					type = "toggle",
 					name = L["Friendly"],
 					desc = L["If the unit is friendly to you."].." "..L["Don't display auras that have no duration."],
-					get = function(l)return SV.db.SVUnit[unitName][auraType].filterInfinite.friendly end,
-					set = function(l, m)SV.db.SVUnit[unitName][auraType].filterInfinite.friendly = m;updateFunction(MOD, unitName, count)end
+					get = function(l)return SV.SVUnit.db[unitName][auraType].filterInfinite.friendly end,
+					set = function(l, m)SV.SVUnit.db[unitName][auraType].filterInfinite.friendly = m;updateFunction(MOD, unitName, count)end
 				},
 				enemy = {
 					order = 3,
 					type = "toggle",
 					name = L["Enemy"],
 					desc = L["If the unit is an enemy to you."].." "..L["Don't display auras that have no duration."],
-					get = function(l)return SV.db.SVUnit[unitName][auraType].filterInfinite.enemy end,
-					set = function(l, m)SV.db.SVUnit[unitName][auraType].filterInfinite.enemy = m;updateFunction(MOD, unitName, count)end
+					get = function(l)return SV.SVUnit.db[unitName][auraType].filterInfinite.enemy end,
+					set = function(l, m)SV.SVUnit.db[unitName][auraType].filterInfinite.enemy = m;updateFunction(MOD, unitName, count)end
 				}
 			}
 		}
@@ -439,16 +439,16 @@ function ns:SetAuraConfigGroup(custom, auraType, unused, updateFunction, unitNam
 					type = "toggle",
 					name = L["Friendly"],
 					desc = L["If the unit is friendly to you."].." "..L["Don't display auras that cannot be purged or dispelled by your class."],
-					get = function(l)return SV.db.SVUnit[unitName][auraType].filterDispellable.friendly end,
-					set = function(l, m)SV.db.SVUnit[unitName][auraType].filterDispellable.friendly = m;updateFunction(MOD, unitName, count)end
+					get = function(l)return SV.SVUnit.db[unitName][auraType].filterDispellable.friendly end,
+					set = function(l, m)SV.SVUnit.db[unitName][auraType].filterDispellable.friendly = m;updateFunction(MOD, unitName, count)end
 					},
 				enemy = {
 					order = 3,
 					type = "toggle",
 					name = L["Enemy"],
 					desc = L["If the unit is an enemy to you."].." "..L["Don't display auras that cannot be purged or dispelled by your class."],
-					get = function(l)return SV.db.SVUnit[unitName][auraType].filterDispellable.enemy end,
-					set = function(l, m)SV.db.SVUnit[unitName][auraType].filterDispellable.enemy = m;updateFunction(MOD, unitName, count)end
+					get = function(l)return SV.SVUnit.db[unitName][auraType].filterDispellable.enemy end,
+					set = function(l, m)SV.SVUnit.db[unitName][auraType].filterDispellable.enemy = m;updateFunction(MOD, unitName, count)end
 				}
 			}
 		}
@@ -464,15 +464,15 @@ function ns:SetAuraConfigGroup(custom, auraType, unused, updateFunction, unitNam
 						type = "toggle",
 						name = L["Friendly"],
 						desc = L["If the unit is friendly to you."].." "..L["Don't display raid (consolidated) buffs."],
-						get = function(l)return SV.db.SVUnit[unitName][auraType].filterRaid.friendly end,
-						set = function(l, m)SV.db.SVUnit[unitName][auraType].filterRaid.friendly = m;updateFunction(MOD, unitName, count)end
+						get = function(l)return SV.SVUnit.db[unitName][auraType].filterRaid.friendly end,
+						set = function(l, m)SV.SVUnit.db[unitName][auraType].filterRaid.friendly = m;updateFunction(MOD, unitName, count)end
 					},
 					enemy = {
 						order = 3,
 						type = "toggle",
 						name = L["Enemy"], desc = L["If the unit is an enemy to you."].." "..L["Don't display raid (consolidated) buffs."],
-						get = function(l)return SV.db.SVUnit[unitName][auraType].filterRaid.enemy end,
-						set = function(l, m)SV.db.SVUnit[unitName][auraType].filterRaid.enemy = m;updateFunction(MOD, unitName, count)end
+						get = function(l)return SV.SVUnit.db[unitName][auraType].filterRaid.enemy end,
+						set = function(l, m)SV.SVUnit.db[unitName][auraType].filterRaid.enemy = m;updateFunction(MOD, unitName, count)end
 					}
 				}
 			}
@@ -485,7 +485,7 @@ function ns:SetAuraConfigGroup(custom, auraType, unused, updateFunction, unitNam
 			values = function()
 				filterList = {}
 				filterList[""] = NONE;
-				for n in pairs(SV.db.filter)do
+				for n in pairs(SV.db.filter) do
 					filterList[n] = n
 				end
 				return filterList
@@ -503,11 +503,11 @@ function ns:SetMiscConfigGroup(partyRaid, updateFunction, unitName, count)
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], unitName, "formatting");
 			local tag = ""
-			local pc = SV.db.SVUnit[unitName]["formatting"].threat and "[threat]" or "";
+			local pc = SV.SVUnit.db[unitName]["formatting"].threat and "[threat]" or "";
 			tag = tag .. pc;
-			local ap = SV.db.SVUnit[unitName]["formatting"].absorbs and "[absorbs]" or "";
+			local ap = SV.SVUnit.db[unitName]["formatting"].absorbs and "[absorbs]" or "";
 			tag = tag .. ap;
-			local cp = SV.db.SVUnit[unitName]["formatting"].incoming and "[incoming]" or "";
+			local cp = SV.SVUnit.db[unitName]["formatting"].incoming and "[incoming]" or "";
 			tag = tag .. cp;

 			MOD:ChangeDBVar(tag, "tags", unitName, "misc");
@@ -518,19 +518,19 @@ function ns:SetMiscConfigGroup(partyRaid, updateFunction, unitName, count)
 				order = 1,
 				name = L["Show Incoming Heals"],
 				type = "toggle",
-				get = function() return SV.db.SVUnit[unitName]["formatting"].incoming end,
+				get = function() return SV.SVUnit.db[unitName]["formatting"].incoming end,
 			},
 			absorbs = {
 				order = 2,
 				name = L["Show Absorbs"],
 				type = "toggle",
-				get = function() return SV.db.SVUnit[unitName]["formatting"].absorbs end,
+				get = function() return SV.SVUnit.db[unitName]["formatting"].absorbs end,
 			},
 			threat = {
 				order = 3,
 				name = L["Show Threat"],
 				type = "toggle",
-				get = function() return SV.db.SVUnit[unitName]["formatting"].threat end,
+				get = function() return SV.SVUnit.db[unitName]["formatting"].threat end,
 			},
 			xOffset = {
 				order = 4,
@@ -541,7 +541,7 @@ function ns:SetMiscConfigGroup(partyRaid, updateFunction, unitName, count)
 				min = -300,
 				max = 300,
 				step = 1,
-				get = function() return SV.db.SVUnit[unitName]["formatting"].xOffset end,
+				get = function() return SV.SVUnit.db[unitName]["formatting"].xOffset end,
 				set = function(key, value) MOD:ChangeDBVar(value, key[#key], unitName, "formatting"); end,
 			},
 			yOffset = {
@@ -553,7 +553,7 @@ function ns:SetMiscConfigGroup(partyRaid, updateFunction, unitName, count)
 				min = -300,
 				max = 300,
 				step = 1,
-				get = function() return SV.db.SVUnit[unitName]["formatting"].yOffset end,
+				get = function() return SV.SVUnit.db[unitName]["formatting"].yOffset end,
 				set = function(key, value) MOD:ChangeDBVar(value, key[#key], unitName, "formatting"); end,
 			},
 		}
@@ -567,7 +567,7 @@ function ns:SetHealthConfigGroup(partyRaid, updateFunction, unitName, count)
 		type = "group",
 		name = L["Health"],
 		get = function(key)
-			return SV.db.SVUnit[unitName]["health"][key[#key]]
+			return SV.SVUnit.db[unitName]["health"][key[#key]]
 		end,
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], unitName, "health");
@@ -601,10 +601,10 @@ function ns:SetHealthConfigGroup(partyRaid, updateFunction, unitName, count)
 				set = function(key, value)
 					MOD:ChangeDBVar(value, key[#key], unitName, "formatting");
 					local tag = ""
-					local pc = SV.db.SVUnit[unitName]["formatting"].health_colored and "[health:color]" or "";
+					local pc = SV.SVUnit.db[unitName]["formatting"].health_colored and "[health:color]" or "";
 					tag = tag .. pc;

-					local pt = SV.db.SVUnit[unitName]["formatting"].health_type;
+					local pt = SV.SVUnit.db[unitName]["formatting"].health_type;
 					if(pt and pt ~= "none") then
 						tag = tag .. "[health:" .. pt .. "]"
 					end
@@ -617,14 +617,14 @@ function ns:SetHealthConfigGroup(partyRaid, updateFunction, unitName, count)
 						order = 1,
 						name = L["Colored"],
 						type = "toggle",
-						get = function() return SV.db.SVUnit[unitName]["formatting"].health_colored end,
+						get = function() return SV.SVUnit.db[unitName]["formatting"].health_colored end,
 						desc = L["Use various name coloring methods"]
 					},
 					health_type = {
 						order = 3,
 						name = L["Text Format"],
 						type = "select",
-						get = function() return SV.db.SVUnit[unitName]["formatting"].health_type end,
+						get = function() return SV.SVUnit.db[unitName]["formatting"].health_type end,
 						desc = L["TEXT_FORMAT_DESC"],
 						values = textStringFormats,
 					}
@@ -656,7 +656,7 @@ function ns:SetPowerConfigGroup(playerTarget, updateFunction, unitName, count)
 		type = "group",
 		name = L["Power"],
 		get = function(key)
-			return SV.db.SVUnit[unitName]["power"][key[#key]]
+			return SV.SVUnit.db[unitName]["power"][key[#key]]
 		end,
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], unitName, "power");
@@ -699,14 +699,14 @@ function ns:SetPowerConfigGroup(playerTarget, updateFunction, unitName, count)
 				set = function(key, value)
 					MOD:ChangeDBVar(value, key[#key], unitName, "formatting");
 					local tag = ""
-					local cp = SV.db.SVUnit[unitName]["formatting"].power_class and "[classpower]" or "";
+					local cp = SV.SVUnit.db[unitName]["formatting"].power_class and "[classpower]" or "";
 					tag = tag .. cp;
-					local ap = SV.db.SVUnit[unitName]["formatting"].power_alt and "[altpower]" or "";
+					local ap = SV.SVUnit.db[unitName]["formatting"].power_alt and "[altpower]" or "";
 					tag = tag .. ap;
-					local pc = SV.db.SVUnit[unitName]["formatting"].power_colored and "[power:color]" or "";
+					local pc = SV.SVUnit.db[unitName]["formatting"].power_colored and "[power:color]" or "";
 					tag = tag .. pc;

-					local pt = SV.db.SVUnit[unitName]["formatting"].power_type;
+					local pt = SV.SVUnit.db[unitName]["formatting"].power_type;
 					if(pt and pt ~= "none") then
 						tag = tag .. "[power:" .. pt .. "]"
 					end
@@ -719,26 +719,26 @@ function ns:SetPowerConfigGroup(playerTarget, updateFunction, unitName, count)
 						order = 1,
 						name = L["Colored"],
 						type = "toggle",
-						get = function() return SV.db.SVUnit[unitName]["formatting"].power_colored end,
+						get = function() return SV.SVUnit.db[unitName]["formatting"].power_colored end,
 						desc = L["Use various name coloring methods"]
 					},
 					power_class = {
 						order = 1,
 						name = L["Show Class Power"],
 						type = "toggle",
-						get = function() return SV.db.SVUnit[unitName]["formatting"].power_class end,
+						get = function() return SV.SVUnit.db[unitName]["formatting"].power_class end,
 					},
 					power_alt = {
 						order = 1,
 						name = L["Show Alt Power"],
 						type = "toggle",
-						get = function() return SV.db.SVUnit[unitName]["formatting"].power_alt end,
+						get = function() return SV.SVUnit.db[unitName]["formatting"].power_alt end,
 					},
 					power_type = {
 						order = 3,
 						name = L["Text Format"],
 						type = "select",
-						get = function() return SV.db.SVUnit[unitName]["formatting"].power_type end,
+						get = function() return SV.SVUnit.db[unitName]["formatting"].power_type end,
 						desc = L["TEXT_FORMAT_DESC"],
 						values = textStringFormats,
 					}
@@ -753,7 +753,7 @@ function ns:SetPowerConfigGroup(playerTarget, updateFunction, unitName, count)
 			order = 2,
 			name = L["Attach Text to Power"],
 			get = function(key)
-				return SV.db.SVUnit[unitName]["power"].attachTextToPower
+				return SV.SVUnit.db[unitName]["power"].attachTextToPower
 			end,
 			set = function(key, value)
 				MOD:ChangeDBVar(value, "attachTextToPower", unitName, "power");
@@ -771,7 +771,7 @@ function ns:SetNameConfigGroup(updateFunction, unitName, count)
 		type = "group",
 		name = L["Name"],
 		get = function(key)
-			return SV.db.SVUnit[unitName]["name"][key[#key]]
+			return SV.SVUnit.db[unitName]["name"][key[#key]]
 		end,
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], unitName, "name");
@@ -858,11 +858,11 @@ function ns:SetNameConfigGroup(updateFunction, unitName, count)
 				set = function(key, value)
 					MOD:ChangeDBVar(value, key[#key], unitName, "formatting");
 					local tag = ""
-					tag = SV.db.SVUnit[unitName]["formatting"].name_colored and "[name:color]" or "";
+					tag = SV.SVUnit.db[unitName]["formatting"].name_colored and "[name:color]" or "";

-					local length = SV.db.SVUnit[unitName]["formatting"].name_length;
+					local length = SV.SVUnit.db[unitName]["formatting"].name_length;
 					tag = tag .. "[name:" .. length .. "]"
-					local lvl = SV.db.SVUnit[unitName]["formatting"].smartlevel and "[smartlevel]" or "";
+					local lvl = SV.SVUnit.db[unitName]["formatting"].smartlevel and "[smartlevel]" or "";
 					tag = tag .. lvl

 					MOD:ChangeDBVar(tag, "tags", unitName, "name");
@@ -873,14 +873,14 @@ function ns:SetNameConfigGroup(updateFunction, unitName, count)
 						order = 1,
 						name = L["Colored"],
 						type = "toggle",
-						get = function() return SV.db.SVUnit[unitName]["formatting"].name_colored end,
+						get = function() return SV.SVUnit.db[unitName]["formatting"].name_colored end,
 						desc = L["Use various name coloring methods"]
 					},
 					smartlevel = {
 						order = 2,
 						name = L["Unit Level"],
 						type = "toggle",
-						get = function() return SV.db.SVUnit[unitName]["formatting"].smartlevel end,
+						get = function() return SV.SVUnit.db[unitName]["formatting"].smartlevel end,
 						desc = L["Display the units level"]
 					},
 					name_length = {
@@ -889,7 +889,7 @@ function ns:SetNameConfigGroup(updateFunction, unitName, count)
 						desc = L["TEXT_FORMAT_DESC"],
 						type = "range",
 						width = "full",
-						get = function() return SV.db.SVUnit[unitName]["formatting"].name_length end,
+						get = function() return SV.SVUnit.db[unitName]["formatting"].name_length end,
 						min = 1,
 						max = 30,
 						step = 1
@@ -902,7 +902,7 @@ function ns:SetNameConfigGroup(updateFunction, unitName, count)
 end

 local function getAvailablePortraitConfig(unit)
-	local db = SV.db.SVUnit[unit].portrait;
+	local db = SV.SVUnit.db[unit].portrait;
 	if db.overlay then
 		return {["3D"] = L["3D"]}
 	else
@@ -916,7 +916,7 @@ function ns:SetPortraitConfigGroup(updateFunction, unitName, count)
 		type = "group",
 		name = L["Portrait"],
 		get = function(key)
-			return SV.db.SVUnit[unitName]["portrait"][key[#key]]
+			return SV.SVUnit.db[unitName]["portrait"][key[#key]]
 		end,
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], unitName, "portrait")
@@ -946,7 +946,7 @@ function ns:SetPortraitConfigGroup(updateFunction, unitName, count)
 						type = "toggle",
 						name = L["Overlay"],
 						desc = L["Overlay the healthbar"],
-						disabled = function() return SV.db.SVUnit[unitName]["portrait"].style == "2D" end
+						disabled = function() return SV.SVUnit.db[unitName]["portrait"].style == "2D" end
 					},
 					width = {
 						order = 3,
@@ -956,7 +956,7 @@ function ns:SetPortraitConfigGroup(updateFunction, unitName, count)
 						min = 15,
 						max = 150,
 						step = 1,
-						disabled = function() return SV.db.SVUnit[unitName]["portrait"].overlay == true end
+						disabled = function() return SV.SVUnit.db[unitName]["portrait"].overlay == true end
 					}
 				}
 			},
@@ -965,7 +965,7 @@ function ns:SetPortraitConfigGroup(updateFunction, unitName, count)
 				type = "group",
 				guiInline = true,
 				name = L["3D Settings"],
-				disabled = function() return SV.db.SVUnit[unitName]["portrait"].style == "2D" end,
+				disabled = function() return SV.SVUnit.db[unitName]["portrait"].style == "2D" end,
 				args = {
 					rotation = {
 						order = 1,
@@ -992,14 +992,14 @@ function ns:SetPortraitConfigGroup(updateFunction, unitName, count)
 end

 function ns:SetIconConfigGroup(updateFunction, unitName, count)
-	local iconGroup = SV.db.SVUnit[unitName]["icons"]
+	local iconGroup = SV.SVUnit.db[unitName]["icons"]
 	local grouporder = 1
 	local k = {
 		order = 5000,
 		type = "group",
 		name = L["Icons"],
 		get = function(key)
-			return SV.db.SVUnit[unitName]["icons"][key[#key]]
+			return SV.SVUnit.db[unitName]["icons"][key[#key]]
 		end,
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], unitName, "icons")
@@ -1015,7 +1015,7 @@ function ns:SetIconConfigGroup(updateFunction, unitName, count)
 			guiInline = true,
 			name = L["Raid Marker"],
 			get = function(key)
-				return SV.db.SVUnit[unitName]["icons"]["raidicon"][key[#key]]
+				return SV.SVUnit.db[unitName]["icons"]["raidicon"][key[#key]]
 			end,
 			set = function(key, value)
 				MOD:ChangeDBVar(value, key[#key], unitName, "icons", "raidicon")
@@ -1039,7 +1039,7 @@ function ns:SetIconConfigGroup(updateFunction, unitName, count)
 			guiInline = true,
 			name = L["Combat"],
 			get = function(key)
-				return SV.db.SVUnit[unitName]["icons"]["combatIcon"][key[#key]]
+				return SV.SVUnit.db[unitName]["icons"]["combatIcon"][key[#key]]
 			end,
 			set = function(key, value)
 				MOD:ChangeDBVar(value, key[#key], unitName, "icons", "combatIcon")
@@ -1063,7 +1063,7 @@ function ns:SetIconConfigGroup(updateFunction, unitName, count)
 			guiInline = true,
 			name = L["Resting"],
 			get = function(key)
-				return SV.db.SVUnit[unitName]["icons"]["restIcon"][key[#key]]
+				return SV.SVUnit.db[unitName]["icons"]["restIcon"][key[#key]]
 			end,
 			set = function(key, value)
 				MOD:ChangeDBVar(value, key[#key], unitName, "icons", "restIcon")
@@ -1087,7 +1087,7 @@ function ns:SetIconConfigGroup(updateFunction, unitName, count)
 			guiInline = true,
 			name = L["Class"],
 			get = function(key)
-				return SV.db.SVUnit[unitName]["icons"]["classicon"][key[#key]]
+				return SV.SVUnit.db[unitName]["icons"]["classicon"][key[#key]]
 			end,
 			set = function(key, value)
 				MOD:ChangeDBVar(value, key[#key], unitName, "icons", "classicon")
@@ -1111,7 +1111,7 @@ function ns:SetIconConfigGroup(updateFunction, unitName, count)
 			guiInline = true,
 			name = L["Elite / Rare"],
 			get = function(key)
-				return SV.db.SVUnit[unitName]["icons"]["eliteicon"][key[#key]]
+				return SV.SVUnit.db[unitName]["icons"]["eliteicon"][key[#key]]
 			end,
 			set = function(key, value)
 				MOD:ChangeDBVar(value, key[#key], unitName, "icons", "eliteicon")
@@ -1135,7 +1135,7 @@ function ns:SetIconConfigGroup(updateFunction, unitName, count)
 			guiInline = true,
 			name = L["Role"],
 			get = function(key)
-				return SV.db.SVUnit[unitName]["icons"]["roleIcon"][key[#key]]
+				return SV.SVUnit.db[unitName]["icons"]["roleIcon"][key[#key]]
 			end,
 			set = function(key, value)
 				MOD:ChangeDBVar(value, key[#key], unitName, "icons", "roleIcon")
@@ -1159,7 +1159,7 @@ function ns:SetIconConfigGroup(updateFunction, unitName, count)
 			guiInline = true,
 			name = L["Leader / MasterLooter"],
 			get = function(key)
-				return SV.db.SVUnit[unitName]["icons"]["raidRoleIcons"][key[#key]]
+				return SV.SVUnit.db[unitName]["icons"]["raidRoleIcons"][key[#key]]
 			end,
 			set = function(key, value)
 				MOD:ChangeDBVar(value, key[#key], unitName, "icons", "raidRoleIcons")
@@ -1185,7 +1185,7 @@ function ns:SetAurabarConfigGroup(custom, updateFunction, unitName)
 		type = "group",
 		name = L["Aura Bars"],
 		get = function(key)
-			return SV.db.SVUnit[unitName]["aurabar"][key[#key]]
+			return SV.SVUnit.db[unitName]["aurabar"][key[#key]]
 		end,
 		set = function(key, value)
 			MOD:ChangeDBVar(value, key[#key], unitName, "aurabar")
@@ -1312,7 +1312,7 @@ function ns:SetAurabarConfigGroup(custom, updateFunction, unitName)
 			values = function()
 				filterList = {}
 				filterList[""] = NONE;
-				for n in pairs(SV.db.filter)do
+				for n in pairs(SV.db.filter) do
 					filterList[n] = n
 				end
 				return filterList
@@ -1328,15 +1328,15 @@ function ns:SetAurabarConfigGroup(custom, updateFunction, unitName)
 					order = 2,
 					type = "toggle",
 					name = L["Friendly"], desc = L["If the unit is friendly to you."].." "..L["Don't display auras that are not yours."],
-					get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterPlayer.friendly end,
-					set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterPlayer.friendly = m;updateFunction(MOD, unitName)end
+					get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterPlayer.friendly end,
+					set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterPlayer.friendly = m;updateFunction(MOD, unitName)end
 				},
 				enemy = {
 					order = 3,
 					type = "toggle",
 					name = L["Enemy"], desc = L["If the unit is an enemy to you."].." "..L["Don't display auras that are not yours."],
-					get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterPlayer.enemy end,
-					set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterPlayer.enemy = m;updateFunction(MOD, unitName)end
+					get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterPlayer.enemy end,
+					set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterPlayer.enemy = m;updateFunction(MOD, unitName)end
 				}
 			}
 		}
@@ -1349,15 +1349,15 @@ function ns:SetAurabarConfigGroup(custom, updateFunction, unitName)
 					order = 2,
 					type = "toggle",
 					name = L["Friendly"], desc = L["If the unit is friendly to you."].." "..L["Don't display any auras found on the Blocked filter."],
-					get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterBlocked.friendly end,
-					set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterBlocked.friendly = m;updateFunction(MOD, unitName)end
+					get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterBlocked.friendly end,
+					set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterBlocked.friendly = m;updateFunction(MOD, unitName)end
 				},
 				enemy = {
 					order = 3,
 					type = "toggle",
 					name = L["Enemy"], desc = L["If the unit is an enemy to you."].." "..L["Don't display any auras found on the Blocked filter."],
-					get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterBlocked.enemy end,
-					set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterBlocked.enemy = m;updateFunction(MOD, unitName)end
+					get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterBlocked.enemy end,
+					set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterBlocked.enemy = m;updateFunction(MOD, unitName)end
 				}
 			}
 		}
@@ -1370,15 +1370,15 @@ function ns:SetAurabarConfigGroup(custom, updateFunction, unitName)
 					order = 2,
 					type = "toggle",
 					name = L["Friendly"], desc = L["If the unit is friendly to you."].." "..L["If no other filter options are being used then it will block anything not on the Allowed filter, otherwise it will simply add auras on the whitelist in addition to any other filter settings."],
-					get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterAllowed.friendly end,
-					set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterAllowed.friendly = m;updateFunction(MOD, unitName)end
+					get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterAllowed.friendly end,
+					set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterAllowed.friendly = m;updateFunction(MOD, unitName)end
 				},
 				enemy = {
 					order = 3,
 					type = "toggle",
 					name = L["Enemy"], desc = L["If the unit is an enemy to you."].." "..L["If no other filter options are being used then it will block anything not on the Allowed filter, otherwise it will simply add auras on the whitelist in addition to any other filter settings."],
-					get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterAllowed.enemy end,
-					set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterAllowed.enemy = m;updateFunction(MOD, unitName)end
+					get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterAllowed.enemy end,
+					set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterAllowed.enemy = m;updateFunction(MOD, unitName)end
 				}
 			}
 		}
@@ -1391,15 +1391,15 @@ function ns:SetAurabarConfigGroup(custom, updateFunction, unitName)
 					order = 2,
 					type = "toggle",
 					name = L["Friendly"], desc = L["If the unit is friendly to you."].." "..L["Don't display auras that have no duration."],
-					get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterInfinite.friendly end,
-					set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterInfinite.friendly = m;updateFunction(MOD, unitName)end
+					get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterInfinite.friendly end,
+					set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterInfinite.friendly = m;updateFunction(MOD, unitName)end
 				},
 				enemy = {
 					order = 3,
 					type = "toggle",
 					name = L["Enemy"], desc = L["If the unit is an enemy to you."].." "..L["Don't display auras that have no duration."],
-					get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterInfinite.enemy end,
-					set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterInfinite.enemy = m;updateFunction(MOD, unitName)end
+					get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterInfinite.enemy end,
+					set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterInfinite.enemy = m;updateFunction(MOD, unitName)end
 				}
 			}
 		}
@@ -1412,13 +1412,13 @@ function ns:SetAurabarConfigGroup(custom, updateFunction, unitName)
 				order = 2,
 				type = "toggle",
 				name = L["Friendly"], desc = L["If the unit is friendly to you."].." "..L["Don't display auras that cannot be purged or dispelled by your class."],
-				get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterDispellable.friendly end,
-				set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterDispellable.friendly = m;updateFunction(MOD, unitName)end}, enemy = {
+				get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterDispellable.friendly end,
+				set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterDispellable.friendly = m;updateFunction(MOD, unitName)end}, enemy = {
 				order = 3,
 				type = "toggle",
 				name = L["Enemy"], desc = L["If the unit is an enemy to you."].." "..L["Don't display auras that cannot be purged or dispelled by your class."],
-				get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterDispellable.enemy end,
-				set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterDispellable.enemy = m;updateFunction(MOD, unitName)end}
+				get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterDispellable.enemy end,
+				set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterDispellable.enemy = m;updateFunction(MOD, unitName)end}
 			}
 		}
 		k.args.filterGroup.args.filters.args.filterRaid = {
@@ -1430,13 +1430,13 @@ function ns:SetAurabarConfigGroup(custom, updateFunction, unitName)
 				order = 2,
 				type = "toggle",
 				name = L["Friendly"], desc = L["If the unit is friendly to you."].." "..L["Don't display raid buffs such as Blessing of Kings or Mark of the Wild."],
-				get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterRaid.friendly end,
-				set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterRaid.friendly = m;updateFunction(MOD, unitName)end}, enemy = {
+				get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterRaid.friendly end,
+				set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterRaid.friendly = m;updateFunction(MOD, unitName)end}, enemy = {
 				order = 3,
 				type = "toggle",
 				name = L["Enemy"], desc = L["If the unit is an enemy to you."].." "..L["Don't display raid buffs such as Blessing of Kings or Mark of the Wild."],
-				get = function(l)return SV.db.SVUnit[unitName]["aurabar"].filterRaid.enemy end,
-				set = function(l, m)SV.db.SVUnit[unitName]["aurabar"].filterRaid.enemy = m;updateFunction(MOD, unitName)end}
+				get = function(l)return SV.SVUnit.db[unitName]["aurabar"].filterRaid.enemy end,
+				set = function(l, m)SV.SVUnit.db[unitName]["aurabar"].filterRaid.enemy = m;updateFunction(MOD, unitName)end}
 			}
 		}
 		k.args.filterGroup.args.filters.args.useFilter = {
@@ -1447,7 +1447,7 @@ function ns:SetAurabarConfigGroup(custom, updateFunction, unitName)
 			values = function()
 				filterList = {}
 				filterList[""] = NONE;
-				for n in pairs(SV.db.filter)do
+				for n in pairs(SV.db.filter) do
 					filterList[n] = n
 				end
 				return filterList
@@ -1462,7 +1462,7 @@ SV.Options.args.SVUnit = {
 	name = L["UnitFrames"],
 	childGroups = "tree",
 	get = function(key)
-		return SV.db.SVUnit[key[#key]]
+		return SV.SVUnit.db[key[#key]]
 	end,
 	set = function(key, value)
 		MOD:ChangeDBVar(value, key[#key]);
@@ -1474,9 +1474,9 @@ SV.Options.args.SVUnit = {
 			type = "toggle",
 			name = L["Enable"],
 			get = function(l)
-				return SV.db.SVUnit.enable end,
+				return SV.SVUnit.db.enable end,
 			set = function(l, m)
-				SV.db.SVUnit.enable = m;
+				SV.SVUnit.db.enable = m;
 				SV:StaticPopup_Show("RL_CLIENT")
 			end
 		},
@@ -1486,7 +1486,7 @@ SV.Options.args.SVUnit = {
 			name = L["General"],
 			guiInline = true,
 			disabled = function()
-				return not SV.db.SVUnit.enable
+				return not SV.SVUnit.db.enable
 			end,
 			args = {
 				commonGroup = {
@@ -1501,7 +1501,7 @@ SV.Options.args.SVUnit = {
 							desc = L["Disables the blizzard party/raid frames."],
 							type = "toggle",
 							get = function(key)
-								return SV.db.SVUnit.disableBlizzard
+								return SV.SVUnit.db.disableBlizzard
 							end,
 							set = function(key, value)
 								MOD:ChangeDBVar(value, "disableBlizzard");
@@ -1526,14 +1526,8 @@ SV.Options.args.SVUnit = {
 							desc = L["Use handy graphics to focus the current target, or clear the current focus"],
 							type = "toggle"
 						},
-						gpsLowHealth = {
-							order = 5,
-							name = "GPS Proximity",
-							desc = "When using GPS tracking with raid/party frames, only show the tracker for the closest injured player. Useful for healers!",
-							type = "toggle"
-						},
 						OORAlpha = {
-							order = 6,
+							order = 5,
 							name = L["Range Fading"],
 							desc = L["The transparency of units that are out of range."],
 							type = "range",
@@ -1546,7 +1540,7 @@ SV.Options.args.SVUnit = {
 							end
 						},
 						groupOORAlpha = {
-							order = 7,
+							order = 6,
 							name = L["Group Range Fading"],
 							desc = L["The transparency of group units that are out of range."],
 							type = "range",
@@ -1595,7 +1589,7 @@ SV.Options.args.SVUnit = {
 					guiInline = true,
 					name = L["Bars"],
 					get = function(key)
-						return SV.db.SVUnit[key[#key]]
+						return SV.SVUnit.db[key[#key]]
 					end,
 					set = function(key, value)
 						MOD:ChangeDBVar(value, key[#key]);
@@ -1719,7 +1713,7 @@ SV.Options.args.SVUnit = {
 									name = L["Class Health"],
 									desc = L["Color health by classcolor or reaction."],
 									get = function(key)
-										return SV.db.SVUnit[key[#key]]
+										return SV.SVUnit.db[key[#key]]
 									end,
 									set = function(key, value)
 										MOD:ChangeDBVar(value, key[#key]);
@@ -1732,7 +1726,7 @@ SV.Options.args.SVUnit = {
 									name = L["Health By Value"],
 									desc = L["Color health by amount remaining."],
 									get = function(key)
-										return SV.db.SVUnit[key[#key]]
+										return SV.SVUnit.db[key[#key]]
 									end,
 									set = function(key, value)
 										MOD:ChangeDBVar(value, key[#key]);
@@ -1745,7 +1739,7 @@ SV.Options.args.SVUnit = {
 									name = L["Class Backdrop"],
 									desc = L["Color the health backdrop by class or reaction."],
 									get = function(key)
-										return SV.db.SVUnit[key[#key]]
+										return SV.SVUnit.db[key[#key]]
 									end,
 									set = function(key, value)
 										MOD:ChangeDBVar(value, key[#key]);
@@ -1758,7 +1752,7 @@ SV.Options.args.SVUnit = {
 									name = L["Overlay Health Color"],
 									desc = L["Force custom health color when using portrait overlays."],
 									get = function(key)
-										return SV.db.SVUnit[key[#key]]
+										return SV.SVUnit.db[key[#key]]
 									end,
 									set = function(key, value)
 										MOD:ChangeDBVar(value, key[#key]);
@@ -1771,7 +1765,7 @@ SV.Options.args.SVUnit = {
 									name = L["Overlay Animations"],
 									desc = L["Toggle health animations on portrait overlays."],
 									get = function(key)
-										return SV.db.SVUnit[key[#key]]
+										return SV.SVUnit.db[key[#key]]
 									end,
 									set = function(key, value)
 										MOD:ChangeDBVar(value, key[#key]);
@@ -1831,7 +1825,7 @@ SV.Options.args.SVUnit = {
 									name = L["Class Power"],
 									desc = L["Color power by classcolor or reaction."],
 									get = function(key)
-										return SV.db.SVUnit[key[#key]]
+										return SV.SVUnit.db[key[#key]]
 									end,
 									set = function(key, value)
 										MOD:ChangeDBVar(value, key[#key]);
@@ -1917,7 +1911,7 @@ SV.Options.args.SVUnit = {
 									name = L["Class Castbars"],
 									desc = L["Color castbars by the class or reaction type of the unit."],
 									get = function(key)
-										return SV.db.SVUnit[key[#key]]
+										return SV.SVUnit.db[key[#key]]
 									end,
 									set = function(key, value)
 										MOD:ChangeDBVar(value, key[#key]);
@@ -1977,7 +1971,7 @@ SV.Options.args.SVUnit = {
 									desc = L["Color aurabar debuffs by type."],
 									type = "toggle",
 									get = function(key)
-										return SV.db.SVUnit[key[#key]]
+										return SV.SVUnit.db[key[#key]]
 									end,
 									set = function(key, value)
 										MOD:ChangeDBVar(value, key[#key]);
@@ -1990,7 +1984,7 @@ SV.Options.args.SVUnit = {
 									desc = L["Color all buffs that reduce incoming damage."],
 									type = "toggle",
 									get = function(key)
-										return SV.db.SVUnit[key[#key]]
+										return SV.SVUnit.db[key[#key]]
 									end,
 									set = function(key, value)
 										MOD:ChangeDBVar(value, key[#key]);
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/focus.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/focus.lua
index e1f1b38..00fe349 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/focus.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/focus.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 local _, ns = ...
@@ -44,7 +44,7 @@ SV.Options.args.SVUnit.args.focus = {
 	type = "group",
 	order = 9,
 	childGroups = "tab",
-	get = function(l)return SV.db.SVUnit["focus"][l[#l]]end,
+	get = function(l)return SV.SVUnit.db["focus"][l[#l]]end,
 	set = function(l, m)MOD:ChangeDBVar(m, l[#l], "focus");MOD:SetUnitFrame("focus")end,
 	args = {
 		enable = {type = "toggle", order = 1, name = L["Enable"]},
@@ -96,8 +96,8 @@ SV.Options.args.SVUnit.args.focus = {
 									order = 5,
 									name = L["Text Toggle On NPC"],
 									desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."],
-									get = function(l)return SV.db.SVUnit["focus"]["power"].hideonnpc end,
-									set = function(l, m)SV.db.SVUnit["focus"]["power"].hideonnpc = m;MOD:SetUnitFrame("focus")end
+									get = function(l)return SV.SVUnit.db["focus"]["power"].hideonnpc end,
+									set = function(l, m)SV.SVUnit.db["focus"]["power"].hideonnpc = m;MOD:SetUnitFrame("focus")end
 								},
 								threatEnabled = {
 									type = "toggle",
@@ -157,7 +157,7 @@ SV.Options.args.SVUnit.args.focustarget = {
 	type = "group",
 	order = 10,
 	childGroups = "tab",
-	get = function(l)return SV.db.SVUnit["focustarget"][l[#l]]end,
+	get = function(l)return SV.SVUnit.db["focustarget"][l[#l]]end,
 	set = function(l, m)MOD:ChangeDBVar(m, l[#l], "focustarget");MOD:SetUnitFrame("focustarget")end,
 	args = {
 		enable = {type = "toggle", order = 1, name = L["Enable"]},
@@ -186,7 +186,7 @@ SV.Options.args.SVUnit.args.focustarget = {
 									name = "",
 								},
 								rangeCheck = {order = 3, name = L["Range Check"], desc = L["Check if you are in range to cast spells on this specific unit."], type = "toggle"},
-								hideonnpc = {type = "toggle", order = 4, name = L["Text Toggle On NPC"], desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."], get = function(l)return SV.db.SVUnit["focustarget"]["power"].hideonnpc end, set = function(l, m)SV.db.SVUnit["focustarget"]["power"].hideonnpc = m;MOD:SetUnitFrame("focustarget")end},
+								hideonnpc = {type = "toggle", order = 4, name = L["Text Toggle On NPC"], desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."], get = function(l)return SV.SVUnit.db["focustarget"]["power"].hideonnpc end, set = function(l, m)SV.SVUnit.db["focustarget"]["power"].hideonnpc = m;MOD:SetUnitFrame("focustarget")end},
 								threatEnabled = {type = "toggle", order = 5, name = L["Show Threat"]}
 							}
 						},
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/grid.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/grid.lua
index 8f0c089..cd131fc 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/grid.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/grid.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 local _, ns = ...
@@ -57,7 +57,7 @@ SV.Options.args.SVUnit.args.grid = {
 			guiInline = true,
 			name = L["General Settings"],
 			get = function(key)
-				return SV.db.SVUnit.grid[key[#key]]
+				return SV.SVUnit.db.grid[key[#key]]
 			end,
 			set = function(key, value)
 				MOD:ChangeDBVar(value, key[#key] , "grid");
@@ -76,7 +76,7 @@ SV.Options.args.SVUnit.args.grid = {
 					desc = L["Grid frames will show name texts."],
 					type = "toggle",
 					set = function(key, value)
-						if(SV.db.SVUnit.grid.size < 30) then MOD:ChangeDBVar(30, "size", "grid"); end
+						if(SV.SVUnit.db.grid.size < 30) then MOD:ChangeDBVar(30, "size", "grid"); end
 						MOD:ChangeDBVar(value, "shownames", "grid");
 						MOD:RefreshUnitFrames();
 					end
@@ -99,7 +99,7 @@ SV.Options.args.SVUnit.args.grid = {
 			guiInline = true,
 			name = L["Allowed Frames"],
 			get = function(key)
-				return SV.db.SVUnit.grid[key[#key]]
+				return SV.SVUnit.db.grid[key[#key]]
 			end,
 			set = function(key, value)
 				MOD:ChangeDBVar(value, key[#key] , "grid");
@@ -111,56 +111,56 @@ SV.Options.args.SVUnit.args.grid = {
 					order = 1,
 					name = L['Party Grid'],
 					desc = L['If grid-mode is enabled, these units will be changed.'],
-					get = function(key) return SV.db.SVUnit.party.gridAllowed end,
-					set = function(key, value) SV.db.SVUnit.party.gridAllowed = value; MOD:SetGroupFrame("party") end,
+					get = function(key) return SV.SVUnit.db.party.gridAllowed end,
+					set = function(key, value) SV.SVUnit.db.party.gridAllowed = value; MOD:SetGroupFrame("party") end,
 				},
 				partypets = {
 					type = 'toggle',
 					order = 2,
 					name = L['Party Pets Grid'],
 					desc = L['If grid-mode is enabled, these units will be changed.'],
-					get = function(key) return SV.db.SVUnit.party.petsGroup.gridAllowed end,
-					set = function(key, value) SV.db.SVUnit.party.petsGroup.gridAllowed = value; MOD:SetGroupFrame("party") end,
+					get = function(key) return SV.SVUnit.db.party.petsGroup.gridAllowed end,
+					set = function(key, value) SV.SVUnit.db.party.petsGroup.gridAllowed = value; MOD:SetGroupFrame("party") end,
 				},
 				partytargets = {
 					type = 'toggle',
 					order = 3,
 					name = L['Party Targets Grid'],
 					desc = L['If grid-mode is enabled, these units will be changed.'],
-					get = function(key) return SV.db.SVUnit.party.targetsGroup.gridAllowed end,
-					set = function(key, value) SV.db.SVUnit.party.targetsGroup.gridAllowed = value; MOD:SetGroupFrame("party") end,
+					get = function(key) return SV.SVUnit.db.party.targetsGroup.gridAllowed end,
+					set = function(key, value) SV.SVUnit.db.party.targetsGroup.gridAllowed = value; MOD:SetGroupFrame("party") end,
 				},
 				raid10 = {
 					type = 'toggle',
 					order = 4,
 					name = L['Raid 10 Grid'],
 					desc = L['If grid-mode is enabled, these units will be changed.'],
-					get = function(key) return SV.db.SVUnit.raid10.gridAllowed end,
-					set = function(key, value) SV.db.SVUnit.raid10.gridAllowed = value; MOD:SetGroupFrame("raid10") end,
+					get = function(key) return SV.SVUnit.db.raid10.gridAllowed end,
+					set = function(key, value) SV.SVUnit.db.raid10.gridAllowed = value; MOD:SetGroupFrame("raid10") end,
 				},
 				raid25 = {
 					type = 'toggle',
 					order = 5,
 					name = L['Raid 25 Grid'],
 					desc = L['If grid-mode is enabled, these units will be changed.'],
-					get = function(key) return SV.db.SVUnit.raid25.gridAllowed end,
-					set = function(key, value) SV.db.SVUnit.raid25.gridAllowed = value; MOD:SetGroupFrame("raid25") end,
+					get = function(key) return SV.SVUnit.db.raid25.gridAllowed end,
+					set = function(key, value) SV.SVUnit.db.raid25.gridAllowed = value; MOD:SetGroupFrame("raid25") end,
 				},
 				raid40 = {
 					type = 'toggle',
 					order = 6,
 					name = L['Raid 40 Grid'],
 					desc = L['If grid-mode is enabled, these units will be changed.'],
-					get = function(key) return SV.db.SVUnit.raid40.gridAllowed end,
-					set = function(key, value) SV.db.SVUnit.raid40.gridAllowed = value; MOD:SetGroupFrame("raid40") end,
+					get = function(key) return SV.SVUnit.db.raid40.gridAllowed end,
+					set = function(key, value) SV.SVUnit.db.raid40.gridAllowed = value; MOD:SetGroupFrame("raid40") end,
 				},
 				raidpet = {
 					type = 'toggle',
 					order = 4,
 					name = L['Raid Pet Grid'],
 					desc = L['If grid-mode is enabled, these units will be changed.'],
-					get = function(key) return SV.db.SVUnit.raidpet.gridAllowed end,
-					set = function(key, value) SV.db.SVUnit.raidpet.gridAllowed = value; MOD:SetGroupFrame("raidpet") end,
+					get = function(key) return SV.SVUnit.db.raidpet.gridAllowed end,
+					set = function(key, value) SV.SVUnit.db.raidpet.gridAllowed = value; MOD:SetGroupFrame("raidpet") end,
 				},
 			}
 		},
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/other.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/other.lua
index e594739..4682df5 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/other.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/other.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 local _, ns = ...
@@ -44,7 +44,7 @@ SV.Options.args.SVUnit.args.boss = {
 	type = "group",
 	order = 1000,
 	childGroups = "tab",
-	get = function(l)return SV.db.SVUnit["boss"][l[#l]]end,
+	get = function(l)return SV.SVUnit.db["boss"][l[#l]]end,
 	set = function(l, m)MOD:ChangeDBVar(m, l[#l], "boss");MOD:SetEnemyFrames("boss", MAX_BOSS_FRAMES)end,
 	args = {
 		enable = {type = "toggle", order = 1, name = L["Enable"]},
@@ -74,7 +74,7 @@ SV.Options.args.SVUnit.args.boss = {
 									name = "",
 								},
 								rangeCheck = {order = 3, name = L["Range Check"], desc = L["Check if you are in range to cast spells on this specific unit."], type = "toggle"},
-								hideonnpc = {type = "toggle", order = 4, name = L["Text Toggle On NPC"], desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."], get = function(l)return SV.db.SVUnit["boss"]["power"].hideonnpc end, set = function(l, m)SV.db.SVUnit["boss"]["power"].hideonnpc = m;MOD:SetEnemyFrames("boss")end},
+								hideonnpc = {type = "toggle", order = 4, name = L["Text Toggle On NPC"], desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."], get = function(l)return SV.SVUnit.db["boss"]["power"].hideonnpc end, set = function(l, m)SV.SVUnit.db["boss"]["power"].hideonnpc = m;MOD:SetEnemyFrames("boss")end},
 								threatEnabled = {type = "toggle", order = 5, name = L["Show Threat"]}
 							}
 						},
@@ -113,7 +113,7 @@ SV.Options.args.SVUnit.args.arena = {
 	type = "group",
 	order = 1100,
 	childGroups = "tab",
-	get = function(l)return SV.db.SVUnit["arena"][l[#l]]end,
+	get = function(l)return SV.SVUnit.db["arena"][l[#l]]end,
 	set = function(l, m)MOD:ChangeDBVar(m, l[#l], "arena");MOD:SetEnemyFrames("arena", 5)end,
 	args = {
 		enable = {type = "toggle", order = 1, name = L["Enable"]},
@@ -144,7 +144,7 @@ SV.Options.args.SVUnit.args.arena = {
 								},
 								predict = {order = 3, name = L["Heal Prediction"], desc = L["Show a incomming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."], type = "toggle"},
 								rangeCheck = {order = 4, name = L["Range Check"], desc = L["Check if you are in range to cast spells on this specific unit."], type = "toggle"},
-								hideonnpc = {type = "toggle", order = 5, name = L["Text Toggle On NPC"], desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."], get = function(l)return SV.db.SVUnit["arena"]["power"].hideonnpc end, set = function(l, m)SV.db.SVUnit["arena"]["power"].hideonnpc = m;MOD:SetEnemyFrames("arena")end},
+								hideonnpc = {type = "toggle", order = 5, name = L["Text Toggle On NPC"], desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."], get = function(l)return SV.SVUnit.db["arena"]["power"].hideonnpc end, set = function(l, m)SV.SVUnit.db["arena"]["power"].hideonnpc = m;MOD:SetEnemyFrames("arena")end},
 								threatEnabled = {type = "toggle", order = 6, name = L["Show Threat"]}
 							}
 						},
@@ -168,7 +168,7 @@ SV.Options.args.SVUnit.args.arena = {
 									type = "toggle",
 									order = 1,
 									name = L["Enable"],
-									get = function(l)return SV.db.SVUnit.arena.pvp.enable end,
+									get = function(l)return SV.SVUnit.db.arena.pvp.enable end,
 									set = function(l, m)MOD:ChangeDBVar(m, "enable", "arena", "pvp");MOD:SetEnemyFrames("arena", 5)end,
 								},
 								trinketGroup = {
@@ -176,9 +176,9 @@ SV.Options.args.SVUnit.args.arena = {
 									guiInline = true,
 									type = "group",
 									name = L["Trinkets"],
-									get = function(l)return SV.db.SVUnit.arena.pvp[l[#l]]end,
+									get = function(l)return SV.SVUnit.db.arena.pvp[l[#l]]end,
 									set = function(l, m)MOD:ChangeDBVar(m, l[#l], "arena", "pvp");MOD:SetEnemyFrames("arena", 5)end,
-									disabled = function() return not SV.db.SVUnit.arena.pvp.enable end,
+									disabled = function() return not SV.SVUnit.db.arena.pvp.enable end,
 									args = {
 										trinketPosition = {
 											type = "select",
@@ -220,9 +220,9 @@ SV.Options.args.SVUnit.args.arena = {
 									guiInline = true,
 									type = "group",
 									name = L["Enemy Specs"],
-									get = function(l)return SV.db.SVUnit.arena.pvp[l[#l]]end,
+									get = function(l)return SV.SVUnit.db.arena.pvp[l[#l]]end,
 									set = function(l, m)MOD:ChangeDBVar(m, l[#l], "arena", "pvp");MOD:SetEnemyFrames("arena", 5)end,
-									disabled = function() return not SV.db.SVUnit.arena.pvp.enable end,
+									disabled = function() return not SV.SVUnit.db.arena.pvp.enable end,
 									args = {
 										specPosition = {
 											type = "select",
@@ -284,7 +284,7 @@ SV.Options.args.SVUnit.args.tank = {
 	type = "group",
 	order = 1200,
 	childGroups = "tab",
-	get = function(l)return SV.db.SVUnit["tank"][l[#l]]end,
+	get = function(l)return SV.SVUnit.db["tank"][l[#l]]end,
 	set = function(l, m)MOD:ChangeDBVar(m, l[#l], "tank");MOD:SetGroupFrame("tank")end,
 	args = {
 		enable = {type = "toggle", order = 1, name = L["Enable"]},
@@ -309,7 +309,7 @@ SV.Options.args.SVUnit.args.tank = {
 					type = "group",
 					name = L["Tank Target"],
 					guiInline = true,
-					get = function(l)return SV.db.SVUnit["tank"]["targetsGroup"][l[#l]]end,
+					get = function(l)return SV.SVUnit.db["tank"]["targetsGroup"][l[#l]]end,
 					set = function(l, m)MOD:ChangeDBVar(m, l[#l], "tank", "targetsGroup");MOD:SetGroupFrame("tank")end,
 					args = {
 						enable = {type = "toggle", name = L["Enable"], order = 1},
@@ -334,7 +334,7 @@ SV.Options.args.SVUnit.args.assist = {
 	type = "group",
 	order = 1300,
 	childGroups = "tab",
-	get = function(l)return SV.db.SVUnit["assist"][l[#l]]end,
+	get = function(l)return SV.SVUnit.db["assist"][l[#l]]end,
 	set = function(l, m)MOD:ChangeDBVar(m, l[#l], "assist");MOD:SetGroupFrame("assist")end,
 	args = {
 		enable = {type = "toggle", order = 1, name = L["Enable"]},
@@ -359,7 +359,7 @@ SV.Options.args.SVUnit.args.assist = {
 					type = "group",
 					name = L["Assist Target"],
 					guiInline = true,
-					get = function(l)return SV.db.SVUnit["assist"]["targetsGroup"][l[#l]]end,
+					get = function(l)return SV.SVUnit.db["assist"]["targetsGroup"][l[#l]]end,
 					set = function(l, m)MOD:ChangeDBVar(m, l[#l], "assist", "targetsGroup");MOD:SetGroupFrame("assist")end,
 					args = {
 						enable = {type = "toggle", name = L["Enable"], order = 1},
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/party.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/party.lua
index 6f2449d..e79bac5 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/party.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/party.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 local _, ns = ...
@@ -41,7 +41,7 @@ SV.Options.args.SVUnit.args.party = {
 	order = 11,
 	childGroups = "tab",
 	get = function(l)return
-	SV.db.SVUnit['party'][l[#l]]end,
+	SV.SVUnit.db['party'][l[#l]]end,
 	set = function(l, m)MOD:ChangeDBVar(m, l[#l], "party");MOD:SetGroupFrame('party')end,
 	args = {
 		enable = {
@@ -79,8 +79,8 @@ SV.Options.args.SVUnit.args.party = {
 							order = 2,
 							name = L['Text Toggle On NPC'],
 							desc = L['Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point.'],
-							get = function(l)return SV.db.SVUnit['party']['power'].hideonnpc end,
-							set = function(l, m)SV.db.SVUnit['party']['power'].hideonnpc = m;MOD:SetGroupFrame('party')end,
+							get = function(l)return SV.SVUnit.db['party']['power'].hideonnpc end,
+							set = function(l, m)SV.SVUnit.db['party']['power'].hideonnpc = m;MOD:SetGroupFrame('party')end,
 						},
 						rangeCheck = {
 							order = 3,
@@ -284,14 +284,14 @@ SV.Options.args.SVUnit.args.party = {
 									order = 5,
 									name = L['Invert Grouping Order'],
 									desc = L['Enabling this inverts the sorting order.'],
-									disabled = function()return not SV.db.SVUnit['party'].customSorting end,
+									disabled = function()return not SV.SVUnit.db['party'].customSorting end,
 									type = 'toggle',
 								},
 								startFromCenter = {
 									order = 6,
 									name = L['Start Near Center'],
 									desc = L['The initial group will start near the center and grow out.'],
-									disabled = function()return not SV.db.SVUnit['party'].customSorting end,
+									disabled = function()return not SV.SVUnit.db['party'].customSorting end,
 									type = 'toggle',
 								},
 							},
@@ -304,7 +304,7 @@ SV.Options.args.SVUnit.args.party = {
 					type = 'group',
 					name = L['Aura Watch'],
 					get = function(l)return
-					SV.db.SVUnit['party']['auraWatch'][l[#l]]end,
+					SV.SVUnit.db['party']['auraWatch'][l[#l]]end,
 					set = function(l, m)MOD:ChangeDBVar(m, l[#l], "party", "auraWatch");MOD:SetGroupFrame('party')end,
 					args = {
 						enable = {
@@ -341,7 +341,7 @@ SV.Options.args.SVUnit.args.party = {
 					order = 800,
 					type = 'group',
 					name = L['Party Pets'],
-					get = function(l)return SV.db.SVUnit['party']['petsGroup'][l[#l]]end,
+					get = function(l)return SV.SVUnit.db['party']['petsGroup'][l[#l]]end,
 					set = function(l, m)MOD:ChangeDBVar(m, l[#l], "party", "petsGroup");MOD:SetGroupFrame('party')end,
 					args = {
 						enable = {
@@ -412,7 +412,7 @@ SV.Options.args.SVUnit.args.party = {
 					type = 'group',
 					name = L['Party Targets'],
 					get = function(l)return
-					SV.db.SVUnit['party']['targetsGroup'][l[#l]]end,
+					SV.SVUnit.db['party']['targetsGroup'][l[#l]]end,
 					set = function(l, m)MOD:ChangeDBVar(m, l[#l], "party", "targetsGroup");MOD:SetGroupFrame('party')end,
 					args = {
 						enable = {
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/pet.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/pet.lua
index e87bd4e..8714c0d 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/pet.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/pet.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 local _, ns = ...
@@ -44,7 +44,7 @@ SV.Options.args.SVUnit.args.pet = {
 	type = "group",
 	order = 4,
 	childGroups = "tab",
-	get = function(l)return SV.db.SVUnit["pet"][l[#l]]end,
+	get = function(l)return SV.SVUnit.db["pet"][l[#l]]end,
 	set = function(l, m)MOD:ChangeDBVar(m, l[#l], "pet");MOD:SetUnitFrame("pet")end,
 	args = {
 		enable = {type = "toggle", order = 1, name = L["Enable"]},
@@ -89,8 +89,8 @@ SV.Options.args.SVUnit.args.pet = {
 									order = 4,
 									name = L["Text Toggle On NPC"],
 									desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."],
-									get = function(l)return SV.db.SVUnit["pet"]["power"].hideonnpc end,
-									set = function(l, m)SV.db.SVUnit["pet"]["power"].hideonnpc = m;MOD:SetUnitFrame("pet")end
+									get = function(l)return SV.SVUnit.db["pet"]["power"].hideonnpc end,
+									set = function(l, m)SV.SVUnit.db["pet"]["power"].hideonnpc = m;MOD:SetUnitFrame("pet")end
 								},
 								threatEnabled = {
 									type = "toggle",
@@ -114,7 +114,7 @@ SV.Options.args.SVUnit.args.pet = {
 							type = "group",
 							guiInline = true,
 							name = L["Aura Watch"],
-							get = function(l)return SV.db.SVUnit["pet"]["auraWatch"][l[#l]]end,
+							get = function(l)return SV.SVUnit.db["pet"]["auraWatch"][l[#l]]end,
 							set = function(l, m)MOD:ChangeDBVar(m, l[#l], "pet", "auraWatch");MOD:SetUnitFrame("pet")end,
 							args = {
 								enable = {
@@ -155,7 +155,7 @@ SV.Options.args.SVUnit.args.pettarget = {
 	name = L["PetTarget Frame"],
 	type = "group", order = 5,
 	childGroups = "tab",
-	get = function(l)return SV.db.SVUnit["pettarget"][l[#l]]end,
+	get = function(l)return SV.SVUnit.db["pettarget"][l[#l]]end,
 	set = function(l, m)MOD:ChangeDBVar(m, l[#l], "pettarget");MOD:SetUnitFrame("pettarget")end,
 	args = {
 		enable = {type = "toggle", order = 1, name = L["Enable"]},
@@ -185,8 +185,8 @@ SV.Options.args.SVUnit.args.pettarget = {
 							order = 7,
 							name = L["Text Toggle On NPC"],
 							desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."],
-							get = function(l)return SV.db.SVUnit["pettarget"]["power"].hideonnpc end,
-							set = function(l, m)SV.db.SVUnit["pettarget"]["power"].hideonnpc = m;MOD:SetUnitFrame("pettarget")end
+							get = function(l)return SV.SVUnit.db["pettarget"]["power"].hideonnpc end,
+							set = function(l, m)SV.SVUnit.db["pettarget"]["power"].hideonnpc = m;MOD:SetUnitFrame("pettarget")end
 						},
 						threatEnabled = {type = "toggle", order = 13, name = L["Show Threat"]}
 					}
@@ -219,8 +219,8 @@ SV.Options.args.SVUnit.args.pettarget = {
 									order = 4,
 									name = L["Text Toggle On NPC"],
 									desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."],
-									get = function(l)return SV.db.SVUnit["pettarget"]["power"].hideonnpc end,
-									set = function(l, m)SV.db.SVUnit["pettarget"]["power"].hideonnpc = m;MOD:SetUnitFrame("pettarget")end
+									get = function(l)return SV.SVUnit.db["pettarget"]["power"].hideonnpc end,
+									set = function(l, m)SV.SVUnit.db["pettarget"]["power"].hideonnpc = m;MOD:SetUnitFrame("pettarget")end
 								},
 								threatEnabled = {
 									type = "toggle",
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/player.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/player.lua
index 0148ce6..432894c 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/player.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/player.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 local _, ns = ...
@@ -44,7 +44,7 @@ SV.Options.args.SVUnit.args.player={
 	type = 'group',
 	order = 3,
 	childGroups = "tab",
-	get = function(l)return SV.db.SVUnit['player'][l[#l]]end,
+	get = function(l)return SV.SVUnit.db['player'][l[#l]]end,
 	set = function(l,m)MOD:ChangeDBVar(m, l[#l], "player");MOD:SetUnitFrame('player')end,
 	args = {
 		enable = {
@@ -119,8 +119,8 @@ SV.Options.args.SVUnit.args.player={
 									order = 5,
 									name = L["Text Toggle On NPC"],
 									desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."],
-									get = function(l)return SV.db.SVUnit["player"]["power"].hideonnpc end,
-									set = function(l, m)SV.db.SVUnit["player"]["power"].hideonnpc = m;MOD:SetUnitFrame("player")end
+									get = function(l)return SV.SVUnit.db["player"]["power"].hideonnpc end,
+									set = function(l, m)SV.SVUnit.db["player"]["power"].hideonnpc = m;MOD:SetUnitFrame("player")end
 								},
 								threatEnabled = {
 									type = "toggle",
@@ -158,8 +158,8 @@ SV.Options.args.SVUnit.args.player={
 									max = 500,
 									step = 1,
 									set = function(l, m)
-										if SV.db.SVUnit["player"].castbar.width == SV.db.SVUnit["player"][l[#l]] then
-											SV.db.SVUnit["player"].castbar.width = m
+										if SV.SVUnit.db["player"].castbar.width == SV.SVUnit.db["player"][l[#l]] then
+											SV.SVUnit.db["player"].castbar.width = m
 										end
 										MOD:ChangeDBVar(m, l[#l], "player");
 										MOD:SetUnitFrame("player")
@@ -181,7 +181,7 @@ SV.Options.args.SVUnit.args.player={
 							type = "group",
 							guiInline = true,
 							name = PVP,
-							get = function(l)return SV.db.SVUnit["player"]["pvp"][l[#l]]end,
+							get = function(l)return SV.SVUnit.db["player"]["pvp"][l[#l]]end,
 							set = function(l, m)MOD:ChangeDBVar(m, l[#l], "player", "pvp");MOD:SetUnitFrame("player")end,
 							args = {
 								position = {
@@ -225,7 +225,7 @@ SV.Options.args.SVUnit.args.player={
 					order = 1000,
 					type = "group",
 					name = L["Classbar"],
-					get = function(l)return SV.db.SVUnit["player"]["classbar"][l[#l]]end,
+					get = function(l)return SV.SVUnit.db["player"]["classbar"][l[#l]]end,
 					set = function(l, m)MOD:ChangeDBVar(m, l[#l], "player", "classbar");MOD:SetUnitFrame("player")end,
 					args = {
 						enable = {
@@ -253,7 +253,7 @@ SV.Options.args.SVUnit.args.player={
 									type = "toggle",
 									order = 3,
 									name = L["Stagger Bar"],
-									get = function(l)return SV.db.SVUnit["player"]["stagger"].enable end,
+									get = function(l)return SV.SVUnit.db["player"]["stagger"].enable end,
 									set = function(l, m)MOD:ChangeDBVar(m, "enable", "player", "stagger");MOD:SetUnitFrame("player")end,
 									disabled = SV.class ~= "MONK",
 								},
@@ -263,7 +263,7 @@ SV.Options.args.SVUnit.args.player={
 									name = L["Druid Mana"],
 									desc = L["Display druid mana bar when in cat or bear form and when mana is not 100%."],
 									get = function(key)
-										return SV.db.SVUnit["player"]["power"].druidMana
+										return SV.SVUnit.db["player"]["power"].druidMana
 									end,
 									set = function(key, value)
 										MOD:ChangeDBVar(value, "druidMana", "player", "power");
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua
index 78b1b9f..541aa9f 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/raid.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 local _, ns = ...
@@ -43,7 +43,7 @@ for w=10,40,15 do
 		type = "group",
 		order = subOrder,
 		childGroups = "tab",
-		get = function(l) return SV.db.SVUnit["raid" .. w][l[#l]] end,
+		get = function(l) return SV.SVUnit.db["raid" .. w][l[#l]] end,
 		set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame("raid" .. w)end,
 		args = {
 			enable =
@@ -81,8 +81,8 @@ for w=10,40,15 do
 								order = 1,
 								name = L["Text Toggle On NPC"],
 								desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."],
-								get = function(l)return SV.db.SVUnit["raid" .. w]["power"].hideonnpc end,
-								set = function(l, m)SV.db.SVUnit["raid" .. w]["power"].hideonnpc = m;MOD:SetGroupFrame("raid" .. w)end,
+								get = function(l)return SV.SVUnit.db["raid" .. w]["power"].hideonnpc end,
+								set = function(l, m)SV.SVUnit.db["raid" .. w]["power"].hideonnpc = m;MOD:SetGroupFrame("raid" .. w)end,
 							},
 							rangeCheck = {
 								order = 2,
@@ -309,7 +309,7 @@ for w=10,40,15 do
 										order = 5,
 										name = L["Invert Grouping Order"],
 										desc = L["Enabling this inverts the grouping order when the raid is not full, this will reverse the direction it starts from."],
-										disabled = function()return not SV.db.SVUnit["raid" .. w].customSorting end,
+										disabled = function()return not SV.SVUnit.db["raid" .. w].customSorting end,
 										type = "toggle",
 									},
 									startFromCenter =
@@ -317,7 +317,7 @@ for w=10,40,15 do
 										order = 6,
 										name = L["Start Near Center"],
 										desc = L["The initial group will start near the center and grow out."],
-										disabled = function()return not SV.db.SVUnit["raid" .. w].customSorting end,
+										disabled = function()return not SV.SVUnit.db["raid" .. w].customSorting end,
 										type = "toggle",
 									},
 								},
@@ -339,7 +339,7 @@ for w=10,40,15 do
 								type = "toggle",
 								name = L["Enable"],
 								order = 1,
-								get = function(l)return SV.db.SVUnit["raid" .. w].auraWatch.enable end,
+								get = function(l)return SV.SVUnit.db["raid" .. w].auraWatch.enable end,
 								set = function(l, m)MOD:ChangeDBVar(m, "enable", "raid" .. w, "auraWatch");MOD:SetGroupFrame("raid" .. w)end,
 							},
 							size = {
@@ -350,7 +350,7 @@ for w=10,40,15 do
 								min = 4,
 								max = 15,
 								step = 1,
-								get = function(l)return SV.db.SVUnit["raid" .. w].auraWatch.size end,
+								get = function(l)return SV.SVUnit.db["raid" .. w].auraWatch.size end,
 								set = function(l, m)MOD:ChangeDBVar(m, "size", "raid" .. w, "auraWatch");MOD:SetGroupFrame("raid" .. w)end,
 							},
 							configureButton = {
@@ -367,7 +367,7 @@ for w=10,40,15 do
 						type = "group",
 						name = L["RaidDebuff Indicator"],
 						get = function(l)return
-						SV.db.SVUnit["raid" .. w]["rdebuffs"][l[#l]]end,
+						SV.SVUnit.db["raid" .. w]["rdebuffs"][l[#l]]end,
 						set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w, "rdebuffs");MOD:SetGroupFrame("raid" .. w)end,
 						args = {
 							enable = {
@@ -429,7 +429,7 @@ SV.Options.args.SVUnit.args.raidpet ={
 	name = L['Raid Pet Frames'],
 	childGroups = "tab",
 	get = function(l)return
-	SV.db.SVUnit['raidpet'][l[#l]]end,
+	SV.SVUnit.db['raidpet'][l[#l]]end,
 	set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet");MOD:SetGroupFrame('raidpet')end,
 	args ={
 		enable ={
@@ -634,14 +634,14 @@ SV.Options.args.SVUnit.args.raidpet ={
 									order = 5,
 									name = L['Invert Grouping Order'],
 									desc = L['Enabling this inverts the grouping order when the raid is not full, this will reverse the direction it starts from.'],
-									disabled = function()return not SV.db.SVUnit['raidpet'].customSorting end,
+									disabled = function()return not SV.SVUnit.db['raidpet'].customSorting end,
 									type = 'toggle',
 								},
 								startFromCenter ={
 									order = 6,
 									name = L['Start Near Center'],
 									desc = L['The initial group will start near the center and grow out.'],
-									disabled = function()return not SV.db.SVUnit['raidpet'].customSorting end,
+									disabled = function()return not SV.SVUnit.db['raidpet'].customSorting end,
 									type = 'toggle',
 								},
 							},
@@ -662,7 +662,7 @@ SV.Options.args.SVUnit.args.raidpet ={
 							type = "toggle",
 							name = L["Enable"],
 							order = 1,
-							get = function(l)return SV.db.SVUnit["raid" .. w].auraWatch.enable end,
+							get = function(l)return SV.SVUnit.db["raid" .. w].auraWatch.enable end,
 							set = function(l, m)MOD:ChangeDBVar(m, "enable", "raid" .. w, "auraWatch");MOD:SetGroupFrame("raid" .. w)end,
 						},
 						size = {
@@ -673,7 +673,7 @@ SV.Options.args.SVUnit.args.raidpet ={
 							min = 4,
 							max = 15,
 							step = 1,
-							get = function(l)return SV.db.SVUnit["raid" .. w].auraWatch.size end,
+							get = function(l)return SV.SVUnit.db["raid" .. w].auraWatch.size end,
 							set = function(l, m)MOD:ChangeDBVar(m, "size", "raid" .. w, "auraWatch");MOD:SetGroupFrame("raid" .. w)end,
 						},
 						configureButton ={
@@ -689,7 +689,7 @@ SV.Options.args.SVUnit.args.raidpet ={
 					type = 'group',
 					name = L['RaidDebuff Indicator'],
 					get = function(l)return
-					SV.db.SVUnit['raidpet']['rdebuffs'][l[#l]]end,
+					SV.SVUnit.db['raidpet']['rdebuffs'][l[#l]]end,
 					set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet", "rdebuffs");MOD:SetGroupFrame('raidpet')end,
 					args ={
 						enable ={
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/target.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/target.lua
index 69604fe..829b6b4 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/modules/units/target.lua
+++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/units/target.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = SV.SVUnit
 if(not MOD) then return end
 local _, ns = ...
@@ -44,7 +44,7 @@ SV.Options.args.SVUnit.args.target={
 	type = 'group',
 	order = 6,
 	childGroups = "tab",
-	get=function(l)return SV.db.SVUnit['target'][l[#l]]end,
+	get=function(l)return SV.SVUnit.db['target'][l[#l]]end,
 	set=function(l,m)MOD:ChangeDBVar(m, l[#l], "target");MOD:SetUnitFrame('target')end,
 	args={
 		enable={type='toggle',order=1,name=L['Enable']},
@@ -100,8 +100,8 @@ SV.Options.args.SVUnit.args.target={
 									order = 5,
 									name = L["Text Toggle On NPC"],
 									desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."],
-									get = function(l)return SV.db.SVUnit["target"]["power"].hideonnpc end,
-									set = function(l, m)SV.db.SVUnit["target"]["power"].hideonnpc = m;MOD:SetUnitFrame("target")end
+									get = function(l)return SV.SVUnit.db["target"]["power"].hideonnpc end,
+									set = function(l, m)SV.SVUnit.db["target"]["power"].hideonnpc = m;MOD:SetUnitFrame("target")end
 								},
 								threatEnabled = {
 									type = "toggle",
@@ -133,8 +133,8 @@ SV.Options.args.SVUnit.args.target={
 									max = 500,
 									step = 1,
 									set = function(l, m)
-										if SV.db.SVUnit["target"].castbar.width == SV.db.SVUnit["target"][l[#l]] then
-											SV.db.SVUnit["target"].castbar.width = m
+										if SV.SVUnit.db["target"].castbar.width == SV.SVUnit.db["target"][l[#l]] then
+											SV.SVUnit.db["target"].castbar.width = m
 										end
 										MOD:ChangeDBVar(m, l[#l], "target");
 										MOD:SetUnitFrame("target")
@@ -157,7 +157,7 @@ SV.Options.args.SVUnit.args.target={
 					order = 800,
 					type = "group",
 					name = L["Combobar"],
-					get = function(l)return SV.db.SVUnit["target"]["combobar"][l[#l]]end,
+					get = function(l)return SV.SVUnit.db["target"]["combobar"][l[#l]]end,
 					set = function(l, m)MOD:ChangeDBVar(m, l[#l], "target", "combobar");MOD:SetUnitFrame("target")end,
 					args = {
 						enable = {
@@ -209,7 +209,7 @@ SV.Options.args.SVUnit.args.targettarget={
 	type='group',
 	order=7,
 	childGroups="tab",
-	get=function(l)return SV.db.SVUnit['targettarget'][l[#l]]end,
+	get=function(l)return SV.SVUnit.db['targettarget'][l[#l]]end,
 	set=function(l,m)MOD:ChangeDBVar(m, l[#l], "targettarget");MOD:SetUnitFrame('targettarget')end,
 	args={
 		enable={type='toggle',order=1,name=L['Enable']},
@@ -253,8 +253,8 @@ SV.Options.args.SVUnit.args.targettarget={
 									order = 4,
 									name = L["Text Toggle On NPC"],
 									desc = L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."],
-									get = function(l)return SV.db.SVUnit["target"]["power"].hideonnpc end,
-									set = function(l, m)SV.db.SVUnit["target"]["power"].hideonnpc = m;MOD:SetUnitFrame("target")end
+									get = function(l)return SV.SVUnit.db["target"]["power"].hideonnpc end,
+									set = function(l, m)SV.SVUnit.db["target"]["power"].hideonnpc = m;MOD:SetUnitFrame("target")end
 								},
 								threatEnabled = {
 									type = "toggle",
diff --git a/Interface/AddOns/SVUI_DebugOMatic/Bindings.xml b/Interface/AddOns/SVUI_DebugOMatic/Bindings.xml
new file mode 100644
index 0000000..0aece78
--- /dev/null
+++ b/Interface/AddOns/SVUI_DebugOMatic/Bindings.xml
@@ -0,0 +1,5 @@
+<Bindings>
+  <Binding name="Frame Debugger" description="Frame Stack Analyzer" header="SVUIDEBUG" runOnUp="false">
+    DebugThisFrame()
+  </Binding>
+</Bindings>
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_DebugOMatic/SVUI_DebugOMatic.toc b/Interface/AddOns/SVUI_DebugOMatic/SVUI_DebugOMatic.toc
new file mode 100644
index 0000000..47da00f
--- /dev/null
+++ b/Interface/AddOns/SVUI_DebugOMatic/SVUI_DebugOMatic.toc
@@ -0,0 +1,9 @@
+## Interface: 50400
+## Author: Munglunch, Azilroka, Sortokk
+## Version: 1.6
+## Title: |cffFF9900SVUI |r|cffFFEF00Debug O Matic|r
+## Notes: Supervillain UI Debugging.
+## RequiredDeps: SVUI
+## OptionalDeps: Blizzard_DebugTools
+
+SVUI_DebugOMatic.xml
diff --git a/Interface/AddOns/SVUI_DebugOMatic/SVUI_DebugOMatic.xml b/Interface/AddOns/SVUI_DebugOMatic/SVUI_DebugOMatic.xml
new file mode 100644
index 0000000..a3f97ba
--- /dev/null
+++ b/Interface/AddOns/SVUI_DebugOMatic/SVUI_DebugOMatic.xml
@@ -0,0 +1,116 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/">
+    <Script file='debug.lua'/>
+
+	<Frame name="SVUI_ScriptError" movable="true" hidden="true" frameStrata="DIALOG">
+        <Size x="384" y="260"/>
+        <Anchors>
+            <Anchor point="TOPLEFT"/>
+        </Anchors>
+        <Layers>
+            <Layer level="BACKGROUND">
+                <Texture name="$parentBG" setAllPoints="true"/>
+            </Layer>
+            <Layer level="OVERLAY">
+                <Texture name="$parentTitleBG">
+                    <Anchors>
+                        <Anchor point="TOPLEFT">
+                            <Offset x="8" y="-8"/>
+                        </Anchor>
+                        <Anchor point="BOTTOMRIGHT" relativePoint="TOPRIGHT">
+                            <Offset x="-32" y="-24"/>
+                        </Anchor>
+                    </Anchors>
+                </Texture>
+                <Texture name="$parentDialogBG">
+                    <Anchors>
+                        <Anchor point="TOPLEFT">
+                            <Offset x="8" y="-32"/>
+                        </Anchor>
+                        <Anchor point="BOTTOMRIGHT">
+                            <Offset x="-32" y="32"/>
+                        </Anchor>
+                    </Anchors>
+                </Texture>
+            </Layer>
+            <Layer level="ARTWORK">
+                <FontString parentKey="Title" inherits="GameFontNormal">
+                    <Anchors>
+                        <Anchor point="TOPLEFT">
+                            <Offset x="8" y="-8"/>
+                        </Anchor>
+                        <Anchor point="TOPRIGHT">
+                            <Offset x="-32" y="-24"/>
+                        </Anchor>
+                    </Anchors>
+                </FontString>
+                <FontString parentKey="sourceLabel" font="GameFontNormalCenter">
+                    <Size x="140" y="16"/>
+                    <Anchors>
+                        <Anchor point="BOTTOMLEFT">
+                            <Offset x="104" y="8"/>
+                        </Anchor>
+                    </Anchors>
+                </FontString>
+            </Layer>
+        </Layers>
+        <Frames>
+            <ScrollFrame name="$parentDialog" inherits="MinimalScrollFrameTemplate">
+                <Size x="343" y="194"/>
+                <Anchors>
+                    <Anchor point="TOPLEFT">
+                        <Offset x="12" y="-30"/>
+                    </Anchor>
+                </Anchors>
+                <ScrollChild>
+                    <EditBox parentKey="Input" multiLine="true" letters="4000" autoFocus="false">
+                        <Size x="343" y="194"/>
+                        <Scripts>
+                            <OnCursorChanged function="ScrollingEdit_OnCursorChanged"/>
+                            <OnUpdate>
+                                ScrollingEdit_OnUpdate(self, elapsed, self:GetParent());
+                            </OnUpdate>
+                            <OnEditFocusGained>
+                                self:HighlightText(0);
+                            </OnEditFocusGained>
+                            <OnEscapePressed function="EditBox_ClearFocus"/>
+                        </Scripts>
+                        <FontString inherits="GameFontHighlightSmall"/>
+                    </EditBox>
+                </ScrollChild>
+            </ScrollFrame>
+            <Button parentKey="Clear" inherits="UIPanelButtonTemplate" text="RESET">
+                <Size x="96" y="24"/>
+                <Anchors>
+                    <Anchor point="BOTTOMLEFT">
+                        <Offset x="8" y="4"/>
+                    </Anchor>
+                </Anchors>
+                <Scripts>
+                    <OnClick>
+						local frame = _G["SVUI_ScriptErrorDialog"];
+						frame.Input:SetText("");
+                    </OnClick>
+                </Scripts>
+            </Button>
+            <Button parentKey="Close" inherits="UIPanelCloseButton">
+                <Anchors>
+                    <Anchor point="TOPRIGHT">
+                        <Offset x="-2" y="-2"/>
+                    </Anchor>
+                </Anchors>
+            </Button>
+        </Frames>
+        <Scripts>
+            <OnLoad function="SVUI_ScriptError_OnLoad"/>
+            <OnShow function="SVUI_ScriptError_OnShow"/>
+            <OnDragStart>
+                _G["SVUI_ScriptError"].moving = true;
+                _G["SVUI_ScriptError"]:StartMoving();
+            </OnDragStart>
+            <OnDragStop>
+                _G["SVUI_ScriptError"].moving = nil;
+                _G["SVUI_ScriptError"]:StopMovingOrSizing();
+            </OnDragStop>
+        </Scripts>
+    </Frame>
+</Ui>
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_DebugOMatic/debug.lua b/Interface/AddOns/SVUI_DebugOMatic/debug.lua
new file mode 100644
index 0000000..7ae8839
--- /dev/null
+++ b/Interface/AddOns/SVUI_DebugOMatic/debug.lua
@@ -0,0 +1,297 @@
+--[[
+##############################################################################
+_____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_       #
+ ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__      #
+  __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____     #
+   ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____    #
+    ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____   #
+     _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____  #
+      __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ #
+       _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_#
+        ___\///////////___________\///___________\/////////_____\///////////_#
+##############################################################################
+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 select    = _G.select;
+local pairs     = _G.pairs;
+local type      = _G.type;
+local tostring  = _G.tostring;
+local tonumber  = _G.tonumber;
+local tinsert   = _G.tinsert;
+local string    = _G.string;
+local math      = _G.math;
+local table     = _G.table;
+--[[ STRING METHODS ]]--
+local format, find, lower, match = string.format, string.find, string.lower, string.match;
+--[[ MATH METHODS ]]--
+local floor, abs, min, max = math.floor, math.abs, math.min, math.max;
+--[[ TABLE METHODS ]]--
+local tremove, tcopy, twipe, tsort, tconcat, tdump = table.remove, table.copy, table.wipe, table.sort, table.concat, table.dump;
+--[[
+##########################################################
+GET ADDON DATA
+##########################################################
+]]--
+local SV = SVUI;
+local L = LibStub("LibSuperVillain-1.0"):Lang();
+local ErrorStorage = {}
+BINDING_HEADER_SVUIDEBUG = "Supervillain UI: Debugger";
+--[[
+##########################################################
+CUSTOM MESSAGE WINDOW
+##########################################################
+]]--
+function SVUI_ScriptError_OnLoad()
+    SVUI_ScriptError.Source = "";
+    SVUI_ScriptError:SetFixedPanelTemplate("Transparent")
+    SVUI_ScriptErrorDialog:SetFixedPanelTemplate("Transparent")
+    SVUI_ScriptErrorDialog.Input:SetScript("OnTextChanged", function(self, userInput)
+        if userInput then return end
+        local _, max = SVUI_ScriptErrorDialogScrollBar:GetMinMaxValues()
+        for i = 1, max do
+          ScrollFrameTemplate_OnMouseWheel(SVUI_ScriptErrorDialog, -1)
+        end
+    end)
+    _G["SVUI_ScriptError"]:RegisterForDrag("LeftButton");
+end
+
+function SVUI_ScriptError_OnShow()
+    if SVUI_ScriptError.Source then
+        local txt = SVUI_ScriptError.Source;
+        SVUI_ScriptError.Title:SetText(txt);
+    end
+end
+--[[
+##########################################################
+OTHER SLASH COMMANDS
+##########################################################
+]]--
+local function GetOriginalContext()
+    UIParentLoadAddOn("Blizzard_DebugTools")
+    local orig_DevTools_RunDump = DevTools_RunDump
+    local originalContext
+    DevTools_RunDump = function(value, context)
+        originalContext = context
+    end
+    DevTools_Dump("")
+    DevTools_RunDump = orig_DevTools_RunDump
+    return originalContext
+end
+
+local function SV_Dump(value)
+    local context = GetOriginalContext()
+    local buffer = ""
+    context.Write = function(self, msg)
+        buffer = buffer.."\n"..msg
+    end
+
+    DevTools_RunDump(value, context)
+    return buffer.."\n"..table.dump(value)
+end
+
+local function DebugDump(any)
+    if type(any)=="string" then
+        return any
+    elseif type(any) == "table" then
+        return SV_Dump(any)
+    elseif any==nil or type(any)=="number" then
+        return tostring(any)
+    end
+    return any
+end
+
+local function DebugOutput(msg)
+    if not SVUI_ScriptError:IsShown() then
+        SVUI_ScriptError:Show()
+    end
+    local outputString = SVUI_ScriptErrorDialog.Input:GetText()
+    outputString = outputString .. "\n" .. msg
+    tinsert(ErrorStorage,msg);
+    SVUI_ScriptErrorDialog.Input:SetText(outputString)
+end
+
+local function ShowDebug(header, ...)
+    local value = (header and format("Debug %s: ", header)) or "Debug: "
+    value = format("|cff11ff11 %s|r", value)
+    for i = 1, select('#', ...), 2 do
+        local name = select(i, ...)
+        local var = DebugDump(select(i+1, ...))
+        value = format("%s %s = ", value, name)..var
+    end
+    SVUI_ScriptError.Source = header;
+    DebugOutput(value)
+end
+
+function DebugThisFrame(arg)
+    local outputString = " ";
+    if arg then
+        arg = _G[arg] or GetMouseFocus()
+    else
+        arg = GetMouseFocus()
+    end
+    if arg and (arg.GetName and arg:GetName()) then
+        local point, relativeTo, relativePoint, xOfs, yOfs = arg:GetPoint()
+        outputString = outputString.."|cffCC0000----------------------------".."\n"
+        outputString = outputString.."|cffCC00FF--Mouseover Frame".."|r".."\n"
+        outputString = outputString.."|cffCC0000----------------------------|r".."\n"
+        outputString = outputString.."|cff00D1FF".."Name: |cffFFD100"..arg:GetName().."\n"
+        if arg:GetParent() and arg:GetParent():GetName() then
+            outputString = outputString.."|cff00D1FF".."Parent: |cffFFD100"..arg:GetParent():GetName().."\n"
+        end
+        outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",arg:GetWidth()).."\n"
+        outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",arg:GetHeight()).."\n"
+        outputString = outputString.."|cff00D1FF".."Strata: |cffFFD100"..arg:GetFrameStrata().."\n"
+        outputString = outputString.."|cff00D1FF".."Level: |cffFFD100"..arg:GetFrameLevel().."\n"
+        outputString = outputString.."|cff00D1FF".."IsShown: |cffFFD100"..tostring(arg:IsShown()).."\n"
+        if xOfs then
+            outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",xOfs).."\n"
+        end
+        if yOfs then
+            outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",yOfs).."\n"
+        end
+        if relativeTo and relativeTo:GetName() then
+            outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..point.."|r anchored to "..relativeTo:GetName().."'s |cffFFD100"..relativePoint.."\n"
+        end
+        local bg = arg:GetBackdrop()
+        if type(bg) == "table" then
+            outputString = outputString.."|cffFF9900>> BACKDROP --------------------------|r".."\n"
+            outputString = outputString..tdump(bg).."\n"
+        end
+        if arg._template then
+            outputString = outputString.."Template Name: |cff00FF55"..arg._template.."\n"
+        end
+        if arg.Panel then
+            local cpt, crt, crp, cxo, cyo = arg.Panel:GetPoint()
+            outputString = outputString.."|cffFF8800>> backdropFrame --------------------------|r".."\n"
+            outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",arg.Panel:GetWidth()).."\n"
+            outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",arg.Panel:GetHeight()).."\n"
+            outputString = outputString.."|cff00D1FF".."Strata: |cffFFD100"..arg.Panel:GetFrameStrata().."\n"
+            outputString = outputString.."|cff00D1FF".."Level: |cffFFD100"..arg.Panel:GetFrameLevel().."\n"
+            if cxo then
+                outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",cxo).."\n"
+            end
+            if cyo then
+                outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",cyo).."\n"
+            end
+            if crt and crt:GetName() then
+                outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..cpt.."|r anchored to "..crt:GetName().."'s |cffFFD100"..crp.."\n"
+            end
+            bg = arg.Panel:GetBackdrop()
+            if type(bg) == "table" then
+                outputString = outputString.."|cffFF9900>> BACKDROP --------------------------|r".."\n"
+                outputString = outputString..tdump(bg).."\n"
+            end
+            if arg._skin then
+                local cpt, crt, crp, cxo, cyo = arg._skin:GetPoint()
+                outputString = outputString.."|cffFF7700>> backdropTexture --------------------------|r".."\n"
+                outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",arg._skin:GetWidth()).."\n"
+                outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",arg._skin:GetHeight()).."\n"
+                if cxo then
+                    outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",cxo).."\n"
+                end
+                if cyo then
+                    outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",cyo).."\n"
+                end
+                if crt and crt:GetName() then
+                    outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..cpt.."|r anchored to "..crt:GetName().."'s |cffFFD100"..crp.."\n"
+                end
+                bg = arg._skin:GetTexture()
+                if bg then
+                    outputString = outputString.."|cff00D1FF".."Texture: |cffFFD100"..bg.."\n"
+                end
+            end
+        end
+        local childFrames = { arg:GetChildren() }
+        if #childFrames > 0 then
+            outputString = outputString.."|cffCC00FF>>>> Child Frames----------------------------".."|r".."\n".."\n"
+            for _, child in ipairs(childFrames) do
+                local cpt, crt, crp, cxo, cyo = child:GetPoint()
+                if child:GetName() then
+                    outputString = outputString.."\n\n|cff00FF55++"..child:GetName().."|r".."\n"
+                else
+                    outputString = outputString.."\n\n|cff99FF55+!!+".."Anonymous Frame".."|r".."\n"
+                end
+                outputString = outputString.."|cffCC00FF----------------------------|r".."\n"
+                outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",child:GetWidth()).."\n"
+                outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",child:GetHeight()).."\n"
+                outputString = outputString.."|cff00D1FF".."Strata: |cffFFD100"..child:GetFrameStrata().."\n"
+                outputString = outputString.."|cff00D1FF".."Level: |cffFFD100"..child:GetFrameLevel().."\n"
+                if cxo then
+                    outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",cxo).."\n"
+                end
+                if cyo then
+                    outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",cyo).."\n"
+                end
+                if crt and crt:GetName() then
+                    outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..cpt.."|r anchored to "..crt:GetName().."'s |cffFFD100"..crp.."\n"
+                end
+                bg = child:GetBackdrop()
+                if type(bg) == "table" then
+                    outputString = outputString.."|cffFF9900>> BACKDROP --------------------------|r".."\n"
+                    outputString = outputString..tdump(bg).."\n"
+                end
+                if child._template then
+                    outputString = outputString.."Template Name: |cff00FF55"..child._template.."\n"
+                end
+                if child.Panel then
+                    local cpt, crt, crp, cxo, cyo = child.Panel:GetPoint()
+                    outputString = outputString.."|cffFF8800>> backdropFrame --------------------------|r".."\n"
+                    outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",child.Panel:GetWidth()).."\n"
+                    outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",child.Panel:GetHeight()).."\n"
+                    outputString = outputString.."|cff00D1FF".."Strata: |cffFFD100"..child.Panel:GetFrameStrata().."\n"
+                    outputString = outputString.."|cff00D1FF".."Level: |cffFFD100"..child.Panel:GetFrameLevel().."\n"
+                    if cxo then
+                        outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",cxo).."\n"
+                    end
+                    if cyo then
+                        outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",cyo).."\n"
+                    end
+                    if crt and crt:GetName() then
+                        outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..cpt.."|r anchored to "..crt:GetName().."'s |cffFFD100"..crp.."\n"
+                    end
+                    bg = child.Panel:GetBackdrop()
+                    if type(bg) == "table" then
+                        outputString = outputString.."|cffFF9900>> BACKDROP --------------------------|r".."\n"
+                        outputString = outputString..tdump(bg).."\n"
+                    end
+                    if child._skin then
+                        local cpt, crt, crp, cxo, cyo = child._skin:GetPoint()
+                        outputString = outputString.."|cffFF7700>> backdropTexture --------------------------|r".."\n"
+                        outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",child._skin:GetWidth()).."\n"
+                        outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",child._skin:GetHeight()).."\n"
+                        if cxo then
+                            outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",cxo).."\n"
+                        end
+                        if cyo then
+                            outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",cyo).."\n"
+                        end
+                        if crt and crt:GetName() then
+                            outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..cpt.."|r anchored to "..crt:GetName().."'s |cffFFD100"..crp.."\n"
+                        end
+                        bg = child._skin:GetTexture()
+                        if bg then
+                            outputString = outputString.."|cffFF9900----------------------------|r".."\n"
+                            outputString = outputString..bg.."\n"
+                        end
+                        outputString = outputString.."|cffCC0000----------------------------|r".."\n"
+                    end
+                end
+            end
+            outputString = outputString.."\n\n"
+        end
+    elseif arg == nil or arg == "" then
+        outputString = outputString.."Invalid frame name".."\n"
+    else
+        outputString = outputString.."Could not find frame info".."\n"
+    end
+    DebugOutput(outputString)
+end
+SLASH_SVUI_FRAME_DEBUG1 = "/svdf"
+SlashCmdList["SVUI_FRAME_DEBUG"] = DebugThisFrame;
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_Laborer/SVUI_Laborer.lua b/Interface/AddOns/SVUI_Laborer/SVUI_Laborer.lua
index 1a6280b..f116035 100644
--- a/Interface/AddOns/SVUI_Laborer/SVUI_Laborer.lua
+++ b/Interface/AddOns/SVUI_Laborer/SVUI_Laborer.lua
@@ -44,15 +44,14 @@ GET ADDON DATA
 ]]--
 local SVUIAddOnName, PLUGIN = ...;
 local SV = SVUI
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
-local CONFIGS = SV.private
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local NewHook = hooksecurefunc;

 local playerGUID = UnitGUID('player')
 local classColor = RAID_CLASS_COLORS

-PLUGIN = Registry:NewPrototype(SVUIAddOnName)
+PLUGIN = SVLib:NewPrototype(SVUIAddOnName)
 local SCHEMA = PLUGIN.___schema;

 _G["LaborVillain"] = PLUGIN;
@@ -424,9 +423,8 @@ BUILD FUNCTION
 ##########################################################
 ]]--
 function PLUGIN:Load()
-	if(not SV.db[SCHEMA].enable) then return end
+	if(not self.db.enable) then return end

-	self.db = SV.db[SCHEMA]
 	lastClickTime = nil;
 	self.WornItems = {};
 	self.InModeGear = false;
@@ -561,7 +559,7 @@ function PLUGIN:Load()
 				order = 1,
 				name = L['AutoEquip'],
 				desc = L['Enable/Disable automatically equipping fishing gear.'],
-				get = function(key)return SV.db[SCHEMA].fishing[key[#key]]end,
+				get = function(key)return self.db.fishing[key[#key]]end,
 				set = function(key, value)PLUGIN:ChangeDBVar(value, key[#key], "fishing")end
 			}
 		}
@@ -578,7 +576,7 @@ function PLUGIN:Load()
 				order = 1,
 				name = L['AutoEquip'],
 				desc = L['Enable/Disable automatically equipping cooking gear.'],
-				get = function(key)return SV.db[SCHEMA].cooking[key[#key]]end,
+				get = function(key)return self.db.cooking[key[#key]]end,
 				set = function(key, value)PLUGIN:ChangeDBVar(value, key[#key], "cooking")end
 			}
 		}
@@ -589,8 +587,8 @@ function PLUGIN:Load()
 		type = "group",
 		name = L["Farming Mode Settings"],
 		guiInline = true,
-		get = function(key)return SV.db[SCHEMA].farming[key[#key]]end,
-		set = function(key, value)SV.db[SCHEMA].farming[key[#key]] = value end,
+		get = function(key)return self.db.farming[key[#key]]end,
+		set = function(key, value)self.db.farming[key[#key]] = value end,
 		args = {
 			buttonsize = {
 				type = 'range',
@@ -649,7 +647,7 @@ function PLUGIN:Load()
 	self:AddOption("farming", option)
 end

-CONFIGS[SCHEMA] = {
+PLUGIN.db = {
 	["enable"] = true,
 	["fontSize"] = 12,
 	["farming"] = {
@@ -667,4 +665,4 @@ CONFIGS[SCHEMA] = {
 	},
 }

-Registry:NewPlugin(PLUGIN)
\ No newline at end of file
+SVLib:NewPlugin(PLUGIN)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_Laborer/modes/archaeology.lua b/Interface/AddOns/SVUI_Laborer/modes/archaeology.lua
index ab29d22..25d6e2c 100644
--- a/Interface/AddOns/SVUI_Laborer/modes/archaeology.lua
+++ b/Interface/AddOns/SVUI_Laborer/modes/archaeology.lua
@@ -34,7 +34,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = _G.LaborVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_Laborer/modes/cooking.lua b/Interface/AddOns/SVUI_Laborer/modes/cooking.lua
index e1966ae..4b3586b 100644
--- a/Interface/AddOns/SVUI_Laborer/modes/cooking.lua
+++ b/Interface/AddOns/SVUI_Laborer/modes/cooking.lua
@@ -33,7 +33,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = _G.LaborVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_Laborer/modes/farming.lua b/Interface/AddOns/SVUI_Laborer/modes/farming.lua
index 124a5bc..a0d993a 100644
--- a/Interface/AddOns/SVUI_Laborer/modes/farming.lua
+++ b/Interface/AddOns/SVUI_Laborer/modes/farming.lua
@@ -33,7 +33,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = _G.LaborVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_Laborer/modes/fishing.lua b/Interface/AddOns/SVUI_Laborer/modes/fishing.lua
index 37467eb..79cdcba 100644
--- a/Interface/AddOns/SVUI_Laborer/modes/fishing.lua
+++ b/Interface/AddOns/SVUI_Laborer/modes/fishing.lua
@@ -33,7 +33,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local MOD = _G.LaborVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.lua b/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.lua
index 50f1949..ddbb31b 100644
--- a/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.lua
+++ b/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.lua
@@ -39,11 +39,11 @@ GET ADDON DATA
 ]]--
 local SVUIAddOnName, PLUGIN = ...;
 local SV = SVUI
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0")
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local NewHook = hooksecurefunc;

-PLUGIN = Registry:NewPrototype(SVUIAddOnName)
+PLUGIN = SVLib:NewPrototype(SVUIAddOnName)
 local SCHEMA = PLUGIN.___schema;

 _G["LogVillain"] = PLUGIN;
@@ -259,7 +259,7 @@ function PLUGIN:AppendBankFunctions()
 end

 function PLUGIN:AppendChatFunctions()
-	if SV.db.SVChat.enable and SV.db[SCHEMA].saveChats then
+	if SV.SVChat.db.enable and self.db.saveChats then
 		for _,event in pairs(LoggingEvents) do
 			SV.SVChat:RegisterEvent(event, "LogCurrentChat")
 		end
@@ -284,9 +284,7 @@ BUILD FUNCTION
 ##########################################################
 ]]--
 function PLUGIN:Load()
-	if IsAddOnLoaded("Altoholic") or not SV.db[SCHEMA].enable then return end
-
-	self.db = SV.db[SCHEMA]
+	if IsAddOnLoaded("Altoholic") or not self.db.enable then return end

 	local toonClass = select(2,UnitClass("player"));
 	local r,g,b = RAID_CLASS_COLORS[toonClass].r, RAID_CLASS_COLORS[toonClass].g, RAID_CLASS_COLORS[toonClass].b
@@ -321,7 +319,7 @@ function PLUGIN:Load()
 	end

 	--[[ OVERRIDE DEFAULT FUNCTIONS ]]--
-	if SV.db.SVBag.enable then
+	if SV.SVBag.db.enable then
 		local BAGS = SV.SVBag;
 		if BAGS.BagFrame then
 			BAGS.BagFrame.RefreshBagsSlots = RefreshLoggedBagsSlots;
@@ -329,7 +327,7 @@ function PLUGIN:Load()
 			RefreshLoggedBagsSlots(BAGS.BagFrame)
 		end
 	end
-	if SV.db.SVTip.enable then
+	if SV.SVTip.db.enable then
 		GameTooltip:HookScript("OnTooltipSetItem", GameTooltip_LogTooltipSetItem)
 	end

@@ -342,15 +340,15 @@ function PLUGIN:Load()
 		type = "toggle",
 		name = L["Save Chats"],
 		desc = L["Retain chat messages even after logging out."],
-		get = function(a)return SV.db[SCHEMA].saveChats end,
-		set = function(a,b) SV.db[SCHEMA].saveChats = b; SV:StaticPopup_Show("RL_CLIENT") end
+		get = function(a)return self.db.saveChats end,
+		set = function(a,b) self.db.saveChats = b; SV:StaticPopup_Show("RL_CLIENT") end
 	}
 	self:AddOption("saveChats", saveChats)
 end

-SV.private[SCHEMA] = {
+PLUGIN.db = {
 	["enable"] = true,
 	["saveChats"] = false
 }

-Registry:NewPlugin(PLUGIN)
\ No newline at end of file
+SVLib:NewPlugin(PLUGIN)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.lua b/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.lua
index d7118f7..75d31d1 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.lua
@@ -39,12 +39,11 @@ GET ADDON DATA
 ]]--
 local SVUIAddOnName, PLUGIN = ...;
 local SV = SVUI
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
-local CONFIGS = SV.private
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()
 local NewHook = hooksecurefunc;

-PLUGIN = Registry:NewPrototype(SVUIAddOnName)
+PLUGIN = SVLib:NewPrototype(SVUIAddOnName)
 local SCHEMA = PLUGIN.___schema;
 local VERSION = PLUGIN.___version;

@@ -65,9 +64,9 @@ PLUGIN.OptionsCache = {
 	order = 4,
 	type = "group",
 	name = "Addon Styling",
-	get = function(a)return SV.db[SCHEMA].addons[a[#a]] end,
-	set = function(a,b) SV.db[SCHEMA].addons[a[#a]] = b; SV:StaticPopup_Show("RL_CLIENT")end,
-	disabled = function()return not SV.db[SCHEMA].addons.enable end,
+	get = function(a)return PLUGIN.db.addons[a[#a]] end,
+	set = function(a,b) PLUGIN.db.addons[a[#a]] = b; SV:StaticPopup_Show("RL_CLIENT")end,
+	disabled = function()return not PLUGIN.db.addons.enable end,
 	guiInline = true,
 	args = {
 		ace3 = {
@@ -132,7 +131,7 @@ function PLUGIN:IsAddonReady(addon, ...)
 		if not IsAddOnLoaded(a) then return false end
 	end

-	local config = SV.db[SCHEMA] or SV.private[SCHEMA]
+	local config = self.db or self.db

 	return config.addons[addon]
 end
@@ -148,8 +147,8 @@ function PLUGIN:SaveAddonStyle(addon, fn, force, passive, ...)
 			self:DefineEventFunction(event, addon)
 		end
 	end
-	if(SV.private[SCHEMA].addons[addon] == nil) then
-		SV.private[SCHEMA].addons[addon] = true
+	if(self.db.addons[addon] == nil) then
+		self.db.addons[addon] = true
 	end

 	if force then
@@ -237,10 +236,10 @@ end

 function PLUGIN:PLAYER_ENTERING_WORLD(event, ...)
 	for name,fn in pairs(self.OnLoadAddons) do
-		if(SV.db[SCHEMA].blizzard[name] == nil) then
-			SV.db[SCHEMA].blizzard[name] = true
+		if(self.db.blizzard[name] == nil) then
+			self.db.blizzard[name] = true
 		end
-		if(IsAddOnLoaded(name) and (SV.db[SCHEMA].blizzard[name] or SV.db[SCHEMA].addons[name])) then
+		if(IsAddOnLoaded(name) and (self.db.blizzard[name] or self.db.addons[name])) then
 			self:Style(name, fn, event, ...)
 			self.OnLoadAddons[name] = nil
 		end
@@ -255,8 +254,8 @@ function PLUGIN:PLAYER_ENTERING_WORLD(event, ...)
 	local listener = self.EventListeners[event]
 	for name,fn in pairs(self.AddOnQueue)do
 		self:AppendAddonOption(name)
-		if(SV.db[SCHEMA].addons[name] == nil) then
-			SV.db[SCHEMA].addons[name] = true
+		if(self.db.addons[name] == nil) then
+			self.db.addons[name] = true
 		end
 		if(listener[name] and self:IsAddonReady(name)) then
 			self:Style(name, fn, event, ...)
@@ -292,8 +291,8 @@ OPTIONS CREATION
 local RegisterAddonDocklets = function()
 	local MAIN = _G["SuperDockletMain"];
 	local EXTRA = _G["SuperDockletExtra"];
-	local main = SV.db.SVDock.docklets.DockletMain;
-  	local alternate = SV.db.SVDock.docklets.enableExtra and SV.db.SVDock.docklets.DockletExtra or "";
+	local main = SV.SVDock.db.docklets.DockletMain;
+  	local alternate = SV.SVDock.db.docklets.enableExtra and SV.SVDock.db.docklets.DockletExtra or "";
   	local tipLeft, tipRight = "", "";
   	if main == nil or main == "None" then return end

@@ -383,8 +382,7 @@ BUILD FUNCTION
 ##########################################################
 ]]--
 function PLUGIN:Load()
-	if(not SV.db[SCHEMA].enable) then return end
-	self.db = SV.db[SCHEMA]
+	if(not self.db.enable) then return end

 	local alert = CreateFrame('Frame', nil, UIParent);
 	alert:SetFixedPanelTemplate('Transparent');
@@ -422,8 +420,8 @@ function PLUGIN:Load()
 		order = 2,
 		type = "toggle",
 		name = "Standard UI Styling",
-		get = function(a)return SV.db[SCHEMA].blizzard.enable end,
-		set = function(a,b) SV.db[SCHEMA].blizzard.enable = b; SV:StaticPopup_Show("RL_CLIENT") end
+		get = function(a)return self.db.blizzard.enable end,
+		set = function(a,b) self.db.blizzard.enable = b; SV:StaticPopup_Show("RL_CLIENT") end
 	}
 	self:AddOption("blizzardEnable", option)

@@ -431,8 +429,8 @@ function PLUGIN:Load()
 		order = 3,
 		type = "toggle",
 		name = "Addon Styling",
-		get = function(a)return SV.db[SCHEMA].addons.enable end,
-		set = function(a,b) SV.db[SCHEMA].addons.enable = b; SV:StaticPopup_Show("RL_CLIENT") end
+		get = function(a)return self.db.addons.enable end,
+		set = function(a,b) self.db.addons.enable = b; SV:StaticPopup_Show("RL_CLIENT") end
 	}
 	self:AddOption("addonEnable", option)

@@ -440,9 +438,9 @@ function PLUGIN:Load()
 		order = 300,
 		type = "group",
 		name = "Individual Mods",
-		get = function(a)return SV.db[SCHEMA].blizzard[a[#a]]end,
-		set = function(a,b) SV.db[SCHEMA].blizzard[a[#a]] = b; SV:StaticPopup_Show("RL_CLIENT") end,
-		disabled = function() return not SV.db[SCHEMA].blizzard.enable end,
+		get = function(a)return self.db.blizzard[a[#a]]end,
+		set = function(a,b) self.db.blizzard[a[#a]] = b; SV:StaticPopup_Show("RL_CLIENT") end,
+		disabled = function() return not self.db.blizzard.enable end,
 		guiInline = true,
 		args = {
 			bmah = {
@@ -729,7 +727,7 @@ function PLUGIN:Load()
 	self:RegisterEvent("ADDON_LOADED");
 end

-CONFIGS[SCHEMA] = {
+PLUGIN.db = {
 	["enable"] = true,
 	["blizzard"] = {
 		["enable"] = true,
@@ -815,4 +813,4 @@ CONFIGS[SCHEMA] = {
 	}
 }

-Registry:NewPlugin(PLUGIN)
\ No newline at end of file
+SVLib:NewPlugin(PLUGIN)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/achievement.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/achievement.lua
index d022cb9..c02e2c5 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/achievement.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/achievement.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -111,8 +111,6 @@ local _hook_AchievementsUpdate = function()
 			end
 		end
 	end
-
-	collectgarbage("collect");
 end

 local function BarStyleHelper(bar)
@@ -136,7 +134,7 @@ ACHIEVEMENTFRAME STYLER
 ##########################################################
 ]]--
 local function AchievementStyle()
-	if SV.db.SVStyle.blizzard.enable  ~= true or SV.db.SVStyle.blizzard.achievement  ~= true then
+	if SV.SVStyle.db.blizzard.enable  ~= true or SV.SVStyle.db.blizzard.achievement  ~= true then
 		return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/alert.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/alert.lua
index f3fba4a..eda946e 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/alert.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/alert.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -32,7 +32,7 @@ ALERTFRAME STYLER
 ##########################################################
 ]]--
 local function AlertStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.alertframes ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.alertframes ~= true then return end

 	for i = 1, 4 do
 		local alert = _G["SVUI_SystemAlert"..i];
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/archeology.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/archeology.lua
index 4beb4da..96f35c6 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/archeology.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/archeology.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -28,7 +28,7 @@ progressBarHolder:SetPoint("BOTTOM", CastingBarFrame, "TOP", 0, 10)
 SV:SetSVMovable(progressBarHolder, "Archeology Progress Bar")

 local function ArchaeologyStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.archaeology ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.archaeology ~= true then return end

 	ArchaeologyFrame:RemoveTextures()
 	ArchaeologyFrameInset:RemoveTextures()
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/auctionhouse.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/auctionhouse.lua
index 37941d4..2205c83 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/auctionhouse.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/auctionhouse.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -80,7 +80,7 @@ AUCTIONFRAME STYLER
 ]]--
 local function AuctionStyle()
 	--STYLE.Debugging = true
-	if(SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.auctionhouse ~= true) then return end
+	if(SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.auctionhouse ~= true) then return end

 	STYLE:ApplyWindowStyle(AuctionFrame, false, true)

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/barbershop.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/barbershop.lua
index 5cc87c6..92d016c 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/barbershop.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/barbershop.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ BARBERSHOP STYLER
 ##########################################################
 ]]--
 local function BarberShopStyle()
-	if SV.db.SVStyle.blizzard.enable~=true or SV.db.SVStyle.blizzard.barber~=true then return end
+	if SV.SVStyle.db.blizzard.enable~=true or SV.SVStyle.db.blizzard.barber~=true then return end
 	local buttons = {"BarberShopFrameOkayButton", "BarberShopFrameCancelButton", "BarberShopFrameResetButton"}
 	BarberShopFrameOkayButton:Point("RIGHT", BarberShopFrameSelector4, "BOTTOM", 2, -50)
 	for b = 1, #buttons do
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/battlefield.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/battlefield.lua
index 834e73f..accf764 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/battlefield.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/battlefield.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ BATTLEFIELD STYLER
 ##########################################################
 ]]--
 local function BattlefieldStyle()
-	if SV.db.SVStyle.blizzard.enable~=true or SV.db.SVStyle.blizzard.bgmap~=true then return end
+	if SV.SVStyle.db.blizzard.enable~=true or SV.SVStyle.db.blizzard.bgmap~=true then return end
 	BattlefieldMinimap:SetClampedToScreen(true)
 	BattlefieldMinimapCorner:Die()
 	BattlefieldMinimapBackground:Die()
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/blackmarket.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/blackmarket.lua
index 5904ef5..6c61947 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/blackmarket.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/blackmarket.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ BLACKMARKET STYLER
 ##########################################################
 ]]--
 local function BlackMarketStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.bmah ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.bmah ~= true then
 		return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/calendar.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/calendar.lua
index dc0a3f4..178cc61 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/calendar.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/calendar.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -33,7 +33,7 @@ CALENDAR STYLER
 ##########################################################
 ]]--
 local function CalendarStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.calendar ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.calendar ~= true then
 		 return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/challenges.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/challenges.lua
index 0afbba8..c77866c 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/challenges.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/challenges.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ CHALLENGES UI STYLER
 ##########################################################
 ]]--
 local function ChallengesFrameStyle()
-  if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.lfg ~= true then return end
+  if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.lfg ~= true then return end
   ChallengesFrameInset:RemoveTextures()
   ChallengesFrameInsetBg:Hide()
   ChallengesFrameDetails.bg:Hide()
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/character.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/character.lua
index f6ccd88..4f98832 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/character.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/character.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -179,7 +179,7 @@ CHARACTERFRAME STYLER
 ##########################################################
 ]]--
 local function CharacterFrameStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.character ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.character ~= true then
 		 return
 	end

@@ -292,22 +292,12 @@ local function CharacterFrameStyle()
 			btn.Check:SetTexture(0,0,0,0)
 			btn.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
 			btn.icon:SetPoint("LEFT", btn, "LEFT", 4, 0)
-			hooksecurefunc(btn.icon, "SetPoint", function(f, g, h, i, j, k, X)
-				if X ~= true then
-					 f:SetPoint("LEFT", btn, "LEFT", 4, 0, true)
-				end
-			end)
-			hooksecurefunc(btn.icon, "SetSize", function(f, Y, Z)
-				if Y == 30 or Z == 30 then
-					 f:Size(36, 36)
-				end
-			end)
 			if not btn.icon.bordertop then
 				 SetItemFrame(btn, btn.icon)
 			end
 		end
 		GearManagerDialogPopup:RemoveTextures()
-		GearManagerDialogPopup:SetFixedPanelTemplate("Transparent", true)
+		GearManagerDialogPopup:SetPanelTemplate("Inset", true)
 		GearManagerDialogPopup:Point("LEFT", PaperDollFrame, "RIGHT", 4, 0)
 		GearManagerDialogPopupScrollFrame:RemoveTextures()
 		GearManagerDialogPopupEditBox:RemoveTextures()
@@ -352,7 +342,7 @@ local function CharacterFrameStyle()
 	ReputationFrame:RemoveTextures(true)
 	ReputationListScrollFrame:RemoveTextures()
 	ReputationDetailFrame:RemoveTextures()
-	ReputationDetailFrame:SetBasicPanel()
+	ReputationDetailFrame:SetPanelTemplate("Inset", true)
 	ReputationDetailFrame:Point("TOPLEFT", ReputationFrame, "TOPRIGHT", 4, -28)
 	ReputationFrame:HookScript("OnShow", Reputation_OnShow)
 	hooksecurefunc("ExpandFactionHeader", Reputation_OnShow)
@@ -373,7 +363,7 @@ local function CharacterFrameStyle()
 			end
 		end
 		TokenFramePopup:RemoveTextures()
-		TokenFramePopup:SetBasicPanel()
+		TokenFramePopup:SetPanelTemplate("Inset", true)
 		TokenFramePopup:Point("TOPLEFT", TokenFrame, "TOPRIGHT", 4, -28)
 	end)
 	PetModelFrame:SetPanelTemplate("Comic",false,1,-7,-7)
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/chat.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/chat.lua
index 114d33b..b949c8f 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/chat.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/chat.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -345,7 +345,7 @@ CHAT STYLER
 ##########################################################
 ]]--
 local function ChatStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.chat ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.chat ~= true then
 		 return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/dressup.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/dressup.lua
index 3d65d8c..13271bb 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/dressup.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/dressup.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ DRESSUP STYLER
 ##########################################################
 ]]--
 local function DressUpStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.dressingroom ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.dressingroom ~= true then
 		 return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/encounterjournal.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/encounterjournal.lua
index d3ab5f5..8bd83f3 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/encounterjournal.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/encounterjournal.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -99,7 +99,7 @@ local function Outline(frame, noHighlight)
 end

 local function EncounterJournalStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.encounterjournal ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.encounterjournal ~= true then
 		 return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/friends.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/friends.lua
index 358192b..4e9ae5b 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/friends.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/friends.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -116,7 +116,7 @@ FRIENDSFRAME STYLER
 ##########################################################
 ]]--FriendsFrameBattlenetFrameScrollFrame
 local function FriendsFrameStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.friends ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.friends ~= true then
 		 return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/gossip.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/gossip.lua
index 1d06bdb..8ac280c 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/gossip.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/gossip.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ GOSSIP STYLER
 ##########################################################
 ]]--
 local function GossipStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.gossip ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.gossip ~= true then return end
 	ItemTextFrame:RemoveTextures(true)
 	ItemTextScrollFrame:RemoveTextures()
 	STYLE:ApplyCloseButtonStyle(GossipFrameCloseButton)
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/guild.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/guild.lua
index c85f985..7754161 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/guild.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/guild.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -162,7 +162,7 @@ GUILDFRAME STYLERS
 ##########################################################
 ]]--
 local function GuildBankStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.gbank ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.gbank ~= true then
 		return
 	end

@@ -284,7 +284,7 @@ local function GuildBankStyle()
 end

 local function GuildFrameStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.guild ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.guild ~= true then
 		return
 	end

@@ -530,7 +530,7 @@ local function GuildFrameStyle()
 end

 local function GuildControlStyle()
-	if SV.db.SVStyle.blizzard.enable~=true or SV.db.SVStyle.blizzard.guildcontrol~=true then return end
+	if SV.SVStyle.db.blizzard.enable~=true or SV.SVStyle.db.blizzard.guildcontrol~=true then return end

 	GuildControlUI:RemoveTextures()
 	GuildControlUIHbar:RemoveTextures()
@@ -602,7 +602,7 @@ end


 local function GuildRegistrarStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.guildregistrar ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.guildregistrar ~= true then
 		return
 	end

@@ -641,7 +641,7 @@ local function GuildRegistrarStyle()
 end

 local function LFGuildFrameStyle()
-	if(SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.lfguild ~= true) then return end
+	if(SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.lfguild ~= true) then return end

 	STYLE:ApplyWindowStyle(LookingForGuildFrame, true)

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/help.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/help.lua
index 4f026e9..401bbfc 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/help.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/help.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -63,7 +63,7 @@ HELPFRAME STYLER
 ##########################################################
 ]]--
 local function HelpFrameStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.help ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.help ~= true then
 		return
 	end
 	tinsert(HelpFrameButtonList, "HelpFrameButton16")
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/inspect.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/inspect.lua
index 1b4c06b..39e8679 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/inspect.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/inspect.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -47,7 +47,7 @@ INSPECT UI STYLER
 ##########################################################
 ]]--
 local function InspectStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.inspect ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.inspect ~= true then
 		return
 	end
 	InspectFrame:RemoveTextures(true)
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/itemsocketing.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/itemsocketing.lua
index 4811c79..85645bb 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/itemsocketing.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/itemsocketing.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ ITEMSOCKETING STYLER
 ##########################################################
 ]]--
 local function ItemSocketStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.socket ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.socket ~= true then return end
 	ItemSocketingFrame:RemoveTextures()
 	ItemSocketingFrame:SetPanelTemplate("Action")
 	ItemSocketingFrameInset:Die()
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/itemupgrade.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/itemupgrade.lua
index 2fceea7..ca1f2c9 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/itemupgrade.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/itemupgrade.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ ITEMUPGRADE UI STYLER
 ##########################################################
 ]]--
 local function ItemUpgradeStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.itemUpgrade ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.itemUpgrade ~= true then
 		 return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/keybinding.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/keybinding.lua
index f1ceab5..658de87 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/keybinding.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/keybinding.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -29,7 +29,7 @@ local BindButtons = {
 }

 local function BindingStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.binding ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.binding ~= true then return end

 	for _, gName in pairs(BindButtons)do
 		local btn = _G[gName]
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/lfd.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/lfd.lua
index e288acd..a75263c 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/lfd.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/lfd.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -107,7 +107,7 @@ LFD STYLER
 ##########################################################
 ]]--
 local function LFDFrameStyle()
-  if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.lfg ~= true then return end
+  if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.lfg ~= true then return end

   STYLE:ApplyWindowStyle(PVEFrame, true)

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/loothistory.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/loothistory.lua
index b194a26..546badd 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/loothistory.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/loothistory.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -59,7 +59,7 @@ LOOTHISTORY STYLER
 ]]--
 local function LootHistoryStyle()
   LootHistoryFrame:SetFrameStrata('HIGH')
-  if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.loot ~= true then return end
+  if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.loot ~= true then return end
   local M = MissingLootFrame;
   M:RemoveTextures()
   M:SetPanelTemplate("Pattern")
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/lossofcontrol.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/lossofcontrol.lua
index 2dd0ada..4d3dbe2 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/lossofcontrol.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/lossofcontrol.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -42,7 +42,7 @@ local _hook_LossOfControl = function(self, ...)
 end

 local function LossOfControlStyle()
-  if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.losscontrol ~= true then return end
+  if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.losscontrol ~= true then return end
   local IconBackdrop = CreateFrame("Frame", nil, LossOfControlFrame)
   IconBackdrop:WrapOuter(LossOfControlFrame.Icon)
   IconBackdrop:SetFrameLevel(LossOfControlFrame:GetFrameLevel()-1)
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/macro.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/macro.lua
index 0ecbfc3..55944aa 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/macro.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/macro.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -33,7 +33,7 @@ MACRO UI STYLER
 ##########################################################
 ]]--
 local function MacroUIStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.macro ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.macro ~= true then return end
 	STYLE:ApplyCloseButtonStyle(MacroFrameCloseButton)
 	STYLE:ApplyScrollFrameStyle(MacroButtonScrollFrameScrollBar)
 	STYLE:ApplyScrollFrameStyle(MacroFrameScrollFrameScrollBar)
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/mailbox.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/mailbox.lua
index 6478e3f..0bf7fa6 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/mailbox.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/mailbox.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -42,7 +42,7 @@ MAILBOX STYLER
 ##########################################################
 ]]--
 local function MailBoxStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.mail ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.mail ~= true then return end

 	STYLE:ApplyWindowStyle(MailFrame)

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/merchant.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/merchant.lua
index f5b7d0a..54eda1e 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/merchant.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/merchant.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ FRAME STYLER
 ##########################################################
 ]]--
 local function MerchantStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.merchant ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.merchant ~= true then return end
 	MerchantFrame:RemoveTextures(true)
 	MerchantFrame:SetPanelTemplate("Halftone", false, nil, 2, 4)
 	local level = MerchantFrame:GetFrameLevel()
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/petbattle.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/petbattle.lua
index 47a2769..cce69f8 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/petbattle.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/petbattle.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -43,7 +43,7 @@ PETBATTLE STYLER
 ##########################################################
 ]]--
 local function PetBattleStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.petbattleui ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.petbattleui ~= true then
 		return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/petition.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/petition.lua
index e027b45..4b8b06f 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/petition.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/petition.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ PETITIONFRAME STYLER
 ##########################################################
 ]]--
 local function PetitionFrameStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.petition ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.petition ~= true then
 		return
 	end
 	PetitionFrame:RemoveTextures(true)
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/petjournal.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/petjournal.lua
index 0cd1609..008203f 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/petjournal.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/petjournal.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -88,7 +88,7 @@ FRAME STYLER
 ##########################################################
 ]]--
 local function PetJournalStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.mounts ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.mounts ~= true then return end

 	STYLE:ApplyWindowStyle(PetJournalParent)

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/petstable.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/petstable.lua
index ab6ef17..50fe759 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/petstable.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/petstable.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ PETSTABLE STYLER
 ##########################################################
 ]]--
 local function PetStableStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.stable ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.stable ~= true then return end
 	PetStableFrame:RemoveTextures()
 	PetStableFrameInset:RemoveTextures()
 	PetStableLeftInset:RemoveTextures()
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/pvp.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/pvp.lua
index ea8accb..368008d 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/pvp.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/pvp.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -24,7 +24,7 @@ PVP STYLER
 -- LoadAddOn("Blizzard_PVPUI")

 local function PVPFrameStyle()
-	if (SV.db.SVStyle and (SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.pvp ~= true)) then
+	if (SV.SVStyle.db and (SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.pvp ~= true)) then
 		return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/quest.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/quest.lua
index fadb29a..10e11c1 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/quest.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/quest.lua
@@ -16,7 +16,7 @@ credit: Elv.                      original logic from ElvUI. Adapted to SVUI #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -105,7 +105,7 @@ QUEST STYLERS
 ##########################################################
 ]]--
 local function QuestGreetingStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.greeting ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.greeting ~= true then
 		return
 	end

@@ -117,7 +117,7 @@ local function QuestGreetingStyle()
 end

 local function QuestFrameStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.quest ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.quest ~= true then return end

 	STYLE:ApplyWindowStyle(QuestFrame, true, true)

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/raid.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/raid.lua
index 106a4b4..b1c5a40 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/raid.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/raid.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -46,25 +46,27 @@ RAID STYLERS
 ]]--
 local function RaidUIStyle()
 	if InCombatLockdown() then return end
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.raid ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.raid ~= true then return end
 	for _,group in pairs(RaidGroupList)do
-		if not _G[group] then print(group) end
 		if _G[group] then
 			_G[group]:RemoveTextures()
+			for i = 1, 5 do
+				local name = ("%sSlot%d"):format(group, i)
+				local slot = _G[name]
+				if(slot) then
+					slot:RemoveTextures()
+					slot:SetPanelTemplate("Inset", true)
+				end
+			end
 		end
-	end
-	for e = 1, 8 do
-		for f = 1, 5 do
-			_G["RaidGroup"..e.."Slot"..f]:RemoveTextures()
-			_G["RaidGroup"..e.."Slot"..f]:SetFixedPanelTemplate("Transparent", true)
-		end
-	end
+	end
 end

 local function RaidInfoStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.nonraid ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.nonraid ~= true then
 		return
-	end
+	end
+
 	_G["RaidInfoFrame"]:RemoveTextures()
 	_G["RaidInfoInstanceLabel"]:RemoveTextures()
 	_G["RaidInfoIDLabel"]:RemoveTextures()
@@ -72,17 +74,21 @@ local function RaidInfoStyle()
 	_G["RaidInfoScrollFrameScrollBarTop"]:Die()
 	_G["RaidInfoScrollFrameScrollBarBottom"]:Die()
 	_G["RaidInfoScrollFrameScrollBarMiddle"]:Die()
+
 	for g = 1, #RaidInfoFrameList do
 		if _G[RaidInfoFrameList[g]] then
 			_G[RaidInfoFrameList[g]]:SetButtonTemplate()
 		end
-	end
+	end
+
 	RaidInfoScrollFrame:RemoveTextures()
 	RaidInfoFrame:SetBasicPanel()
 	RaidInfoFrame.Panel:Point("TOPLEFT", RaidInfoFrame, "TOPLEFT")
 	RaidInfoFrame.Panel:Point("BOTTOMRIGHT", RaidInfoFrame, "BOTTOMRIGHT")
+
 	STYLE:ApplyCloseButtonStyle(RaidInfoCloseButton, RaidInfoFrame)
 	STYLE:ApplyScrollFrameStyle(RaidInfoScrollFrameScrollBar)
+
 	RaidFrameRaidBrowserButton:SetButtonTemplate()
 	RaidFrameAllAssistCheckButton:SetCheckboxTemplate(true)
 end
@@ -91,5 +97,5 @@ end
 STYLE LOADING
 ##########################################################
 ]]--
-STYLE:SaveBlizzardStyle("Blizzard_RaidUI",RaidUIStyle)
+STYLE:SaveBlizzardStyle("Blizzard_RaidUI", RaidUIStyle)
 STYLE:SaveCustomStyle(RaidInfoStyle)
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/reforging.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/reforging.lua
index 8854ce0..1d9bd23 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/reforging.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/reforging.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ REFORGING STYLER
 ##########################################################
 ]]--
 local function ReforgingStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.reforge ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.reforge ~= true then return end

 	STYLE:ApplyWindowStyle(ReforgingFrame, true)

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/spellbook.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/spellbook.lua
index f1a263f..82e1097 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/spellbook.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/spellbook.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain
 --[[
 ##########################################################
@@ -222,7 +222,7 @@ SPELLBOOK STYLER
 ##########################################################
 ]]--
 local function SpellBookStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.spellbook ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.spellbook ~= true then return end

 	STYLE:ApplyWindowStyle(SpellBookFrame)
 	STYLE:ApplyCloseButtonStyle(SpellBookFrameCloseButton)
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/store.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/store.lua
index 54f252b..8518785 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/store.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/store.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ TAXIFRAME STYLER
 ##########################################################
 ]]--
 local function StoreStyle()
-	-- if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.store ~= true then
+	-- if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.store ~= true then
 	-- 	 return
 	-- end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/supervillain.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/supervillain.lua
index 69c9e02..01530b6 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/supervillain.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/supervillain.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/system.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/system.lua
index ce85baa..a4b5519 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/system.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/system.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 local ceil = math.ceil
 --[[
@@ -393,7 +393,7 @@ SYSTEM WIDGET STYLERS
 ##########################################################
 ]]--
 local function SystemPanelQue()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.misc ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.misc ~= true then return end

 	QueueStatusFrame:RemoveTextures()

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/tabard.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/tabard.lua
index eb8d558..61420ba 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/tabard.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/tabard.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -45,7 +45,7 @@ TABARDFRAME STYLER
 ##########################################################
 ]]--
 local function TabardFrameStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.tabard ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.tabard ~= true then
 		 return
 	end
 	cleanT(TabardFrame, true)
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/talents.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/talents.lua
index b9c7fc5..0e56c6e 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/talents.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/talents.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -106,7 +106,7 @@ TALENTFRAME STYLER
 ##########################################################
 ]]--
 local function TalentFrameStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.talent ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.talent ~= true then return end

 	STYLE:ApplyWindowStyle(PlayerTalentFrame)

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/taxi.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/taxi.lua
index 2c935e2..d09ed79 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/taxi.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/taxi.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ TAXIFRAME STYLER
 ##########################################################
 ]]--
 local function TaxiStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.taxi ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.taxi ~= true then
 		 return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/ACP.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/ACP.lua
index e91177e..2ab4ece 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/ACP.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/ACP.lua
@@ -27,7 +27,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AdiBags.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AdiBags.lua
index e72fe0e..16de146 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AdiBags.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AdiBags.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Altoholic.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Altoholic.lua
index b25d7df..7de7600 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Altoholic.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Altoholic.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AtlasLoot.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AtlasLoot.lua
index 1752b3c..945acbe 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AtlasLoot.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AtlasLoot.lua
@@ -27,7 +27,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AuctionLite.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AuctionLite.lua
index 82ab2c2..a9e823a 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AuctionLite.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/AuctionLite.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/BigWigs.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/BigWigs.lua
index 504ec57..adb34f8 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/BigWigs.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/BigWigs.lua
@@ -26,7 +26,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Bugsack.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Bugsack.lua
index c4a5fed..0640878 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Bugsack.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Bugsack.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Clique.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Clique.lua
index eb578f3..2fc2f73 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Clique.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Clique.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Cooline.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Cooline.lua
index 330ac1f..ea0a8f4 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Cooline.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Cooline.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/DBM.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/DBM.lua
index 2d3d5ea..7b321cf 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/DBM.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/DBM.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/DXE.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/DXE.lua
index 8b6e35f..bc0c503 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/DXE.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/DXE.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 local playerName = UnitName("player");
 local playerRealm = GetRealmName();
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/LightHeaded.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/LightHeaded.lua
index b468e1e..77f2a2a 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/LightHeaded.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/LightHeaded.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Mogit.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Mogit.lua
index 480a472..c1e83d6 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Mogit.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Mogit.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Omen.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Omen.lua
index ba75fb1..8c71566 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Omen.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Omen.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Outfitter.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Outfitter.lua
index 68b7416..88b2864 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Outfitter.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Outfitter.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Postal.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Postal.lua
index 7b986be..39ba8d7 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Postal.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Postal.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Quartz.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Quartz.lua
index 40001ad..f935d27 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Quartz.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Quartz.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Recount.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Recount.lua
index 66a07f6..a6469d6 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Recount.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Recount.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/SexyCooldown.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/SexyCooldown.lua
index 7cb9125..830817b 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/SexyCooldown.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/SexyCooldown.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Skada.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Skada.lua
index 9120889..1a5da90 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Skada.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/Skada.lua
@@ -31,7 +31,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 local activePanels = {};
 --[[
@@ -160,9 +160,9 @@ function STYLE:Docklet_Skada()
   end
   for index,window in pairs(Skada:GetWindows()) do
     local key = "Skada"..window.db.name
-    if(SV.db.SVDock.docklets.DockletMain == key)then
+    if(SV.SVDock.db.docklets.DockletMain == key)then
       skada_panel_loader(SkadaHolder, window, SuperDockletMain)
-    elseif(SV.db.SVDock.docklets.enableExtra and SV.db.SVDock.docklets.DockletExtra == key) then
+    elseif(SV.SVDock.db.docklets.enableExtra and SV.SVDock.db.docklets.DockletExtra == key) then
       skada_panel_loader(SkadaHolder2, window, SuperDockletExtra)
     else
       window.db.barslocked = false;
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TinyDPS.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TinyDPS.lua
index 151e4f2..050fc72 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TinyDPS.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TinyDPS.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TomTom.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TomTom.lua
index 690e0ef..eae38a5 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TomTom.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TomTom.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TradeSkillDW.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TradeSkillDW.lua
index f41d2c6..24ea17e 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TradeSkillDW.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/TradeSkillDW.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/VEM.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/VEM.lua
index 4f0acdc..d77809c 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/VEM.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/VEM.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/alDamageMeter.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/alDamageMeter.lua
index 75f73c1..3e8622e 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/alDamageMeter.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/thirdparty/alDamageMeter.lua
@@ -30,7 +30,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/timemanager.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/timemanager.lua
index b7ca7e0..20f922d 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/timemanager.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/timemanager.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ TIMEMANAGER STYLER
 ##########################################################
 ]]--
 local function TimeManagerStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.timemanager ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.timemanager ~= true then
 		 return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/trade.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/trade.lua
index e6b5019..bb33998 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/trade.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/trade.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ TRADEFRAME STYLER
 ##########################################################
 ]]--
 local function TradeFrameStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.trade ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.trade ~= true then
 		 return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/tradeskill.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/tradeskill.lua
index 1c339f4..e197b28 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/tradeskill.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/tradeskill.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ TRADESKILL STYLER
 ##########################################################
 ]]--
 local function TradeSkillStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.tradeskill ~= true then
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.tradeskill ~= true then
 		 return
 	end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/trainer.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/trainer.lua
index f0f264d..bc1a660 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/trainer.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/trainer.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -41,7 +41,7 @@ TRAINER STYLER
 ##########################################################
 ]]--
 local function TrainerStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.trainer ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.trainer ~= true then return end

 	ClassTrainerFrame:SetHeight(ClassTrainerFrame:GetHeight() + 42)
 	STYLE:ApplyWindowStyle(ClassTrainerFrame)
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/transmog.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/transmog.lua
index 6e6b602..bbc1cb1 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/transmog.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/transmog.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -49,7 +49,7 @@ TRANSMOG STYLER
 ##########################################################
 ]]--
 local function TransmogStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.transmogrify ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.transmogrify ~= true then return end

 	STYLE:ApplyWindowStyle(TransmogrifyFrame, true)

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/voidstorage.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/voidstorage.lua
index 909a377..e6d0da6 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/voidstorage.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/voidstorage.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -36,7 +36,7 @@ VOIDSTORAGE STYLER
 ##########################################################
 ]]--
 local function VoidStorageStyle()
-  if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.voidstorage ~= true then
+  if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.voidstorage ~= true then
      return
   end

diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/worldmap.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/worldmap.lua
index e96e03e..00edb0d 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/worldmap.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/worldmap.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -155,7 +155,7 @@ local function WorldMap_OnShow()
     end
   end

-  if not SV.db.SVMap.tinyWorldMap then
+  if not SV.SVMap.db.tinyWorldMap then
     BlackoutWorld:SetTexture(0, 0, 0, 1)
   else
     BlackoutWorld:SetTexture(0,0,0,0)
@@ -179,7 +179,7 @@ WORLDMAP STYLER
 ##########################################################
 ]]--
 local function WorldMapStyle()
-  if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.worldmap ~= true then return end
+  if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.worldmap ~= true then return end

   WorldMapFrame:SetFrameLevel(4)
   STYLE:ApplyWindowStyle(WorldMapFrame, true, true)
diff --git a/Interface/AddOns/SVUI_StyleOMatic/addons/worldstate.lua b/Interface/AddOns/SVUI_StyleOMatic/addons/worldstate.lua
index d4f2c44..ce09abb 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/addons/worldstate.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/addons/worldstate.lua
@@ -14,7 +14,7 @@ S U P E R - V I L L A I N - U I   By: Munglunch                              #
 ##############################################################################
 --]]
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 --[[
 ##########################################################
@@ -22,7 +22,7 @@ WORLDSTATE STYLER
 ##########################################################
 ]]--
 local function WorldStateStyle()
-	if SV.db.SVStyle.blizzard.enable ~= true or SV.db.SVStyle.blizzard.bgscore ~= true then return end
+	if SV.SVStyle.db.blizzard.enable ~= true or SV.SVStyle.db.blizzard.bgscore ~= true then return end
 	WorldStateScoreScrollFrame:RemoveTextures()
 	WorldStateScoreFrame:RemoveTextures()
 	WorldStateScoreFrame:SetPanelTemplate("Halftone")
diff --git a/Interface/AddOns/SVUI_StyleOMatic/common/methods.lua b/Interface/AddOns/SVUI_StyleOMatic/common/methods.lua
index 02607b8..299af5a 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/common/methods.lua
+++ b/Interface/AddOns/SVUI_StyleOMatic/common/methods.lua
@@ -36,7 +36,7 @@ GET ADDON DATA
 ##########################################################
 ]]--
 local SV = _G.SVUI;
-local L = LibLocale();
+local L = LibStub("LibSuperVillain-1.0"):Lang();
 local STYLE = _G.StyleVillain;
 local LSM = LibStub("LibSharedMedia-3.0")
 local NewHook = hooksecurefunc;
diff --git a/Interface/AddOns/SVUI_TrackingDevice/SVUI_TrackingDevice.lua b/Interface/AddOns/SVUI_TrackingDevice/SVUI_TrackingDevice.lua
index 9e9be5e..32b45f8 100644
--- a/Interface/AddOns/SVUI_TrackingDevice/SVUI_TrackingDevice.lua
+++ b/Interface/AddOns/SVUI_TrackingDevice/SVUI_TrackingDevice.lua
@@ -49,10 +49,10 @@ GET ADDON DATA
 ]]--
 local SVUIAddOnName, PLUGIN = ...;
 local SV = SVUI
-local L = LibLocale()
-local Registry = LibStub("LibSystemRegistry-1.0");
+local SVLib = LibStub("LibSuperVillain-1.0")
+local L = SVLib:Lang()

-PLUGIN = Registry:NewPrototype(SVUIAddOnName)
+PLUGIN = SVLib:NewPrototype(SVUIAddOnName)

 _G["TrackingVillain"] = PLUGIN;
 --[[
@@ -62,7 +62,6 @@ LOCALS AND BINDING
 ]]--
 BINDING_HEADER_SVUITRACK = "Supervillain UI: Tracking Device";

-local CONFIGS = SV.private
 local NewHook = hooksecurefunc;
 local playerGUID = UnitGUID('player')
 local classColor = RAID_CLASS_COLORS
@@ -670,7 +669,7 @@ CORE
 ##########################################################
 ]]--
 function PLUGIN:ReLoad()
-    if(not SV.db[SCHEMA].enable) then return end
+    if(not self.db.enable) then return end

     local frameSize = self.db.size or 70
     local arrowSize = frameSize * 0.5
@@ -683,13 +682,12 @@ function PLUGIN:ReLoad()
 end

 function PLUGIN:Load()
-    if(not SV.db[SCHEMA].enable) then return end
+    if(not self.db.enable) then return end

     local _TRACKER = SVUI_TrackingDoodad
     local _TARGET = SVUI_Target

     if(_TRACKER) then
-        self.db = SV.db[SCHEMA]

         _TRACKER.Spin = Rotate_Arrow
         _TRACKER:SetParent(SVUI_Target)
@@ -711,7 +709,7 @@ function PLUGIN:Load()
         name = L["GPS"],
         desc = L["Use group frame GPS elements"],
         type = "toggle",
-        get = function() return SV.db.SVTracker.groups end,
+        get = function() return SV.SVTracker.db.groups end,
         set = function(key,value) PLUGIN:ChangeDBVar(value, key[#key]); PLUGIN:UpdateLogWindow() end
     }

@@ -722,7 +720,7 @@ function PLUGIN:Load()
         name = L["GPS Proximity"],
         desc = L["Only point to closest low health unit"],
         type = "toggle",
-        get = function() return SV.db.SVTracker.proximity end,
+        get = function() return SV.SVTracker.db.proximity end,
         set = function(key,value) PLUGIN:ChangeDBVar(value, key[#key]); PLUGIN:UpdateLogWindow() end
     }

@@ -736,14 +734,14 @@ function PLUGIN:Load()
         min = 6,
         max = 22,
         step = 1,
-        get = function() return SV.db.SVTracker.fontSize end,
+        get = function() return SV.SVTracker.db.fontSize end,
         set = function(key,value) PLUGIN:ChangeDBVar(value, key[#key]); PLUGIN:UpdateLogWindow() end
     }

     self:AddOption("fontSize", options)
 end

-CONFIGS[SCHEMA] = {
+PLUGIN.db = {
     ["enable"] = true,
     ["size"] = 75,
     ["fontSize"] = 12,
@@ -751,4 +749,4 @@ CONFIGS[SCHEMA] = {
     ["proximity"] = false,
 }

-Registry:NewPlugin(PLUGIN)
\ No newline at end of file
+SVLib:NewPlugin(PLUGIN)
\ No newline at end of file