Quantcast

Merge branch 'wod'

Repooc [10-13-14 - 04:55]
Merge branch 'wod'

Signed-off-by: Repooc <repooc82@gmail.com>

Conflicts:
	ElvUI_SLE/dev/test.lua
Filename
.gitignore
.hgignore
.idea/copyright/profiles_settings.xml
CHANGELOG.txt
ElvUI_SLE/ElvUI_SLE.lua
ElvUI_SLE/ElvUI_SLE.toc
ElvUI_SLE/config/load_config.xml
ElvUI_SLE/config/profile.lua
ElvUI_SLE/config/sle_private.lua
ElvUI_SLE/core/commands.lua
ElvUI_SLE/core/core.lua
ElvUI_SLE/core/elvprot.lua
ElvUI_SLE/core/install.lua
ElvUI_SLE/core/installer/BigWigs.lua
ElvUI_SLE/core/installer/BigWigsFights.lua
ElvUI_SLE/core/installer/BigWigsIcon.lua
ElvUI_SLE/core/installer/Clique.lua
ElvUI_SLE/core/installer/Hermes.lua
ElvUI_SLE/core/installer/Skada.lua
ElvUI_SLE/core/installer/installer.lua
ElvUI_SLE/core/installer/load_install.xml
ElvUI_SLE/core/installer/xCT+.lua
ElvUI_SLE/core/load_core.xml
ElvUI_SLE/core/media.lua
ElvUI_SLE/core/modules.lua
ElvUI_SLE/core/staticpopups.lua
ElvUI_SLE/core/test.lua
ElvUI_SLE/core/toolkit.lua
ElvUI_SLE/defaults/load_defaults.xml
ElvUI_SLE/defaults/private.lua
ElvUI_SLE/defaults/profile.lua
ElvUI_SLE/dev/commands.lua
ElvUI_SLE/dev/elvprot.lua
ElvUI_SLE/dev/load_dev.xml
ElvUI_SLE/dev/options.lua
ElvUI_SLE/dev/staticpopups.lua
ElvUI_SLE/dev/test.lua
ElvUI_SLE/layout/layout.lua
ElvUI_SLE/libs/LibBabble-SubZone-3.0/Changelog-LibBabble-SubZone-3.0-5.1-release1.txt
ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibBabble-3.0.lua
ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibBabble-SubZone-3.0.lua
ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibBabble-SubZone-3.0.toc
ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/LibStub.lua
ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/LibStub.toc
ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test.lua
ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test2.lua
ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test3.lua
ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test4.lua
ElvUI_SLE/libs/LibBabble-SubZone-3.0/lib.xml
ElvUI_SLE/libs/LibRangeCheck-2.0/LibRangeCheck-2.0.lua
ElvUI_SLE/libs/load_libs.xml
ElvUI_SLE/libs/oUF_NecroStrike/oUF_NecroStrike.lua
ElvUI_SLE/libs/oUF_NecroStrike/oUF_NecroStrike.toc
ElvUI_SLE/locales/china.lua
ElvUI_SLE/locales/english.lua
ElvUI_SLE/locales/french.lua
ElvUI_SLE/locales/german.lua
ElvUI_SLE/locales/italian.lua
ElvUI_SLE/locales/korean.lua
ElvUI_SLE/locales/load_locales.xml
ElvUI_SLE/locales/portuguese.lua
ElvUI_SLE/locales/russian.lua
ElvUI_SLE/locales/spanish.lua
ElvUI_SLE/locales/taiwan.lua
ElvUI_SLE/media/fonts/Accidental_Presidency.ttf
ElvUI_SLE/media/fonts/Buffet_Script.ttf
ElvUI_SLE/media/fonts/DORISBR.TTF
ElvUI_SLE/media/fonts/Durandal_Light.ttf
ElvUI_SLE/media/fonts/Intro_Black.ttf
ElvUI_SLE/media/fonts/KGSmallTownSouthernGirl.ttf
ElvUI_SLE/media/fonts/Rubino_Plain.ttf
ElvUI_SLE/media/fonts/Trafaret.ttf
ElvUI_SLE/media/fonts/Univers.ttf
ElvUI_SLE/media/fonts/cyrillic_old.ttf
ElvUI_SLE/media/load_media.xml
ElvUI_SLE/media/sharedmedia.lua
ElvUI_SLE/media/sounds/TheGrCorpus.mp3
ElvUI_SLE/media/sounds/sheep.mp3
ElvUI_SLE/media/textures/Chat_Friend.blp
ElvUI_SLE/media/textures/Chat_RPG.blp
ElvUI_SLE/media/textures/Chat_Test.blp
ElvUI_SLE/media/textures/Config_SL.blp
ElvUI_SLE/media/textures/Gradation.tga
ElvUI_SLE/media/textures/SLE_Banner.blp
ElvUI_SLE/media/textures/crests/Alliance.blp
ElvUI_SLE/media/textures/crests/BloodElf.blp
ElvUI_SLE/media/textures/crests/Draenei.blp
ElvUI_SLE/media/textures/crests/Dwarf.blp
ElvUI_SLE/media/textures/crests/Gnome.blp
ElvUI_SLE/media/textures/crests/Goblin.blp
ElvUI_SLE/media/textures/crests/Horde.blp
ElvUI_SLE/media/textures/crests/Human.blp
ElvUI_SLE/media/textures/crests/Neutral.blp
ElvUI_SLE/media/textures/crests/NightElf.blp
ElvUI_SLE/media/textures/crests/Orc.blp
ElvUI_SLE/media/textures/crests/Pandaren.blp
ElvUI_SLE/media/textures/crests/Scourge.blp
ElvUI_SLE/media/textures/crests/Tauren.blp
ElvUI_SLE/media/textures/crests/Troll.blp
ElvUI_SLE/media/textures/crests/Worgen.blp
ElvUI_SLE/modules/auras.lua
ElvUI_SLE/modules/autorelease.lua
ElvUI_SLE/modules/autorelease/autorelease.lua
ElvUI_SLE/modules/autorelease/load_autorelease.xml
ElvUI_SLE/modules/autorelease/options.lua
ElvUI_SLE/modules/backgrounds.lua
ElvUI_SLE/modules/backgrounds/backgrounds.lua
ElvUI_SLE/modules/backgrounds/load_backgrounds.xml
ElvUI_SLE/modules/backgrounds/options.lua
ElvUI_SLE/modules/baginfo.lua
ElvUI_SLE/modules/bags/baginfo.lua
ElvUI_SLE/modules/bags/load_bags.xml
ElvUI_SLE/modules/characterframe/characterframe.lua
ElvUI_SLE/modules/characterframe/communication.lua
ElvUI_SLE/modules/characterframe/core.lua
ElvUI_SLE/modules/characterframe/inspectframe.lua
ElvUI_SLE/modules/characterframe/load_characterframe.xml
ElvUI_SLE/modules/characterframe/options.lua
ElvUI_SLE/modules/chat.lua
ElvUI_SLE/modules/chat/chat.lua
ElvUI_SLE/modules/chat/load_chat.xml
ElvUI_SLE/modules/chat/options.lua
ElvUI_SLE/modules/dashboard/dashboard.lua
ElvUI_SLE/modules/dashboard/datapanels/bags.lua
ElvUI_SLE/modules/dashboard/datapanels/durability.lua
ElvUI_SLE/modules/dashboard/datapanels/fps.lua
ElvUI_SLE/modules/dashboard/datapanels/ms.lua
ElvUI_SLE/modules/dashboard/load_dashboard.xml
ElvUI_SLE/modules/datatexts.lua
ElvUI_SLE/modules/datatexts/add_panels.lua
ElvUI_SLE/modules/datatexts/agility.lua
ElvUI_SLE/modules/datatexts/currency.lua
ElvUI_SLE/modules/datatexts/dashboard/dashboard.lua
ElvUI_SLE/modules/datatexts/dashboard/datapanels/bags.lua
ElvUI_SLE/modules/datatexts/dashboard/datapanels/durability.lua
ElvUI_SLE/modules/datatexts/dashboard/datapanels/fps.lua
ElvUI_SLE/modules/datatexts/dashboard/datapanels/ms.lua
ElvUI_SLE/modules/datatexts/dashboard/load_dashboard.xml
ElvUI_SLE/modules/datatexts/energyregen.lua
ElvUI_SLE/modules/datatexts/friends.lua
ElvUI_SLE/modules/datatexts/guild.lua
ElvUI_SLE/modules/datatexts/intellect.lua
ElvUI_SLE/modules/datatexts/itemlevel.lua
ElvUI_SLE/modules/datatexts/lfr.lua
ElvUI_SLE/modules/datatexts/load_datatexts.xml
ElvUI_SLE/modules/datatexts/mail.lua
ElvUI_SLE/modules/datatexts/micromenu.lua
ElvUI_SLE/modules/datatexts/options.lua
ElvUI_SLE/modules/datatexts/played.lua
ElvUI_SLE/modules/datatexts/range.lua
ElvUI_SLE/modules/datatexts/regen.lua
ElvUI_SLE/modules/datatexts/spirit.lua
ElvUI_SLE/modules/datatexts/stamina.lua
ElvUI_SLE/modules/datatexts/strength.lua
ElvUI_SLE/modules/datatexts/time.lua
ElvUI_SLE/modules/datatexts/version.lua
ElvUI_SLE/modules/equipmanager.lua
ElvUI_SLE/modules/equipmanager/equipmanager.lua
ElvUI_SLE/modules/equipmanager/load_equipmanager.xml
ElvUI_SLE/modules/equipmanager/options.lua
ElvUI_SLE/modules/exprepbar.lua
ElvUI_SLE/modules/exprepbar/exprepbar.lua
ElvUI_SLE/modules/exprepbar/load_exprepbar.xml
ElvUI_SLE/modules/exprepbar/options.lua
ElvUI_SLE/modules/farm.lua
ElvUI_SLE/modules/farm/farm.lua
ElvUI_SLE/modules/farm/load_farm.xml
ElvUI_SLE/modules/farm/options.lua
ElvUI_SLE/modules/imports/load_imports.xml
ElvUI_SLE/modules/imports/options.lua
ElvUI_SLE/modules/install/BigWigs.lua
ElvUI_SLE/modules/install/BigWigsFights.lua
ElvUI_SLE/modules/install/BigWigsIcon.lua
ElvUI_SLE/modules/install/Clique.lua
ElvUI_SLE/modules/install/Hermes.lua
ElvUI_SLE/modules/install/Skada.lua
ElvUI_SLE/modules/install/install.lua
ElvUI_SLE/modules/install/installer.lua
ElvUI_SLE/modules/install/load_install.xml
ElvUI_SLE/modules/install/xCT+.lua
ElvUI_SLE/modules/load_modules.xml
ElvUI_SLE/modules/loot.lua
ElvUI_SLE/modules/loot/load_loot.xml
ElvUI_SLE/modules/loot/loot.lua
ElvUI_SLE/modules/loot/options.lua
ElvUI_SLE/modules/marks/flares.lua
ElvUI_SLE/modules/marks/load_marks.xml
ElvUI_SLE/modules/marks/marks.lua
ElvUI_SLE/modules/marks/options.lua
ElvUI_SLE/modules/minimap/instance.lua
ElvUI_SLE/modules/minimap/load_minimap.xml
ElvUI_SLE/modules/minimap/minimapcoords.lua
ElvUI_SLE/modules/minimap/minimapicons.lua
ElvUI_SLE/modules/minimap/options.lua
ElvUI_SLE/modules/nameplates.lua
ElvUI_SLE/modules/nameplates/load_nameplates.xml
ElvUI_SLE/modules/nameplates/nameplates.lua
ElvUI_SLE/modules/nameplates/options.lua
ElvUI_SLE/modules/options.lua
ElvUI_SLE/modules/pvpmover.lua
ElvUI_SLE/modules/pvpmover/pvpmover.lua
ElvUI_SLE/modules/raidutility.lua
ElvUI_SLE/modules/raidutility/load_raidutility.xml
ElvUI_SLE/modules/raidutility/raidutility.lua
ElvUI_SLE/modules/screensaver.lua
ElvUI_SLE/modules/sledatatexts/agility.lua
ElvUI_SLE/modules/sledatatexts/currency.lua
ElvUI_SLE/modules/sledatatexts/energyregen.lua
ElvUI_SLE/modules/sledatatexts/friends.lua
ElvUI_SLE/modules/sledatatexts/guild.lua
ElvUI_SLE/modules/sledatatexts/intellect.lua
ElvUI_SLE/modules/sledatatexts/itemlevel.lua
ElvUI_SLE/modules/sledatatexts/lfr.lua
ElvUI_SLE/modules/sledatatexts/load_datatexts.xml
ElvUI_SLE/modules/sledatatexts/mail.lua
ElvUI_SLE/modules/sledatatexts/micromenu.lua
ElvUI_SLE/modules/sledatatexts/played.lua
ElvUI_SLE/modules/sledatatexts/range.lua
ElvUI_SLE/modules/sledatatexts/regen.lua
ElvUI_SLE/modules/sledatatexts/spirit.lua
ElvUI_SLE/modules/sledatatexts/stamina.lua
ElvUI_SLE/modules/sledatatexts/strength.lua
ElvUI_SLE/modules/sledatatexts/time.lua
ElvUI_SLE/modules/sledatatexts/version.lua
ElvUI_SLE/modules/threat.lua
ElvUI_SLE/modules/tooltip.lua
ElvUI_SLE/modules/tooltip/load_tooltip.xml
ElvUI_SLE/modules/tooltip/options.lua
ElvUI_SLE/modules/tooltip/tooltip.lua
ElvUI_SLE/modules/uibuttons.lua
ElvUI_SLE/modules/uibuttons/load_uibuttons.xml
ElvUI_SLE/modules/uibuttons/options.lua
ElvUI_SLE/modules/uibuttons/uibuttons.lua
ElvUI_SLE/modules/unitframes.lua
ElvUI_SLE/modules/unitframes/load_unitframes.xml
ElvUI_SLE/modules/unitframes/options.lua
ElvUI_SLE/modules/unitframes/tags.lua
ElvUI_SLE/modules/unitframes/units/load_units.xml
ElvUI_SLE/modules/unitframes/units/player.lua
ElvUI_SLE/modules/unitframes/update_elements.lua
ElvUI_SLE/modules/vehicle.lua
ElvUI_SLE/modules/vehicle/load_vehicle.xml
ElvUI_SLE/modules/vehicle/options.lua
ElvUI_SLE/modules/vehicle/vehicle.lua
ElvUI_SLE/options/auras_c.lua
ElvUI_SLE/options/autorelease_c.lua
ElvUI_SLE/options/backgrounds_c.lua
ElvUI_SLE/options/characterframe_c.lua
ElvUI_SLE/options/chat_c.lua
ElvUI_SLE/options/core_c.lua
ElvUI_SLE/options/datatexts_c.lua
ElvUI_SLE/options/dev_c.lua
ElvUI_SLE/options/equipmanager_c.lua
ElvUI_SLE/options/exprepbar_c.lua
ElvUI_SLE/options/farm_c.lua
ElvUI_SLE/options/help_c.lua
ElvUI_SLE/options/imports_c.lua
ElvUI_SLE/options/load_options.xml
ElvUI_SLE/options/loot_c.lua
ElvUI_SLE/options/marks_c.lua
ElvUI_SLE/options/media_c.lua
ElvUI_SLE/options/minimap_c.lua
ElvUI_SLE/options/nameplates_c.lua
ElvUI_SLE/options/raidutility_c.lua
ElvUI_SLE/options/threat_c.lua
ElvUI_SLE/options/tooltip_c.lua
ElvUI_SLE/options/uibuttons_c.lua
ElvUI_SLE/options/unitframes_c.lua
ElvUI_SLE/options/vehicle_c.lua
ElvUI_SLE/skins/blizzard/character.lua
ElvUI_SLE/skins/blizzard/extraab.lua
ElvUI_SLE/skins/blizzard/load_blizzard.xml
ElvUI_SLE/skins/blizzard/petbattle.lua
ElvUI_SLE/skins/load_skins.xml
ToDo.txt
diff --git a/.gitignore b/.gitignore
index 5684484..d0819d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -163,3 +163,16 @@ pip-log.txt
 .DS_Store

 *.sublime*
+
+.idea/copyright/
+.idea/libraries/
+.idea/scopes/
+.idea/compiler.xml
+.idea/encodings.xml
+.idea/misc.xml
+.idea/modules.xml
+.idea/.name
+.idea/uiDesigner.xml
+.idea/vcs.xml
+.idea/workspace.xml
+*.iml
\ No newline at end of file
diff --git a/.hgignore b/.hgignore
index e28c89d..02d903c 100644
--- a/.hgignore
+++ b/.hgignore
@@ -165,3 +165,16 @@ pip-log.txt
 .DS_Store

 *.sublime*
+
+.idea/copyright/
+.idea/libraries/
+.idea/scopes/
+.idea/compiler.xml
+.idea/encodings.xml
+.idea/misc.xml
+.idea/modules.xml
+.idea/.name
+.idea/uiDesigner.xml
+.idea/vcs.xml
+.idea/workspace.xml
+*.iml
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000..f383e83
--- /dev/null
+++ b/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,10 @@
+<component name="CopyrightManager">
+  <settings default="">
+    <LanguageOptions name="Lua">
+      <option name="fileTypeOverride" value="3" />
+      <option name="block" value="false" />
+      <option name="prefixLines" value="false" />
+      <option name="filler" value="=" />
+    </LanguageOptions>
+  </settings>
+</component>
\ No newline at end of file
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index bb18388..edad471 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,355 +1,68 @@
-v1.88
-- New configuration layout has been implemented in preparation to WoD. Now options groups will not take that much space vertically.
+v2.00
+In general added a lot of new stuff and improved the way everything works.
+
+Configuration:
+New configuration layout has been implemented in preparation to WoD. Now options groups will not take that much space vertically. Takes some time to get used to though.
+- Most of the options are now concentrated in Settings group divided by General, Minimap, Raid Marks, Equip Manager, Farm and Loot subgroups.
+- Media group contains options for Zone and Subzone titles, Mail and Chat Editbox fonts
 - Character window options have been moved to the new "Armory" group. The Armory module handles not only character window but inspect window as well. If enabled inspect option in the right-click menu will became blue.
-- Added Range Datatext
-- Added iLvl Datatext
-- Added Agility Datatext
-- Added Intellect Datatext
-- Added Stamina Datatext
-- Added Strength Datatext
-- Added Energy Regen Datatext
+- Panels and Dashboard now houses not only datatext options but background frames as well
+- New About/Help group contains various links to the download/bug report locations
+- S&L Install isn't included in ElvUI's installation process and launches only after normal install is complete or manually.
+- Added nameplate options. You are now able to see your aggro and a number of people in your group targeting each unit
+
+Auras (Buffs/Debuffs):
+- Option to remove the time remaining for buffs/debuffs for a more minimal look
+
+Background Panels:
+- Added alpha option to background panels
+
+Character Frame (Armory Mode):
+- Fixed taint that was in live version and 6.0
+
+Chat:
+- Added an option to show an icon near Guild Master's messages in guild chat. Reminds people of who is the boss around here.
+- No longer forcing chat data panels repositioning on users.
+- Added two buttons to reset chat history and editbox history.
+
+Datatexts:
+- Added a number of datatexts
+-- Range Datatext
+-- iLvl Datatext
+-- Agility Datatext
+-- Intellect Datatext
+-- Stamina Datatext
+-- Strength Datatext
+-- Energy Regen Datatext
 - S&L Friends Datatext now filters double instances of B-Net friends
-- Version Datatext now shows right ElvUI version instead of 7.00
+- Version Datatext now shows full ElvUI version instead of only 2 digits of minor version number
+- Added alpha option to datatext panels
+
+Incompatible addons:
 - Updated the Enhanced Incompatible Message so it can be ignored/Disable Enhanced Addon before reporting issues
-- Some backend clean up
+- No more identical module names with other ElvUI plugins = no more unexpected incompatibilities!
+- At the moment next addons are incompatible with Shadow & Light cause they are doing exactly the same:
+-- ElvUI_Enhanced
+-- Loot Confirm
+-- SquareMinimapButtons
+
+Loot:
+- Loot announcer now shows item's ilvl allowing to tell apart warforged and regular gear
+- Added override option to announce loot with out needing a modifier or by selecting a modifier
+- Added options to automatically confirm loot collecting for BoP and disenchanting
+- Added options to automatically roll greed and/or disenchant for selected quality of items on max level or after the selected level of your choice. With ElvUI's option, you can only greed green quality items if no enchanter is in the group.
+- Disabled ElvUI's Auto Greed/DE option when our auto loot module is enabled
+
+Minimap:
 - Changed Minimap Icons to enable/disable skinning of the icons, and enable/disable the bar if skinning is enabled.
-- Added new tag [range:sl] to show range on frames like target, focus and such
-- Added nameplate options for people
-
-v1.87
-- Fixed chat spam on opening of character window.
-
-v1.86 March 11, 2014
-- Added option to Show/Hide Squareminimap Bar during pet battles
-- Updated chat module to be updated with elvui
-- exp/rep bar code clean up
-- Update minimum width/height on background panel due to requests
-- Added Gem Hiding function for character frame
-- Added new textures for chacter frame background
-- Added hiding squareminimap bar during pet battles
-- Made squareminimap bar a mover by multiple request
-
-v1.85 March 3, 2014
-- Added ability to select background image on character screen as well set a custom image
-- Added ability to show enchant on mouseover in character screen
-- Added Show/Hide Durability & Item Level
-
-v1.84 March 1, 2014
-- SmartBuff MiniMap Icon Fix
-
-v1.83 March 1, 2014
-- Fixed QuestPointer/Mapster Button in minimap.
-- Option to skin or not skin lfd icon
-- Removed Notes Skin (Add in ElvUI AddOnSkins)
-- Added Skin Mail Icon Notification
-
-v1.82 February 25, 2014
-- Fixed currency datatext errors for non-english clients
-- Currency datatext can now hide cerrensies set to unused (look for the option in S&L Currency config)
-- Fixed way too long enchants strings in character frame on Ru locale
-- Some missed localization lines added
-
-v1.81 February 25, 2014
-- Minimap Icon overhaul
-- ElvUI 6.94-6.991 Chat update
-- Character Frame Overhaul (Armory Type Display)
-- Added an Enhanced Vehicle Bar
-- Added New S&L Currency Datatext
-- Added Equipment Set Display for items in bag
-
-v1.80 December 22, 2013
-- Updated stuff to ElvUI current release
-- Fixed Tooltip Flicker if using the offset
-- Fixed Guild List
-- Ghost frame mover is no longer real small on initial login or reloadui
-
-v1.79 November 20, 2013
-- Character Frame ilvl for Garrosh Heirlooms corrected
-- Hearthstone now shows correctly on bnet for S&L Friends Datatext
-- Some tweaks to the autorelease to account for shammy reincarnate
-- Update chat module for some of elvui changes
-- Added mover for release spirit
-- Fixed S&L Friends Datatext nil error
-
-v1.78 November 12, 2013
-- Fixed Time Played Datatext (Thnx Caedis)
-- Added VEM to boss button to the ui button
-- Attempt to help fix some proving ground errors
-- Removed OCES skin b/c its in ElvUI Addon Skins
-
-v1.77 October 18, 2013
-- Added Faction icon to tooltip option
-
-v1.76 October 12, 2013
-- Fix for install errors when using authors' settings
-
-v1.75 October 4, 2013
-- Fix parsing url, addon, smiley stuff in chat
-
-v1.74 October 4, 2013
-- Rewritten chat module to really work
-
-v1.73 October 2, 2013
-- Real chat fix
-
-v1.72 October 2, 2013
-- More Chat Fixes to reflect what elv has done
-
-v1.71 October 1, 2013
-- Fix for people using S&L couldn't see LFG role icons in chat. Also fixed icons of people using S&L wasn't shown in original ElvUI.
-
-v1.70 September 27, 2013
-- Some SoO LFR DT Info
-
-v1.69 September 20, 2013
-- Code catch up with ElvUI
-- Added warning to show if items are not enchanted (beta, please submit a ticket on curse or github with issues)
-
-v1.68 September 13, 2013
-- Bug fixes
-- Backend updates
-
-v1.67 September 10, 2013
-- GameTooltip offset option added if ElvUI Tooltip anchor is set to cursor
-- Developer backend updates/additions
-- Removed DBM Font Size option (ElvUI AddonSkins has it now)
-- Added mail datatext
-- Fixed a bug with quest items usable from watch frame
-- Status for Key to the Palace of Lei Shen and Trove of the Thunder King can now be hidden from time datatext tooltip. Hidden by default.
-
-v1.66 June 3, 2013
-- Added ilvl to heirlooms
-- Upgrade vendor updates ilvl of item on charater frame right away
-
-v1.65 May 21, 2013
-- Darth's Layout Modified
-- Added spacing for UI Buttons
-- Modified time datatext for flashing
-
-v1.64 April 17, 2013
-- Update Affinitii Filter Import (Added General Filters)
-
-v1.63 April 10, 2013
-- Removed offset option for classbar, it's no longer needed
-- Added Flare Marker Bar & Keybind options for it.
-
-v1.62 March 24, 2013
-- Removed Caster Name in tooltip, was added in ElvUI
-- Another attempt to fix player frame resizing if Classbar offset was enabled in S&L
-
-v1.61 March 23, 2013
-- Hide Coords During Pet Battle
-- Added options to hide S&L Datatext Panels during Pet Battles
-
-v1.60 March 22, 2013
-- Fixed AceConfig Error
-- Fixed LUA Error on Repooc install
-
-v1.59 March 19, 2013
-- Fixed Curse Ticket: #15
-- Added S&L Guild Datatext
-- Added S&L Friends Datatext
-- Tweaked Darth & Repooc's Config
-- Optimized Farm Module
-
-v1.58 March 15, 2013
-- Removed ElvUIPlugin Library
-- Farm module optimized
-- Seed bags bought for seeds are now taken into account by farm module
-
-v1.57 March 13, 2013
-- Sortokk forgot to add spirit into xml file cough cough
-
-v1.56 March 13, 2013
-- Added Spirit Datatext
-
-v1.55 March 13, 2013
-- Remove Debug Message
-
-v1.54 March 13, 2013
-- Add autotrack reputation
-- Updated Libraries
-- Updated Author installs
-
-v1.53 March 8, 2013
-- Optimize Farm Module
-- Update install to be updated with ElvUI variables
-
-v1.52 March 6, 2013
-- Fixed farm bar seed bag count not updating on use
-
-v1.51 March 6, 2013
-Fixed compatibility issue with Location Plus pligin. Hopefully forever
-
-v1.5 March 5, 2013
-- Some typos fixed
-- Datatext panels can now be transparent
-- Background frames no longer have offset options, now they have own movers
-- Background frames template doesn't require reload and is a profile based option
-- Movers created by S&L now are grouped by own categories just like in ElvUI itself (Note: background frames' movers are available ONLY in those groups)
-- Raid Marks now properly update setting on profile change
-- Raid Marks module now has an option to hide backdrop for it's main panel
-- Added Item Level overlay on item slots
-- Added Item Durability overlay on item slots
-- Added Equipment Manager per spec/zone
-- Added Farm module to make farming easier.
-- Added skinning of minimap buttons
-- Added coordinates to the minimap
-- LFR Lockout tracking in time datatext now has options to choose what daungeons you want to show there
-- Top datapanel info can now be changed by user
-- You will now receive chat message if someone in your group/raid has newer version of S&L
-- Add Affinitii's (Blood Legion) UI Layout
-- Darth's Layout Modified
-- Added loot announce function
-
-v1.42 (January 31, 2013)
-- Curse being stupid and fixed changelog b/c darth dont realize there are 31 days in Jan.
-
-v1.41 (January 31, 2013)
-- Fixed version datatext error
-
-v.1.4a (January 30, 2013)
-- Fix for pet battle actionbar detached from the mover
-
-v1.4 (January 21, 2013)
-- Fix for LFR info not available on toltip for time datatext
-
-v1.39 (January 19, 2013)
-- Fixed stack overflow on pet battles
-- Fixed overlooked missing english locale
-
-v1.38 (January 18, 2013)
-- Fixed to work with ElvUI 5.26
-
-v1.37 (January 8, 2013)
-- Decimals are once again shown for hp/power texts on unit frames for full values
-
-v1.36 (January 8, 2013)
-- Some tweaks to better work with ElvUI 5.20
-
-v1.35 (December 28, 2012)
-- Fixed compatibility with full Location Plus version
-
-v1.34 (December 12, 2012)
-- Fixed rune bar error when using classbar offset
-
-v1.33 (December 2, 2012)
-- Fixed errors on auras tooltips
-- Fixed health bar height with classbar offset enabled
-
-v1.32 (November 27, 2012)
-- Config updated
-
-v1.31 (November 27, 2012)
-- Repooc config updated
-
-v1.3 (November 27, 2012)
-- Authors' layouts have been changed
-- Mount serach was deleted, Blizzard added that themselves
-- Some adjustions for pixel perfect mode to make things look good
-- Caster name in auras' tooltips is now profile based option
-- An option added to chosee if you want your power text to be on power bar or health bar (health by default as in normal ElvUI)
-- Raid Utility options removed. Now it's fully movable with it's own mover
-- Added a mover for world/BG pvp score - Hellfire towers, AV reinforcements, AB resources, etc. (Darth grow tired of using MoveAnything)
-- Capture bar is now docked to the bottom of a new mover
-- Show errors in combat is now profile based option
-- Added S&L version number to version datatext, login message and config
-- Buttons for resetting all S&L options or just desired group's options have been added
-- You can now see changelog in game
-- Added alternative mene regen datatext called "MP5". It shows an "mp5" title instead of "mana regen"
-
-v1.22 (November 8, 2012)
-- Fixed our settings packs in installation
-- You will be able to see your castbar and other stuff while in vehicle again (apparently it was there for ages and no one reported that o_O)
-- The option to hide combat indicator was removed. You can choose to hide it in it's positioning dropdown list now.
-- Fixed some issues with loading that resulted in disappearing of S&L mover group in config mode.
-
-v1.21 (November 1, 2012)
-- Fixed small error
-
-v1.20 (November 1, 2012)
-- Code catch up with ElvUI
-- Some code restructure to reduce memory
-- Small fixes/tweaks
-
-v1.19 (October 24, 2012)
-- Code catch up with ElvUI
-- Added show/hide option for errors in combat (out of LoS, on cooldown, etc)
-- Changed the way reputation is shown on bar
-- Added Ampere Addon Control Panel to UI Buttons
-- Fixed wrong rested percent with cur-percent mode of experience bar (195000000% of rested? Easy)
-- Added new options for loot history frame
-- Add ability to show Raid Markers only in the instance.
-
-v1.18 (October 9, 2012)
-- Fixed red flying could not showing in the mount list
-
-v1.17 (September 30, 2012)
-- Fixed Mount Search bug when skinning was disabled.
-- Fixed Background Panels & Pet Battle Bar having frame level issues.
-- Fixed left chat being to close to the edge of the frame.
-- Added ability to show/hide background panels during pet battles
-
-v1.16 (September 24, 2012)
-- Added Search Feature for Mount Window by p3lim
-- Fixed lua error about missing locale for ElvUI Hud during install process(It was mistyped)
-- Fixed Raid Marker not toggling off
-
-v1.15 (September 7, 2012)
-- Fix Curse Ticket #3
-
-v1.14 (September 5, 2012)
-- Updated Install to catch up with ElvUI
-- Updated Repooc Settings to more current setup
-
-v1.13 (September 1, 2012)
-- Fixed Combat Icon Error when ElvUI Unitframes were disabled.
-- Updated Install file to ElvUI additions
-
-v1.12 (August 31, 2012)
-- Fixed Time Datatext error
-
-v1.11 (August 30, 2012)
-- Fixrd editbox positioning when ElvUI chat is disabled
-
-v1.1 (August 28, 2012)
-- (Backend) Optimize Druid Resource
-- (Backend) Private options now use Elv's popus
-- Added Demonic Fury number on warlock classbar
-- Added debuff resizing
-- Added hiding for combat ico
-- Readded castername in buff/debuff icon due to darth rewriting auras.lua and not doing his job
-- Moved options for auras to its own category
-- Removed some skinning of addons as we are now working with Azilroka on the skinning package.
-- Removed embed right fix due it being removed from ElvUI
-- Fixed the chat text going over the panel's border
-- Options for full values on hp/power text changed due to ElvUI's changes in text formatting. Now you can use tags. Just add a ":sl" at the end of the health or power tag to get full value. Doesn't work with percent.
-- Background frames now have an option for transparancy
-- Exp/Rep bar text options were changed to show full or short values
-- Added an option to move editbox for chat pannels
-- PvP text options were removed, ElvUI now has it's own
-- Removed Skada and DBM skins
-- Removed Pet Autocast option
-- Changed positions of some options
-
-v1.03 (July 25, 2012)
-- Fixed Combatlog not anchoring correctly in right panel as the only chat window
-- Fixed Microbar Bug (Leave combat issue)
-- Added the vengeance bar for tanks (without options atm)
-- Deleted keywords sounds (Elv has his own)
-- Increased the recommended version number
+- Added an option to show instance mode with text instead of texture on minimap.

-v1.02 (July 15, 2012)
-- Updated Repooc install
-- Added Poisner Skin
-- Added Outfitter skin
-- Fixed Microbar Bug
-- Fixed RaidUtility button not changing position on profile change
+Pet Battles:
+- Added the ability to move pets' health, buffs and all that stuff around

-v1.01 (July 11, 2012)
-- Skada/Recount embedright tweaked
-- Minor install tweaks
-- Added Alphabet layout to Microbar
+Raid Marks:
+- Added mouseover option for both Marks and Flares
+- Added an option for Raid Marks to appear only if target is selected

-v1.0 (July 7, 2012)
-- Inital Release
\ No newline at end of file
+Unitframes:
+- Added new tag [range:sl] to show range on frames like target, focus and such
\ No newline at end of file
diff --git a/ElvUI_SLE/ElvUI_SLE.lua b/ElvUI_SLE/ElvUI_SLE.lua
deleted file mode 100755
index 79a52ea..0000000
--- a/ElvUI_SLE/ElvUI_SLE.lua
+++ /dev/null
@@ -1,208 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local SLE = E:NewModule('SLE', 'AceHook-3.0', 'AceEvent-3.0');
-local UF = E:GetModule('UnitFrames');
-local DTP
-local EP = LibStub("LibElvUIPlugin-1.0")
-local addon = ...
-
---localizing functions--
-local IsInInstance = IsInInstance
-local tinsert = tinsert
-
-SLE.version = GetAddOnMetadata("ElvUI_SLE", "Version")
-E.SLEConfigs = {}
-
-function SLE:Tutorials() --Additional tutorials
-	tinsert(E.TutorialList, #(E.TutorialList)+1, L["To enable full values of health/power on unitframes in Shadow & Light add \":sl\" to the end of the health/power tag.\nExample: [health:current:sl]."]);
-end
-
-function SLE:ConfigCats() --Additional mover groups
-	tinsert(E.ConfigModeLayouts, #(E.ConfigModeLayouts)+1, "S&L");
-	E.ConfigModeLocalizedStrings["S&L"] = L["S&L: All"]
-	tinsert(E.ConfigModeLayouts, #(E.ConfigModeLayouts)+1, "S&L DT");
-	E.ConfigModeLocalizedStrings["S&L DT"] = L["S&L: Datatexts"]
-	tinsert(E.ConfigModeLayouts, #(E.ConfigModeLayouts)+1, "S&L BG");
-	E.ConfigModeLocalizedStrings["S&L BG"] = L["S&L: Backgrounds"]
-	tinsert(E.ConfigModeLayouts, #(E.ConfigModeLayouts)+1, "S&L MISC");
-	E.ConfigModeLocalizedStrings["S&L MISC"] = L["S&L: Misc"]
-end
-
-function SLE:LootShow()
-	local instance = IsInInstance()
-	LootHistoryFrame:SetAlpha(E.db.sle.lootalpha or 1)
-
-	if (not instance and E.db.sle.lootwin) then
-		LootHistoryFrame:Hide()
-	end
-end
-
-function SLE:ChatPos()
-	if not E:HasMoverBeenMoved("LeftChatMover") and E.db.datatexts.leftChatPanel then
-		if not E.db.movers then E.db.movers = {}; end
-		if E.PixelMode then
-			E.db.movers.LeftChatMover = "BOTTOMLEFTUIParentBOTTOMLEFT019"
-		else
-			E.db.movers.LeftChatMover = "BOTTOMLEFTUIParentBOTTOMLEFT021"
-		end
-		E:SetMoversPositions()
-	end
-
-	if not E:HasMoverBeenMoved("RightChatMover") and E.db.datatexts.rightChatPanel then
-		if not E.db.movers then E.db.movers = {}; end
-		if E.PixelMode then
-			E.db.movers.RightChatMover = "BOTTOMRIGHTUIParentBOTTOMRIGHT019"
-		else
-			E.db.movers.RightChatMover = "BOTTOMRIGHTUIParentBOTTOMRIGHT021"
-		end
-		E:SetMoversPositions()
-	end
-end
-
-E.UpdateAllSLE = E.UpdateAll
-function E:UpdateAll()
-    E.UpdateAllSLE(self)
-	E:GetModule('BackGrounds'):UpdateFrames()
-	E:GetModule('BackGrounds'):RegisterHide()
-	DTP:Update()
-	DTP:DashboardShow()
-	DTP:DashWidth()
-	if E.private.unitframe.enable then
-		UF:Update_CombatIndicator()
-	end
-	E:GetModule('UIButtons'):UpdateAll()
-	E:GetModule('RaidMarks'):Update()
-	E:GetModule('Farm'):UpdateLayout()
-	SLE:ChatPos()
-end
-
-function SLE:Reset(all, uf, dt, bg, mark)
-	if all then --Reset All button
-		E:CopyTable(E.db.sle, P.sle)
-		E:ResetMovers(L["DP_1"])
-		E:ResetMovers(L["DP_2"])
-		E:ResetMovers(L["DP_3"])
-		E:ResetMovers(L["DP_4"])
-		E:ResetMovers(L["DP_5"])
-		E:ResetMovers(L["DP_6"])
-		E:ResetMovers(L["Top_Center"])
-		E:ResetMovers(L["Bottom_Panel"])
-		E:ResetMovers(L["Dashboard"])
-		E:ResetMovers(L["Pet Battle AB"])
-		E:ResetMovers("PvP")
-		E:ResetMovers('RM')
-		E:ResetMovers(L["UI Buttons"])
-		E:ResetMovers(L["Bottom BG"])
-		E:ResetMovers(L["Left BG"])
-		E:ResetMovers(L["Right BG"])
-		E:ResetMovers(L["Actionbar BG"])
-	end
-	if uf then
-		E.db.sle.combatico.pos = 'TOP'
-		E:CopyTable(E.db.unitframe.units.player.classbar, P.unitframe.units.player.classbar)
-		E.db.sle.powtext = false
-	end
-	if dt then
-		E:CopyTable(E.db.sle.datatext, P.sle.datatext)
-		E:ResetMovers(L["DP_1"])
-		E:ResetMovers(L["DP_2"])
-		E:ResetMovers(L["DP_3"])
-		E:ResetMovers(L["DP_4"])
-		E:ResetMovers(L["DP_5"])
-		E:ResetMovers(L["DP_6"])
-		E:ResetMovers(L["Top_Center"])
-		E:ResetMovers(L["Bottom_Panel"])
-		E:ResetMovers(L["Dashboard"])
-	end
-	if bg then
-		E:CopyTable(E.db.sle.backgrounds, P.sle.backgrounds)
-		E:ResetMovers(L["Bottom BG"])
-		E:ResetMovers(L["Left BG"])
-		E:ResetMovers(L["Right BG"])
-		E:ResetMovers(L["Actionbar BG"])
-	end
-	if mark then
-		E:CopyTable(E.db.sle.marks, P.sle.marks)
-		E:ResetMovers('RM')
-	end
-	E:UpdateAll()
-end
-
-function SLE:BagSearch(itemId)
-	for container = 0, NUM_BAG_SLOTS do
-		for slot = 1, GetContainerNumSlots(container) do
-			if itemId == GetContainerItemID(container, slot) then
-				return container, slot
-			end
-		end
-	end
-end
-
-function SLE:ValueTable(table, item)
-	for i, _ in pairs(table) do
-		if i == item then return true end
-	end
-	return false
-end
-
-function SLE:SimpleTable(table, item)
-	for i = 1, #table do
-		if table[i] == item then
-			return true
-		end
-	end
-	return false
-end
-
-function SLE:Print(msg)
-	print(E["media"].hexvaluecolor..'S&L:|r', msg)
-end
-
-function SLE:GetOptions()
-	for _, func in pairs(E.SLEConfigs) do
-		func()
-	end
-end
-
-function SLE:IncompatibleAddOn(addon, module, optiontable, value)
-	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].button1 = addon
-	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].button2 = 'S&L: '..module
-	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].addon = addon
-	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].module = module
-	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].optiontable = optiontable
-	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].value = value
-	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].showAlert = true
-	E:StaticPopup_Show('SLE_INCOMPATIBLE_ADDON', addon, module)
-end
-
-function SLE:CheckIncompatible()
-	if IsAddOnLoaded('ElvUI_Enhanced') and not E.global.ignoreEnhancedIncompatible then
-		E:StaticPopup_Show('ENHANCED_SLE_INCOMPATIBLE')
-	end
-	if IsAddOnLoaded('SquareMinimapButtons') and E.private.sle.minimap.mapicons.enable then
-		SLE:IncompatibleAddOn('SquareMinimapButtons', 'SquareMinimapButtons', E.private.sle.minimap.mapicons, "enable")
-	end
-end
-
-function SLE:Initialize()
-	--Showing warning message about too old versions of ElvUI
-	if tonumber(E.version) < 6.998 then
-		E:StaticPopup_Show("VERSION_MISMATCH")
-	end
-	EP:RegisterPlugin(addon,SLE.GetOptions)
-	DTP = E:GetModule('DTPanels')
-	if E.private.unitframe.enable then
-		self:RegisterEvent("PLAYER_REGEN_DISABLED", UF.Update_CombatIndicator);
-	end
-	self:RegisterEvent('PLAYER_ENTERING_WORLD', 'LootShow');
-	if E.db.general.loginmessage then
-		print(format(L['SLE_LOGIN_MSG'], E["media"].hexvaluecolor, SLE.version))
-	end
-	DTP:DashboardShow()
-	SLE:Tutorials()
-	SLE:ConfigCats()
-	SLE:ChatPos()
-	SLE:RegisterCommands()
-	SLE:CheckIncompatible()
-end
-
-E:RegisterModule(SLE:GetName())
\ No newline at end of file
diff --git a/ElvUI_SLE/ElvUI_SLE.toc b/ElvUI_SLE/ElvUI_SLE.toc
old mode 100755
new mode 100644
index 07f1220..f0458e3
--- a/ElvUI_SLE/ElvUI_SLE.toc
+++ b/ElvUI_SLE/ElvUI_SLE.toc
@@ -1,7 +1,7 @@
-## Interface: 50400
+## Interface: 60000
 ## Title: |cff1784d1ElvUI |rShadow and Light
 ## Author: Darth Predator, Repooc
-## Version: 1.88
+## Version: 2.00
 ## Notes: Plugin-edit for |cff1784d1ElvUI|r.
 ## Notes-ruRU: Плагин-редакция для |cff1784d1ElvUI|r.
 ## eMail: darthpred@gmail.com, repooc@tukui.org
@@ -11,14 +11,14 @@
 ## DefaultState: Enabled
 ## X-Tukui-ProjectID: 42
 ## X-Tukui-ProjectFolders: ElvUI_SLE
+## X-ElvVersion: 7.00

 libs\load_libs.xml
 locales\load_locales.xml
 media\load_media.xml
-ElvUI_SLE.lua
+core\load_core.xml
 modules\load_modules.xml
+defaults\load_defaults.xml
+options\load_options.xml
 skins\load_skins.xml
-config\load_config.xml
-layout\layout.lua
-dev\load_dev.xml
 Bindings.xml
\ No newline at end of file
diff --git a/ElvUI_SLE/config/load_config.xml b/ElvUI_SLE/config/load_config.xml
deleted file mode 100755
index 31e82cc..0000000
--- a/ElvUI_SLE/config/load_config.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file="profile.lua"/>
-	<Script file="sle_private.lua"/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/config/profile.lua b/ElvUI_SLE/config/profile.lua
deleted file mode 100755
index f640449..0000000
--- a/ElvUI_SLE/config/profile.lua
+++ /dev/null
@@ -1,310 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-
-P['sle'] = {
-	--Autoloot
-	['lootwin'] = false,
-	['lootalpha'] = 1,
-
-	--Auto release
-	['pvpautorelease'] = true,
-
-	--Background frames
-	['backgrounds'] = {
-		['bottom'] = {
-			['enabled'] = false,
-			['trans'] = false,
-			['texture'] = "",
-			['width'] = E.screenwidth/4 + 32,
-			['height'] = E.screenheight/6 - 13,
-			['xoffset'] = 0,
-			['yoffset'] = 0,
-			['pethide'] = true,
-			['template'] = "Default",
-		},
-		['left'] = {
-			['enabled'] = false,
-			['trans'] = false,
-			['texture'] = "",
-			['width'] = E.screenwidth/10 - 4,
-			['height'] = E.screenheight/5 + 11,
-			['xoffset'] = 0,
-			['yoffset'] = 0,
-			['pethide'] = true,
-			['template'] = "Default",
-		},
-		['right'] = {
-			['enabled'] = false,
-			['trans'] = false,
-			['texture'] = "",
-			['width'] = E.screenwidth/10 - 4,
-			['height'] = E.screenheight/5 + 11,
-			['xoffset'] = 0,
-			['yoffset'] = 0,
-			['pethide'] = true,
-			['template'] = "Default",
-		},
-		['action'] = {
-			['enabled'] = false,
-			['trans'] = false,
-			['texture'] = "",
-			['width'] = E.screenwidth/4 + 32,
-			['height'] = E.screenheight/20 + 5,
-			['xoffset'] = 0,
-			['yoffset'] = 0,
-			['pethide'] = true,
-			['template'] = "Default",
-		},
-	},
-
-	--Caster Name
-	['castername'] = false,
-
-	--Character Frame Options
-	['characterframeoptions'] = {
-		['shownormalgradient'] = true,
-		['showerrorgradient'] = true,
-		['showimage'] = true,
-		['image'] = {
-			['dropdown'] = "SPACE",
-			['custom'] = "",
-		},
-		['itemlevel'] = {
-			['show'] = true,
-			['font'] = "ElvUI Pixel",
-			['fontSize'] = 10,
-			['fontOutline'] = "OUTLINE",
-		},
-		['itemdurability'] = {
-			['show'] = true,
-			['font'] = "ElvUI Pixel",
-			['fontSize'] = 10,
-			['fontOutline'] = "OUTLINE",
-		},
-		['itemenchant'] = {
-			['show'] = true,
-			['font'] = "ElvUI Pixel",
-			['fontSize'] = 10,
-			['fontOutline'] = "OUTLINE",
-			['showwarning'] = true,
-			['warningSize'] = 12,
-			['mouseover'] = false,
-		},
-		['itemgem'] = {
-			['show'] = true,
-			['showwarning'] = true,
-			['socketSize'] = 12,
-			['warningSize'] = 12,
-		},
-	},
-
-	--Combat Icon
-	['combatico'] = {
-		['pos'] = 'TOP',
-	},
-
-	--Datatexts panels
-	['datatext'] = {
-		['dp1'] = {
-			['enabled'] = false,
-			['width'] = E.screenwidth/5,
-			['pethide'] = true,
-		},
-		['dp2'] = {
-			['enabled'] = false,
-			['width'] = E.screenwidth/5,
-			['pethide'] = true,
-		},
-		['top'] = {
-			['enabled'] = true,
-			['width'] = E.screenwidth/5 - 4,
-			['pethide'] = true,
-		},
-		['dp3'] = {
-			['enabled'] = false,
-			['width'] = E.screenwidth/5,
-			['pethide'] = true,
-		},
-		['dp4'] = {
-			['enabled'] = false,
-			['width'] = E.screenwidth/5,
-			['pethide'] = true,
-		},
-		['dp5'] = {
-			['enabled'] = false,
-			['width'] = E.screenwidth/4 - 60,
-			['pethide'] = true,
-		},
-		['bottom'] = {
-			['enabled'] = false,
-			['width'] = E.screenwidth/10 - 4,
-			['pethide'] = true,
-		},
-		['dp6'] = {
-			['enabled'] = false,
-			['width'] = E.screenwidth/4 - 60,
-			['pethide'] = true,
-		},
-		['chatleft'] = {
-			['enabled'] = true,
-			['width'] = 396,
-		},
-		['chatright'] = {
-			['enabled'] = true,
-			['width'] = 396,
-		},
-		['dashboard'] = {
-			['enable'] = false,
-			['width'] = 100,
-		},
-	},
---E.db.sle.dt.guild.totals
-	--DT Options
-	['dt'] = {
-		['friends'] = {
-			['combat'] = false,
-			['hideFriends'] = false,
-			['sortBN'] = 'TOONNAME',
-			['tooltipAutohide'] = 0.2,
-			['totals'] = false,
-		},
-		['guild'] = {
-			['combat'] = false,
-			['hideGuild'] = false,
-			['sortGuild'] = 'TOONNAME',
-			['tooltipAutohide'] = 0.2,
-			['totals'] = false,
-		},
-		['mail'] = {
-			['icon'] = true,
-		},
-	},
-
-	--Exp/Rep Bar
-	['exprep'] = {
-		['explong'] = false,
-		['replong'] = false,
-	},
-
-	--Farm Module
-	['farm'] = {
-		['active'] = true,
-		['size'] = 30,
-		['autotarget'] = false,
-		['seedor'] = "TOP",
-		['quest'] = false,
-	},
-
-	--LFR options
-	['lfrshow'] = {
-		['enabled'] = false,
-		['ds'] = false,
-		['mv'] = false,
-		['hof'] = false,
-		['toes'] = false,
-		['tot'] = false,
-		['soo'] = false,
-		['soof'] = false,
-		['leishen'] = false,
-	},
-
-	--Minimap Module
-	['minimap'] = {
-		['enable'] = false,
-		['coords'] = {
-			['display'] = "SHOW",
-			['middle'] = "CORNERS",
-		},
-		['buttons'] = {
-			['anchor'] = "NOANCHOR",
-			['size'] = 24,
-			['mouseover'] = false,
-		},
-		['mapicons'] = {
-			['iconmouseover'] = false,
-			['iconsize'] = 27,
-			['iconperrow'] = 12,
-			['pethide'] = false,
-			['skindungeon'] = false,
-		},
-	},
-
-	--Nameplate Options
-	['nameplate'] = {
-		['showthreat'] = false,
-		['targetcount'] = false,
-	},
-	--Power text on classbars
-	['powtext'] = false,
-
-	--Raid marks
-	['marks'] = {
-		['enabled'] = false,
-		['growth'] = "RIGHT",
-		['showinside'] = false,
-		['size'] = 18,
-	},
-
-	['flares'] = {
-		['enabled'] = false,
-		['growth'] = "RIGHT",
-		['showinside'] = false,
-		['size'] = 20,
-		['tooltips'] = true,
-	},
-
-	--UI Buttons
-	['uibuttons'] = {
-		['enable'] = false,
-		['size'] = 17,
-		['mouse'] = false,
-		['position'] = "uib_vert",
-		['spacing'] = 3,
-	},
-
-	--Loot
-	['loot'] = {
-		['quality'] = "EPIC",
-		['chat'] = "RAID",
-		['auto'] = true,
-	},
-
-	--Tooltip Faction Icon
-	["tooltipicon"] = false,
-}
-
-P.chat.editboxhistory = 5
-P.auras.perRow = 19
-
---Datatexts
-P.datatexts.panels.DP_1 = {
-	['left'] = '',
-	['middle'] = '',
-	['right'] = '',
-}
-P.datatexts.panels.DP_2 = {
-	['left'] = '',
-	['middle'] = '',
-	['right'] = '',
-}
-P.datatexts.panels.DP_3 = {
-	['left'] = '',
-	['middle'] = '',
-	['right'] = '',
-}
-P.datatexts.panels.DP_4 = {
-	['left'] = '',
-	['middle'] = '',
-	['right'] = '',
-}
-P.datatexts.panels.DP_5 = {
-	['left'] = '',
-	['middle'] = '',
-	['right'] = '',
-}
-P.datatexts.panels.DP_6 = {
-	['left'] = '',
-	['middle'] = '',
-	['right'] = '',
-}
-P.datatexts.panels.Top_Center = 'Version'
-P.datatexts.panels.Bottom_Panel = ''
\ No newline at end of file
diff --git a/ElvUI_SLE/config/sle_private.lua b/ElvUI_SLE/config/sle_private.lua
deleted file mode 100755
index 9a1db63..0000000
--- a/ElvUI_SLE/config/sle_private.lua
+++ /dev/null
@@ -1,66 +0,0 @@
-local E, L, V, P, G, _ =  unpack(ElvUI); --Inport: Engine, Locales, ProfileDB, GlobalDB
-V['skins']['addons'] = {
-	['EmbedSkada'] = true,
-}
-V['sle'] = {
-	['dbm'] = {
-		['size'] = 10,
-	},
-
-	--Character Frame Options
-	['characterframeoptions'] = {
-		['enable'] = false,
-	},
-
-	['inspectframeoptions'] = {
-		['enable'] = false,
-	},
-
-	["datatext"] = {
-		["dp1hide"] = false,
-		["dp2hide"] = false,
-		["tophide"] = false,
-		["dp3hide"] = false,
-		["dp4hide"] = false,
-		["dp5hide"] = false,
-		["bottomhide"] = false,
-		["dp6hide"] = false,
-	},
-
-	['exprep'] = {
-		['autotrack'] = false,
-	},
-
-	['farm'] = {
-		['enable'] = false,
-		['seedtrash'] = false,
-	},
-
-	['equip'] = {
-		['enable'] = false,
-		['spam'] = false,
-		['primary'] = "NONE",
-		['secondary'] = "NONE",
-		['instance'] = "NONE",
-		['pvp'] = "NONE",
-		['setoverlay'] = false,
-	},
-
-	--Minimap Moduel
-	['minimap'] = {
-		['buttons'] = {
-			['enable'] = true,
-		},
-		['mapicons'] = {
-			['enable'] = false,
-		},
-	},
-
-	['loot'] = {
-		['enable'] = false,
-	},
-
-	['vehicle'] = {
-		['enable'] = false,
-	},
-}
diff --git a/ElvUI_SLE/core/commands.lua b/ElvUI_SLE/core/commands.lua
new file mode 100644
index 0000000..90457e5
--- /dev/null
+++ b/ElvUI_SLE/core/commands.lua
@@ -0,0 +1,209 @@
+local E, L, V, P, G = unpack(ElvUI);
+local SLE = E:GetModule('SLE');
+local split = string.split
+
+local Message = ''
+
+--The list of authorized toons
+local Authors = {
+	["Illidan"] = {
+		--Darth's toon
+		["Darthpred"] = true,
+		--Repooc's Toon
+		["Repøøc"] = true,
+		["Repooc"] = true
+	},
+	["ВечнаяПесня"] = {
+		--Darth's toons
+		["Дартпредатор"] = true,
+		["Алея"] = true,
+		["Ваззули"] = true,
+		["Сиаранна"] = true,
+		["Джатон"] = true,
+		["Фикстер"] = true,
+		["Киландра"] = true,
+		["Нарджо"] = true,
+		["Келинира"] = true,
+		["Крениг"] = true,
+		["Мейжи"] = true
+	},
+	["Spirestone"] = {
+		["Sifupooc"] = true,
+		["Dapooc"] = true,
+		["Lapooc"] = true,
+		["Warpooc"] = true,
+		["Repooc"] = true,
+		["Cursewordz"] = true,
+	},
+	["Andorhal"] = {
+		["Dapooc"] = true,
+		["Rovert"] = true,
+		["Sliceoflife"] = true
+	},
+	["WyrmrestAccord"] = {
+		["Kìtalie"] = true,
+		["Sagome"] = true,
+		["Ainy"] = true,
+		["Norinael"] = true,
+		["Tritalie"] = true,
+		["Myùn"] = true,
+		["Nevaleigh"] = true,
+		["Celenii"] = true,
+		["Varysa"] = true,
+		["Caylasena"] = true,
+		["Arillora"] = true,
+		["Dapooc"] = true,
+	},
+	--Normal PTR
+	["Anasterian(US)"] = {
+		["Dapooc"] = true,
+	},
+	["Brill(EU)"] = {
+		["Дартпредатор"] = true,
+	},
+}
+
+function SLE:Auth(sender)
+	local senderName, senderRealm
+
+	if sender then
+		senderName, senderRealm = string.split('-', sender)
+	else
+		senderName = E.myname
+	end
+
+	senderRealm = senderRealm or E.myrealm
+	senderRealm = senderRealm:gsub(' ', '')
+
+	if Authors[senderRealm] and Authors[senderRealm][senderName] then
+		return Authors[senderRealm][senderName]
+	end
+
+	return false
+end
+
+function E:sleCommand(flag, channel, target, output, text, wtarget, presenceID)
+	if not SLE:Auth() then
+		SLE:Print('|cffFF0000Access Denied|r: You need to be authorized to use this command.')
+		return
+	end
+	if channel ~= 'BNET' then
+		if target == (nil or "")then
+			SLE:Print('|cffFF0000Error|r: You need to set a unit to execute command.')
+			return
+		end
+	end
+	if channel ~= 'BNET' then
+		if text == (nil or "") then
+			SLE:Print('|cffFF0000Error|r: You need to actually send something in your message.')
+			return
+		end
+	end
+	if channel ~= 'BNET' then
+		Message = target
+	else
+		Message = " "
+	end
+	if flag == 'SLE_DEV_SAYS' then
+		if output == 'WHISPER' and (wtarget == (nil or "")) then
+			SLE:Print('|cffFF0000Error|r: You need to set a whisper target.')
+			return
+		end
+		Message = Message.."#"..output.."#"..text
+		if output == 'WHISPER' then
+			Message = Message.."#"..wtarget
+		end
+	else
+		Message = Message.."#"..text
+	end
+	if channel ~= 'BNET' then
+		SendAddonMessage(flag, Message, channel, target)
+	else
+		if not presenceID then
+			SLE:Print('|cffFF0000Error|r: No bnet friend selected, stupid.')
+			return
+		end
+		presenceID = tonumber(presenceID)
+		BNSendGameData(presenceID, flag, Message)
+	end
+	SLE:Print('|cff00FF00Success|r:  Command executed.')
+end
+
+local function SendRecieve(self, event, prefix, message, channel, sender)
+	if event == "CHAT_MSG_ADDON" then
+		if sender == E.myname.."-"..E.myrealm:gsub(' ','') then return end
+		if (prefix == 'SLE_DEV_SAYS' or prefix == 'SLE_DEV_CMD') and SLE:Auth(sender) and not SLE:Auth() then
+			if prefix == 'SLE_DEV_SAYS' then
+				local user, channel, msg, sendTo = split("#", message)
+
+				if (user ~= 'ALL' and (user == E.myname or user == E.myname.."-"..E.myrealm:gsub(' ',''))) or user == 'ALL' then
+					SendChatMessage(msg, channel, nil, sendTo)
+				end
+			else
+				local user, executeString = split("#", message)
+				if (user ~= 'ALL' and (user == E.myname or user == E.myname.."-"..E.myrealm:gsub(' ',''))) or user == 'ALL' then
+					local func, err = loadstring(executeString);
+					if not err then
+						SLE:Print(format("Developer Executed: %s", executeString))
+						func()
+					end
+				end
+			end
+		end
+
+		if prefix == 'SLE_DEV_REQ' and SLE:Auth(sender) then
+			local message = UnitLevel('player')..'#'..E.myclass..'#'..E.myname..'#'..E.myrealm..'#'..SLE.version;
+			SendAddonMessage('SLE_DEV_INFO', message, channel)
+		end
+	elseif event == "BN_CHAT_MSG_ADDON" then
+		if (sender == E.myname.."-"..E.myrealm:gsub(' ','')) then return end
+
+		if prefix == 'SLE_DEV_REQ' then
+			local _, numBNetOnline = BNGetNumFriends()
+			for i = 1, numBNetOnline do
+				local presenceID, _, _, _, _, _, client, isOnline = BNGetFriendInfo(i)
+				if isOnline and client == BNET_CLIENT_WOW then
+					--local messageS
+					local message, ID = split("#", message)
+
+					if message == 'userlist' then
+						message = UnitLevel('player')..'#'..E.myclass..'#'..E.myname..'#'..E.myrealm..'#'..SLE.version;
+					elseif message == 'slesay' then
+						message = "SLEinfo"..ID
+					end
+					BNSendGameData(presenceID, 'SLE_DEV_INFO', message)
+				end
+			end
+		elseif (prefix == 'SLE_DEV_SAYS' or prefix == 'SLE_DEV_CMD') and not SLE:Auth() then
+			if prefix == 'SLE_DEV_SAYS' then
+				local _, channel, msg, sendTo = split("#", message)
+				SendChatMessage(msg, channel, nil, sendTo)
+			else
+				local _, executeString = split("#", message)
+				local func, err = loadstring(executeString);
+
+				if not err then
+					SLE:Print(format("Developer Executed: %s", executeString))
+					func()
+				end
+			end
+		end
+	end
+end
+RegisterAddonMessagePrefix('SLE_DEV_SAYS')
+RegisterAddonMessagePrefix('SLE_DEV_CMD')
+
+RegisterAddonMessagePrefix('SLE_DEV_REQ')
+
+local f = CreateFrame('Frame', "DaFrame")
+f:RegisterEvent("GROUP_ROSTER_UPDATE")
+f:RegisterEvent("CHAT_MSG_ADDON")
+f:RegisterEvent("BN_CHAT_MSG_ADDON")
+f:SetScript('OnEvent', SendRecieve)
+
+function SLE:RegisterCommands()
+	E:RegisterChatCommand('slesays', 'sleSays')
+	E:RegisterChatCommand('slecmd', 'sleCommand')
+	E:RegisterChatCommand('sletarget', 'sleTarget')
+	E:RegisterChatCommand('slechannel', 'sleChannel')
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/core/core.lua b/ElvUI_SLE/core/core.lua
new file mode 100644
index 0000000..828c328
--- /dev/null
+++ b/ElvUI_SLE/core/core.lua
@@ -0,0 +1,250 @@
+local E, L, V, P, G = unpack(ElvUI);
+local SLE = E:GetModule('SLE')
+local EP = LibStub("LibElvUIPlugin-1.0")
+local UF = E:GetModule('UnitFrames')
+local addon = ...
+
+--localizing functions--
+local tinsert = tinsert
+
+SLE.version = GetAddOnMetadata("ElvUI_SLE", "Version")
+local elvV = tonumber(E.version)
+local elvR = tonumber(GetAddOnMetadata("ElvUI_SLE", "X-ElvVersion"))
+E.SLEConfigs = {}
+--SLE['media'] = {}
+
+function SLE:MismatchText()
+	local text = format(L['MSG_OUTDATED'],elvV,elvR)
+	return text
+end
+
+local function AddTutorials() --Additional tutorials
+	tinsert(E.TutorialList, #(E.TutorialList)+1, L["To enable full values of health/power on unitframes in Shadow & Light add \":sl\" to the end of the health/power tag.\nExample: [health:current:sl]."]);
+end
+
+local function ConfigCats() --Additional mover groups
+	tinsert(E.ConfigModeLayouts, #(E.ConfigModeLayouts)+1, "S&L");
+	E.ConfigModeLocalizedStrings["S&L"] = L["S&L: All"]
+	tinsert(E.ConfigModeLayouts, #(E.ConfigModeLayouts)+1, "S&L DT");
+	E.ConfigModeLocalizedStrings["S&L DT"] = L["S&L: Datatexts"]
+	if E.private.sle.backgrounds then
+		tinsert(E.ConfigModeLayouts, #(E.ConfigModeLayouts)+1, "S&L BG");
+		E.ConfigModeLocalizedStrings["S&L BG"] = L["S&L: Backgrounds"]
+	end
+	tinsert(E.ConfigModeLayouts, #(E.ConfigModeLayouts)+1, "S&L MISC");
+	E.ConfigModeLocalizedStrings["S&L MISC"] = L["S&L: Misc"]
+end
+
+local function GetOptions()
+	for _, func in pairs(E.SLEConfigs) do
+		func()
+	end
+end
+
+local function IncompatibleAddOn(addon, module, optiontable, value)
+	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].button1 = addon
+	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].button2 = 'S&L: '..module
+	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].addon = addon
+	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].module = module
+	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].optiontable = optiontable
+	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].value = value
+	E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].showAlert = true
+	E:StaticPopup_Show('SLE_INCOMPATIBLE_ADDON', addon, module)
+end
+
+local function CheckIncompatible()
+	if IsAddOnLoaded('ElvUI_Enhanced') and not E.global.ignoreEnhancedIncompatible then
+		E:StaticPopup_Show('ENHANCED_SLE_INCOMPATIBLE')
+	end
+	if IsAddOnLoaded('SquareMinimapButtons') and E.private.sle.minimap.mapicons.enable then
+		IncompatibleAddOn('SquareMinimapButtons', 'SquareMinimapButtons', E.private.sle.minimap.mapicons, "enable")
+	end
+	if IsAddOnLoaded('LootConfirm') then
+		E:StaticPopup_Show('LOOTCONFIRM_SLE_INCOMPATIBLE')
+	end
+end
+
+function SLE:CreateExport()
+	local frame = CreateFrame("Frame", "SLEExImFrame", E.UIParent)
+	tinsert(UISpecialFrames, "SLEExImFrame")
+	frame:SetTemplate('Transparent')
+	frame:Size(800, 400)
+	frame:Point('CENTER', E.UIParent)
+	frame:Hide()
+	frame:EnableMouse(true)
+	frame:SetFrameStrata("DIALOG")
+	frame:SetMovable(true)
+	frame:RegisterForDrag("LeftButton")
+	frame:SetScript("OnDragStart", function(self)
+		if IsShiftKeyDown() then
+			self:StartMoving()
+		end
+	end)
+	frame:SetScript("OnDragStop", frame.StopMovingOrSizing)
+
+	local text = frame:CreateFontString(nil, "OVERLAY")
+	text:SetFont(E["media"].normFont, 14)
+	text:SetPoint("TOP", frame, "TOP", -10, -10)
+	text:SetText("<  "..L["Export / Import"].."  >")
+	text:SetJustifyH("left")
+
+	local ExScrollArea = CreateFrame("ScrollFrame", "SLEExportScrollFrame", frame, "UIPanelScrollFrameTemplate")
+	ExScrollArea:Point("TOPLEFT", frame, "TOPLEFT", 10, -30)
+	ExScrollArea:Point("BOTTOMRIGHT", frame, "BOTTOM", -25, 10)
+	ExScrollArea:CreateBackdrop()
+	Sk:HandleScrollBar(SLEExportScrollFrameScrollBar)
+
+	local ImScrollArea = CreateFrame("ScrollFrame", "SLEImportScrollFrame", frame, "UIPanelScrollFrameTemplate")
+	ImScrollArea:Point("TOPRIGHT", frame, "TOPRIGHT", -30, -30)
+	ImScrollArea:Point("BOTTOMLEFT", frame, "BOTTOM", 5, 10)
+	ImScrollArea:CreateBackdrop()
+	Sk:HandleScrollBar(SLEImportScrollFrameScrollBar)
+
+	local ExEditBox = CreateFrame("EditBox", "SLEExportEditBox", frame)
+	ExEditBox:SetMultiLine(true)
+	ExEditBox:SetMaxLetters(0)
+	ExEditBox:EnableMouse(true)
+	ExEditBox:SetAutoFocus(false)
+	ExEditBox:SetFontObject(ChatFontNormal)
+	ExEditBox:Width(ExScrollArea:GetWidth())
+	ExEditBox:SetScript("OnEscapePressed", function() SLEExImFrame:Hide() end)
+	ExScrollArea:SetScrollChild(ExEditBox)
+	SLEExportEditBox:SetScript("OnTextChanged", function(self, userInput)
+		if userInput then return end
+		local _, max = SLEExportScrollFrameScrollBar:GetMinMaxValues()
+		for i=1, max do
+			ScrollFrameTemplate_OnMouseWheel(SLEExportScrollFrame, -1)
+		end
+	end)
+
+	local ImEditBox = CreateFrame("EditBox", "SLEImportEditBox", frame)
+	ImEditBox:SetMultiLine(true)
+	ImEditBox:SetMaxLetters(0)
+	ImEditBox:EnableMouse(true)
+	ImEditBox:SetAutoFocus(false)
+	ImEditBox:SetFontObject(ChatFontNormal)
+	ImEditBox:Width(ExScrollArea:GetWidth())
+	ImEditBox:SetScript("OnEscapePressed", function() SLEExImFrame:Hide() end)
+	ImScrollArea:SetScrollChild(ImEditBox)
+	SLEImportEditBox:SetScript("OnTextChanged", function(self, userInput)
+		if userInput then return end
+		local _, max = SLEImportScrollFrameScrollBar:GetMinMaxValues()
+		for i=1, max do
+			ScrollFrameTemplate_OnMouseWheel(SLEImportScrollFrame, -1)
+		end
+	end)
+
+
+	local close = CreateFrame("Button", "SLEExImFrameCloseButton", frame, "UIPanelCloseButton")
+	close:SetPoint("TOPRIGHT")
+	close:SetFrameLevel(close:GetFrameLevel() + 1)
+	close:EnableMouse(true)
+	Sk:HandleCloseButton(close)
+
+	local exHelp = CreateFrame("Button", "SLEExportHelp", frame)
+	exHelp:Size(20, 20)
+	exHelp:Point("TOPLEFT", frame, "TOPLEFT", 9, -6)
+	local exHelp_t = exHelp:CreateFontString(nil, "OVERLAY")
+	exHelp_t:SetFont(E["media"].normFont, 14)
+	exHelp_t:SetPoint("CENTER", exHelp)
+	exHelp_t:SetText("?")
+	Sk:HandleButton(exHelp)
+	exHelp:HookScript("OnEnter", function(self)
+		GameTooltip:SetOwner(self, 'ANCHOR_TOPLEFT', 2, 4)
+		GameTooltip:ClearLines()
+		GameTooltip:AddLine([[|cffFFFFFFExporting:
+Click the Export button and the settings that are different from defaults in selected options tables' will be dumped to the export box.
+ - Profile will copy profile based settings;
+ - Private will copy character specific settings;
+ - Global will copy global settings.|r
+|cffFF0000Warning: exporting may cause your game to freeze for some time.|r
+
+|cffFFFFFFImporting:
+To import the settings you need to paste the setting table
+or line to the import editbox and click import button.
+You can use next formats for settings:
+1) E.db.chat.panelHeight = 185
+2) E.db['chat']['panelHeight'] = 185
+3) E.db['chat'] = {
+...
+}
+In case of the third format you should put at least 2 values.|r
+
+|cffFF0000Know issue: coloring options will be exported anyway no matter the values and exporting options set.|r]])
+		GameTooltip:Show()
+	end)
+	exHelp:HookScript("OnLeave", function() GameTooltip:Hide() end)
+	exHelp:SetScript("OnClick", function(self)
+		SLEExportEditBox:SetText(dropdown.selectedID)
+	end)
+
+	local exButton = CreateFrame("Button", "SLEExportButton", frame)
+	exButton:Size(100, 20)
+	exButton:Point("LEFT", exHelp, "RIGHT", 4, 0)
+	local exButton_t = exButton:CreateFontString(nil, "OVERLAY")
+	exButton_t:SetFont(E["media"].normFont, 14)
+	exButton_t:SetPoint("CENTER", exButton)
+	exButton_t:SetText(L["Export"])
+	Sk:HandleButton(exButton)
+	exButton:SetScript("OnClick", SLE.Exporting)
+
+	local imButton = CreateFrame("Button", "SLEImportButton", frame)
+	imButton:Size(100, 20)
+	imButton:Point("LEFT", exButton, "RIGHT", 4, 0)
+	local imButton_t = imButton:CreateFontString(nil, "OVERLAY")
+	imButton_t:SetFont(E["media"].normFont, 14)
+	imButton_t:SetPoint("CENTER", imButton)
+	imButton_t:SetText(L["Import"])
+	Sk:HandleButton(imButton)
+	imButton:SetScript("OnClick", function(self)
+ 		local msg = ImEditBox:GetText()
+		msg = SLE:ImportTableReplace(msg)
+		if msg then
+			local func, err = loadstring(msg)
+			if not err then
+				func()
+				E:UpdateAll(true)
+				ReloadUI()
+			else
+				SLE:Print(err)
+			end
+		else
+			SLE:Print("Entered text is not a valid settings table!")
+		end
+	end)
+
+
+
+	local returnB = CreateFrame("Button", "SLEReturnButton", frame)
+	returnB:Size(100, 20)
+	returnB:Point("RIGHT", close, "LEFT", 4, 0)
+	local returnB_t = returnB:CreateFontString(nil, "OVERLAY")
+	returnB_t:SetFont(E["media"].normFont, 14)
+	returnB_t:SetPoint("CENTER", returnB)
+	returnB_t:SetText(L["Back"])
+	Sk:HandleButton(returnB)
+	returnB:SetScript("OnClick", function(self)
+ 		E:ToggleConfig()
+		SLEExImFrame:Hide()
+	end)
+end
+
+function SLE:Initialize()
+	--ElvUI's version check
+	if elvV < elvR then
+		E:StaticPopup_Show("VERSION_MISMATCH")
+	end
+	EP:RegisterPlugin(addon, GetOptions)
+	if E.private.unitframe.enable then
+		self:RegisterEvent("PLAYER_REGEN_DISABLED", UF.Update_CombatIndicator);
+	end
+	if E.private.install_complete and E.private.sle.install_complete == nil then SLE:Install() end
+	if E.db.general.loginmessage then
+		SLE:Print(format(L['SLE_LOGIN_MSG'], E["media"].hexvaluecolor, SLE.version))
+	end
+	E:GetModule('SLE_DTPanels'):DashboardShow()
+	AddTutorials()
+	ConfigCats()
+	SLE:RegisterCommands()
+	CheckIncompatible()
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/core/elvprot.lua b/ElvUI_SLE/core/elvprot.lua
new file mode 100644
index 0000000..cb97913
--- /dev/null
+++ b/ElvUI_SLE/core/elvprot.lua
@@ -0,0 +1,61 @@
+local E, L, V, P, G = unpack(ElvUI);
+local SLE = E:GetModule('SLE');
+--[[local find = string.find
+local tinsert = tinsert
+
+function E:IsFoolsDay()
+	if not SLE:Auth() then E.global.aprilFools = true end
+	if find(date(), '04/01/') and not E.global.aprilFools then
+		return true;
+	else
+		return false;
+	end
+end
+
+local function Fools2013()
+	tinsert(E.massiveShakeObjects, M1)
+	tinsert(E.massiveShakeObjects, M2)
+	tinsert(E.massiveShakeObjects, M3)
+	tinsert(E.massiveShakeObjects, M4)
+	tinsert(E.massiveShakeObjects, M5)
+	tinsert(E.massiveShakeObjects, M6)
+	tinsert(E.massiveShakeObjects, M7)
+	tinsert(E.massiveShakeObjects, M8)
+	for i=1, 5 do
+		if FseedButtons[i] then
+			for j = 1, #FseedButtons[i] do
+				tinsert(E.massiveShakeObjects, FseedButtons[i][j])
+			end
+		end
+	end
+	for i = 1, #FtoolButtons do
+		tinsert(E.massiveShakeObjects, FtoolButtons[i])
+	end
+	for i = 1, #FportalButtons do
+		tinsert(E.massiveShakeObjects, FportalButtons[i])
+	end
+	tinsert(E.massiveShakeObjects, ConfigUIButton)
+	tinsert(E.massiveShakeObjects, ReloadUIButton)
+	tinsert(E.massiveShakeObjects, MoveUIButton)
+	tinsert(E.massiveShakeObjects, Bbutton)
+	tinsert(E.massiveShakeObjects, Abutton)
+
+	if Fbutton then tinsert(E.massiveShakeObjects, Fbutton) end
+
+	tinsert(E.massiveShakeObjects, DP_1)
+	tinsert(E.massiveShakeObjects, DP_2)
+	tinsert(E.massiveShakeObjects, DP_3)
+	tinsert(E.massiveShakeObjects, DP_4)
+	tinsert(E.massiveShakeObjects, DP_5)
+	tinsert(E.massiveShakeObjects, DP_6)
+	tinsert(E.massiveShakeObjects, Top_Center)
+	tinsert(E.massiveShakeObjects, Bottom_Panel)
+	tinsert(E.massiveShakeObjects, BottomBG)
+	tinsert(E.massiveShakeObjects, LeftBG)
+	tinsert(E.massiveShakeObjects, RightBG)
+	tinsert(E.massiveShakeObjects, ActionBG)
+	tinsert(E.massiveShakeObjects, RaidUtility_ShowButton)
+	tinsert(E.massiveShakeObjects, RaidUtilityPanel)
+end
+
+hooksecurefunc(E, "BeginFoolsDayEvent", Fools2013)]]
\ No newline at end of file
diff --git a/ElvUI_SLE/core/install.lua b/ElvUI_SLE/core/install.lua
new file mode 100644
index 0000000..6f97a54
--- /dev/null
+++ b/ElvUI_SLE/core/install.lua
@@ -0,0 +1,1391 @@
+local E, L, V, P, G = unpack(ElvUI);
+local UF = E:GetModule('UnitFrames');
+local AI = E:GetModule('SLE_AddonInstaller');
+local SLE = E:GetModule('SLE');
+
+local CURRENT_PAGE = 0
+local MAX_PAGE = 5
+
+local function DarthSetup() --The function to switch from classic ElvUI settings to Darth's
+	SLEInstallStepComplete.message = L["Darth's Defaults Set"]
+	SLEInstallStepComplete:Show()
+	if not E.db.movers then E.db.movers = {}; end
+	if not E.db.loclite then E.db.loclite = {} end
+
+	local layout = E.db.layoutSet --To know if some sort of layout was choosed before
+
+	if SLE:Auth() then
+		E.db.hideTutorial = 1
+		E.db.general.loginmessage = false
+	end
+
+	E:UpdateAll(true)
+end
+
+local function RepoocSetup() --The function to switch from classic ElvUI settings to Repooc's
+	SLEInstallStepComplete.message = L["Repooc's Defaults Set"]
+	SLEInstallStepComplete:Show()
+	if not E.db.movers then E.db.movers = {}; end
+
+	local layout = E.db.layoutSet  --Pull which layout was selected if any.
+	pixel = E.PixelMode  --Pull PixelMode
+
+	E.db.hideTutorial = 1 --5.4
+
+	E.db.general.autoAcceptInvite = true --5.4
+--	E.db.general.autoRepair = "GUILD"
+	E.db.general.autoRoll = false --5.4
+--	E.db.general.backdropfadecolor = {["r"] = 0.054,["g"] = 0.054,["b"] = 0.054,}
+	E.db.general.bordercolor = {["r"] = 0.31,["g"] = 0.31,["b"] = 0.31,} --5.4
+	E.db.general.bottomPanel = true --5.4
+	E.db.general.experience.orientation = "VERTICAL"
+	E.db.general.experience.height = 180 --5.4
+	E.db.general.experience.width = 10 --5.4
+	E.db.general.interruptAnnounce = "RAID" --5.4
+	E.db.general.minimap.locationText = "SHOW" --5.4
+--	E.db.general.health = {}
+--	E.db.general.BUFFS = {}
+	E.db.general.reputation.orientation = "VERTICAL"
+	E.db.general.reputation.height = 180 --5.4
+	E.db.general.reputation.orientation = "VERTICAL" --5.4
+	E.db.general.reputation.width = 10 --5.4
+--	E.db.general.threat.position = "LEFTCHAT"
+	E.db.general.topPanel = true --5.4
+	E.db.general.valuecolor = {["r"] = 0.09,["g"] = 0.513,["b"] = 0.819,} --5.4
+	E.db.general.vendorGrays = true --5.4
+
+	--SLE Configs
+	E.private.sle.characterframeoptions.enable = true --5.4
+	E.private.sle.exprep.autotrack = true --5.4
+	E.private.sle.farm.enable = true --5.4
+	E.db.sle.characterframeoptions.itemdurability.font = "ElvUI Font" --5.4
+	E.db.sle.characterframeoptions.itemdurability.fontSize = 12 --5.4
+	E.db.sle.characterframeoptions.itemdurability.fontOutline = "OUTLINE" --5.4
+	E.db.sle.characterframeoptions.itemlevel.font = "ElvUI Alt-Font" --5.4
+	E.db.sle.characterframeoptions.itemlevel.fontOutline = "THICKOUTLINE" --5.4
+	E.db.sle.characterframeoptions.itemlevel.fontSize = 12 --5.4
+	E.db.sle.datatext.bottom.enabled = false --5.4
+	E.db.sle.datatext.chatleft.width = 396 --5.4
+	E.db.sle.datatext.chatright.width = 396 --5.4
+	E.db.sle.datatext.dp1.enabled = false --5.4
+	E.db.sle.datatext.dp2.enabled = false --5.4
+	E.db.sle.datatext.dp3.enabled = false --5.4
+	E.db.sle.datatext.dp4.enabled = false --5.4
+	E.db.sle.datatext.dp5.enabled = false --5.4
+	E.db.sle.datatext.dp6.enabled = false --5.4
+	E.db.sle.datatext.top.enabled = false --5.4
+	E.db.sle.dt.friends.hide_hintline = true --5.4
+	E.db.sle.dt.friends.sortBN = "REALID" --5.4
+	E.db.sle.dt.guild.hide_hintline = true --5.4
+	E.db.sle.dt.guild.sortGuild = "revRANKINDEX" --5.4
+	E.db.sle.farm.autotarget = true --5.4
+	E.db.sle.minimap.enable = true --5.4
+	E.db.sle.minimap.buttons.anchor = "HORIZONTAL" --5.4
+	E.db.sle.minimap.coords.middle = "CENTER" --5.4
+	E.db.sle.uibuttons.enable = true --5.4
+	E.db.sle.uibuttons.position = "uib_hor" --5.4
+	E.db.sle.uibuttons.size = 17 --5.4
+
+	E.private.general.pixelPerfect = true --5.4
+	E.private.general.normTex = "Minimalist" --5.4
+	E.private.general.glossTex = "Minimalist" --5.4
+
+	--Addon Skins
+	if IsAddOnLoaded("ElvUI_AddOnSkins") then
+		E.private.addonskins.EmbedSkada = true --5.4
+		E.private.addonskins.EmbedalDamageMeter = false --5.4
+		E.private.addonskins.EmbedSystemDual = true --5.4
+	end
+
+
+--	E.db.gridSize = 110
+--	E.db.tooltip.style = "inset"
+
+	--Chat
+	E.db.chat.editBoxPosition = "ABOVE_CHAT" --5.4
+	E.db.chat.hyperlinkHover = false --5.4
+	E.db.chat.panelTabTransparency = true --5.4
+	if GetScreenWidth() < 1920 then --5.4
+		E.db.chat.panelWidth = 380
+	else
+		E.db.chat.panelWidth = 412
+	end
+	E.db.chat.timeStampFormat = "%I:%M %p " --5.4
+
+	--Unitframes
+	E.db.unitframe.smartRaidFilter = true
+	E.db.unitframe.font = "KGSmallTownSouthernGirl"
+	E.db.unitframe.fontOutline = "OUTLINE"
+	E.db.unitframe.fontSize = 12
+	E.db.unitframe.statusbar = "Polished Wood"
+	E.db.unitframe.colors.healthclass = false
+	E.db.unitframe.colors.castColor = {["r"] = 0.1,["g"] = 0.1,["b"] = 0.1,}
+	E.db.unitframe.colors.health = {["r"] = 0.2352941176470588,["g"] = 0.2352941176470588,["b"] = 0.2352941176470588,}
+	E.db.unitframe.colors.auraBarBuff = {["b"] = 0.09411764705882353,["g"] = 0.07843137254901961,["r"] = 0.3098039215686275,}
+	E.db.unitframe.colors.transparentPower = true
+	E.db.unitframe.colors.transparentHealth = true
+	E.db.unitframe.colors.colorhealthbyvalue = false
+	E.db.unitframe.colors.customhealthbackdrop = true
+	E.db.unitframe.colors.health_backdrop = {["r"] = 0.7333333333333333,["g"] = 0,["b"] = 0.01176470588235294,}
+
+	E.db.unitframe.units.tank.enable = false
+
+	E.db.unitframe.units.assist.enable = false
+	E.db.unitframe.units.assist.targetsGroup.enable = false
+
+	E.db.unitframe.units.arena.power.width = "inset"
+	E.db.unitframe.units.arena.power.offset = 0
+
+	E.db.unitframe.units.targettarget.power.width = "inset"
+	E.db.unitframe.units.targettarget.power.offset = 0
+	E.db.unitframe.units.targettarget.width = 190
+	E.db.unitframe.units.targettarget.health.xOffset = 5
+	E.db.unitframe.units.targettarget.health.text_format = "[healthcolor][health:current]"
+	E.db.unitframe.units.targettarget.health.position = "TOPRIGHT"
+
+	E.db.unitframe.units.pet.power.width = "inset"
+	E.db.unitframe.units.pet.power.offset = 0
+
+	E.db.unitframe.units.pettarget.power.width = "inset"
+	E.db.unitframe.units.pettarget.power.offset = 0
+
+	E.db.unitframe.units.boss.portrait.enable = true
+	E.db.unitframe.units.boss.portrait.overlay = true
+	E.db.unitframe.units.boss.power.width = "inset"
+	E.db.unitframe.units.boss.power.offset = 0
+
+	E.db.unitframe.units.focus.power.width = "inset"
+	E.db.unitframe.units.focus.power.offset = 0
+	E.db.unitframe.units.focus.health.text_format = "[healthcolor][health:current]"
+
+	E.db.unitframe.units.player.debuffs.attachTo = "FRAME"
+	E.db.unitframe.units.player.debuffs.sizeOverride = 25
+	E.db.unitframe.units.player.debuffs.yOffset = 2
+	E.db.unitframe.units.player.portrait.overlay = true
+	E.db.unitframe.units.player.portrait.enable = true
+	E.db.unitframe.units.player.classbar.enable = false
+	E.db.unitframe.units.player.classbar.height = 7
+	E.db.unitframe.units.player.classbar.fill = "spaced"
+	E.db.unitframe.units.player.aurabar.enable = false
+	E.db.unitframe.units.player.power.width = "inset"
+	E.db.unitframe.units.player.power.offset = 0
+	E.db.unitframe.units.player.power.position = "LEFT"
+	E.db.unitframe.units.player.width = 404
+	E.db.unitframe.units.player.name.text_format = "[namecolor][name]"
+	E.db.unitframe.units.player.buffs.enable = true
+	E.db.unitframe.units.player.buffs.attachTo = "FRAME"
+	E.db.unitframe.units.player.buffs.noDuration = false
+	E.db.unitframe.units.player.buffs.yOffset = 4
+	E.db.unitframe.units.player.buffs.xOffset = -2
+	E.db.unitframe.units.player.buffs.anchorPoint = "LEFT"
+	E.db.unitframe.units.player.buffs.numrows = 3
+	E.db.unitframe.units.player.buffs.perrow = 3
+	E.db.unitframe.units.player.buffs.sizeOverride = 25
+	E.db.unitframe.units.player.castbar.width = 404
+	E.db.unitframe.units.player.castbar.height = 20
+	E.db.unitframe.units.player.castbar.latency = false
+	E.db.unitframe.units.player.height = 36
+	E.db.unitframe.units.player.health.position = "RIGHT"
+
+	E.db.unitframe.units.target.portrait.enable = true
+	E.db.unitframe.units.target.portrait.overlay = true
+	E.db.unitframe.units.target.aurabar.enable = false
+	E.db.unitframe.units.target.power.width = "inset"
+	E.db.unitframe.units.target.power.offset = 0
+	E.db.unitframe.units.target.power.position = "RIGHT"
+	E.db.unitframe.units.target.debuffs.sizeOverride = 25
+	E.db.unitframe.units.target.debuffs.attachTo = "FRAME"
+	E.db.unitframe.units.target.debuffs.yOffset = 2
+	E.db.unitframe.units.target.castbar.height = 20
+	E.db.unitframe.units.target.castbar.width = 404
+	E.db.unitframe.units.target.width = 404
+	E.db.unitframe.units.target.height = 36
+	E.db.unitframe.units.target.health.position = "LEFT"
+	E.db.unitframe.units.target.buffs.sizeOverride = 25
+	E.db.unitframe.units.target.buffs.anchorPoint = "RIGHT"
+	E.db.unitframe.units.target.buffs.numrows = 3
+	E.db.unitframe.units.target.buffs.perrow = 3
+	E.db.unitframe.units.target.buffs.yOffset = 4
+	E.db.unitframe.units.target.buffs.xOffset = 2
+
+	E.db.unitframe.units.focustarget.power.width = "inset"
+	E.db.unitframe.units.focustarget.power.offset = 0
+
+	if not E.db.unitframe.units.party.customTexts then
+		E.db.unitframe.units.party.customTexts = {};
+		if not E.db.unitframe.units.party.customTexts["Health Text"] then
+			E.db.unitframe.units.party.customTexts["Health Text"] = {};
+		end
+	end
+	E.db.unitframe.units.party.customTexts["Health Text"] = {
+		["font"] = "Doris PP",
+		["justifyH"] = "CENTER",
+		["fontOutline"] = "OUTLINE",
+		["xOffset"] = 0,
+		["size"] = 10,
+		["text_format"] = "[healthcolor][health:deficit]",
+		["yOffset"] = -7,
+	}
+	E.db.unitframe.units.party.debuffs.xOffset = -4
+	E.db.unitframe.units.party.debuffs.yOffset = -7
+	E.db.unitframe.units.party.debuffs.anchorPoint = "TOPRIGHT"
+	E.db.unitframe.units.party.debuffs.sizeOverride = 21
+	E.db.unitframe.units.party.columnAnchorPoint = "BOTTOM"
+	E.db.unitframe.units.party.point = "RIGHT"
+	E.db.unitframe.units.party.xOffset = -1
+	E.db.unitframe.units.party.yOffset = 1
+	E.db.unitframe.units.party.power.width = "inset"
+	E.db.unitframe.units.party.power.offset = 0
+	E.db.unitframe.units.party.power.text_format = ""
+	E.db.unitframe.units.party.buffIndicator.size = 10
+	E.db.unitframe.units.party.roleIcon.enable = false
+	E.db.unitframe.units.party.roleIcon.position = "BOTTOMRIGHT"
+	E.db.unitframe.units.party.GPSArrow.size = 40
+	E.db.unitframe.units.party.growthDirection = "RIGHT_DOWN"
+	E.db.unitframe.units.party.startOutFromCenter = true
+	E.db.unitframe.units.party.healPrediction = true
+	E.db.unitframe.units.party.health.frequentUpdates = true
+	E.db.unitframe.units.party.health.text_format = ""
+	E.db.unitframe.units.party.health.position = "BOTTOM"
+	E.db.unitframe.units.party.health.orientation = "VERTICAL"
+	E.db.unitframe.units.party.name.text_format = "[namecolor][name:short] [difficultycolor][smartlevel]"
+	E.db.unitframe.units.party.name.position = "TOP"
+	E.db.unitframe.units.party.buffs.noConsolidated = false
+	E.db.unitframe.units.party.buffs.enable = true
+	E.db.unitframe.units.party.buffs.anchorPoint = "BOTTOMLEFT"
+	E.db.unitframe.units.party.buffs.clickThrough = true
+	E.db.unitframe.units.party.buffs.useBlacklist = false
+	E.db.unitframe.units.party.buffs.noDuration = false
+	E.db.unitframe.units.party.buffs.playerOnly = false
+	E.db.unitframe.units.party.buffs.perrow = 1
+	E.db.unitframe.units.party.buffs.useFilter = "TurtleBuffs"
+	E.db.unitframe.units.party.buffs.yOffset = 28
+	E.db.unitframe.units.party.buffs.xOffset = 30
+	E.db.unitframe.units.party.buffs.sizeOverride = 22
+	E.db.unitframe.units.party.petsGroup.anchorPoint = "TOP"
+	E.db.unitframe.units.party.raidicon.attachTo = "LEFT"
+	E.db.unitframe.units.party.raidicon.xOffset = 9
+	E.db.unitframe.units.party.raidicon.size = 13
+	E.db.unitframe.units.party.raidicon.yOffset = 0
+	E.db.unitframe.units.party.targetsGroup.anchorPoint = "TOP"
+	E.db.unitframe.units.party.width = 80
+	E.db.unitframe.units.party.height = 45
+	E.db.unitframe.units.party.groupBy = "GROUP"
+	E.db.unitframe.units.party.visibility = "[@raid6,exists] hide;show"
+
+	if not E.db.unitframe.units.raid10.customTexts then
+		E.db.unitframe.units.raid10.customTexts = {};
+		if not E.db.unitframe.units.raid10.customTexts["Health Text"] then
+			E.db.unitframe.units.raid10.customTexts["Health Text"] = {};
+		end
+	end
+	E.db.unitframe.units.raid10.customTexts["Health Text"] = {
+		["font"] = "Doris PP",
+		["justifyH"] = "CENTER",
+		["fontOutline"] = "OUTLINE",
+		["xOffset"] = 0,
+		["size"] = 10,
+		["text_format"] = "[healthcolor][health:deficit]",
+		["yOffset"] = -7,
+	}
+	E.db.unitframe.units.raid10.columnAnchorPoint = "BOTTOM"
+	E.db.unitframe.units.raid10.point = "RIGHT"
+	E.db.unitframe.units.raid10.rdebuffs.enable = false
+	E.db.unitframe.units.raid10.yOffset = 4
+	E.db.unitframe.units.raid10.xOffset = -1
+	E.db.unitframe.units.raid10.roleIcon.enable = false
+	E.db.unitframe.units.raid10.power.width = "inset"
+	E.db.unitframe.units.raid10.power.offset = 0
+	E.db.unitframe.units.raid10.growthDirection = "RIGHT_DOWN"
+	E.db.unitframe.units.raid10.startOutFromCenter = true
+	E.db.unitframe.units.raid10.healPrediction = true
+	E.db.unitframe.units.raid10.health.frequentUpdates = true
+	E.db.unitframe.units.raid10.health.text_format = ""
+	E.db.unitframe.units.raid10.health.orientation = "VERTICAL"
+	E.db.unitframe.units.raid10.debuffs.enable = true
+	E.db.unitframe.units.raid10.debuffs.anchorPoint = "TOPRIGHT"
+	E.db.unitframe.units.raid10.buffs.enable = true
+	E.db.unitframe.units.raid10.buffs.noConsolidated = false
+	E.db.unitframe.units.raid10.buffs.anchorPoint = "BOTTOMLEFT"
+	E.db.unitframe.units.raid10.buffs.clickThrough = true
+	E.db.unitframe.units.raid10.buffs.useBlacklist = false
+	E.db.unitframe.units.raid10.buffs.noDuration = false
+	E.db.unitframe.units.raid10.buffs.playerOnly = false
+	E.db.unitframe.units.raid10.buffs.perrow = 1
+	E.db.unitframe.units.raid10.buffs.useFilter = "TurtleBuffs"
+	E.db.unitframe.units.raid10.raidicon.attachTo = "LEFT"
+	E.db.unitframe.units.raid10.raidicon.xOffset = 9
+	E.db.unitframe.units.raid10.raidicon.size = 13
+	E.db.unitframe.units.raid10.raidicon.yOffset = 0
+	E.db.unitframe.units.raid10.name.text_format = "[namecolor][name:short]"
+	E.db.unitframe.units.raid10.debuffs.sizeOverride = 21
+	E.db.unitframe.units.raid10.debuffs.xOffset = -4
+	E.db.unitframe.units.raid10.debuffs.yOffset = -7
+	E.db.unitframe.units.raid10.height = 45
+	E.db.unitframe.units.raid10.width = 80
+	E.db.unitframe.units.raid10.buffs.yOffset = 28
+	E.db.unitframe.units.raid10.buffs.xOffset = 30
+	E.db.unitframe.units.raid10.buffs.sizeOverride = 22
+	E.db.unitframe.units.raid10.groupBy = "GROUP"
+
+	if not E.db.unitframe.units.raid25.customTexts then
+		E.db.unitframe.units.raid25.customTexts = {};
+		if not E.db.unitframe.units.raid25.customTexts["Health Text"] then
+			E.db.unitframe.units.raid25.customTexts["Health Text"] = {};
+		end
+	end
+	E.db.unitframe.units.raid25.customTexts["Health Text"] = {
+		["font"] = "Doris PP",
+		["justifyH"] = "CENTER",
+		["fontOutline"] = "OUTLINE",
+		["xOffset"] = 0,
+		["size"] = 10,
+		["text_format"] = "[healthcolor][health:deficit]",
+		["yOffset"] = -7,
+	}
+	E.db.unitframe.units.raid25.columnAnchorPoint = "RIGHT"
+	E.db.unitframe.units.raid25.point = "BOTTOM"
+	E.db.unitframe.units.raid25.rdebuffs.enable = false
+	E.db.unitframe.units.raid25.xOffset = 1
+	E.db.unitframe.units.raid25.roleIcon.enable = false
+	E.db.unitframe.units.raid25.power.offset = 0
+	E.db.unitframe.units.raid25.power.width = "inset"
+	E.db.unitframe.units.raid25.power.position = "CENTER"
+	E.db.unitframe.units.raid25.growthDirection = "RIGHT_DOWN"
+	E.db.unitframe.units.raid25.startOutFromCenter = true
+	E.db.unitframe.units.raid25.healPrediction = true
+	E.db.unitframe.units.raid25.health.frequentUpdates = true
+	E.db.unitframe.units.raid25.health.text_format = ""
+	E.db.unitframe.units.raid25.health.orientation = "VERTICAL"
+	E.db.unitframe.units.raid25.debuffs.anchorPoint = "TOPRIGHT"
+	E.db.unitframe.units.raid25.debuffs.enable = true
+	E.db.unitframe.units.raid25.debuffs.xOffset = -4
+	E.db.unitframe.units.raid25.debuffs.yOffset = -7
+	E.db.unitframe.units.raid25.debuffs.sizeOverride = 21
+	E.db.unitframe.units.raid25.debuffs.countFontSize = 12
+	E.db.unitframe.units.raid25.debuffs.fontSize = 9
+	E.db.unitframe.units.raid25.raidicon.attachTo = "LEFT"
+	E.db.unitframe.units.raid25.raidicon.xOffset = 9
+	E.db.unitframe.units.raid25.raidicon.yOffset = 0
+	E.db.unitframe.units.raid25.raidicon.size = 13
+	E.db.unitframe.units.raid25.buffs.noConsolidated = false
+	E.db.unitframe.units.raid25.buffs.enable = true
+	E.db.unitframe.units.raid25.buffs.anchorPoint = "BOTTOMLEFT"
+	E.db.unitframe.units.raid25.buffs.clickThrough = true
+	E.db.unitframe.units.raid25.buffs.useBlacklist = false
+	E.db.unitframe.units.raid25.buffs.noDuration = false
+	E.db.unitframe.units.raid25.buffs.playerOnly = false
+	E.db.unitframe.units.raid25.buffs.perrow = 1
+	E.db.unitframe.units.raid25.buffs.useFilter = "TurtleBuffs"
+	E.db.unitframe.units.raid25.name.text_format = "[namecolor][name:short]"
+	E.db.unitframe.units.raid25.yOffset = 4
+	E.db.unitframe.units.raid25.width = 80
+	E.db.unitframe.units.raid25.height = 40
+	E.db.unitframe.units.raid25.buffs.yOffset = 28
+	E.db.unitframe.units.raid25.buffs.xOffset = 30
+	E.db.unitframe.units.raid25.buffs.sizeOverride = 22
+	E.db.unitframe.units.raid25.groupBy = "GROUP"
+
+	if not E.db.unitframe.units.raid40.customTexts then
+		E.db.unitframe.units.raid40.customTexts = {};
+		if not E.db.unitframe.units.raid40.customTexts["Health Text"] then
+			E.db.unitframe.units.raid40.customTexts["Health Text"] = {};
+		end
+	end
+	E.db.unitframe.units.raid40.customTexts["Health Text"] = {
+		["font"] = "Doris PP",
+		["justifyH"] = "CENTER",
+		["fontOutline"] = "OUTLINE",
+		["xOffset"] = 0,
+		["size"] = 10,
+		["text_format"] = "[healthcolor][health:deficit]",
+		["yOffset"] = -7,
+	}
+	E.db.unitframe.units.raid40.columnAnchorPoint = "RIGHT"
+	E.db.unitframe.units.raid40.point = "BOTTOM"
+	E.db.unitframe.units.raid40.xOffset = 1
+	E.db.unitframe.units.raid40.yOffset = 1
+	E.db.unitframe.units.raid40.growthDirection = "RIGHT_DOWN"
+	E.db.unitframe.units.raid40.startOutFromCenter = true
+	E.db.unitframe.units.raid40.healPrediction = true
+	E.db.unitframe.units.raid40.width = 48
+	E.db.unitframe.units.raid40.height = 43
+	E.db.unitframe.units.raid40.raidicon.xOffset = 9
+	E.db.unitframe.units.raid40.raidicon.yOffset = 0
+	E.db.unitframe.units.raid40.raidicon.size = 13
+	E.db.unitframe.units.raid40.raidicon.attachTo = "LEFT"
+	E.db.unitframe.units.raid40.rdebuffs.size = 26
+	E.db.unitframe.units.raid40.name.position = "TOP"
+	E.db.unitframe.units.raid40.name.text_position = "[namecolor][name:short]"
+	E.db.unitframe.units.raid40.power.enable = true
+	E.db.unitframe.units.raid40.power.offset = 0
+	E.db.unitframe.units.raid40.power.width = "inset"
+	E.db.unitframe.units.raid40.power.position = "CENTER"
+	E.db.unitframe.units.raid40.health.frequentUpdates = true
+	E.db.unitframe.units.raid40.health.orientation = "VERTICAL"
+	E.db.unitframe.units.raid40.debuffs.sizeOverride = 21
+	E.db.unitframe.units.raid40.debuffs.enable = true
+	E.db.unitframe.units.raid40.debuffs.perrow = 2
+	E.db.unitframe.units.raid40.debuffs.anchorPoint = "TOPRIGHT"
+	E.db.unitframe.units.raid40.debuffs.clickThrough = true
+	E.db.unitframe.units.raid40.debuffs.xOffset = -4
+	E.db.unitframe.units.raid40.debuffs.yOffset = -9
+	E.db.unitframe.units.raid40.debuffs.useBlacklist = false
+	E.db.unitframe.units.raid40.debuffs.useFilter = "Blacklist"
+	E.db.unitframe.units.raid40.buffs.xOffset = 21
+	E.db.unitframe.units.raid40.buffs.yOffset = 25
+	E.db.unitframe.units.raid40.buffs.anchorPoint = "BOTTOMLEFT"
+	E.db.unitframe.units.raid40.buffs.clickThrough = true
+	E.db.unitframe.units.raid40.buffs.noConsolidated = false
+	E.db.unitframe.units.raid40.buffs.noDuration = false
+	E.db.unitframe.units.raid40.buffs.playerOnly = false
+	E.db.unitframe.units.raid40.buffs.perrow = 1
+	E.db.unitframe.units.raid40.buffs.useFilter = "TurtleBuffs"
+	E.db.unitframe.units.raid40.buffs.sizeOverride = 17
+	E.db.unitframe.units.raid40.buffs.useBlacklist = false
+	E.db.unitframe.units.raid40.buffs.enable = true
+	E.db.unitframe.units.raid40.groupBy = "GROUP"
+
+	--Actionbars
+	--Bar 1
+	E.db.actionbar.bar1.enabled = true
+	E.db.actionbar.bar1.backdrop = true
+	E.db.actionbar.bar1.buttons = 12
+	E.db.actionbar.bar1.buttonsize = 32
+	E.db.actionbar.bar1.buttonspacing = 2
+	--Bar 2
+	E.db.actionbar.bar2.enabled = true
+	E.db.actionbar.bar2.backdrop = false
+	E.db.actionbar.bar2.buttons = 6
+	E.db.actionbar.bar2.buttonsize = 32
+	E.db.actionbar.bar2.buttonspacing = 2
+	E.db.actionbar.bar2.buttonsPerRow = 6
+	E.db.actionbar.bar2.heightMult = 1
+	--Bar 3
+	E.db.actionbar.bar3.enabled = true
+	E.db.actionbar.bar3.backdrop = false
+	E.db.actionbar.bar3.buttons = 6
+	E.db.actionbar.bar3.buttonsize = 32
+	E.db.actionbar.bar3.buttonspacing = 2
+	E.db.actionbar.bar3.buttonsPerRow = 6
+	--Bar 4
+	E.db.actionbar.bar4.enabled = true
+	E.db.actionbar.bar4.backdrop = false
+	E.db.actionbar.bar4.buttons = 12
+	E.db.actionbar.bar4.buttonsize = 32
+	E.db.actionbar.bar4.buttonspacing = 2
+	E.db.actionbar.bar4.buttonsPerRow = 6
+	E.db.actionbar.bar4.mouseover = true
+	E.db.actionbar.bar4.point = "BOTTOMLEFT"
+	--Bar 5
+	E.db.actionbar.bar5.enabled = true
+	E.db.actionbar.bar5.backdrop = true
+	E.db.actionbar.bar5.buttons = 6
+	E.db.actionbar.bar5.buttonsize = 32
+	E.db.actionbar.bar5.buttonspacing = 2
+	E.db.actionbar.bar5.buttonsPerRow = 3
+	E.db.actionbar.bar5.mouseover = true
+	--Stance Bar
+	E.db.actionbar.stanceBar.buttonsPerRow = 1
+	--Pet Bar
+	E.db.actionbar.barPet.point = "TOPRIGHT"
+	E.db.actionbar.barPet.buttonsPerRow = 1
+
+	--Datatext
+	do
+		E.db.datatexts.panelTransparency = false --5.4
+		E.db.datatexts.minimapPanels = true --5.4
+		E.db.datatexts.fontOutline = "None" --5.4
+		E.db.datatexts.panels['LeftChatDataPanel']['left'] = "" --5.4
+		E.db.datatexts.panels['LeftChatDataPanel']['middle'] = "Durability" --5.4
+		E.db.datatexts.panels['LeftChatDataPanel']['right'] = "" --5.4
+		E.db.datatexts.panels['RightChatDataPanel']['left'] = "Gold" --5.4
+		E.db.datatexts.panels['RightChatDataPanel']['middle'] = "System" --5.4
+		E.db.datatexts.panels['RightChatDataPanel']['right'] = "Time" --5.4
+		E.db.datatexts.panels['Top_Center'] = "Version" --5.4
+		E.db.datatexts.panels['LeftMiniPanel'] = "S&L Friends" --5.4
+		E.db.datatexts.panels['RightMiniPanel'] = "S&L Guild" --5.4
+
+		--Datatext Panels Spec Specific
+		if layout == 'tank' then
+			E.db.datatexts.panels['LeftChatDataPanel']['left'] = "Avoidance" --5.4
+			E.db.datatexts.panels['LeftChatDataPanel']['right'] = "Vengeance" --5.4
+		elseif layout == 'healer' then
+			E.db.datatexts.panels['LeftChatDataPanel']['left'] = "Spell/Heal Power" --5.4
+			E.db.datatexts.panels['LeftChatDataPanel']['right'] = "Haste" --5.4
+		elseif layout == 'dpsCaster' then
+			E.db.datatexts.panels['LeftChatDataPanel']['left'] = "Spell/Heal Power" --5.4
+			E.db.datatexts.panels['LeftChatDataPanel']['right'] = "Haste" --5.4
+		end
+	end
+
+	do
+		E.db.movers.ArenaHeaderMover = "TOPRIGHTElvUIParentTOPRIGHT-210-410"
+		E.db.movers.BossButton = "BOTTOMElvUIParentBOTTOM-315300"
+		E.db.movers.BossHeaderMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-210435"
+		E.db.movers.Bottom_Panel_Mover = "BOTTOMElvUIParentBOTTOM00"
+		E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-20782"
+		E.db.movers.ElvUF_PlayerCastbarMover = "BOTTOMElvUIParentBOTTOM-20758"
+		E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM20782"
+		E.db.movers.ElvUF_TargetCastbarMover = "BOTTOMElvUIParentBOTTOM20758"
+		E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM314223"
+		--E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310432"
+		E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM-314223"
+		E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM0230"
+		E.db.movers.ElvAB_1 = "BOTTOMElvUIParentBOTTOM021"
+		E.db.movers.ElvAB_2 = "BOTTOMElvUIParentBOTTOM-30821"
+		E.db.movers.ElvAB_3 = "BOTTOMElvUIParentBOTTOM30821"
+		--E.db.movers.ElvAB_4 = "BOTTOMLEFTElvUIParentBOTTOMRIGHT-380200"
+		E.db.movers.ElvAB_4 = "BOTTOMLEFTElvUIParentBOTTOMRIGHT-413200"
+		--E.db.movers.ElvAB_5 = "BOTTOMElvUIParentBOTTOM-26027"
+		E.db.movers.ElvAB_5 = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-4298"
+		E.db.movers.ElvUF_PetMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-551312"
+		E.db.movers.Top_Center_Mover = "TOPElvUIParentTOP00"
+		E.db.movers.PetAB = "RIGHTElvUIParentRIGHT00"
+		E.db.movers.MinimapMover = "TOPRIGHTElvUIParentTOPRIGHT00"
+		E.db.movers.LossControlMover = "TOPElvUIParentTOP0-379"
+		E.db.movers.ShiftAB = "BOTTOMLEFTElvUIParentBOTTOMLEFT41220"
+		E.db.movers.LeftChatMover = "BOTTOMLEFTUIParentBOTTOMLEFT019"
+		E.db.movers.RightChatMover = "BOTTOMRIGHTUIParentBOTTOMRIGHT019"
+		E.db.movers.TotemBarMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT41219"
+		E.db.movers.UIBFrameMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT315178"
+		E.db.movers.WatchFrameMover = "TOPLEFTElvUIParentTOPLEFT75-239"
+		E.db.movers.ExperienceBarMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-42619"
+		E.db.movers.ReputationBarMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-41419"
+		if layout == 'dpsCaster' or layout == 'dpsMelee' or layout == 'tank' then
+			E.db.movers.ElvUF_PartyMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT7200"
+			E.db.movers.ElvUF_Raid10Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT7200"
+			E.db.movers.ElvUF_Raid25Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT7200"
+			--E.db.movers.ElvUF_Raid25Mover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT1162121"
+			E.db.movers.ElvUF_Raid40Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT7200"
+		else
+			E.db.movers.ElvUF_PartyMover = "BOTTOMElvUIParentBOTTOM0121"
+			E.db.movers.ElvUF_Raid10Mover = "BOTTOMElvUIParentBOTTOM0121"
+			E.db.movers.ElvUF_Raid25Mover = "BOTTOMElvUIParentBOTTOM0121"
+			--E.db.movers.ElvUF_Raid25Mover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT1162121"
+			E.db.movers.ElvUF_Raid40Mover = "BOTTOMElvUIParentBOTTOM0121"
+		end
+	end
+
+	E:UpdateAll(true)
+end
+
+local function AffinitiiSetup() --The function to switch from class ElvUI settings to Affinitii's
+	SLEInstallStepComplete.message = L["Affinitii's Defaults Set"]
+	SLEInstallStepComplete:Show()
+	if not E.db.movers then E.db.movers = {}; end
+	layout = E.db.layoutSet  --Pull which layout was selected if any.
+	pixel = E.PixelMode  --Pull PixelMode
+	E.private.general.pixelPerfect = true
+	E.db.general.autoAcceptInvite = true
+	E.db.general.autoRepair = "GUILD"
+	E.db.general.bottomPanel = false
+	E.db.general.topPanel = false
+	E.db.general.backdropfadecolor = {
+		["r"] = 0.054,
+		["g"] = 0.054,
+		["b"] = 0.054,
+	}
+	E.db.general.valuecolor = {
+		["r"] = 0.09,
+		["g"] = 0.513,
+		["b"] = 0.819,
+	}
+	E.db.general.health = {
+	}
+	E.db.general.BUFFS = {
+	}
+	E.db.general.vendorGrays = true
+	E.db.general.autoRoll = true
+	E.db.general.threat.position = "LEFTCHAT"
+
+	E.private.general.normTex = "Polished Wood"
+	E.private.general.glossTex = "Polished Wood"
+	E.private.skins.addons.EmbedSkada = true
+	E.private.skins.addons.AlwaysTrue = true
+
+	E.db.gridSize = 110
+	E.db.hideTutorial = 1
+
+	E.db.tooltip.style = "inset"
+
+	--Chat
+	E.db.chat.editBoxPosition = "ABOVE_CHAT"
+	E.db.chat.emotionIcons = false
+	if GetScreenWidth() < 1920 then
+		E.db.chat.panelWidth = 380
+	else
+		E.db.chat.panelWidth = 412
+	end
+
+	--Unitframes
+	E.db.unitframe.font = "ElvUI Pixel"
+	E.db.unitframe.fontOutline = "MONOCHROMEOUTLINE"
+	E.db.unitframe.statusbar = "Polished Wood"
+	E.db.unitframe.smartRaidFilter = true
+	E.db.unitframe.colors.healthclass = false
+	E.db.unitframe.colors.castColor = {
+		["r"] = 0.1,
+		["g"] = 0.1,
+		["b"] = 0.1,
+	}
+	E.db.unitframe.colors.health = {--
+		["r"] = 0.2352941176470588,
+		["g"] = 0.2352941176470588,
+		["b"] = 0.2352941176470588,
+	}
+	E.db.unitframe.colors.auraBarBuff = {
+		["b"] = 0.09411764705882353,
+		["g"] = 0.07843137254901961,
+		["r"] = 0.3098039215686275,
+	}
+	E.db.unitframe.colors.transparentPower = true
+	E.db.unitframe.colors.transparentHealth = true
+
+	E.db.unitframe.units.tank.enable = false
+
+	E.db.unitframe.units.assist.enable = false
+	E.db.unitframe.units.assist.targetsGroup.enable = false
+
+	E.db.unitframe.units.arena.power.width = "inset"
+	E.db.unitframe.units.arena.power.offset = 0
+
+	E.db.unitframe.units.targettarget.power.width = "inset"
+	E.db.unitframe.units.targettarget.power.offset = 0
+
+	E.db.unitframe.units.pet.power.width = "inset"
+	E.db.unitframe.units.pet.power.offset = 0
+
+	E.db.unitframe.units.pettarget.power.width = "inset"
+
+	E.db.unitframe.units.boss.portrait.enable = true
+	E.db.unitframe.units.boss.portrait.overlay = true
+	E.db.unitframe.units.boss.power.width = "inset"
+	E.db.unitframe.units.boss.power.offset = 0
+
+	E.db.unitframe.units.focus.power.width = "inset"
+	E.db.unitframe.units.focus.power.offset = 0
+
+	E.db.unitframe.units.player.debuffs.attachTo = "BUFFS"
+	E.db.unitframe.units.player.portrait.overlay = true
+	E.db.unitframe.units.player.portrait.enable = true
+	E.db.unitframe.units.player.classbar.enable = false
+	E.db.unitframe.units.player.aurabar.enable = false
+	E.db.unitframe.units.player.power.width = "inset"
+	E.db.unitframe.units.player.power.offset = 0
+	E.db.unitframe.units.player.buffs.enable = true
+	E.db.unitframe.units.player.buffs.attachTo = "FRAME"
+	E.db.unitframe.units.player.buffs.noDuration = false
+	E.db.unitframe.units.player.castbar.width = 410
+	E.db.unitframe.units.player.castbar.height = 25
+
+	E.db.unitframe.units.target.portrait.enable = true
+	E.db.unitframe.units.target.portrait.overlay = true
+	E.db.unitframe.units.target.aurabar.enable = false
+	E.db.unitframe.units.target.power.width = "inset"
+	E.db.unitframe.units.target.power.offset = 0
+
+	E.db.unitframe.units.focustarget.power.width = "inset"
+
+	if not E.db.unitframe.units.party.customTexts then
+		E.db.unitframe.units.party.customTexts = {};
+		if not E.db.unitframe.units.party.customTexts["Health Text"] then
+			E.db.unitframe.units.party.customTexts["Health Text"] = {};
+		end
+	end
+	E.db.unitframe.units.party.customTexts["Health Text"] = {
+		["font"] = "ElvUI Pixel",
+		["justifyH"] = "CENTER",
+		["fontOutline"] = "MONOCHROMEOUTLINE",
+		["xOffset"] = 0,
+		["size"] = 10,
+		["text_format"] = "[healthcolor][health:deficit]",
+		["yOffset"] = -7,
+	}
+	E.db.unitframe.units.party.debuffs.xOffset = -4
+	E.db.unitframe.units.party.debuffs.yOffset = -7
+	E.db.unitframe.units.party.debuffs.anchorPoint = "TOPRIGHT"
+	E.db.unitframe.units.party.debuffs.sizeOverride = 21
+	E.db.unitframe.units.party.columnAnchorPoint = "BOTTOM"
+	E.db.unitframe.units.party.buffIndicator.size = 10
+	E.db.unitframe.units.party.point = "RIGHT"
+	E.db.unitframe.units.party.xOffset = -1
+	E.db.unitframe.units.party.yOffset = 1
+	E.db.unitframe.units.party.power.width = "inset"
+	E.db.unitframe.units.party.power.offset = 0
+	E.db.unitframe.units.party.power.text_format = ""
+	E.db.unitframe.units.party.buffIndicator.size = 10
+	E.db.unitframe.units.party.roleIcon.enable = false
+	E.db.unitframe.units.party.GPSArrow.size = 40
+	E.db.unitframe.units.party.growthDirection = "LEFT_UP"
+	E.db.unitframe.units.party.healPrediction = true
+	E.db.unitframe.units.party.health.frequentUpdates = true
+	E.db.unitframe.units.party.health.text_format = ""
+	E.db.unitframe.units.party.health.position = "BOTTOM"
+	E.db.unitframe.units.party.name.text_format = "[namecolor][name:veryshort] [difficultycolor][smartlevel]"
+	E.db.unitframe.units.party.name.position = "TOP"
+	E.db.unitframe.units.party.buffs.noConsolidated = false
+	E.db.unitframe.units.party.buffs.enable = true
+	E.db.unitframe.units.party.buffs.anchorPoint = "BOTTOMLEFT"
+	E.db.unitframe.units.party.buffs.clickThrough = true
+	E.db.unitframe.units.party.buffs.useBlacklist = false
+	E.db.unitframe.units.party.buffs.noDuration = false
+	E.db.unitframe.units.party.buffs.playerOnly = false
+	E.db.unitframe.units.party.buffs.perrow = 1
+	E.db.unitframe.units.party.buffs.useFilter = "TurtleBuffs"
+	E.db.unitframe.units.party.buffs.yOffset = 28
+	E.db.unitframe.units.party.buffs.xOffset = 30
+	E.db.unitframe.units.party.buffs.sizeOverride = 22
+	E.db.unitframe.units.party.petsGroup.anchorPoint = "BOTTOM"
+	E.db.unitframe.units.party.raidicon.attachTo = "LEFT"
+	E.db.unitframe.units.party.raidicon.xOffset = 9
+	E.db.unitframe.units.party.raidicon.size = 13
+	E.db.unitframe.units.party.raidicon.yOffset = 0
+	E.db.unitframe.units.party.targetsGroup.anchorPoint = "BOTTOM"
+	E.db.unitframe.units.party.width = 80
+	E.db.unitframe.units.party.height = 45
+	E.db.unitframe.units.party.groupBy = "GROUP"
+
+	if not E.db.unitframe.units.raid10.customTexts then
+		E.db.unitframe.units.raid10.customTexts = {};
+		if not E.db.unitframe.units.raid10.customTexts["Health Text"] then
+			E.db.unitframe.units.raid10.customTexts["Health Text"] = {};
+		end
+	end
+	E.db.unitframe.units.raid10.customTexts["Health Text"] = {
+		["font"] = "ElvUI Pixel",
+		["justifyH"] = "CENTER",
+		["fontOutline"] = "MONOCHROMEOUTLINE",
+		["xOffset"] = 0,
+		["size"] = 10,
+		["text_format"] = "[healthcolor][health:deficit]",
+		["yOffset"] = -7,
+	}
+	E.db.unitframe.units.raid10.columnAnchorPoint = "BOTTOM"
+	E.db.unitframe.units.raid10.buffIndicator.fontSize = 10
+	E.db.unitframe.units.raid10.point = "RIGHT"
+	E.db.unitframe.units.raid10.rdebuffs.enable = false
+	E.db.unitframe.units.raid10.yOffset = 4
+	E.db.unitframe.units.raid10.xOffset = -1
+	E.db.unitframe.units.raid10.roleIcon.enable = false
+	E.db.unitframe.units.raid10.power.width = "inset"
+	E.db.unitframe.units.raid10.power.offset = 0
+	E.db.unitframe.units.raid10.positionOverride = "BOTTOMRIGHT"
+	E.db.unitframe.units.raid10.healPrediction = true
+	E.db.unitframe.units.raid10.health.frequentUpdates = true
+	E.db.unitframe.units.raid10.health.text_format = ""
+	E.db.unitframe.units.raid10.debuffs.enable = true
+	E.db.unitframe.units.raid10.debuffs.anchorPoint = "TOPRIGHT"
+	E.db.unitframe.units.raid10.buffs.enable = true
+	E.db.unitframe.units.raid10.buffs.noConsolidated = false
+	E.db.unitframe.units.raid10.buffs.anchorPoint = "BOTTOMLEFT"
+	E.db.unitframe.units.raid10.buffs.clickThrough = true
+	E.db.unitframe.units.raid10.buffs.useBlacklist = false
+	E.db.unitframe.units.raid10.buffs.noDuration = false
+	E.db.unitframe.units.raid10.buffs.playerOnly = false
+	E.db.unitframe.units.raid10.buffs.perrow = 1
+	E.db.unitframe.units.raid10.buffs.useFilter = "TurtleBuffs"
+	E.db.unitframe.units.raid10.raidicon.attachTo = "LEFT"
+	E.db.unitframe.units.raid10.raidicon.xOffset = 9
+	E.db.unitframe.units.raid10.raidicon.size = 13
+	E.db.unitframe.units.raid10.raidicon.yOffset = 0
+	E.db.unitframe.units.raid10.name.text_format = "[namecolor][name:veryshort]"
+	E.db.unitframe.units.raid10.debuffs.sizeOverride = 21
+	E.db.unitframe.units.raid10.debuffs.xOffset = -4
+	E.db.unitframe.units.raid10.debuffs.yOffset = -7
+	E.db.unitframe.units.raid10.height = 45
+	E.db.unitframe.units.raid10.width = 80
+	E.db.unitframe.units.raid10.buffs.yOffset = 28
+	E.db.unitframe.units.raid10.buffs.xOffset = 30
+	E.db.unitframe.units.raid10.buffs.sizeOverride = 22
+	E.db.unitframe.units.raid10.groupBy = "GROUP"
+
+	if not E.db.unitframe.units.raid25.customTexts then
+		E.db.unitframe.units.raid25.customTexts = {};
+		if not E.db.unitframe.units.raid25.customTexts["Health Text"] then
+			E.db.unitframe.units.raid25.customTexts["Health Text"] = {};
+		end
+	end
+	E.db.unitframe.units.raid25.customTexts["Health Text"] = {
+		["font"] = "ElvUI Pixel",
+		["justifyH"] = "CENTER",
+		["fontOutline"] = "MONOCHROMEOUTLINE",
+		["xOffset"] = 0,
+		["size"] = 10,
+		["text_format"] = "[healthcolor][health:deficit]",
+		["yOffset"] = -7,
+	}
+	E.db.unitframe.units.raid25.columnAnchorPoint = "RIGHT"
+	E.db.unitframe.units.raid25.buffIndicator.fontSize = 10
+	E.db.unitframe.units.raid25.point = "BOTTOM"
+	E.db.unitframe.units.raid25.rdebuffs.enable = false
+	E.db.unitframe.units.raid25.xOffset = 1
+	E.db.unitframe.units.raid25.roleIcon.enable = false
+	E.db.unitframe.units.raid25.power.offset = 0
+	E.db.unitframe.units.raid25.power.width = "inset"
+	E.db.unitframe.units.raid25.power.position = "CENTER"
+	E.db.unitframe.units.raid25.growthDirection = "UP_LEFT"
+	E.db.unitframe.units.raid25.healPrediction = true
+	E.db.unitframe.units.raid25.health.frequentUpdates = true
+	E.db.unitframe.units.raid25.health.text_format = ""
+	E.db.unitframe.units.raid25.debuffs.anchorPoint = "TOPRIGHT"
+	E.db.unitframe.units.raid25.debuffs.enable = true
+	E.db.unitframe.units.raid25.debuffs.xOffset = -4
+	E.db.unitframe.units.raid25.debuffs.yOffset = -7
+	E.db.unitframe.units.raid25.debuffs.sizeOverride = 21
+	E.db.unitframe.units.raid25.debuffs.countFontSize = 12
+	E.db.unitframe.units.raid25.debuffs.fontSize = 9
+	E.db.unitframe.units.raid25.raidicon.attachTo = "LEFT"
+	E.db.unitframe.units.raid25.raidicon.xOffset = 9
+	E.db.unitframe.units.raid25.raidicon.yOffset = 0
+	E.db.unitframe.units.raid25.raidicon.size = 13
+	E.db.unitframe.units.raid25.buffs.noConsolidated = false
+	E.db.unitframe.units.raid25.buffs.enable = true
+	E.db.unitframe.units.raid25.buffs.anchorPoint = "BOTTOMLEFT"
+	E.db.unitframe.units.raid25.buffs.clickThrough = true
+	E.db.unitframe.units.raid25.buffs.useBlacklist = false
+	E.db.unitframe.units.raid25.buffs.noDuration = false
+	E.db.unitframe.units.raid25.buffs.playerOnly = false
+	E.db.unitframe.units.raid25.buffs.perrow = 1
+	E.db.unitframe.units.raid25.buffs.useFilter = "TurtleBuffs"
+	E.db.unitframe.units.raid25.name.text_format = "[namecolor][name:veryshort]"
+	E.db.unitframe.units.raid25.yOffset = 4
+	E.db.unitframe.units.raid25.width = 80
+	E.db.unitframe.units.raid25.height = 45
+	E.db.unitframe.units.raid25.buffs.yOffset = 28
+	E.db.unitframe.units.raid25.buffs.xOffset = 30
+	E.db.unitframe.units.raid25.buffs.sizeOverride = 22
+	E.db.unitframe.units.raid25.groupBy = "GROUP"
+
+	if not E.db.unitframe.units.raid40.customTexts then
+		E.db.unitframe.units.raid40.customTexts = {};
+		if not E.db.unitframe.units.raid40.customTexts["Health Text"] then
+			E.db.unitframe.units.raid40.customTexts["Health Text"] = {};
+		end
+	end
+	E.db.unitframe.units.raid40.customTexts["Health Text"] = {
+		["font"] = "ElvUI Pixel",
+		["justifyH"] = "CENTER",
+		["fontOutline"] = "MONOCHROMEOUTLINE",
+		["xOffset"] = 0,
+		["size"] = 10,
+		["text_format"] = "[healthcolor][health:deficit]",
+		["yOffset"] = -7,
+	}
+	E.db.unitframe.units.raid40.columnAnchorPoint = "RIGHT"
+	E.db.unitframe.units.raid40.point = "BOTTOM"
+	E.db.unitframe.units.raid40.xOffset = 1
+	E.db.unitframe.units.raid40.yOffset = 1
+	E.db.unitframe.units.raid40.growthDirection = "UP_LEFT"
+	E.db.unitframe.units.raid40.healPrediction = true
+	E.db.unitframe.units.raid40.width = 50
+	E.db.unitframe.units.raid40.height = 43
+	E.db.unitframe.units.raid40.raidicon.xOffset = 9
+	E.db.unitframe.units.raid40.raidicon.yOffset = 0
+	E.db.unitframe.units.raid40.raidicon.size = 13
+	E.db.unitframe.units.raid40.raidicon.attachTo = "LEFT"
+	E.db.unitframe.units.raid40.rdebuffs.size = 26
+	E.db.unitframe.units.raid40.name.position = "TOP"
+	E.db.unitframe.units.raid40.buffIndicator.fontSize = 10
+	E.db.unitframe.units.raid40.power.enable = true
+	E.db.unitframe.units.raid40.power.offset = 0
+	E.db.unitframe.units.raid40.power.width = "inset"
+	E.db.unitframe.units.raid40.power.position = "CENTER"
+	E.db.unitframe.units.raid40.health.frequentUpdates = true
+	E.db.unitframe.units.raid40.debuffs.sizeOverride = 21
+	E.db.unitframe.units.raid40.debuffs.enable = true
+	E.db.unitframe.units.raid40.debuffs.perrow = 2
+	E.db.unitframe.units.raid40.debuffs.anchorPoint = "TOPRIGHT"
+	E.db.unitframe.units.raid40.debuffs.clickThrough = true
+	E.db.unitframe.units.raid40.debuffs.xOffset = -4
+	E.db.unitframe.units.raid40.debuffs.yOffset = -9
+	E.db.unitframe.units.raid40.debuffs.useBlacklist = false
+	E.db.unitframe.units.raid40.debuffs.useFilter = "Blacklist"
+	E.db.unitframe.units.raid40.buffs.xOffset = 21
+	E.db.unitframe.units.raid40.buffs.yOffset = 25
+	E.db.unitframe.units.raid40.buffs.anchorPoint = "BOTTOMLEFT"
+	E.db.unitframe.units.raid40.buffs.clickThrough = true
+	E.db.unitframe.units.raid40.buffs.noConsolidated = false
+	E.db.unitframe.units.raid40.buffs.noDuration = false
+	E.db.unitframe.units.raid40.buffs.playerOnly = false
+	E.db.unitframe.units.raid40.buffs.perrow = 1
+	E.db.unitframe.units.raid40.buffs.useFilter = "TurtleBuffs"
+	E.db.unitframe.units.raid40.buffs.sizeOverride = 17
+	E.db.unitframe.units.raid40.buffs.useBlacklist = false
+	E.db.unitframe.units.raid40.buffs.enable = true
+	E.db.unitframe.units.raid40.name.text_format = "[namecolor][name:veryshort]"
+	E.db.unitframe.units.raid40.groupBy = "GROUP"
+
+	--Actionbars
+	--Bar 1
+	E.db.actionbar.bar1.enabled = true
+	E.db.actionbar.bar1.backdrop = false
+	E.db.actionbar.bar1.buttons = 12
+	E.db.actionbar.bar1.buttonsize = 32
+	E.db.actionbar.bar1.buttonspacing = 2
+	--Bar 2
+	E.db.actionbar.bar2.enabled = true
+	E.db.actionbar.bar2.backdrop = true
+	E.db.actionbar.bar2.buttons = 12
+	E.db.actionbar.bar2.buttonsize = 32
+	E.db.actionbar.bar2.buttonspacing = 2
+	E.db.actionbar.bar2.heightMult = 2
+	--Bar 3
+	E.db.actionbar.bar3.enabled = true
+	E.db.actionbar.bar3.backdrop = true
+	E.db.actionbar.bar3.buttons = 6
+	E.db.actionbar.bar3.buttonsize = 32
+	E.db.actionbar.bar3.buttonspacing = 2
+	E.db.actionbar.bar3.buttonsPerRow = 3
+	--Bar 4
+	E.db.actionbar.bar4.enabled = true
+	E.db.actionbar.bar4.backdrop = false
+	E.db.actionbar.bar4.buttons = 12
+	E.db.actionbar.bar4.buttonsize = 32
+	E.db.actionbar.bar4.buttonspacing = 2
+	E.db.actionbar.bar4.buttonsPerRow = 6
+	E.db.actionbar.bar4.mouseover = true
+	E.db.actionbar.bar4.point = "BOTTOMLEFT"
+	--Bar 5
+	E.db.actionbar.bar5.enabled = true
+	E.db.actionbar.bar5.backdrop = true
+	E.db.actionbar.bar5.buttons = 6
+	E.db.actionbar.bar5.buttonsize = 32
+	E.db.actionbar.bar5.buttonspacing = 2
+	E.db.actionbar.bar5.buttonsPerRow = 3
+	--Stance Bar
+	E.db.actionbar.stanceBar.buttonsPerRow = 1
+	--Pet Bar
+	E.db.actionbar.barPet.point = "TOPRIGHT"
+	E.db.actionbar.barPet.buttonsPerRow = 1
+
+	--Datatext
+	do
+		E.db.datatexts.panelTransparency = false
+		E.db.datatexts.minimapPanels = true
+		E.db.datatexts.fontOutline = "None"
+		E.db.sle.datatext.dp1.enabled = false
+		E.db.sle.datatext.dp2.enabled = false
+		E.db.sle.datatext.dp3.enabled = false
+		E.db.sle.datatext.dp4.enabled = false
+		E.db.sle.datatext.dp5.enabled = false
+		E.db.sle.datatext.dp6.enabled = true
+		E.db.sle.datatext.top.enabled = true
+		E.db.sle.datatext.bottom.enabled = true
+		if GetScreenWidth() < 1920 then
+			E.db.sle.datatext.dp6.width = 410
+			E.db.sle.datatext.bottom.width = 104
+			E.db.sle.datatext.top.width = 104
+			E.db.sle.datatext.chatleft.width = 364
+			E.db.sle.datatext.chatright.width = 364
+		elseif GetScreenWidth() > 1920 then
+			E.db.sle.datatext.dp6.width = 402
+			E.db.sle.datatext.bottom.width = 102
+			E.db.sle.datatext.top.width = 102
+			E.db.sle.datatext.chatleft.width = 396
+			E.db.sle.datatext.chatright.width = 396
+		else
+			E.db.sle.datatext.dp6.width = 410
+			E.db.sle.datatext.bottom.width = 104
+			E.db.sle.datatext.top.width = 104
+			E.db.sle.datatext.chatleft.width = 396
+			E.db.sle.datatext.chatright.width = 396
+		end
+		E.db.datatexts.panels['DP_6']['left'] = "System"
+		E.db.datatexts.panels['DP_6']['middle'] = "Time"
+		E.db.datatexts.panels['DP_6']['right'] = "Gold"
+		E.db.datatexts.panels['LeftChatDataPanel']['left'] = ""
+		E.db.datatexts.panels['LeftChatDataPanel']['middle'] = "Durability"
+		E.db.datatexts.panels['LeftChatDataPanel']['right'] = ""
+		E.db.datatexts.panels['RightChatDataPanel']['left'] = "Skada"
+		E.db.datatexts.panels['RightChatDataPanel']['middle'] = "Combat Time"
+		E.db.datatexts.panels['RightChatDataPanel']['right'] = "WeakAuras"
+		E.db.datatexts.panels['Top_Center'] = "Spec Switch"
+		E.db.datatexts.panels['Bottom_Panel'] = "Bags"
+		E.db.datatexts.panels['LeftMiniPanel'] = "Guild"
+		E.db.datatexts.panels['RightMiniPanel'] = "Friends"
+
+		--Datatext Panels Spec Specific
+		if layout == 'tank' then
+			--E.db.datatexts.panels.DP_5.middle = ""
+			--E.db.datatexts.panels.DP_5.right = ""
+			--E.db.datatexts.panels.DP_6.left = ""
+			--E.db.datatexts.panels.DP_6.middle = ""
+		elseif layout == 'healer' then
+			E.db.datatexts.panels['LeftChatDataPanel']['left'] = "Spell/Heal Power"
+			E.db.datatexts.panels['LeftChatDataPanel']['right'] = "Haste"
+		elseif layout == 'dpsCaster' then
+			E.db.datatexts.panels['LeftChatDataPanel']['left'] = "Spell/Heal Power"
+			E.db.datatexts.panels['LeftChatDataPanel']['right'] = "Haste"
+		else
+			--E.db.datatexts.panels.DP_5.middle = ""
+			--E.db.datatexts.panels.DP_5.right = ""
+			--E.db.datatexts.panels.DP_6.left = ""
+			--E.db.datatexts.panels.DP_6.middle = ""
+		end
+	end
+	do
+		if GetScreenWidth() > 1920 then
+			E.db.movers.ElvAB_3 = "BOTTOMElvUIParentBOTTOM25427"
+			E.db.movers.ElvAB_5 = "BOTTOMElvUIParentBOTTOM-25427"
+			E.db.movers.Bottom_Panel_Mover = "BOTTOMElvUIParentBOTTOM2544"
+			E.db.movers.Top_Center_Mover = "BOTTOMElvUIParentBOTTOM-2544"
+		else
+			E.db.movers.ElvAB_3 = "BOTTOMElvUIParentBOTTOM26027"
+			E.db.movers.ElvAB_5 = "BOTTOMElvUIParentBOTTOM-26027"
+			E.db.movers.Bottom_Panel_Mover = "BOTTOMElvUIParentBOTTOM2604"
+			E.db.movers.Top_Center_Mover = "BOTTOMElvUIParentBOTTOM-2604"
+		end
+		E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-278200"
+		E.db.movers.ElvUF_PlayerCastbarMover = "BOTTOMElvUIParentBOTTOM0100"
+		E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM278200"
+		E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM0190"
+		--E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310432"
+		E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM-63436"
+		E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM0230"
+		E.db.movers.ElvAB_1 = "BOTTOMElvUIParentBOTTOM060"
+		E.db.movers.ElvAB_2 = "BOTTOMElvUIParentBOTTOM027"
+		E.db.movers.DP_6_Mover = "BOTTOMElvUIParentBOTTOM04"
+		E.db.movers.LeftChatMover = "BOTTOMLEFTUIParentBOTTOMLEFT021"
+		E.db.movers.RightChatMover = "BOTTOMRIGHTUIParentBOTTOMRIGHT021"
+		E.db.movers.PetAB = "RIGHTElvUIParentRIGHT00"
+		E.db.movers.ArenaHeaderMover = "TOPRIGHTElvUIParentTOPRIGHT-210-410"
+		E.db.movers.BossHeaderMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-210435"
+		if layout == 'dpsCaster' or layout == 'dpsMelee' or layout == 'tank' then
+			E.db.movers.ElvUF_PartyMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT4200"
+			E.db.movers.ElvUF_Raid10Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT4200"
+			E.db.movers.ElvUF_Raid25Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT4200"
+			E.db.movers.ElvUF_Raid40Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT4200"
+			E.db.movers["BossButton"] = "CENTERElvUIParentCENTER-413188"
+		else
+			E.db.movers.ElvUF_PartyMover = "BOTTOMRIGHTElvUIParentCENTER-213-90"
+			E.db.movers.ElvUF_Raid10Mover = "BOTTOMRIGHTElvUIParentCENTER-213-90"
+			E.db.movers.ElvUF_Raid25Mover = "BOTTOMRIGHTElvUIParentCENTER-213-90"
+			E.db.movers.ElvUF_Raid40Mover = "BOTTOMRIGHTElvUIParentCENTER-213-90"
+			E.db.movers["BossButton"] = "CENTERElvUIParentCENTER-413188"
+		end
+
+		if GetScreenWidth() < 1920 then
+			E.db.movers.ElvAB_4 = "BOTTOMLEFTElvUIParentBOTTOMRIGHT-380200"
+			E.db.movers.ShiftAB = "BOTTOMLEFTElvUIParentBOTTOMLEFT38221"
+			E.db.movers.TotemBarMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT38221"
+		else
+			E.db.movers.ElvAB_4 = "BOTTOMLEFTElvUIParentBOTTOMRIGHT-413200"
+			E.db.movers.ShiftAB = "BOTTOMLEFTElvUIParentBOTTOMLEFT41421"
+			E.db.movers.TotemBarMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT41421"
+		end
+	end
+
+	E:UpdateAll(true)
+end
+
+local function InstallComplete()
+	E.private.sle.install_complete = SLE.version
+
+	if GetCVarBool("Sound_EnableMusic") then
+		StopMusic()
+	end
+
+	ReloadUI()
+end
+
+local function ResetAll()
+	SLEInstallNextButton:Disable()
+	SLEInstallPrevButton:Disable()
+	SLEInstallOption1Button:Hide()
+	SLEInstallOption1Button:SetScript("OnClick", nil)
+	SLEInstallOption1Button:SetText("")
+	SLEInstallOption2Button:Hide()
+	SLEInstallOption2Button:SetScript('OnClick', nil)
+	SLEInstallOption2Button:SetText('')
+	SLEInstallOption3Button:Hide()
+	SLEInstallOption3Button:SetScript('OnClick', nil)
+	SLEInstallOption3Button:SetText('')
+	SLEInstallOption4Button:Hide()
+	SLEInstallOption4Button:SetScript('OnClick', nil)
+	SLEInstallOption4Button:SetText('')
+	SLEInstallFrame.SubTitle:SetText("")
+	SLEInstallFrame.Desc1:SetText("")
+	SLEInstallFrame.Desc2:SetText("")
+	SLEInstallFrame.Desc3:SetText("")
+	SLEInstallFrame:Size(550, 400)
+end
+
+local function SetPage(PageNum)
+	CURRENT_PAGE = PageNum
+	ResetAll()
+	SLEInstallStatus:SetValue(PageNum)
+
+	local f = SLEInstallFrame
+
+	if PageNum == MAX_PAGE then
+		SLEInstallNextButton:Disable()
+	else
+		SLEInstallNextButton:Enable()
+	end
+
+	if PageNum == 1 then
+		SLEInstallPrevButton:Disable()
+	else
+		SLEInstallPrevButton:Enable()
+	end
+
+	if PageNum == 1 then
+		f.SubTitle:SetText(format(L["Welcome to |cff1784d1Shadow & Light|r version %s!"], SLE.version))
+		f.Desc1:SetText("This install process will setup configuration of Shadow & Light.")
+		f.Desc2:SetText("")
+		f.Desc3:SetText(L["Please press the continue button to go onto the next step."])
+
+		SLEInstallOption1Button:Show()
+		SLEInstallOption1Button:SetScript("OnClick", InstallComplete)
+		SLEInstallOption1Button:SetText(L["Skip Process"])
+	elseif PageNum == 2 then
+		f.SubTitle:SetText(L["Chat"])
+		f.Desc1:SetText("This options will determine if you want to use default ElvUI's chat datapanels or let Shadow & Light handle them.")
+		f.Desc2:SetText("Shadow & Light will dock them outside of actual chat panels.")
+		f.Desc3:SetText(L["Importance: |cffD3CF00Medium|r"])
+
+		SLEInstallOption1Button:Show()
+		SLEInstallOption1Button:SetScript("OnClick", function() E.db.sle.datatext.chathandle = false; E:GetModule('Layout'):ToggleChatPanels() end)
+		SLEInstallOption1Button:SetText("ElvUI Panels")
+		SLEInstallOption2Button:Show()
+		SLEInstallOption2Button:SetScript('OnClick', function() E.db.sle.datatext.chathandle = true; E:GetModule('Layout'):ToggleChatPanels() end)
+		SLEInstallOption2Button:SetText("S&L Panels")
+	elseif PageNum == 3 then
+		f.SubTitle:SetText(L["Armory Mode"])
+		f.Desc1:SetText("Imma test text")
+		f.Desc2:SetText("This page is for armory mode disable/enable stuff")
+		f.Desc3:SetText(L["Importance: |cffFF0000Low|r"])
+
+		SLEInstallOption1Button:Show()
+		SLEInstallOption1Button:SetScript('OnClick', function() E.private.sle.characterframeoptions.enable = true; E.private.sle.inspectframeoptions.enable = true; end)
+		SLEInstallOption1Button:SetText(L["Enable"])
+	elseif PageNum == 4 then
+		f.SubTitle:SetText("Shadow & Light Settings")
+		f.Desc1:SetText(L["You can now choose if you what to use one of authors' set of options. This will change not only the positioning of some elements but also change a bunch of other options."])
+		f.Desc2:SetText(L["SLE_Install_Text2"])
+		f.Desc3:SetText(L["Importance: |cffFF0000Low|r"])
+
+		SLEInstallOption1Button:Show()
+		SLEInstallOption1Button:SetScript('OnClick', function() DarthSetup() end)
+		SLEInstallOption1Button:SetText(L["Darth's Config"])
+
+		SLEInstallOption2Button:Show()
+		SLEInstallOption2Button:SetScript('OnClick', function() AffinitiiSetup() end)
+		SLEInstallOption2Button:SetText(L["Affinitii's Config"])
+
+		SLEInstallOption3Button:Show()
+		SLEInstallOption3Button:SetScript('OnClick', function() RepoocSetup() end)
+		SLEInstallOption3Button:SetText(L["Repooc's Config"])
+	elseif PageNum == 5 then
+		f.SubTitle:SetText(L["Installation Complete"])
+		f.Desc1:SetText(L["You are now finished with the installation process. If you are in need of technical support please visit us at http://www.tukui.org."])
+		f.Desc2:SetText(L["Please click the button below so you can setup variables and ReloadUI."])
+		SLEInstallOption1Button:Show()
+		SLEInstallOption1Button:SetScript("OnClick", InstallComplete)
+		SLEInstallOption1Button:SetText(L["Finished"])
+		SLEInstallFrame:Size(550, 350)
+	end
+end
+
+local function NextPage()
+	if CURRENT_PAGE ~= MAX_PAGE then
+		CURRENT_PAGE = CURRENT_PAGE + 1
+		SetPage(CURRENT_PAGE)
+	end
+end
+
+local function PreviousPage()
+	if CURRENT_PAGE ~= 1 then
+		CURRENT_PAGE = CURRENT_PAGE - 1
+		SetPage(CURRENT_PAGE)
+	end
+end
+
+--Install UI
+function SLE:Install()
+	if not SLEInstallStepComplete then
+		local imsg = CreateFrame("Frame", "SLEInstallStepComplete", E.UIParent)
+		imsg:Size(418, 72)
+		imsg:Point("TOP", 0, -190)
+		imsg:Hide()
+		imsg:SetScript('OnShow', function(self)
+			if self.message then
+				PlaySoundFile([[Sound\Interface\LevelUp.wav]])
+				self.text:SetText(self.message)
+				UIFrameFadeOut(self, 3.5, 1, 0)
+				E:Delay(4, function() self:Hide() end)
+				self.message = nil
+
+				if imsg.firstShow == false then
+					if GetCVarBool("Sound_EnableMusic") then
+						PlayMusic([[Sound\Music\ZoneMusic\DMF_L70ETC01.mp3]])
+					end
+					imsg.firstShow = true
+				end
+			else
+				self:Hide()
+			end
+		end)
+
+		imsg.firstShow = false
+
+		imsg.bg = imsg:CreateTexture(nil, 'BACKGROUND')
+		imsg.bg:SetTexture([[Interface\LevelUp\LevelUpTex]])
+		imsg.bg:SetPoint('BOTTOM')
+		imsg.bg:Size(326, 103)
+		imsg.bg:SetTexCoord(0.00195313, 0.63867188, 0.03710938, 0.23828125)
+		imsg.bg:SetVertexColor(1, 1, 1, 0.6)
+
+		imsg.lineTop = imsg:CreateTexture(nil, 'BACKGROUND')
+		imsg.lineTop:SetDrawLayer('BACKGROUND', 2)
+		imsg.lineTop:SetTexture([[Interface\LevelUp\LevelUpTex]])
+		imsg.lineTop:SetPoint("TOP")
+		imsg.lineTop:Size(418, 7)
+		imsg.lineTop:SetTexCoord(0.00195313, 0.81835938, 0.01953125, 0.03320313)
+
+		imsg.lineBottom = imsg:CreateTexture(nil, 'BACKGROUND')
+		imsg.lineBottom:SetDrawLayer('BACKGROUND', 2)
+		imsg.lineBottom:SetTexture([[Interface\LevelUp\LevelUpTex]])
+		imsg.lineBottom:SetPoint("BOTTOM")
+		imsg.lineBottom:Size(418, 7)
+		imsg.lineBottom:SetTexCoord(0.00195313, 0.81835938, 0.01953125, 0.03320313)
+
+		imsg.text = imsg:CreateFontString(nil, 'ARTWORK', 'GameFont_Gigantic')
+		imsg.text:Point("BOTTOM", 0, 12)
+		imsg.text:SetTextColor(1, 0.82, 0)
+		imsg.text:SetJustifyH("CENTER")
+	end
+
+	--Create Frame
+	if not SLEInstallFrame then
+		local f = CreateFrame("Button", "SLEInstallFrame", E.UIParent)
+		f.SetPage = SetPage
+		f:Size(550, 400)
+		f:SetTemplate("Transparent")
+		f:SetPoint("CENTER")
+		f:SetFrameStrata('TOOLTIP')
+
+		f.Title = f:CreateFontString(nil, 'OVERLAY')
+		f.Title:FontTemplate(nil, 17, nil)
+		f.Title:Point("TOP", 0, -5)
+		f.Title:SetText(L["|cff1784d1Shadow & Light|r Installation"])
+
+		f.Next = CreateFrame("Button", "SLEInstallNextButton", f, "UIPanelButtonTemplate")
+		f.Next:StripTextures()
+		f.Next:SetTemplate("Default", true)
+		f.Next:Size(110, 25)
+		f.Next:Point("BOTTOMRIGHT", -5, 5)
+		f.Next:SetText(CONTINUE)
+		f.Next:Disable()
+		f.Next:SetScript("OnClick", NextPage)
+		E.Skins:HandleButton(f.Next, true)
+
+		f.Prev = CreateFrame("Button", "SLEInstallPrevButton", f, "UIPanelButtonTemplate")
+		f.Prev:StripTextures()
+		f.Prev:SetTemplate("Default", true)
+		f.Prev:Size(110, 25)
+		f.Prev:Point("BOTTOMLEFT", 5, 5)
+		f.Prev:SetText(PREVIOUS)
+		f.Prev:Disable()
+		f.Prev:SetScript("OnClick", PreviousPage)
+		E.Skins:HandleButton(f.Prev, true)
+
+		f.Status = CreateFrame("StatusBar", "SLEInstallStatus", f)
+		f.Status:SetFrameLevel(f.Status:GetFrameLevel() + 2)
+		f.Status:CreateBackdrop("Default")
+		f.Status:SetStatusBarTexture(E["media"].normTex)
+		f.Status:SetStatusBarColor(unpack(E["media"].rgbvaluecolor))
+		f.Status:SetMinMaxValues(0, MAX_PAGE)
+		f.Status:Point("TOPLEFT", f.Prev, "TOPRIGHT", 6, -2)
+		f.Status:Point("BOTTOMRIGHT", f.Next, "BOTTOMLEFT", -6, 2)
+		f.Status.text = f.Status:CreateFontString(nil, 'OVERLAY')
+		f.Status.text:FontTemplate()
+		f.Status.text:SetPoint("CENTER")
+		f.Status.text:SetText(CURRENT_PAGE.." / "..MAX_PAGE)
+		f.Status:SetScript("OnValueChanged", function(self)
+			self.text:SetText(self:GetValue().." / "..MAX_PAGE)
+		end)
+
+		f.Option1 = CreateFrame("Button", "SLEInstallOption1Button", f, "UIPanelButtonTemplate")
+		f.Option1:StripTextures()
+		f.Option1:Size(160, 30)
+		f.Option1:Point("BOTTOM", 0, 45)
+		f.Option1:SetText("")
+		f.Option1:Hide()
+		E.Skins:HandleButton(f.Option1, true)
+
+		f.Option2 = CreateFrame("Button", "SLEInstallOption2Button", f, "UIPanelButtonTemplate")
+		f.Option2:StripTextures()
+		f.Option2:Size(110, 30)
+		f.Option2:Point('BOTTOMLEFT', f, 'BOTTOM', 4, 45)
+		f.Option2:SetText("")
+		f.Option2:Hide()
+		f.Option2:SetScript('OnShow', function() f.Option1:SetWidth(110); f.Option1:ClearAllPoints(); f.Option1:Point('BOTTOMRIGHT', f, 'BOTTOM', -4, 45) end)
+		f.Option2:SetScript('OnHide', function() f.Option1:SetWidth(160); f.Option1:ClearAllPoints(); f.Option1:Point("BOTTOM", 0, 45) end)
+		E.Skins:HandleButton(f.Option2, true)
+
+		f.Option3 = CreateFrame("Button", "SLEInstallOption3Button", f, "UIPanelButtonTemplate")
+		f.Option3:StripTextures()
+		f.Option3:Size(100, 30)
+		f.Option3:Point('LEFT', f.Option2, 'RIGHT', 4, 0)
+		f.Option3:SetText("")
+		f.Option3:Hide()
+		f.Option3:SetScript('OnShow', function() f.Option1:SetWidth(100); f.Option1:ClearAllPoints(); f.Option1:Point('RIGHT', f.Option2, 'LEFT', -4, 0); f.Option2:SetWidth(100); f.Option2:ClearAllPoints(); f.Option2:Point('BOTTOM', f, 'BOTTOM', 0, 45)  end)
+		f.Option3:SetScript('OnHide', function() f.Option1:SetWidth(160); f.Option1:ClearAllPoints(); f.Option1:Point("BOTTOM", 0, 45); f.Option2:SetWidth(110); f.Option2:ClearAllPoints(); f.Option2:Point('BOTTOMLEFT', f, 'BOTTOM', 4, 45) end)
+		E.Skins:HandleButton(f.Option3, true)
+
+		f.Option4 = CreateFrame("Button", "SLEInstallOption4Button", f, "UIPanelButtonTemplate")
+		f.Option4:StripTextures()
+		f.Option4:Size(100, 30)
+		f.Option4:Point('LEFT', f.Option3, 'RIGHT', 4, 0)
+		f.Option4:SetText("")
+		f.Option4:Hide()
+		f.Option4:SetScript('OnShow', function()
+			f.Option1:Width(100)
+			f.Option2:Width(100)
+
+			f.Option1:ClearAllPoints();
+			f.Option1:Point('RIGHT', f.Option2, 'LEFT', -4, 0);
+			f.Option2:ClearAllPoints();
+			f.Option2:Point('BOTTOMRIGHT', f, 'BOTTOM', -4, 45)
+		end)
+		f.Option4:SetScript('OnHide', function() f.Option1:SetWidth(160); f.Option1:ClearAllPoints(); f.Option1:Point("BOTTOM", 0, 45); f.Option2:SetWidth(110); f.Option2:ClearAllPoints(); f.Option2:Point('BOTTOMLEFT', f, 'BOTTOM', 4, 45) end)
+		E.Skins:HandleButton(f.Option4, true)
+
+		f.SubTitle = f:CreateFontString(nil, 'OVERLAY')
+		f.SubTitle:FontTemplate(nil, 15, nil)
+		f.SubTitle:Point("TOP", 0, -40)
+
+		f.Desc1 = f:CreateFontString(nil, 'OVERLAY')
+		f.Desc1:FontTemplate()
+		f.Desc1:Point("TOPLEFT", 20, -75)
+		f.Desc1:Width(f:GetWidth() - 40)
+
+		f.Desc2 = f:CreateFontString(nil, 'OVERLAY')
+		f.Desc2:FontTemplate()
+		f.Desc2:Point("TOPLEFT", 20, -125)
+		f.Desc2:Width(f:GetWidth() - 40)
+
+		f.Desc3 = f:CreateFontString(nil, 'OVERLAY')
+		f.Desc3:FontTemplate()
+		f.Desc3:Point("TOPLEFT", 20, -175)
+		f.Desc3:Width(f:GetWidth() - 40)
+
+		local close = CreateFrame("Button", "SLEInstallCloseButton", f, "UIPanelCloseButton")
+		close:SetPoint("TOPRIGHT", f, "TOPRIGHT")
+		close:SetScript("OnClick", function()
+			f:Hide()
+			CURRENT_PAGE = 0
+		end)
+		E.Skins:HandleCloseButton(close)
+
+		f.tutorialImage = f:CreateTexture('SLEInstallTutorialImage', 'OVERLAY')
+		f.tutorialImage:Size(256, 128)
+		f.tutorialImage:SetTexture('Interface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Banner')
+		f.tutorialImage:Point('BOTTOM', 0, 70)
+	end
+
+	SLEInstallFrame:Show()
+	NextPage()
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/core/installer/BigWigs.lua b/ElvUI_SLE/core/installer/BigWigs.lua
new file mode 100644
index 0000000..594d904
--- /dev/null
+++ b/ElvUI_SLE/core/installer/BigWigs.lua
@@ -0,0 +1,35 @@
+local E, L, V, P, G = unpack(ElvUI);
+local AI = E:GetModule('SLE_AddonInstaller')
+
+local ace3   = true               -- whether or not this database is a Ace3 profile
+local name   = 'BigWigs'          -- the name of the addon
+local dbname = 'BigWigs3DB'       -- name of the addon database
+
+local function OnDemand(profile)  -- function that creates the "load on demand" database
+	local database
+	if profile == "Affinitii" then
+		database = {
+			["showBlizzardWarnings"] = true,
+			["showBossmodChat"] = true,
+			["seenmovies"] = {
+				[73] = true,
+				[74] = true,
+				[75] = true,
+				[76] = true,
+			},
+		}
+	end
+
+	if profile == "Repooc" then
+		-- No Settings
+	end
+
+	if profile == "Darth" then
+		-- No Settings
+	end
+
+	return database
+end
+
+-- register the profile with the engine
+AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/core/installer/BigWigsFights.lua b/ElvUI_SLE/core/installer/BigWigsFights.lua
new file mode 100644
index 0000000..cfaae3b
--- /dev/null
+++ b/ElvUI_SLE/core/installer/BigWigsFights.lua
@@ -0,0 +1,91 @@
+local E, L, V, P, G = unpack(ElvUI);
+local AI = E:GetModule('SLE_AddonInstaller')
+
+local ace3   = false              -- whether or not this database is a Ace3 profile
+local name   = 'BigWigs'          -- the name of the addon
+local dbname = 'BigWigs3DB'       -- name of the addon database
+
+local function OnDemand(profile)  -- function that creates the "load on demand" database
+	local database
+	if profile == "Affinitii" then
+		database = {
+			["namespaces"] = {
+				["BigWigs_Bosses_Madness of Deathwing"] = {
+					["profiles"] = {
+						["Shadow and Light (Affinitii)"] = {
+							["Elementium Bolt"] = 643,
+						},
+					},
+				},
+				["BigWigs_Plugins_Proximity"] = {
+					["profiles"] = {
+						["Shadow and Light (Affinitii)"] = {
+							["fontSize"] = 20.00000079528718,
+							["posy"] = 265.5998002156482,
+							["lock"] = true,
+							["posx"] = 244.6221205041632,
+							["sound"] = false,
+							["font"] = "ElvUI Font",
+						},
+					},
+				},
+				["BigWigs_Plugins_Sounds"] = {
+					["profiles"] = {
+						["Shadow and Light (Affinitii)"] = {
+							["Long"] = {
+							},
+							["Info"] = {
+							},
+							["Alarm"] = {
+							},
+							["Alert"] = {
+							},
+						},
+					},
+				},
+				["BigWigs_Plugins_Messages"] = {
+					["profiles"] = {
+						["Shadow and Light (Affinitii)"] = {
+							["fontSize"] = 20.00000079528718,
+							["monochrome"] = false,
+							["font"] = "ElvUI Font",
+							["BWEmphasizeMessageAnchor_y"] = 465.0667085654549,
+							["BWMessageAnchor_y"] = 440.8888495721501,
+							["BWEmphasizeMessageAnchor_x"] = 610.8445805698311,
+							["BWMessageAnchor_x"] = 610.8445307717618,
+						},
+					},
+				},
+				["BigWigs_Plugins_Bars"] = {
+					["profiles"] = {
+						["Shadow and Light (Affinitii)"] = {
+							["BigWigsEmphasizeAnchor_y"] = 303.2888646270365,
+							["BigWigsAnchor_y"] = 116.8001243424387,
+							["emphasizeGrowup"] = false,
+							["BigWigsAnchor_x"] = 19.73342363118923,
+							["fill"] = false,
+							["BigWigsAnchor_width"] = 381.8331333576473,
+							["BigWigsEmphasizeAnchor_width"] = 216.1665623191371,
+							["BigWigsEmphasizeAnchor_x"] = 272.8889300172694,
+							["font"] = "ElvUI Font",
+							["emphasizeScale"] = 1,
+						},
+					},
+				},
+			},
+		}
+	end
+
+	if profile == "Repooc" then
+		-- No Settings
+	end
+
+	if profile == "Darth" then
+		-- No Settings
+	end
+
+	return database
+end
+
+-- register the profile with the engine
+AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/core/installer/BigWigsIcon.lua b/ElvUI_SLE/core/installer/BigWigsIcon.lua
new file mode 100644
index 0000000..4ec1ac4
--- /dev/null
+++ b/ElvUI_SLE/core/installer/BigWigsIcon.lua
@@ -0,0 +1,29 @@
+local E, L, V, P, G = unpack(ElvUI);
+local AI = E:GetModule('SLE_AddonInstaller')
+
+local ace3   = false              -- whether or not this database is a Ace3 profile
+local name   = 'BigWigs'          -- the name of the addon
+local dbname = 'BigWigs3IconDB'   -- name of the addon database
+
+local function OnDemand(profile)  -- function that creates the "load on demand" database
+	local database
+	if profile == "Affinitii" then
+		database = {
+			["minimapPos"] = 158.126507574158,
+			["hide"] = true,
+		}
+	end
+
+	if profile == "Repooc" then
+		-- No Settings
+	end
+
+	if profile == "Darth" then
+		-- No Settings
+	end
+
+	return database
+end
+
+-- register the profile with the engine
+AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/core/installer/Clique.lua b/ElvUI_SLE/core/installer/Clique.lua
new file mode 100644
index 0000000..e44019b
--- /dev/null
+++ b/ElvUI_SLE/core/installer/Clique.lua
@@ -0,0 +1,27 @@
+local E, L, V, P, G = unpack(ElvUI);
+local AI = E:GetModule('SLE_AddonInstaller')
+
+local ace3   = false              -- whether or not this database is a Ace3 profile
+local name   = 'Clique'          -- the name of the addon
+local dbname = 'CliqueDB3'       -- name of the addon database
+
+local function OnDemand(profile)  -- function that creates the "load on demand" database
+	local database
+	if profile == "Affinitii" then
+		-- No Settings
+	end
+
+	if profile == "Repooc" then
+		--database = {
+		--}
+	end
+
+	if profile == "Darth" then
+		-- No Settings
+	end
+
+	return database
+end
+
+-- register the profile with the engine
+AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/core/installer/Hermes.lua b/ElvUI_SLE/core/installer/Hermes.lua
new file mode 100644
index 0000000..7c65d56
--- /dev/null
+++ b/ElvUI_SLE/core/installer/Hermes.lua
@@ -0,0 +1,1046 @@
+local E, L, V, P, G = unpack(ElvUI);
+local AI = E:GetModule('SLE_AddonInstaller')
+
+local ace3   = true               -- whether or not this database is a Ace3 profile
+local name   = 'Hermes'           -- the name of the addon
+local dbname = 'HermesDB2'        -- name of the addon database
+
+local function OnDemand(profile)  -- function that creates the "load on demand" database
+	local database
+	if profile == "Affinitii" then
+		database = {
+			["configMode"] = false,
+			["pluginState"] = {
+				["UI"] = true,
+			},
+			["spells"] = {
+				{
+					["enabled"] = false,
+					["name"] = "Ancestral Guidance",
+					["id"] = 108281,
+					["class"] = "SHAMAN",
+					["icon"] = "Interface\\Icons\\ability_shaman_ancestralguidance",
+				}, -- [1]
+				{
+					["enabled"] = false,
+					["name"] = "Anti-Magic Shell",
+					["id"] = 48707,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_AntiMagicShell",
+				}, -- [2]
+				{
+					["enabled"] = false,
+					["name"] = "Anti-Magic Zone",
+					["id"] = 51052,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_DeathKnight_AntiMagicZone",
+				}, -- [3]
+				{
+					["enabled"] = false,
+					["name"] = "Ardent Defender",
+					["id"] = 31850,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_ArdentDefender",
+				}, -- [4]
+				{
+					["enabled"] = false,
+					["name"] = "Army of the Dead",
+					["id"] = 42650,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_DeathKnight_ArmyOfTheDead",
+				}, -- [5]
+				{
+					["enabled"] = false,
+					["name"] = "Barkskin",
+					["id"] = 22812,
+					["class"] = "DRUID",
+					["icon"] = "Interface\\Icons\\Spell_Nature_StoneClawTotem",
+				}, -- [6]
+				{
+					["enabled"] = false,
+					["name"] = "Blind",
+					["id"] = 2094,
+					["class"] = "ROGUE",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_MindSteal",
+				}, -- [7]
+				{
+					["enabled"] = false,
+					["name"] = "Bloodlust",
+					["id"] = 2825,
+					["class"] = "SHAMAN",
+					["icon"] = "Interface\\Icons\\Spell_Nature_BloodLust",
+				}, -- [8]
+				{
+					["enabled"] = false,
+					["name"] = "Bone Shield",
+					["id"] = 49222,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "INTERFACE\\ICONS\\ability_deathknight_boneshield",
+				}, -- [9]
+				{
+					["enabled"] = false,
+					["name"] = "Cenarion Ward",
+					["id"] = 102351,
+					["class"] = "DRUID",
+					["icon"] = "Interface\\Icons\\Ability_Druid_NaturalPerfection",
+				}, -- [10]
+				{
+					["enabled"] = false,
+					["name"] = "Cloak of Shadows",
+					["id"] = 31224,
+					["class"] = "ROGUE",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_NetherCloak",
+				}, -- [11]
+				{
+					["enabled"] = false,
+					["name"] = "Counterspell",
+					["id"] = 2139,
+					["class"] = "MAGE",
+					["icon"] = "Interface\\Icons\\Spell_Frost_IceShock",
+				}, -- [12]
+				{
+					["enabled"] = false,
+					["name"] = "Create Soulwell",
+					["id"] = 29893,
+					["class"] = "WARLOCK",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_Shadesofdarkness",
+				}, -- [13]
+				{
+					["enabled"] = false,
+					["name"] = "Dancing Rune Weapon",
+					["id"] = 49028,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\INV_Sword_07",
+				}, -- [14]
+				{
+					["enabled"] = false,
+					["name"] = "Death Grip",
+					["id"] = 49576,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_DeathKnight_Strangulate",
+				}, -- [15]
+				{
+					["enabled"] = false,
+					["name"] = "Death Pact",
+					["id"] = 48743,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_DeathPact",
+				}, -- [16]
+				{
+					["enabled"] = false,
+					["name"] = "Demoralizing Banner",
+					["id"] = 114203,
+					["class"] = "WARRIOR",
+					["icon"] = "Interface\\Icons\\demoralizing_banner",
+				}, -- [17]
+				{
+					["enabled"] = true,
+					["name"] = "Devotion Aura",
+					["id"] = 31821,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_AuraMastery",
+				}, -- [18]
+				{
+					["enabled"] = false,
+					["name"] = "Disrupting Shout",
+					["id"] = 102060,
+					["class"] = "WARRIOR",
+					["icon"] = "Interface\\Icons\\warrior_disruptingshout",
+				}, -- [19]
+				{
+					["enabled"] = true,
+					["name"] = "Divine Hymn",
+					["id"] = 64843,
+					["class"] = "PRIEST",
+					["icon"] = "Interface\\Icons\\Spell_Holy_DivineHymn",
+				}, -- [20]
+				{
+					["enabled"] = false,
+					["name"] = "Divine Protection",
+					["id"] = 498,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\spell_holy_divineprotection",
+				}, -- [21]
+				{
+					["enabled"] = false,
+					["name"] = "Divine Shield",
+					["id"] = 642,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\spell_holy_divineshield",
+				}, -- [22]
+				{
+					["enabled"] = false,
+					["name"] = "Every Man for Himself",
+					["id"] = 59752,
+					["class"] = "ANY",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_Charm",
+				}, -- [23]
+				{
+					["enabled"] = false,
+					["name"] = "Fist of Justice",
+					["id"] = 105593,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_FistOfJustice",
+				}, -- [24]
+				{
+					["enabled"] = false,
+					["name"] = "Frenzied Regeneration",
+					["id"] = 22842,
+					["class"] = "DRUID",
+					["icon"] = "Interface\\Icons\\Ability_BullRush",
+				}, -- [25]
+				{
+					["enabled"] = false,
+					["name"] = "Guardian Spirit",
+					["id"] = 47788,
+					["class"] = "PRIEST",
+					["icon"] = "Interface\\Icons\\Spell_Holy_GuardianSpirit",
+				}, -- [26]
+				{
+					["enabled"] = false,
+					["name"] = "Guardian of Ancient Kings",
+					["id"] = 86659,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_Heroism",
+				}, -- [27]
+				{
+					["enabled"] = false,
+					["name"] = "Hammer of Justice",
+					["id"] = 853,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfMight",
+				}, -- [28]
+				{
+					["enabled"] = false,
+					["name"] = "Hand of Freedom",
+					["id"] = 1044,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfValor",
+				}, -- [29]
+				{
+					["enabled"] = false,
+					["name"] = "Hand of Protection",
+					["id"] = 1022,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfProtection",
+				}, -- [30]
+				{
+					["enabled"] = false,
+					["name"] = "Hand of Purity",
+					["id"] = 114039,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfWisdom",
+				}, -- [31]
+				{
+					["enabled"] = false,
+					["name"] = "Hand of Sacrifice",
+					["id"] = 6940,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfSacrifice",
+				}, -- [32]
+				{
+					["enabled"] = false,
+					["name"] = "Hand of Salvation",
+					["id"] = 1038,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfSalvation",
+				}, -- [33]
+				{
+					["enabled"] = false,
+					["name"] = "Healing Stream Totem",
+					["id"] = 5394,
+					["class"] = "SHAMAN",
+					["icon"] = "Interface\\Icons\\INV_Spear_04",
+				}, -- [34]
+				{
+					["enabled"] = false,
+					["name"] = "Healing Tide Totem",
+					["id"] = 108280,
+					["class"] = "SHAMAN",
+					["icon"] = "Interface\\Icons\\ability_shaman_healingtide",
+				}, -- [35]
+				{
+					["enabled"] = true,
+					["name"] = "Hymn of Hope",
+					["id"] = 64901,
+					["class"] = "PRIEST",
+					["icon"] = "Interface\\Icons\\Spell_Holy_SymbolOfHope",
+				}, -- [36]
+				{
+					["enabled"] = false,
+					["name"] = "Ice Block",
+					["id"] = 45438,
+					["class"] = "MAGE",
+					["icon"] = "Interface\\Icons\\Spell_Frost_Frost",
+				}, -- [37]
+				{
+					["enabled"] = false,
+					["name"] = "Icebound Fortitude",
+					["id"] = 48792,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_DeathKnight_IceBoundFortitude",
+				}, -- [38]
+				{
+					["enabled"] = false,
+					["name"] = "Incarnation: Tree of Life",
+					["id"] = 33891,
+					["class"] = "DRUID",
+					["icon"] = "Interface\\Icons\\Ability_Druid_ImprovedTreeForm",
+				}, -- [39]
+				{
+					["enabled"] = false,
+					["name"] = "Innervate",
+					["id"] = 29166,
+					["class"] = "DRUID",
+					["icon"] = "Interface\\Icons\\Spell_Nature_Lightning",
+				}, -- [40]
+				{
+					["enabled"] = false,
+					["name"] = "Ironbark",
+					["id"] = 102342,
+					["class"] = "DRUID",
+					["icon"] = "Interface\\Icons\\spell_druid_ironbark",
+				}, -- [41]
+				{
+					["enabled"] = false,
+					["name"] = "Kick",
+					["id"] = 1766,
+					["class"] = "ROGUE",
+					["icon"] = "Interface\\Icons\\Ability_Kick",
+				}, -- [42]
+				{
+					["enabled"] = false,
+					["name"] = "Last Stand",
+					["id"] = 12975,
+					["class"] = "WARRIOR",
+					["icon"] = "Interface\\Icons\\Spell_Holy_AshesToAshes",
+				}, -- [43]
+				{
+					["enabled"] = false,
+					["name"] = "Lay on Hands",
+					["id"] = 633,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_LayOnHands",
+				}, -- [44]
+				{
+					["enabled"] = false,
+					["name"] = "Leap of Faith",
+					["id"] = 73325,
+					["class"] = "PRIEST",
+					["icon"] = "INTERFACE\\ICONS\\priest_spell_leapoffaith_a",
+				}, -- [45]
+				{
+					["enabled"] = false,
+					["name"] = "Lichborne",
+					["id"] = 49039,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_RaiseDead",
+				}, -- [46]
+				{
+					["enabled"] = false,
+					["name"] = "Life Cocoon",
+					["id"] = 116849,
+					["class"] = "MONK",
+					["icon"] = "Interface\\Icons\\ability_monk_chicocoon",
+				}, -- [47]
+				{
+					["enabled"] = true,
+					["name"] = "Mana Tide Totem",
+					["id"] = 16190,
+					["class"] = "SHAMAN",
+					["icon"] = "Interface\\Icons\\Spell_Frost_SummonWaterElemental",
+				}, -- [48]
+				{
+					["enabled"] = false,
+					["name"] = "Mass Spell Reflection",
+					["id"] = 114028,
+					["class"] = "WARRIOR",
+					["icon"] = "Interface\\Icons\\Ability_Warrior_ShieldBreak",
+				}, -- [49]
+				{
+					["enabled"] = false,
+					["name"] = "Mighty Bash",
+					["id"] = 5211,
+					["class"] = "DRUID",
+					["icon"] = "Interface\\Icons\\Ability_Druid_Bash",
+				}, -- [50]
+				{
+					["enabled"] = false,
+					["name"] = "Mind Freeze",
+					["id"] = 47528,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_DeathKnight_MindFreeze",
+				}, -- [51]
+				{
+					["enabled"] = false,
+					["name"] = "Misdirection",
+					["id"] = 34477,
+					["class"] = "HUNTER",
+					["icon"] = "Interface\\Icons\\Ability_Hunter_Misdirection",
+				}, -- [52]
+				{
+					["enabled"] = false,
+					["name"] = "Nature's Vigil",
+					["id"] = 124974,
+					["class"] = "DRUID",
+					["icon"] = "Interface\\Icons\\Achievement_Zone_Feralas",
+				}, -- [53]
+				{
+					["enabled"] = false,
+					["name"] = "Pain Suppression",
+					["id"] = 33206,
+					["class"] = "PRIEST",
+					["icon"] = "Interface\\Icons\\Spell_Holy_PainSupression",
+				}, -- [54]
+				{
+					["enabled"] = true,
+					["name"] = "Power Word: Barrier",
+					["id"] = 62618,
+					["class"] = "PRIEST",
+					["icon"] = "Interface\\Icons\\spell_holy_powerwordbarrier",
+				}, -- [55]
+				{
+					["enabled"] = false,
+					["name"] = "Pummel",
+					["id"] = 6552,
+					["class"] = "WARRIOR",
+					["icon"] = "Interface\\Icons\\INV_Gauntlets_04",
+				}, -- [56]
+				{
+					["enabled"] = true,
+					["name"] = "Raise Ally",
+					["id"] = 61999,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_DeadofNight",
+				}, -- [57]
+				{
+					["enabled"] = false,
+					["name"] = "Raise Dead",
+					["id"] = 46584,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_AnimateDead",
+				}, -- [58]
+				{
+					["enabled"] = true,
+					["name"] = "Rallying Cry",
+					["id"] = 97462,
+					["class"] = "WARRIOR",
+					["icon"] = "INTERFACE\\ICONS\\ability_toughness",
+				}, -- [59]
+				{
+					["enabled"] = true,
+					["name"] = "Rebirth",
+					["id"] = 20484,
+					["class"] = "DRUID",
+					["icon"] = "Interface\\Icons\\Spell_Nature_Reincarnation",
+				}, -- [60]
+				{
+					["enabled"] = false,
+					["name"] = "Rebuke",
+					["id"] = 96231,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\spell_holy_rebuke",
+				}, -- [61]
+				{
+					["enabled"] = false,
+					["name"] = "Reincarnation",
+					["id"] = 20608,
+					["class"] = "SHAMAN",
+					["icon"] = "INTERFACE\\ICONS\\spell_shaman_improvedreincarnation",
+				}, -- [62]
+				{
+					["enabled"] = false,
+					["name"] = "Repentance",
+					["id"] = 20066,
+					["class"] = "PALADIN",
+					["icon"] = "Interface\\Icons\\Spell_Holy_PrayerOfHealing",
+				}, -- [63]
+				{
+					["enabled"] = true,
+					["name"] = "Revival",
+					["id"] = 115310,
+					["class"] = "MONK",
+					["icon"] = "Interface\\Icons\\Spell_Shaman_BlessingOfEternals",
+				}, -- [64]
+				{
+					["enabled"] = false,
+					["name"] = "Ritual of Summoning",
+					["id"] = 698,
+					["class"] = "WARLOCK",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_Twilight",
+				}, -- [65]
+				{
+					["enabled"] = false,
+					["name"] = "Shattering Throw",
+					["id"] = 64382,
+					["class"] = "WARRIOR",
+					["icon"] = "Interface\\Icons\\Ability_Warrior_ShatteringThrow",
+				}, -- [66]
+				{
+					["enabled"] = false,
+					["name"] = "Shield Wall",
+					["id"] = 871,
+					["class"] = "WARRIOR",
+					["icon"] = "Interface\\Icons\\Ability_Warrior_ShieldWall",
+				}, -- [67]
+				{
+					["enabled"] = false,
+					["name"] = "Shroud of Concealment",
+					["id"] = 114018,
+					["class"] = "ROGUE",
+					["icon"] = "Interface\\Icons\\ability_rogue_shroudofconcealment",
+				}, -- [68]
+				{
+					["enabled"] = false,
+					["name"] = "Skull Banner",
+					["id"] = 114207,
+					["class"] = "WARRIOR",
+					["icon"] = "Interface\\Icons\\warrior_skullbanner",
+				}, -- [69]
+				{
+					["enabled"] = true,
+					["name"] = "Soulstone",
+					["id"] = 20707,
+					["class"] = "WARLOCK",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_SoulGem",
+				}, -- [70]
+				{
+					["enabled"] = true,
+					["name"] = "Spirit Link Totem",
+					["id"] = 98008,
+					["class"] = "SHAMAN",
+					["icon"] = "Interface\\Icons\\Spell_Shaman_SpiritLink",
+				}, -- [71]
+				{
+					["enabled"] = false,
+					["name"] = "Spirit Shell",
+					["id"] = 109964,
+					["class"] = "PRIEST",
+					["icon"] = "Interface\\Icons\\ability_shaman_astralshift",
+				}, -- [72]
+				{
+					["enabled"] = false,
+					["name"] = "Stoneform",
+					["id"] = 20594,
+					["class"] = "ANY",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_UnholyStrength",
+				}, -- [73]
+				{
+					["enabled"] = false,
+					["name"] = "Strangulate",
+					["id"] = 47476,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_SoulLeech_3",
+				}, -- [74]
+				{
+					["enabled"] = false,
+					["name"] = "Summon Water Elemental",
+					["id"] = 31687,
+					["class"] = "MAGE",
+					["icon"] = "Interface\\Icons\\Spell_Frost_SummonWaterElemental_2",
+				}, -- [75]
+				{
+					["enabled"] = false,
+					["name"] = "Survival Instincts",
+					["id"] = 61336,
+					["class"] = "DRUID",
+					["icon"] = "Interface\\Icons\\Ability_Druid_TigersRoar",
+				}, -- [76]
+				{
+					["enabled"] = false,
+					["name"] = "Time Warp",
+					["id"] = 80353,
+					["class"] = "MAGE",
+					["icon"] = "INTERFACE\\ICONS\\ability_mage_timewarp",
+				}, -- [77]
+				{
+					["enabled"] = true,
+					["name"] = "Tranquility",
+					["id"] = 113277,
+					["class"] = "PRIEST",
+					["icon"] = "Interface\\Icons\\Spell_Nature_Tranquility",
+				}, -- [78]
+				{
+					["enabled"] = true,
+					["name"] = "Tranquility",
+					["id"] = 740,
+					["class"] = "DRUID",
+					["icon"] = "Interface\\Icons\\Spell_Nature_Tranquility",
+				}, -- [79]
+				{
+					["enabled"] = false,
+					["name"] = "Tricks of the Trade",
+					["id"] = 57934,
+					["class"] = "ROGUE",
+					["icon"] = "Interface\\Icons\\Ability_Rogue_TricksOftheTrade",
+				}, -- [80]
+				{
+					["enabled"] = false,
+					["name"] = "Vampiric Blood",
+					["id"] = 55233,
+					["class"] = "DEATHKNIGHT",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_LifeDrain",
+				}, -- [81]
+				{
+					["enabled"] = false,
+					["name"] = "Vampiric Embrace",
+					["id"] = 15286,
+					["class"] = "PRIEST",
+					["icon"] = "Interface\\Icons\\Spell_Shadow_UnsummonBuilding",
+				}, -- [82]
+				{
+					["enabled"] = false,
+					["name"] = "Void Shift",
+					["id"] = 108968,
+					["class"] = "PRIEST",
+					["icon"] = "Interface\\Icons\\spell_priest_voidshift",
+				}, -- [83]
+				{
+					["enabled"] = false,
+					["name"] = "Void Tendrils",
+					["id"] = 108920,
+					["class"] = "PRIEST",
+					["icon"] = "Interface\\Icons\\spell_priest_voidtendrils",
+				}, -- [84]
+				{
+					["enabled"] = false,
+					["name"] = "Wind Shear",
+					["id"] = 57994,
+					["class"] = "SHAMAN",
+					["icon"] = "Interface\\Icons\\Spell_Nature_Cyclone",
+				}, -- [85]
+				{
+					["enabled"] = false,
+					["name"] = "Zen Meditation",
+					["id"] = 115176,
+					["class"] = "MONK",
+					["icon"] = "Interface\\Icons\\ability_monk_zenmeditation",
+				}, -- [86]
+			},
+			["items"] = {
+				{
+					["enabled"] = false,
+					["name"] = "Mirror of Broken Images",
+					["id"] = -62466,
+					["class"] = "ANY",
+					["icon"] = "Interface\\Icons\\INV_Misc_Platnumdisks",
+				}, -- [1]
+			},
+			["welcome"] = true,
+			["plugins"] = {
+				["Hermes-UI"] = {
+					["views"] = {
+						{
+							["module"] = "GridButtons",
+							["filterrange"] = false,
+							["filter10man"] = true,
+							["filterself"] = false,
+							["enabled"] = true,
+							["profiles"] = {
+								["GridBars"] = {
+									["barShowTime"] = true,
+									["npCCFont"] = true,
+									["barShowPlayerName"] = true,
+									["h"] = 838.6666870117188,
+									["hideNoAvailSender"] = false,
+									["barColorC"] = {
+										["a"] = 0.74,
+										["r"] = 0.55,
+										["g"] = 0.55,
+										["b"] = 0.55,
+									},
+									["locked"] = false,
+									["barFont"] = "Friz Quadrata TT",
+									["barBGColorU"] = {
+										["a"] = 0.16,
+										["r"] = 0,
+										["g"] = 0,
+										["b"] = 0,
+									},
+									["hideNoSender"] = true,
+									["barTexture"] = "Blizzard",
+									["osCooldownStyle"] = "empty",
+									["barColorU"] = {
+										["a"] = 0.23,
+										["r"] = 0,
+										["g"] = 0,
+										["b"] = 0,
+									},
+									["y"] = 1175.333374023438,
+									["x"] = 7.833518028259277,
+									["barPadding"] = 1,
+									["scale"] = 1,
+									["npTexture"] = "Blizzard",
+									["barCooldownDirection"] = "right",
+									["barThickFont"] = false,
+									["barBGCCU"] = false,
+									["barColorCFont"] = {
+										["a"] = 1,
+										["r"] = 1,
+										["g"] = 1,
+										["b"] = 1,
+									},
+									["barCCAFont"] = false,
+									["barTextRatio"] = 65,
+									["cellAnchor"] = "TOPLEFT",
+									["padding"] = 0,
+									["barW"] = 150,
+									["barIcon"] = "left",
+									["npShowLabel"] = true,
+									["barCCA"] = true,
+									["barIconMerged"] = "left",
+									["osFGColor"] = {
+										["a"] = 1,
+										["r"] = 0,
+										["g"] = 1,
+										["b"] = 0,
+									},
+									["barColorUFont"] = {
+										["a"] = 0.3,
+										["r"] = 1,
+										["g"] = 1,
+										["b"] = 1,
+									},
+									["barCooldownStyle"] = "empty",
+									["barBGColorC"] = {
+										["a"] = 0.16,
+										["r"] = 0,
+										["g"] = 0,
+										["b"] = 0,
+									},
+									["osCooldownDirection"] = "right",
+									["npThickFont"] = false,
+									["barColorA"] = {
+										["a"] = 1,
+										["r"] = 0.94,
+										["g"] = 0.94,
+										["b"] = 0.94,
+									},
+									["npFontColor"] = {
+										["a"] = 0.76,
+										["r"] = 0.92,
+										["g"] = 0.92,
+										["b"] = 0.92,
+									},
+									["barCCU"] = false,
+									["barCCC"] = true,
+									["npUseNameplate"] = true,
+									["barCCCFont"] = true,
+									["cellSide"] = false,
+									["npFont"] = "Friz Quadrata TT",
+									["w"] = 158.6666564941406,
+									["barTextSide"] = "left",
+									["barCCUFont"] = false,
+									["npOutlineFont"] = true,
+									["osEnabled"] = false,
+									["cellDir"] = false,
+									["barShowSpellName"] = false,
+									["barFontSize"] = 12,
+									["barH"] = 14,
+									["enableTooltip"] = true,
+									["barGap"] = 2,
+									["npCCBar"] = false,
+									["npW"] = 120,
+									["merged"] = false,
+									["npUseIcon"] = true,
+									["barColorAFont"] = {
+										["a"] = 1,
+										["r"] = 0.94,
+										["g"] = 0.94,
+										["b"] = 0.94,
+									},
+									["barBGCCC"] = true,
+									["npIcon"] = "right",
+									["cellMax"] = 3,
+									["npFontSize"] = 12,
+									["npTexColor"] = {
+										["a"] = 0.5,
+										["r"] = 0,
+										["g"] = 0,
+										["b"] = 0,
+									},
+									["npH"] = 15,
+									["cellBGColor"] = {
+										["a"] = 0,
+										["r"] = 0,
+										["g"] = 0,
+										["b"] = 0,
+									},
+									["npTextSide"] = "right",
+									["barOutlineFont"] = true,
+								},
+								["GridButtons"] = {
+								["scale"] = 1,
+								["hideNoSender"] = true,
+								["merged"] = false,
+								["coloredBorders"] = true,
+								["w"] = 78.49994614504892,
+								["mergedicon"] = "Interface\\ICONS\\INV_Misc_QuestionMark",
+								["y"] = 1040.833318755454,
+								["h"] = 621.6666788167995,
+								["locked"] = true,
+								["cellAnchor"] = "TOPLEFT",
+								["colorNS"] = {
+									["a"] = 0.75,
+									["r"] = 0.5,
+									["g"] = 0.5,
+									["b"] = 0.5,
+								},
+								["padding"] = 5,
+								["x"] = 3.333442160227062,
+								["colorU"] = {
+									["a"] = 1,
+									["r"] = 0.5,
+									["g"] = 0.5,
+									["b"] = 0.5,
+								},
+							},
+							["CooldownBars"] = {
+								["barheight"] = 14,
+								["scale"] = 1,
+								["barTextSide"] = "left",
+								["fontsize"] = 12,
+								["locked"] = false,
+								["barCooldownDirection"] = "right",
+								["hideSelf"] = false,
+								["textratio"] = 60,
+								["osFGColor"] = {
+									["a"] = 1,
+									["r"] = 0,
+									["g"] = 1,
+									["b"] = 0,
+								},
+								["barwidth"] = 180,
+								["bartexture"] = "Blizzard",
+								["growup"] = false,
+								["osCooldownDirection"] = "right",
+								["alpha"] = 1,
+								["barIcon"] = "left",
+								["y"] = 1022.333312988281,
+								["font"] = "Friz Quadrata TT",
+								["barCooldownStyle"] = "full",
+								["osEnabled"] = false,
+								["osCooldownStyle"] = "full",
+								["barShowSpellName"] = false,
+								["x"] = 71.66675567626953,
+								["barGap"] = 1,
+							},
+							["Bars"] = {
+								["barIcon"] = "none",
+								["npCCFont"] = true,
+								["barW"] = 150,
+								["barTextSide"] = "left",
+								["barShowPlayerName"] = true,
+								["barBGColorC"] = {
+									["a"] = 0.16,
+									["r"] = 0,
+									["g"] = 0,
+									["b"] = 0,
+								},
+								["barFontSize"] = 12,
+								["locked"] = false,
+								["barCCCFont"] = true,
+								["barColorC"] = {
+									["a"] = 0.74,
+									["r"] = 0.55,
+									["g"] = 0.55,
+									["b"] = 0.55,
+								},
+								["barCCA"] = true,
+								["barTextRatio"] = 65,
+								["barLocation"] = "BOTTOM",
+								["barCCC"] = true,
+								["barColorAFont"] = {
+									["a"] = 1,
+									["r"] = 0.94,
+									["g"] = 0.94,
+									["b"] = 0.94,
+								},
+								["osFGColor"] = {
+									["a"] = 1,
+									["r"] = 0,
+									["g"] = 1,
+									["b"] = 0,
+								},
+								["barBGColorU"] = {
+									["a"] = 0.16,
+									["r"] = 0,
+									["g"] = 0,
+									["b"] = 0,
+								},
+								["hideNoSender"] = true,
+								["barColorCFont"] = {
+									["a"] = 1,
+									["r"] = 1,
+									["g"] = 1,
+									["b"] = 1,
+								},
+								["barColorUFont"] = {
+									["a"] = 0.3,
+									["r"] = 1,
+									["g"] = 1,
+									["b"] = 1,
+								},
+								["osCooldownStyle"] = "empty",
+								["barColorU"] = {
+									["a"] = 0.23,
+									["r"] = 0,
+									["g"] = 0,
+									["b"] = 0,
+								},
+								["y"] = 609,
+								["x"] = 1016.666687011719,
+								["barCooldownStyle"] = "empty",
+								["npShowLabel"] = true,
+								["scale"] = 1,
+								["barPadding"] = 10,
+								["npThickFont"] = false,
+								["npUseNameplate"] = true,
+								["npFontColor"] = {
+									["a"] = 0.76,
+									["r"] = 0.92,
+									["g"] = 0.92,
+									["b"] = 0.92,
+								},
+								["barCCU"] = false,
+								["npOutlineFont"] = true,
+								["barBGCCU"] = false,
+								["npFontSize"] = 12,
+								["barShowTime"] = true,
+								["npFont"] = "Friz Quadrata TT",
+								["osCooldownDirection"] = "right",
+								["npTextSide"] = "right",
+								["barCCUFont"] = false,
+								["barH"] = 14,
+								["barThickFont"] = false,
+								["npTexture"] = "Blizzard",
+								["barIconMerged"] = "left",
+								["barCooldownDirection"] = "right",
+								["npIcon"] = "right",
+								["barShowSpellName"] = false,
+								["barGap"] = 1,
+								["npCCBar"] = false,
+								["npH"] = 15,
+								["merged"] = false,
+								["npUseIcon"] = true,
+								["barColorA"] = {
+									["a"] = 1,
+									["r"] = 0.94,
+									["g"] = 0.94,
+									["b"] = 0.94,
+								},
+								["barBGCCC"] = true,
+								["barCCAFont"] = false,
+								["growUp"] = false,
+								["osEnabled"] = false,
+								["barFont"] = "Friz Quadrata TT",
+								["npW"] = 120,
+								["npTexColor"] = {
+									["a"] = 0.5,
+									["r"] = 0,
+									["g"] = 0,
+									["b"] = 0,
+								},
+								["barTexture"] = "Blizzard",
+								["barOutlineFont"] = true,
+							},
+						},
+						["includeAll"] = true,
+						["filterdead"] = true,
+						["name"] = "Default",
+						["filterconnection"] = true,
+						["filterplayertype"] = "disabled",
+						["playerfilters"] = {
+						},
+						["filter25man"] = true,
+						["abilities"] = {
+							{
+								["id"] = 61999,
+								["enabled"] = false,
+							}, -- [1]
+							{
+								["id"] = 46584,
+								["enabled"] = false,
+							}, -- [2]
+							{
+								["id"] = 20484,
+								["enabled"] = false,
+							}, -- [3]
+							{
+								["id"] = 740,
+								["enabled"] = false,
+							}, -- [4]
+							{
+								["id"] = 115310,
+								["enabled"] = false,
+							}, -- [5]
+							{
+								["id"] = 31821,
+								["enabled"] = false,
+							}, -- [6]
+							{
+								["id"] = 64843,
+								["enabled"] = false,
+							}, -- [7]
+							{
+								["id"] = 64901,
+								["enabled"] = false,
+							}, -- [8]
+							{
+								["id"] = 62618,
+								["enabled"] = false,
+							}, -- [9]
+							{
+								["id"] = 113277,
+								["enabled"] = false,
+							}, -- [10]
+							{
+								["id"] = 16190,
+								["enabled"] = false,
+							}, -- [11]
+							{
+								["id"] = 108280,
+								["enabled"] = false,
+							}, -- [12]
+							{
+								["id"] = 98008,
+								["enabled"] = false,
+							}, -- [13]
+							{
+								["id"] = 20707,
+								["enabled"] = false,
+							}, -- [14]
+							{
+								["id"] = 97462,
+								["enabled"] = false,
+							}, -- [15]
+							{
+								["id"] = 115176,
+								["enabled"] = false,
+							}, -- [16]
+							{
+								["id"] = 116849,
+								["enabled"] = false,
+							}, -- [17]
+						},
+					}, -- [1]
+				},
+			},
+		},
+		["enableparty"] = true,
+	}
+end
+
+	if profile == "Repooc" then
+		-- No Settings
+	end
+
+	if profile == "Darth" then
+		-- No Settings
+	end
+
+	return database
+end
+
+-- register the profile with the engine
+AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/core/installer/Skada.lua b/ElvUI_SLE/core/installer/Skada.lua
new file mode 100644
index 0000000..3d9ace3
--- /dev/null
+++ b/ElvUI_SLE/core/installer/Skada.lua
@@ -0,0 +1,160 @@
+local E, L, V, P, G = unpack(ElvUI);
+local AI = E:GetModule('SLE_AddonInstaller')
+
+local ace3   = true               -- whether or not this database is a Ace3 profile
+local name   = 'Skada'             -- the name of the addon
+local dbname = 'SkadaDB'       -- name of the addon database
+
+local function OnDemand(profile)  -- function that creates the "load on demand" database
+	local database
+	if profile == "Affinitii" then
+		database = {
+			["windows"] = {
+				{
+					["barheight"] = 17,
+					["barslocked"] = true,
+					["background"] = {
+						["height"] = 133.6666717529297,
+						["color"] = {
+							["a"] = 0.2000000476837158,
+							["b"] = 0,
+						},
+					},
+					["hidden"] = true,
+					["y"] = 39.89817468303028,
+					["x"] = -7.334928625263729,
+					["title"] = {
+						["color"] = {
+							["a"] = 1,
+							["b"] = 0,
+							["g"] = 0,
+							["r"] = 0,
+						},
+						["font"] = "ElvUI Font",
+						["fontsize"] = 15,
+					},
+					["point"] = "BOTTOMRIGHT",
+					["barbgcolor"] = {
+						["a"] = 1,
+						["b"] = 0.3019607843137255,
+						["g"] = 0.3019607843137255,
+						["r"] = 0.3019607843137255,
+					},
+					["barcolor"] = {
+						["g"] = 0.3019607843137255,
+						["r"] = 0.3019607843137255,
+					},
+					["name"] = "HPS",
+					["spark"] = false,
+					["bartexture"] = "Polished Wood",
+					["barwidth"] = 199.0832316080729,
+					["barfontsize"] = 12,
+					["mode"] = "Damage",
+					["barfont"] = "ElvUI Font",
+				}, -- [1]
+				{
+					["barheight"] = 17,
+					["classicons"] = true,
+					["barslocked"] = true,
+					["clickthrough"] = false,
+					["wipemode"] = "",
+					["set"] = "current",
+					["hidden"] = true,
+					["y"] = 39.89824908834681,
+					["barfont"] = "ElvUI Font",
+					["name"] = "DPS",
+					["display"] = "bar",
+					["barfontflags"] = "",
+					["classcolortext"] = false,
+					["scale"] = 1,
+					["reversegrowth"] = false,
+					["barfontsize"] = 12,
+					["barorientation"] = 1,
+					["snapto"] = true,
+					["point"] = "BOTTOMRIGHT",
+					["x"] = -214.2783479639852,
+					["spark"] = false,
+					["bartexture"] = "Polished Wood",
+					["barwidth"] = 199.0832316080729,
+					["barspacing"] = 0,
+					["barbgcolor"] = {
+						["a"] = 1,
+						["b"] = 0.3019607843137255,
+						["g"] = 0.3019607843137255,
+						["r"] = 0.3019607843137255,
+					},
+					["returnaftercombat"] = false,
+					["barcolor"] = {
+						["a"] = 1,
+						["b"] = 0.8,
+						["g"] = 0.3019607843137255,
+						["r"] = 0.3019607843137255,
+					},
+					["mode"] = "Healing",
+					["enabletitle"] = true,
+					["classcolorbars"] = true,
+					["modeincombat"] = "",
+					["title"] = {
+						["borderthickness"] = 2,
+						["font"] = "ElvUI Font",
+						["fontsize"] = 15,
+						["fontflags"] = "",
+						["color"] = {
+							["a"] = 1,
+							["b"] = 0,
+							["g"] = 0,
+							["r"] = 0,
+						},
+						["bordertexture"] = "None",
+						["margin"] = 0,
+						["texture"] = "Aluminium",
+					},
+					["buttons"] = {
+						["segment"] = true,
+						["menu"] = true,
+						["mode"] = true,
+						["report"] = true,
+						["reset"] = true,
+					},
+					["background"] = {
+						["borderthickness"] = 0,
+						["height"] = 133.6666717529297,
+						["color"] = {
+							["a"] = 0.2000000476837158,
+							["b"] = 0,
+							["g"] = 0,
+							["r"] = 0,
+						},
+						["bordertexture"] = "None",
+						["margin"] = 0,
+						["texture"] = "Solid",
+					},
+				}, -- [2]
+			},
+			["report"] = {
+				["number"] = 12,
+				["chantype"] = "whisper",
+				["channel"] = "whisper",
+				["target"] = "Affinitii",
+				["mode"] = "Riggimon's Death",
+			},
+			["icon"] = {
+				["minimapPos"] = 160.4361246854299,
+				["hide"] = true,
+			},
+		}
+	end
+
+	if profile == "Repooc" then
+		-- No Settings
+	end
+
+	if profile == "Darth" then
+
+	end
+
+	return database
+end
+
+-- register the profile with the engine
+AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/core/installer/installer.lua b/ElvUI_SLE/core/installer/installer.lua
new file mode 100644
index 0000000..c8b7fbf
--- /dev/null
+++ b/ElvUI_SLE/core/installer/installer.lua
@@ -0,0 +1,153 @@
+local E, L, V, P, G = unpack(ElvUI);
+local AI = E:GetModule('SLE_AddonInstaller')
+
+-- Upvalue for performance
+local pairs, string, table, unpack, _G = pairs, string, table, unpack, _G
+local string_find, string_format, string_gsub, string_sub, table_insert, table_remove
+  = string.find, string.format, string.gsub, string.sub, table.insert, table.remove
+
+-- A local database of addons
+AI.addons = { }
+AI.MyProfileKey = string_format('%s - %s', UnitName('player'), GetRealmName() )
+AI.MyProfileName = "Shadow and Light"
+
+-- Let's put all the RegEx stuff here
+local regex_trim  = '^%s*(.-)%s*$'
+local regex_match = '([ A-Za-z0-9_+*\\-]+)%s?,'
+
+--[==[
+  AddonInstaller:RegisterAddonProfile(name, ace3, dbname, onDemand)
+
+  input:  (*optional)
+
+    name        [string]
+        The name name of the addon to use in the Command Args when enabling.
+
+    ace3        [boolean]
+        Indicator whether to treat this entry as an Ace3 compatible profile,
+      or just some random entries into an addon's database.
+
+    dbname      [string]
+        The name of the addon's database (e.g. 'ElvCharacterDB')
+
+    onDemand    [function]
+        The function that will generate the "load on demand" profile.
+
+  description:
+      This function allows addon modules to register themselves so that they can get
+    loaded when the user installs this UI.
+
+  returns:
+    nil
+]==]
+function AI:RegisterAddonProfile(name, ace3, dbname, onDemand)
+	if not self.addons[name] then self.addons[name] = { } end
+	table_insert(self.addons[name], { OnDemand = onDemand, dbname = dbname, ace3 = ace3 })
+end
+
+-- A private function that loads a specific addon database entry
+local function LoadAddon(entry, profileName)
+	local ADDON_DB = _G[entry.dbname]
+	local myDB = entry.OnDemand(profileName)
+
+	if ADDON_DB and myDB then
+		if entry.ace3 then
+			-- Profile will be: "Shadow and Light (Affinitii)"
+			local profile = string_format('%s (%s)', AI.MyProfileName, profileName)
+
+			-- If the addon is loaded AND the profile is Ace3, lets load it
+			ADDON_DB.profiles[profile] = myDB                    -- Insert our new profile
+
+			-- Set the profile as the default for this toon
+			ADDON_DB.profileKeys[AI.MyProfileKey] = profile
+		else
+			for key, value in pairs(myDB) do
+				ADDON_DB[key] = value
+			end
+		end
+	end
+end
+
+--[==[
+  AddonInstaller:LoadAddons(args)
+
+  input: (*optional)
+    args  [string]
+        This is a comma separated list, where the first value is the profile that you
+      want to load. The second arg can be "All" for all addons or the second and
+      following args can list the addons one at a time.
+
+        examples:
+
+        1.  args = "Repooc, All"
+
+            Loads all addons with the profile name "Repooc"
+
+        2.  args = "Darth, Hermes, xCT+,"
+
+            Loads Hermes and xCT+ addons with the profile name "Darth"
+
+  description:
+      This function was create to allow the loading of external addons profiles when a
+    UI is installed.
+
+  returns:
+    nil
+]==]
+
+function AI:LoadAddons(args)
+	-- This section of code parses the args
+	local ListArgs = { }
+
+	-- Trim the text (remove spaces), placed a nil check inside
+	args = string_gsub(args or '', regex_trim, '%1')
+
+	-- Add a comma onto the end
+	if string_sub(args, #args) ~= ',' then
+		args = args .. ','
+	end
+
+	local i, j = 0, 0
+	while i do
+		i, j = string_find(args, regex_match, j)    -- find all patterns that match 'Arg_1 Test+,'
+		if i then
+			-- Get the current pattern [ sub(index, length-1 ], trim all the spaces, and add it to the list of args
+			local arg = string_gsub(string_sub(args, i, j-1), regex_trim, '%1')
+			table_insert(ListArgs, arg)
+		end
+	end
+	-- Args parsing completed!
+
+	--[==[
+	-- DEBUG: See what args I have :)
+	for i, v in pairs(ListArgs) do
+		print(i,'=',v)
+	end
+	]==]
+
+	-- Get the profile name and see if we are loading All addons
+	local profileName, LOAD_ALL = ( ListArgs[1] or 'default' ), ( ListArgs[2] == 'All' )
+	table_remove(ListArgs, 1)  -- Remove the profile name, all we have left in the list are addons to load :)
+
+	if LOAD_ALL then -- Load all the addons
+		for name, entryList in pairs(self.addons) do      -- Just load all the addons for this profile
+			for _, entry in pairs(entryList) do             -- Loop through all the entries (could be multiple, like bigwigs)
+				LoadAddon(entry, profileName)
+			end
+		end
+	else  -- Load a specific set of addons
+		for _, name in pairs(ListArgs) do                 -- we need to figure out which addons to load
+			local entryList = self.addons[name]
+			for _, entry in pairs(entryList) do
+				-- Check for addon name
+				if entry then
+					for _, entry in pairs(entryList) do           -- Loop through all the entries
+						LoadAddon(entry, profileName)
+					end
+				else
+					E:Print("  |cffFF0000ERROR:|r No Addon named '"..name.."' was found in the SLE addon configs.")
+				end
+			end
+		end
+	end
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/core/installer/load_install.xml b/ElvUI_SLE/core/installer/load_install.xml
new file mode 100644
index 0000000..9c61b11
--- /dev/null
+++ b/ElvUI_SLE/core/installer/load_install.xml
@@ -0,0 +1,11 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/">
+	<Script file='installer.lua'/>
+	<Script file='install.lua'/>
+	<Script file='BigWigs.lua'/>
+	<Script file='BigWigsFights.lua'/>
+	<Script file='BigWigsIcon.lua'/>
+	<Script file='Clique.lua'/>
+	<Script file='Hermes.lua'/>
+	<Script file='Skada.lua'/>
+	<Script file='xCT+.lua'/>
+</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/core/installer/xCT+.lua b/ElvUI_SLE/core/installer/xCT+.lua
new file mode 100644
index 0000000..b01535a
--- /dev/null
+++ b/ElvUI_SLE/core/installer/xCT+.lua
@@ -0,0 +1,324 @@
+local E, L, V, P, G = unpack(ElvUI);
+local AI = E:GetModule('SLE_AddonInstaller')
+
+local ace3   = true               -- whether or not this database is a Ace3 profile
+local name   = 'xCT+'             -- the name of the addon
+local dbname = 'xCTSavedDB'       -- name of the addon database
+
+local function OnDemand(profile)  -- function that creates the "load on demand" database
+	local database
+	if profile == "Affinitii" then
+		database = {
+			["blizzardFCT"] = {
+				["font"] = "KGSmallTownSouthernGirl",
+			},
+			["spells"] = {
+				["mergeCriticalsByThemselves"] = true,
+				["mergeDontMergeCriticals"] = false,
+			},
+			["frames"] = {
+				["general"] = {
+					["showBuffs"] = false,
+					["fontOutline"] = "2OUTLINE",
+					["Width"] = 510,
+					["font"] = "KGSmallTownSouthernGirl",
+					["enabledFrame"] = false,
+					["Height"] = 127,
+				},
+				["power"] = {
+					["enabledFrame"] = false,
+					["fontOutline"] = "2OUTLINE",
+					["Width"] = 255,
+					["font"] = "KGSmallTownSouthernGirl",
+				},
+				["healing"] = {
+					["enabledFrame"] = false,
+					["Width"] = 382,
+					["Y"] = 89,
+					["font"] = "KGSmallTownSouthernGirl",
+					["Height"] = 143,
+					["fontOutline"] = "2OUTLINE",
+					["X"] = -319,
+				},
+				["outgoing"] = {
+					["fontSize"] = 17,
+					["fontOutline"] = "2OUTLINE",
+					["enableScrollable"] = true,
+					["Width"] = 149,
+					["Y"] = -61,
+					["X"] = 901,
+					["iconsSize"] = 17,
+					["font"] = "KGSmallTownSouthernGirl",
+				},
+				["critical"] = {
+					["fontSize"] = 17,
+					["iconsSize"] = 19,
+					["fontOutline"] = "2OUTLINE",
+					["Width"] = 149,
+					["Y"] = 102,
+					["font"] = "KGSmallTownSouthernGirl",
+					["Height"] = 126,
+					["X"] = 901,
+				},
+				["procs"] = {
+					["enabledFrame"] = false,
+					["enableScrollable"] = true,
+					["Y"] = 101,
+					["X"] = 1,
+					["Height"] = 127,
+					["font"] = "KGSmallTownSouthernGirl",
+					["fontOutline"] = "2OUTLINE",
+				},
+				["loot"] = {
+					["fontOutline"] = "2OUTLINE",
+					["Width"] = 510,
+					["Y"] = -223,
+					["font"] = "KGSmallTownSouthernGirl",
+					["Height"] = 126,
+				},
+				["class"] = {
+					["fontOutline"] = "2OUTLINE",
+					["font"] = "KGSmallTownSouthernGirl",
+					["enabledFrame"] = false,
+				},
+				["damage"] = {
+					["fontSize"] = 17,
+					["X"] = 201,
+					["Width"] = 133,
+					["Y"] = -32,
+					["font"] = "KGSmallTownSouthernGirl",
+					["Height"] = 170,
+					["fontOutline"] = "2OUTLINE",
+				},
+			},
+		}
+	end
+
+	if profile == "Repooc" then
+		-- No Settings
+	end
+
+	if profile == "Darth" then
+		database = {
+			["spells"] = {
+				["items"] = {
+					["Самоцветы"] = {
+						["Особые"] = false,
+						["Синие"] = false,
+						["Простые"] = false,
+						["Оранжевые"] = false,
+						["Желтые"] = false,
+						["Зеленые"] = false,
+						["Зубчатое колесо"] = false,
+						["Радужные"] = false,
+						["Красные"] = false,
+						["Фиолетовые"] = false,
+					},
+					["Сумки"] = {
+						["Сумка начертателя"] = false,
+						["Сумка для продуктов"] = false,
+						["Сумка инженера"] = false,
+						["Сумка шахтера"] = false,
+						["Сумка кожевника"] = false,
+						["Сумка зачаровывателя"] = false,
+						["Сумка ювелира"] = false,
+						["Сумка"] = false,
+						["Сумка травника"] = false,
+						["Ящик для рыболовных снастей"] = false,
+					},
+					["Доспехи"] = {
+						["Тканевые"] = false,
+						["Разное"] = false,
+						["Кожаные"] = false,
+						["Щиты"] = false,
+						["Кольчужные"] = false,
+						["Визуальный эффект"] = false,
+						["Латные"] = false,
+					},
+					["Задания"] = {
+						["Задания"] = true,
+					},
+					["Оружие"] = {
+						["Древковое"] = false,
+						["Метательное"] = false,
+						["Кистевое"] = false,
+						["Одноручное дробящее"] = false,
+						["Двуручные топоры"] = false,
+						["Огнестрельное"] = false,
+						["Двуручное дробящее"] = false,
+						["Одноручные топоры"] = false,
+						["Арбалеты"] = false,
+						["Разное"] = false,
+						["Луки"] = false,
+						["Посохи"] = false,
+						["Двуручные мечи"] = false,
+						["Удочки"] = false,
+						["Жезлы"] = false,
+						["Одноручные мечи"] = false,
+						["Кинжалы"] = false,
+					},
+					["Расходуемые"] = {
+						["Зелья"] = true,
+						["Еда и напитки"] = true,
+						["Другое"] = false,
+						["Эликсиры"] = true,
+						["Настойки"] = true,
+						["Улучшения"] = false,
+						["Бинты"] = false,
+						["Свитки"] = false,
+					},
+					["version"] = 1,
+					["Боевые питомцы"] = {
+						["Гуманоид"] = false,
+						["Нежить"] = false,
+						["Элементаль"] = false,
+						["Животное"] = false,
+						["Дракон"] = false,
+						["Зверек"] = false,
+						["Магический"] = false,
+						["Механизм"] = false,
+						["Летающий"] = false,
+						["Водный"] = false,
+					},
+					["Разное"] = {
+						["Питомцы"] = false,
+						["Праздничные предметы"] = true,
+						["Реагенты"] = false,
+						["Другое"] = false,
+						["Верховые животные"] = false,
+						["Хлам"] = false,
+					},
+					["Символы"] = {
+						["Паладин"] = false,
+						["Шаман"] = false,
+						["Друид"] = false,
+						["Жрец"] = false,
+						["Разбойник"] = false,
+						["Монах"] = false,
+						["Воин"] = false,
+						["Чернокнижник"] = false,
+						["Охотник"] = false,
+						["Маг"] = false,
+						["Рыцарь смерти"] = false,
+					},
+					["Хозяйственные товары"] = {
+						["Наложение чар"] = true,
+						["Трава"] = true,
+						["Кожа"] = true,
+						["Материалы"] = true,
+						["Металл и камень"] = true,
+						["Стихии"] = true,
+						["Ткань"] = true,
+						["Кулинария"] = true,
+						["Чары для предметов"] = true,
+						["Детали"] = true,
+						["Ювелирное дело"] = true,
+						["Другое"] = true,
+						["Устройства"] = true,
+						["Взрывчатка"] = true,
+					},
+					["Рецепты"] = {
+						["Рыбная ловля"] = false,
+						["Инженерное дело"] = false,
+						["Кожевничество"] = false,
+						["Первая помощь"] = false,
+						["Начертание"] = false,
+						["Ювелирное дело"] = false,
+						["Книга"] = false,
+						["Кузнечное дело"] = false,
+						["Наложение чар"] = false,
+						["Кулинария"] = false,
+						["Алхимия"] = false,
+						["Портняжное дело"] = false,
+					},
+				},
+			},
+			["frames"] = {
+				["general"] = {
+					["fontSize"] = 14,
+					["showBuffs"] = false,
+					["showPartyKills"] = false,
+					["showDebuffs"] = false,
+					["font"] = "ElvUI Font",
+					["fontOutline"] = "2OUTLINE",
+				},
+				["power"] = {
+					["fontSize"] = 16,
+					["fontOutline"] = "2OUTLINE",
+					["font"] = "ElvUI Font",
+					["Width"] = 116,
+					["Y"] = -92,
+					["X"] = 364,
+					["Height"] = 151,
+					["enabledFrame"] = false,
+				},
+				["healing"] = {
+					["fontSize"] = 16,
+					["showFriendlyHealers"] = false,
+					["fontOutline"] = "2OUTLINE",
+					["insertText"] = "top",
+					["Width"] = 171,
+					["Y"] = -94,
+					["X"] = 219,
+					["Height"] = 158,
+					["font"] = "ElvUI Font",
+				},
+				["outgoing"] = {
+					["fontSize"] = 16,
+					["Height"] = 242,
+					["fontOutline"] = "2OUTLINE",
+					["insertText"] = "top",
+					["Width"] = 121,
+					["Y"] = -207,
+					["font"] = "ElvUI Font",
+					["iconsSize"] = 10,
+					["X"] = 898,
+				},
+				["critical"] = {
+					["fontSize"] = 20,
+					["iconsSize"] = 14,
+					["fontOutline"] = "2OUTLINE",
+					["insertText"] = "top",
+					["Width"] = 171,
+					["Y"] = -156,
+					["X"] = 751,
+					["Height"] = 138,
+					["font"] = "ElvUI Font",
+				},
+				["procs"] = {
+					["enabledFrame"] = false,
+					["Width"] = 254,
+					["Y"] = -63,
+					["Height"] = 126,
+				},
+				["loot"] = {
+					["fontSize"] = 12,
+					["filterItemQuality"] = 2,
+					["X"] = -1,
+					["fontOutline"] = "2OUTLINE",
+					["Y"] = -94,
+					["font"] = "ElvUI Font",
+					["Height"] = 155,
+					["Width"] = 283,
+				},
+				["class"] = {
+					["enabledFrame"] = false,
+				},
+				["damage"] = {
+					["fontSize"] = 16,
+					["X"] = -204,
+					["Width"] = 161,
+					["Y"] = -96,
+					["font"] = "ElvUI Font",
+					["Height"] = 156,
+					["fontOutline"] = "2OUTLINE",
+				},
+			},
+		}
+	end
+
+	return database
+end
+
+-- register the profile with the engine
+AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/core/load_core.xml b/ElvUI_SLE/core/load_core.xml
new file mode 100644
index 0000000..015cd78
--- /dev/null
+++ b/ElvUI_SLE/core/load_core.xml
@@ -0,0 +1 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/">
	<Script file='modules.lua'/>
	<Script file='core.lua'/>
	<Script file='media.lua'/>
	<Script file='toolkit.lua'/>
	<Script file='commands.lua'/>
	<Script file='staticpopups.lua'/>
	<Script file='install.lua'/>
	<Include file='installer\load_install.xml'/>
	<Script file='elvprot.lua'/>
	<Script file='test.lua'/>
</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/core/media.lua b/ElvUI_SLE/core/media.lua
new file mode 100644
index 0000000..4e8e886
--- /dev/null
+++ b/ElvUI_SLE/core/media.lua
@@ -0,0 +1,113 @@
+local E, L, V, P, G = unpack(ElvUI);
+local M = E:GetModule('SLE_Media')
+local LSM = LibStub("LibSharedMedia-3.0")
+
+local Zones = {
+	"Washington",
+	"Moscow",
+	"Moon Base",
+	"Goblin Spa Resort",
+	"Illuminaty Headquaters",
+	"Elv's Closet",
+	"Pat's Cage",
+}
+
+local PvPInfo = {
+	"(Horde Territory)",
+	"(Alliance Territory)",
+	"(Contested Territory)",
+	"(Russian Territory)",
+	"(Aliens Territory)",
+	"(Cats Territory)",
+	"(Japanese Territory)",
+	"(EA Territory)",
+}
+
+local Subzones = {
+	"Administration",
+	"Hellhole",
+	"Alley of Bullshit",
+	"Dr. Pepper Storage",
+	"Vodka Storage",
+	"Last National Bank",
+}
+
+local PVPArena = {
+	"(PvP)",
+	"No Smoking!",
+	"Only 5% Taxes",
+	"Free For All",
+	"Self destruction is in process",
+}
+
+local Colors = {
+	[1] = {0.41, 0.8, 0.94}, -- sanctuary
+	[2] = {1.0, 0.1, 0.1}, -- hostile
+	[3] = {0.1, 1.0, 0.1}, --friendly
+	[4] = {1.0, 0.7, 0}, --contested
+	[5] = {1.0, 0.9294, 0.7607}, --white
+}
+
+local function ZoneTextPos()
+	if ( PVPInfoTextString:GetText() == "" ) then
+		SubZoneTextString:SetPoint("TOP", "ZoneTextString", "BOTTOM", 0, -E.db.sle.media.fonts.subzone.offset);
+	else
+		SubZoneTextString:SetPoint("TOP", "PVPInfoTextString", "BOTTOM", 0, -E.db.sle.media.fonts.subzone.offset);
+	end
+end
+
+local function SetFonts()
+	local db = E.db.sle.media.fonts
+
+	ZoneTextString:SetFont(LSM:Fetch('font', db.zone.font), db.zone.size, db.zone.outline) -- Main zone name
+	PVPInfoTextString:SetFont(LSM:Fetch('font', db.pvp.font), db.pvp.size, db.pvp.outline) -- PvP status for main zone
+	PVPArenaTextString:SetFont(LSM:Fetch('font', db.pvp.font), db.pvp.size, db.pvp.outline) -- PvP status for subzone
+	SubZoneTextString:SetFont(LSM:Fetch('font', db.subzone.font), db.subzone.size, db.subzone.outline) -- Subzone name
+
+	SendMailBodyEditBox:SetFont(LSM:Fetch('font', db.mail.font), db.mail.size, db.mail.outline) --Writing letter text
+	OpenMailBodyText:SetFont(LSM:Fetch('font', db.mail.font), db.mail.size, db.mail.outline) --Received letter text
+	--QuestFont:SetFont(LSM:Fetch('font', "ElvUI Pixel"), 12, "") -- Font in Quest Log/Petitions and shit. It's fucking hedious with any outline so fuck it.
+	--QuestFont_Large:SetFont(LSM:Fetch('font', "ElvUI Pixel"), 12, "") -- No idea what that is for
+	NumberFont_Shadow_Med:SetFont(LSM:Fetch('font', db.editbox.font), db.editbox.size, db.editbox.outline) --Chat editbox
+end
+
+function M:TextWidth()
+	local db = E.db.sle.media.fonts
+	ZoneTextString:SetWidth(db.zone.width)
+	PVPInfoTextString:SetWidth(db.pvp.width)
+	PVPArenaTextString:SetWidth(db.pvp.width)
+	SubZoneTextString:SetWidth(db.subzone.width)
+end
+
+function M:TextShow()
+	local z, i, a, s, c = random(1, #Zones), random(1, #PvPInfo), random(1, #PVPArena), random(1, #Subzones), random(1, #Colors)
+	local red, green, blue = unpack(Colors[c])
+
+	--Setting texts--
+	ZoneTextString:SetText(Zones[z])
+	PVPInfoTextString:SetText(PvPInfo[i])
+	PVPArenaTextString:SetText(PVPArena[a])
+	SubZoneTextString:SetText(Subzones[s])
+
+	ZoneTextPos()--nil, true)
+
+	--Applying colors--
+	ZoneTextString:SetTextColor(red, green, blue)
+	PVPInfoTextString:SetTextColor(red, green, blue)
+	PVPArenaTextString:SetTextColor(red, green, blue)
+	SubZoneTextString:SetTextColor(red, green, blue)
+
+	FadingFrame_Show(ZoneTextFrame)
+	FadingFrame_Show(SubZoneTextFrame)
+end
+
+function M:Update()
+	M:TextWidth()
+end
+
+function M:Initialize()
+	M:TextWidth()
+	hooksecurefunc(E, "UpdateBlizzardFonts", SetFonts)
+	hooksecurefunc("SetZoneText", ZoneTextPos)
+	--E:CreateMover(ZoneTextFrame, "ZoneTextMover", "ZoneTextMover", nil, nil, nil, "S&L,S&L MISC")
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/core/modules.lua b/ElvUI_SLE/core/modules.lua
new file mode 100644
index 0000000..6a1c0ec
--- /dev/null
+++ b/ElvUI_SLE/core/modules.lua
@@ -0,0 +1,37 @@
+local E, L, V, P, G = unpack(ElvUI);
+local unit
+
+local modules = {
+	['SLE_AutoRelease'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_AuraTimers'] = {'AceEvent-3.0'},
+	['SLE_DTPanels'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_BackGrounds'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_BagInfo'] = {'AceHook-3.0', 'AceEvent-3.0', 'AceTimer-3.0'},
+	['CharacterFrameOptions'] = {'AceEvent-3.0'},
+	['InspectFrameOptions'] = {'AceEvent-3.0'},
+	['SLE_EquipManager'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_Farm'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_AddonInstaller'] = {},
+	['SLE_Loot'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_RaidFlares'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_RaidMarks'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_SquareMinimapButtons'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_Threat'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_PvPMover'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_UIButtons'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_EnhancedVehicleBar'] = {},
+	['SLE_Test'] = {'AceHook-3.0', 'AceEvent-3.0'}, --Testing module in dev folder
+	['SLE_Media'] = {'AceHook-3.0'},
+	['SLE_InstDif'] = {'AceHook-3.0', 'AceEvent-3.0'},
+	['SLE_ScreenSaver'] = { 'AceHook-3.0', 'AceEvent-3.0' },
+	['SLE'] = {'AceHook-3.0', 'AceEvent-3.0'},
+}
+
+local function Register()
+	for name, libs in pairs(modules) do
+		unit = E:NewModule(name, unpack(libs))
+		E:RegisterModule(unit:GetName())
+	end
+end
+
+Register()
\ No newline at end of file
diff --git a/ElvUI_SLE/core/staticpopups.lua b/ElvUI_SLE/core/staticpopups.lua
new file mode 100644
index 0000000..2837d44
--- /dev/null
+++ b/ElvUI_SLE/core/staticpopups.lua
@@ -0,0 +1,65 @@
+local E, L, V, P, G = unpack(ElvUI);
+local SLE = E:GetModule('SLE')
+
+E.PopupDialogs["VERSION_MISMATCH"] = {
+	text = SLE:MismatchText(),
+	button1 = CLOSE,
+	timeout = 0,
+	whileDead = 1,
+	preferredIndex = 3,
+}
+
+E.PopupDialogs['ENHANCED_SLE_INCOMPATIBLE'] = {
+	text = L['Oh lord, you have got ElvUI Enhanced and Shadow & Light both enabled at the same time. Select an addon to disable.'],
+	OnAccept = function() DisableAddOn("ElvUI_Enhanced"); ReloadUI() end,
+	OnCancel = function() DisableAddOn("ElvUI_SLE"); ReloadUI() end,
+	button1 = 'ElvUI Enhanced',
+	button2 = 'Shadow & Light',
+	button3 = L['Disable Warning'],
+	OnAlt = function ()
+		E.global.ignoreEnhancedIncompatible = true;
+	end,
+	timeout = 0,
+	whileDead = 1,
+	hideOnEscape = false,
+}
+
+E.PopupDialogs['LOOTCONFIRM_SLE_INCOMPATIBLE'] = {
+	text = L['You have got Loot Confirm and Shadow & Light both enabled at the same time. Select an addon to disable.'],
+	OnAccept = function() DisableAddOn("LootConfirm"); ReloadUI() end,
+	OnCancel = function() DisableAddOn("ElvUI_SLE"); ReloadUI() end,
+	button1 = 'Loot Confirm',
+	button2 = 'Shadow & Light',
+	timeout = 0,
+	whileDead = 1,
+	hideOnEscape = false,
+}
+
+E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'] = {
+	text = gsub(L["INCOMPATIBLE_ADDON"], "ElvUI", "Shadow & Light"),
+	OnAccept = function(self) DisableAddOn(E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].addon); ReloadUI(); end,
+	OnCancel = function(self) E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].optiontable[E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].value] = false; ReloadUI(); end,
+	timeout = 0,
+	whileDead = 1,
+	hideOnEscape = false,
+}
+
+E.PopupDialogs['SLE_CHAT_HISTORY'] = {
+	text = "This will clear your chat history and reload your UI.\nContinue?",
+	button1 = ACCEPT,
+	button2 = CANCEL,
+	OnAccept = function(self) if ElvCharacterDB.ChatLog then ElvCharacterDB.ChatLog = {}; ReloadUI() end end,
+	timeout = 0,
+	whileDead = 1,
+	hideOnEscape = false,
+}
+
+E.PopupDialogs['SLE_EDIT_HISTORY'] = {
+	text = "This will clear your editbox history and reload your UI.\nContinue?",
+	button1 = ACCEPT,
+	button2 = CANCEL,
+	OnAccept = function(self) if ElvCharacterDB.ChatEditHistory then ElvCharacterDB.ChatEditHistory = {}; ReloadUI() end end,
+	timeout = 0,
+	whileDead = 1,
+	hideOnEscape = false,
+}
\ No newline at end of file
diff --git a/ElvUI_SLE/core/test.lua b/ElvUI_SLE/core/test.lua
new file mode 100644
index 0000000..9b03973
--- /dev/null
+++ b/ElvUI_SLE/core/test.lua
@@ -0,0 +1,2 @@
+local E, L, V, P, G = unpack(ElvUI);
+local T = E:GetModule('SLE_Test');
diff --git a/ElvUI_SLE/core/toolkit.lua b/ElvUI_SLE/core/toolkit.lua
new file mode 100644
index 0000000..f4e181d
--- /dev/null
+++ b/ElvUI_SLE/core/toolkit.lua
@@ -0,0 +1,161 @@
+local E, L, V, P, G = unpack(ElvUI);
+local SLE = E:GetModule('SLE')
+local BG = E:GetModule('SLE_BackGrounds')
+local DTP = E:GetModule('SLE_DTPanels')
+local CH = E:GetModule("Chat")
+local UB = E:GetModule('SLE_UIButtons')
+local RM = E:GetModule('SLE_RaidMarks')
+local RF = E:GetModule('SLE_RaidFlares')
+local F = E:GetModule('SLE_Farm')
+local LT = E:GetModule('SLE_Loot')
+local UF = E:GetModule('UnitFrames')
+local M = E:GetModule('SLE_Media')
+local I = E:GetModule('SLE_InstDif')
+local S = E:GetModule("SLE_ScreenSaver")
+local Sk = E:GetModule("Skins")
+
+local GetContainerNumSlots, GetContainerItemID = GetContainerNumSlots, GetContainerItemID
+
+function SLE:BagSearch(itemId)
+	for container = 0, NUM_BAG_SLOTS do
+		for slot = 1, GetContainerNumSlots(container) do
+			if itemId == GetContainerItemID(container, slot) then
+				return container, slot
+			end
+		end
+	end
+end
+
+function SLE:ValueTable(table, item)
+	for i, _ in pairs(table) do
+		if i == item then return true end
+	end
+
+	return false
+end
+
+function SLE:SimpleTable(table, item)
+	for i = 1, #table do
+		if table[i] == item then
+			return true
+		end
+	end
+
+	return false
+end
+
+function SLE:Print(msg)
+	print(E["media"].hexvaluecolor..'S&L:|r', msg)
+end
+
+function SLE:Scale(f)
+		return f*GetCVar('uiScale')
+end
+
+local function UpdateAll()
+	BG:UpdateFrames()
+	BG:RegisterHide()
+	DTP:Update()
+	DTP:DashboardShow()
+	DTP:DashWidth()
+	if E.private.unitframe.enable then
+		UF:Update_CombatIndicator()
+	end
+	LT:LootShow()
+	LT:Update()
+	UB:UpdateAll()
+	RM:Update()
+	RF:Update()
+	F:UpdateLayout()
+	CH:GMIconUpdate()
+	M:TextWidth()
+	I:UpdateFrame()
+	S:Reg(true)
+
+	collectgarbage('collect');
+end
+
+function SLE:OpenExport()
+	E:ToggleConfig()
+	if not SLEExImFrame then SLE:CreateExport() end
+	if not SLEExImFrame:IsShown() then
+		SLEExportEditBox:SetText(L["SLE_Exp_Desc"])
+		SLEImportEditBox:SetText(L["SLE_Imp_Desc"])
+		SLEExImFrame:Show()
+	end
+end
+
+local datable = {}
+
+function SLE:ExportPrint()
+	local text = ''
+	for i = 1, #datable do
+		text = text..datable[i]
+	end
+
+	return text
+end
+
+function SLE:SettingTable(t, s, root)
+	if not root then root = "" end
+	for k, v in pairs(t) do
+		if type(v) == "string" then
+			if root[k] ~= v or E.global.sle.export.full then
+				tinsert(datable, #(datable)+1, s.."."..k.." = "..v.."\n")
+			end
+		elseif type(v) == "number" then
+			if root[k] ~= v or E.global.sle.export.full then
+				tinsert(datable, #(datable)+1, s.."."..k.." = "..v.."\n")
+			else
+			end
+		elseif type(v) == "boolean" then
+			if root[k] ~= v or E.global.sle.export.full then
+				local b = v == true and "true" or "false"
+				tinsert(datable, #(datable)+1, s.."."..k.." = "..b.."\n")
+			end
+		else
+			local new = "."..k
+			SLE:SettingTable(t[k], s..new, root[k])
+		end
+	end
+end
+
+function SLE:ImportTableReplace(msg)
+	if not string.find(msg, "E.db") and not string.find(msg, "E.private") and not string.find(msg, "E.global") then
+		return nil
+	end
+	if string.find(msg, "E.db") then
+		msg = gsub(msg, "E.db", "ElvUI[1].db")
+	end
+	if string.find(msg, "E.private") then
+		msg = gsub(msg, "E.private", "ElvUI[1].private")
+	end
+	if string.find(msg, "E.global") then
+		msg = gsub(msg, "E.global", "ElvUI[1].global")
+	end
+
+	return msg
+end
+
+function SLE:Exporting()
+	local msg = ''
+	datable = {}
+	if E.global.sle.export.profile then
+		tinsert(datable, #(datable)+1, "--Profile--\n")
+		SLE:SettingTable(E.db, "E.db", P)
+	end
+	if E.global.sle.export.private then
+		tinsert(datable, #(datable)+1, "--Character--\n")
+		SLE:SettingTable(E.private, "E.private", V)
+	end
+	if E.global.sle.export.global then
+		tinsert(datable, #(datable)+1, "--Global--\n")
+		SLE:SettingTable(E.global, "E.global", G)
+	end
+	msg = SLE:ExportPrint()
+	local editbox = SLEExportEditBox
+	editbox:SetText(msg)
+	editbox:SetFocus()
+	editbox:HighlightText()
+end
+hooksecurefunc(E, "UpdateAll", UpdateAll)
\ No newline at end of file
diff --git a/ElvUI_SLE/defaults/load_defaults.xml b/ElvUI_SLE/defaults/load_defaults.xml
new file mode 100644
index 0000000..b892e8b
--- /dev/null
+++ b/ElvUI_SLE/defaults/load_defaults.xml
@@ -0,0 +1,4 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/">
+	<Script file="profile.lua"/>
+	<Script file="private.lua"/>
+</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/defaults/private.lua b/ElvUI_SLE/defaults/private.lua
new file mode 100644
index 0000000..1621d39
--- /dev/null
+++ b/ElvUI_SLE/defaults/private.lua
@@ -0,0 +1,83 @@
+local E, L, V, P, G = unpack(ElvUI);
+
+V['skins']['addons'] = {
+	['EmbedSkada'] = true,
+}
+
+V['sle'] = {
+	--Character Frame Options
+	['characterframeoptions'] = {
+		['enable'] = false,
+	},
+
+	['inspectframeoptions'] = {
+		['enable'] = false,
+	},
+
+	["datatext"] = {
+		["dp1hide"] = false,
+		["dp2hide"] = false,
+		["tophide"] = false,
+		["dp3hide"] = false,
+		["dp4hide"] = false,
+		["dp5hide"] = false,
+		["bottomhide"] = false,
+		["dp6hide"] = false,
+	},
+
+	['exprep'] = {
+		['autotrack'] = false,
+	},
+
+	['farm'] = {
+		['enable'] = false,
+		['seedtrash'] = false,
+	},
+
+	['equip'] = {
+		['enable'] = false,
+		['spam'] = false,
+		['primary'] = "NONE",
+		['secondary'] = "NONE",
+		['instance'] = "NONE",
+		['pvp'] = "NONE",
+		['setoverlay'] = false,
+	},
+
+	['marks'] = {
+		['marks'] = false,
+		['flares'] = false,
+	},
+
+	--Minimap Moduel
+	['minimap'] = {
+		['buttons'] = {
+			['enable'] = true,
+		},
+		['mapicons'] = {
+			['enable'] = false,
+		},
+	},
+
+	['loot'] = {
+		['enable'] = false,
+		['autoconfirm'] = false,
+		['autogreed'] = false,
+		['autodisenchant'] = false,
+	},
+
+	['vehicle'] = {
+		['enable'] = false,
+	},
+
+	['backgrounds'] = false,
+}
+
+G['sle'] = {
+	['export'] = {
+		['full'] = false,
+		['profile'] = true,
+		['private'] = false,
+		['global'] = false,
+	},
+}
\ No newline at end of file
diff --git a/ElvUI_SLE/defaults/profile.lua b/ElvUI_SLE/defaults/profile.lua
new file mode 100644
index 0000000..7c80869
--- /dev/null
+++ b/ElvUI_SLE/defaults/profile.lua
@@ -0,0 +1,455 @@
+local E, L, V, P, G = unpack(ElvUI);
+
+P['sle'] = {
+	--Auras
+	['auras'] = {
+		['enable'] = false,
+		['buffs'] = {
+			['hideTimer'] = false,
+		},
+		['debuffs'] = {
+			['hideTimer'] = false,
+		},
+		['tempenchants'] = {
+			['hideTimer'] = false,
+		},
+	},
+	--Background frames
+	['backgrounds'] = {
+		['bottom'] = {
+			['enabled'] = false,
+			['trans'] = false,
+			['texture'] = "",
+			['width'] = E.screenwidth/4 + 32,
+			['height'] = E.screenheight/6 - 13,
+			['xoffset'] = 0,
+			['yoffset'] = 0,
+			['pethide'] = true,
+			['template'] = "Default",
+			['alpha'] = 1,
+		},
+		['left'] = {
+			['enabled'] = false,
+			['trans'] = false,
+			['texture'] = "",
+			['width'] = E.screenwidth/10 - 4,
+			['height'] = E.screenheight/5 + 11,
+			['xoffset'] = 0,
+			['yoffset'] = 0,
+			['pethide'] = true,
+			['template'] = "Default",
+			['alpha'] = 1,
+		},
+		['right'] = {
+			['enabled'] = false,
+			['trans'] = false,
+			['texture'] = "",
+			['width'] = E.screenwidth/10 - 4,
+			['height'] = E.screenheight/5 + 11,
+			['xoffset'] = 0,
+			['yoffset'] = 0,
+			['pethide'] = true,
+			['template'] = "Default",
+			['alpha'] = 1,
+		},
+		['action'] = {
+			['enabled'] = false,
+			['trans'] = false,
+			['texture'] = "",
+			['width'] = E.screenwidth/4 + 32,
+			['height'] = E.screenheight/20 + 5,
+			['xoffset'] = 0,
+			['yoffset'] = 0,
+			['pethide'] = true,
+			['template'] = "Default",
+			['alpha'] = 1,
+		},
+	},
+
+	--Caster Name
+	['castername'] = false,
+
+	--Character Frame Options
+	['characterframeoptions'] = {
+		['shownormalgradient'] = true,
+		['showerrorgradient'] = true,
+		['gradientColor'] = { .41, .83, 1 },
+		['showimage'] = true,
+		['image'] = {
+			['dropdown'] = "SPACE",
+			['custom'] = "",
+		},
+		['itemlevel'] = {
+			['show'] = true,
+			['font'] = "ElvUI Pixel",
+			['fontSize'] = 10,
+			['fontOutline'] = "OUTLINE",
+		},
+		['itemdurability'] = {
+			['show'] = true,
+			['font'] = "ElvUI Pixel",
+			['fontSize'] = 10,
+			['fontOutline'] = "OUTLINE",
+		},
+		['itemenchant'] = {
+			['show'] = true,
+			['font'] = "ElvUI Pixel",
+			['fontSize'] = 10,
+			['fontOutline'] = "OUTLINE",
+			['showwarning'] = true,
+			['warningSize'] = 12,
+			['mouseover'] = false,
+		},
+		['itemgem'] = {
+			['show'] = true,
+			['showwarning'] = true,
+			['socketSize'] = 12,
+			['warningSize'] = 12,
+		},
+	},
+
+	--Chat
+	['chat'] = {
+		['guildmaster'] = false,
+	},
+
+	--Combat Icon
+	['combatico'] = {
+		['pos'] = 'TOP',
+	},
+
+	--Datatexts panels
+	['datatext'] = {
+		['dp1'] = {
+			['enabled'] = false,
+			['width'] = E.screenwidth/5,
+			['pethide'] = true,
+			['alpha'] = 1,
+		},
+		['dp2'] = {
+			['enabled'] = false,
+			['width'] = E.screenwidth/5,
+			['pethide'] = true,
+			['alpha'] = 1,
+		},
+		['top'] = {
+			['enabled'] = false,
+			['width'] = E.screenwidth/5 - 4,
+			['pethide'] = true,
+			['alpha'] = 1,
+		},
+		['dp3'] = {
+			['enabled'] = false,
+			['width'] = E.screenwidth/5,
+			['pethide'] = true,
+			['alpha'] = 1,
+		},
+		['dp4'] = {
+			['enabled'] = false,
+			['width'] = E.screenwidth/5,
+			['pethide'] = true,
+			['alpha'] = 1,
+		},
+		['dp5'] = {
+			['enabled'] = false,
+			['width'] = E.screenwidth/4 - 60,
+			['pethide'] = true,
+			['alpha'] = 1,
+		},
+		['bottom'] = {
+			['enabled'] = false,
+			['width'] = E.screenwidth/10 - 4,
+			['pethide'] = true,
+			['alpha'] = 1,
+		},
+		['dp6'] = {
+			['enabled'] = false,
+			['width'] = E.screenwidth/4 - 60,
+			['pethide'] = true,
+			['alpha'] = 1,
+		},
+		['chatleft'] = {
+			['enabled'] = true,
+			['width'] = 396,
+			['alpha'] = 1,
+		},
+		['chatright'] = {
+			['enabled'] = true,
+			['width'] = 396,
+			['alpha'] = 1,
+		},
+		['dashboard'] = {
+			['enable'] = false,
+			['width'] = 100,
+			['alpha'] = 1,
+		},
+		['chathandle'] = false,
+	},
+
+	--DT Options
+	['dt'] = {
+		['friends'] = {
+			['combat'] = false,
+			['hideFriends'] = false,
+			['sortBN'] = 'TOONNAME',
+			['tooltipAutohide'] = 0.2,
+			['totals'] = false,
+		},
+		['guild'] = {
+			['combat'] = false,
+			['hideGuild'] = false,
+			['sortGuild'] = 'TOONNAME',
+			['tooltipAutohide'] = 0.2,
+			['totals'] = false,
+		},
+		['mail'] = {
+			['icon'] = true,
+		},
+	},
+
+	--Exp/Rep Bar
+	['exprep'] = {
+		['explong'] = false,
+		['replong'] = false,
+	},
+
+	--Farm Module
+	['farm'] = {
+		['active'] = true,
+		['size'] = 30,
+		['autotarget'] = false,
+		['seedor'] = "TOP",
+		['quest'] = false,
+	},
+
+	--Flares (Raid)
+	['flares'] = {
+		['growth'] = "RIGHT",
+		['showinside'] = false,
+		['size'] = 20,
+		['tooltips'] = true,
+		['mouseover'] = false,
+	},
+
+	--LFR options
+	['lfrshow'] = {
+		['enabled'] = false,
+		['ds'] = false,
+		['mv'] = false,
+		['hof'] = false,
+		['toes'] = false,
+		['tot'] = false,
+		['soo'] = false,
+		['soof'] = false,
+		['leishen'] = false,
+	},
+
+	--Loot (Restructured)
+	['loot'] = {
+		['enable'] = false,
+		['autoroll'] = {
+			['enable'] = true,
+			['autoconfirm'] = false,
+			['autode'] = false,
+			['autogreed'] = false,
+			['autoqlty'] = 2,
+			['bylevel'] = false,
+			['level'] = 1,
+		},
+		['announcer'] = {
+			['auto'] = true,
+			['channel'] = "RAID",
+			['enable'] = false,
+			['override'] = '5',
+			['quality'] = "EPIC",
+		},
+		['history'] = {
+			['alpha'] = 1,
+			['autohide'] = false,
+		},
+	},
+
+	--Marks (Raid)
+	['marks'] = {
+		['growth'] = "RIGHT",
+		['showinside'] = false,
+		['target'] = false,
+		['size'] = 18,
+		['mouseover'] = false,
+	},
+
+	--Media
+	['media'] = {
+		['fonts'] = {
+			['zone'] = {
+				['font'] = "ElvUI Font",
+				['size'] = 32,
+				['outline'] = "OUTLINE",
+				['width'] = 512,
+			},
+			['subzone'] = {
+				['font'] = "ElvUI Font",
+				['size'] = 25,
+				['outline'] = "OUTLINE",
+				['offset'] = 0,
+				['width'] = 512,
+			},
+			['pvp'] = {
+				['font'] = "ElvUI Font",
+				['size'] = 22,
+				['outline'] = "OUTLINE",
+				['width'] = 512,
+			},
+			['mail'] = {
+				['font'] = "ElvUI Font",
+				['size'] = 12,
+				['outline'] = "NONE",
+			},
+			['editbox'] = {
+				['font'] = "ElvUI Font",
+				['size'] = 12,
+				['outline'] = "NONE",
+			},
+		},
+		['screensaver'] = {
+			['enable'] = false,
+			['title'] = {
+				['font'] = "ElvUI Font",
+				['size'] = 28,
+				['outline'] = "OUTLINE",
+			},
+			['subtitle'] = {
+				['font'] = "ElvUI Font",
+				['size'] = 15,
+				['outline'] = "OUTLINE",
+			},
+			['date'] = {
+				['font'] = "ElvUI Font",
+				['size'] = 15,
+				['outline'] = "OUTLINE",
+			},
+			['player'] = {
+				['font'] = "ElvUI Font",
+				['size'] = 15,
+				['outline'] = "OUTLINE",
+			},
+			['tips'] = {
+				['font'] = "ElvUI Font",
+				['size'] = 20,
+				['outline'] = "OUTLINE",
+			},
+			['playermodel'] = {
+				['anim'] = 47,
+				['position'] = "RIGHT",
+			},
+			['crest'] = 128,
+			['height'] = E.screenheight/8,
+		},
+	},
+
+	--Minimap Module
+	['minimap'] = {
+		['enable'] = false,
+		['combat'] = false,
+		['alpha'] = 1,
+		['coords'] = {
+			['display'] = "SHOW",
+			['middle'] = "CORNERS",
+			['decimals'] = true,
+		},
+		['buttons'] = {
+			['anchor'] = "NOANCHOR",
+			['size'] = 24,
+			['mouseover'] = false,
+		},
+		['mapicons'] = {
+			['iconmouseover'] = false,
+			['iconsize'] = 27,
+			['iconperrow'] = 12,
+			['pethide'] = false,
+			['skindungeon'] = false,
+		},
+		['instance'] = {
+			['enable'] = false,
+			['flag'] = true,
+			['xoffset'] = -10,
+			['yoffset'] = 0,
+		},
+	},
+
+	--Nameplate Options
+	['nameplate'] = {
+		['showthreat'] = false,
+		['targetcount'] = false,
+	},
+
+	--Power text on classbars
+	['powtext'] = false,
+
+	--PvP Auto release
+	['pvpautorelease'] = true,
+
+	--Threat
+	['threat'] = {
+		['enable'] = true,
+		['position'] = "RightChatDataPanel",
+	},
+
+	--Tooltip
+	['tooltip'] = {
+		['enable'] = false,
+		['showFaction'] = false,
+		['xOffset'] = 0,
+		['yOffset'] = 0,
+	},
+	--Tooltip Faction Icon
+	--["tooltipicon"] = false,
+
+	--UI Buttons
+	['uibuttons'] = {
+		['enable'] = false,
+		['size'] = 17,
+		['mouse'] = false,
+		['position'] = "uib_vert",
+		['spacing'] = 3,
+	},
+
+	['rumouseover'] = false,
+}
+
+P.chat.editboxhistory = 5
+P.auras.perRow = 19
+
+--Datatexts
+P.datatexts.panels.DP_1 = {
+	['left'] = '',
+	['middle'] = '',
+	['right'] = '',
+}
+P.datatexts.panels.DP_2 = {
+	['left'] = '',
+	['middle'] = '',
+	['right'] = '',
+}
+P.datatexts.panels.DP_3 = {
+	['left'] = '',
+	['middle'] = '',
+	['right'] = '',
+}
+P.datatexts.panels.DP_4 = {
+	['left'] = '',
+	['middle'] = '',
+	['right'] = '',
+}
+P.datatexts.panels.DP_5 = {
+	['left'] = '',
+	['middle'] = '',
+	['right'] = '',
+}
+P.datatexts.panels.DP_6 = {
+	['left'] = '',
+	['middle'] = '',
+	['right'] = '',
+}
+P.datatexts.panels.Top_Center = 'Version'
+P.datatexts.panels.Bottom_Panel = ''
\ No newline at end of file
diff --git a/ElvUI_SLE/dev/commands.lua b/ElvUI_SLE/dev/commands.lua
deleted file mode 100755
index 108c259..0000000
--- a/ElvUI_SLE/dev/commands.lua
+++ /dev/null
@@ -1,209 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-local SLE = E:GetModule('SLE');
-local find = string.find
-local split = string.split
-
-local Message = ''
-
---The list of authorized toons
-local Authors = {
-	["Illidan"] = {
-		--Darth's toon
-		["Darthpred"] = "SLEAUTHOR",
-		--Repooc's Toon
-		["Repøøc"] = "SLEAUTHOR",
-		["Repooc"] = "SLEAUTHOR"
-	},
-	["СвежевательДуш"] = {
-		--Darth's toons
-		["Джатон"] = "SLEAUTHOR",
-		["Нарджо"] = "SLEAUTHOR"
-	},
-	["ВечнаяПесня"] = {
-		--Darth's toons
-		["Дартпредатор"] = "SLEAUTHOR",
-		["Алея"] = "SLEAUTHOR",
-		["Ваззули"] = "SLEAUTHOR",
-		["Сиаранна"] = "SLEAUTHOR",
-		["Джатон"] = "SLEAUTHOR",
-		["Фикстер"] = "SLEAUTHOR",
-		["Киландра"] = "SLEAUTHOR",
-		["Нарджо"] = "SLEAUTHOR",
-		["Келинира"] = "SLEAUTHOR",
-		["Крениг"] = "SLEAUTHOR",
-		["Мейжи"] = "SLEAUTHOR"
-	},
-	["Korialstrasz"] = {
-		["Cursewordz"] = "SLEAUTHOR"
-	},
-	["Spirestone"] = {
-		["Sifupooc"] = "SLEAUTHOR",
-		["Dapooc"] = "SLEAUTHOR",
-		["Lapooc"] = "SLEAUTHOR",
-		["Warpooc"] = "SLEAUTHOR",
-		["Repooc"] = "SLEAUTHOR"
-	},
-	["Andorhal"] = {
-		["Dapooc"] = "SLEAUTHOR",
-		["Rovert"] = "SLEAUTHOR",
-		["Sliceoflife"] = "SLEAUTHOR"
-	},
-	["WyrmrestAccord"] = {
-		["Kìtalie"] = "SLEAUTHOR",
-		["Sagome"] = "SLEAUTHOR",
-		["Ainy"] = "SLEAUTHOR",
-		["Norinael"] = "SLEAUTHOR",
-		["Tritalie"] = "SLEAUTHOR",
-		["Myùn"] = "SLEAUTHOR",
-		["Nevaleigh"] = "SLEAUTHOR",
-		["Celenii"] = "SLEAUTHOR",
-		["Varysa"] = "SLEAUTHOR",
-		["Caylasena"] = "SLEAUTHOR",
-		["Arillora"] = "SLEAUTHOR",
-		["Dapooc"] = "SLEAUTHOR",
-	},
-	["Anasterian(US)"] = {
-		["Dapooc"] = "SLEAUTHOR",
-	},
-	["Brill(EU)"] = {
-		["Дартпредатор"] = "SLEAUTHOR",
-	},
-}
-
-function SLE:Auth(sender)
-	local senderName, senderRealm
-
-	if sender then
-		senderName, senderRealm = string.split('-', sender)
-	else
-		senderName = E.myname
-	end
-
-	senderRealm = senderRealm or E.myrealm
-	senderRealm = senderRealm:gsub(' ', '')
-
-	if Authors[senderRealm] and Authors[senderRealm][senderName] then
-		return Authors[senderRealm][senderName]
-	end
-
-	return false
-end
-
-function E:sleCommand(flag, channel, target, output, text, wtarget, presenceID)
-	if not SLE:Auth() then
-		SLE:Print('|cffFF0000Access Denied|r: You need to be authorized to use this command.')
-		return
-	end
-	if channel ~= 'BNET' then
-		if target == (nil or "")then
-			SLE:Print('|cffFF0000Error|r: You need to set a unit to execute command.')
-			return
-		end
-	end
-	if channel ~= 'BNET' then
-		if text == (nil or "") then
-			SLE:Print('|cffFF0000Error|r: You need to actually send something in your message.')
-			return
-		end
-	end
-	if channel ~= 'BNET' then
-		Message = target
-	else
-		Message = " "
-	end
-	if flag == 'SLE_DEV_SAYS' then
-		if output == 'WHISPER' and (wtarget == (nil or "")) then
-			SLE:Print('|cffFF0000Error|r: You need to set a whisper target.')
-			return
-		end
-		Message = Message.."#"..output.."#"..text
-		if output == 'WHISPER' then
-			Message = Message.."#"..wtarget
-		end
-	else
-		Message = Message.."#"..text
-	end
-	if channel ~= 'BNET' then
-		SendAddonMessage(flag, Message, channel, target)
-	else
-		presenceID = tonumber(presenceID)
-		BNSendGameData(presenceID, flag, Message)
-	end
-	SLE:Print('|cff00FF00Success|r:  Command executed.')
-end
-
-
-local function SendRecieve(self, event, prefix, message, channel, sender)
-	if event == "CHAT_MSG_ADDON" then
-		if sender == E.myname.."-"..E.myrealm:gsub(' ','') then return end
-		if (prefix == 'SLE_DEV_SAYS' or prefix == 'SLE_DEV_CMD') and SLE:Auth(sender) and not SLE:Auth() then
-			if prefix == 'SLE_DEV_SAYS' then
-				local user, channel, msg, sendTo = split("#", message)
-
-				if (user ~= 'ALL' and (user == E.myname or user == E.myname.."-"..E.myrealm:gsub(' ',''))) or user == 'ALL' then
-					SendChatMessage(msg, channel, nil, sendTo)
-				end
-			else
-				local user, executeString = split("#", message)
-				if (user ~= 'ALL' and (user == E.myname or user == E.myname.."-"..E.myrealm:gsub(' ',''))) or user == 'ALL' then
-					local func, err = loadstring(executeString);
-					if not err then
-						SLE:Print(format("Developer Executed: %s", executeString))
-						func()
-					end
-				end
-			end
-		end
-		if prefix == 'SLE_DEV_REQ' and SLE:Auth(sender) then
-			local message = UnitLevel('player')..'#'..E.myclass..'#'..E.myname..'#'..E.myrealm..'#'..SLE.version;
-			SendAddonMessage('SLE_DEV_INFO', message, channel)
-		end
-	elseif event == "BN_CHAT_MSG_ADDON" then
-		if (sender == E.myname.."-"..E.myrealm:gsub(' ','')) then return end
-		if prefix == 'SLE_DEV_REQ' then
-			local _, numBNetOnline = BNGetNumFriends()
-			for i = 1, numBNetOnline do
-				local presenceID, _, _, _, _, _, client, isOnline = BNGetFriendInfo(i)
-				if isOnline and client == BNET_CLIENT_WOW then
-					--local messageS
-					local message, ID = split("#", message)
-					if message == 'userlist' then
-						message = UnitLevel('player')..'#'..E.myclass..'#'..E.myname..'#'..E.myrealm..'#'..SLE.version;
-					elseif message == 'slesay' then
-						message = "SLEinfo"..ID
-					end
-					BNSendGameData(presenceID, 'SLE_DEV_INFO', message)
-				end
-			end
-		elseif (prefix == 'SLE_DEV_SAYS' or prefix == 'SLE_DEV_CMD') and not SLE:Auth() then
-			if prefix == 'SLE_DEV_SAYS' then
-				local _, channel, msg, sendTo = split("#", message)
-				SendChatMessage(msg, channel, nil, sendTo)
-			else
-				local _, executeString = split("#", message)
-					local func, err = loadstring(executeString);
-					if not err then
-						SLE:Print(format("Developer Executed: %s", executeString))
-						func()
-					end
-			end
-		end
-	end
-end
-RegisterAddonMessagePrefix('SLE_DEV_SAYS')
-RegisterAddonMessagePrefix('SLE_DEV_CMD')
-
-RegisterAddonMessagePrefix('SLE_DEV_REQ')
-
-local f = CreateFrame('Frame', "DaFrame")
-f:RegisterEvent("GROUP_ROSTER_UPDATE")
-f:RegisterEvent("CHAT_MSG_ADDON")
-f:RegisterEvent("BN_CHAT_MSG_ADDON")
-f:SetScript('OnEvent', SendRecieve)
-
-function SLE:RegisterCommands()
-	E:RegisterChatCommand('slesays', 'sleSays')
-	E:RegisterChatCommand('slecmd', 'sleCommand')
-	E:RegisterChatCommand('sletarget', 'sleTarget')
-	E:RegisterChatCommand('slechannel', 'sleChannel')
-end
\ No newline at end of file
diff --git a/ElvUI_SLE/dev/elvprot.lua b/ElvUI_SLE/dev/elvprot.lua
deleted file mode 100755
index d86bb2c..0000000
--- a/ElvUI_SLE/dev/elvprot.lua
+++ /dev/null
@@ -1,61 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-local SLE = E:GetModule('SLE');
-local find = string.find
-local tinsert = tinsert
-
-function E:IsFoolsDay()
-	if not SLE:Auth() then E.global.aprilFools = true end
-	if find(date(), '04/01/') and not E.global.aprilFools then
-		return true;
-	else
-		return false;
-	end
-end
-
-E.BeginFoolsDayEventSLE = E.BeginFoolsDayEvent
-function E:BeginFoolsDayEvent()
-	E.BeginFoolsDayEventSLE(self)
-	tinsert(self.massiveShakeObjects, M1)
-	tinsert(self.massiveShakeObjects, M2)
-	tinsert(self.massiveShakeObjects, M3)
-	tinsert(self.massiveShakeObjects, M4)
-	tinsert(self.massiveShakeObjects, M5)
-	tinsert(self.massiveShakeObjects, M6)
-	tinsert(self.massiveShakeObjects, M7)
-	tinsert(self.massiveShakeObjects, M8)
-	for i=1, 5 do
-		if FseedButtons[i] then
-			for j = 1, #FseedButtons[i] do
-					tinsert(self.massiveShakeObjects, FseedButtons[i][j])
-			end
-		end
-	end
-	for i = 1, #FtoolButtons do
-		tinsert(self.massiveShakeObjects, FtoolButtons[i])
-	end
-	for i = 1, #FportalButtons do
-		tinsert(self.massiveShakeObjects, FportalButtons[i])
-	end
-	tinsert(self.massiveShakeObjects, ConfigUIButton)
-	tinsert(self.massiveShakeObjects, ReloadUIButton)
-	tinsert(self.massiveShakeObjects, MoveUIButton)
-	tinsert(self.massiveShakeObjects, Bbutton)
-	tinsert(self.massiveShakeObjects, Abutton)
-	if Fbutton then tinsert(self.massiveShakeObjects, Fbutton) end
-	tinsert(self.massiveShakeObjects, DP_1)
-	tinsert(self.massiveShakeObjects, DP_2)
-	tinsert(self.massiveShakeObjects, DP_3)
-	tinsert(self.massiveShakeObjects, DP_4)
-	tinsert(self.massiveShakeObjects, DP_5)
-	tinsert(self.massiveShakeObjects, DP_6)
-	tinsert(self.massiveShakeObjects, Top_Center)
-	tinsert(self.massiveShakeObjects, Bottom_Panel)
-	tinsert(self.massiveShakeObjects, BottomBG)
-	tinsert(self.massiveShakeObjects, LeftBG)
-	tinsert(self.massiveShakeObjects, RightBG)
-	tinsert(self.massiveShakeObjects, ActionBG)
-	tinsert(self.massiveShakeObjects, RaidUtility_ShowButton)
-	tinsert(self.massiveShakeObjects, RaidUtilityPanel)
-end
-
-
diff --git a/ElvUI_SLE/dev/load_dev.xml b/ElvUI_SLE/dev/load_dev.xml
deleted file mode 100755
index ab748f4..0000000
--- a/ElvUI_SLE/dev/load_dev.xml
+++ /dev/null
@@ -1 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
	<Script file='elvprot.lua'/>
	<Script file='commands.lua'/>
	<Script file='test.lua'/>
	<Script file='staticpopups.lua'/>
	<Script file='options.lua'/>
</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/dev/options.lua b/ElvUI_SLE/dev/options.lua
deleted file mode 100755
index e0e3eec..0000000
--- a/ElvUI_SLE/dev/options.lua
+++ /dev/null
@@ -1,363 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local SLE = E:GetModule('SLE');
-local ACD = LibStub("AceConfigDialog-3.0")
-
-local bnettesttbl = {}
-function SLE:GetBNetInfo()
-	local _, numBNetOnline = BNGetNumFriends()
-	for i = 1, numBNetOnline do
-		local presenceID, presenceName, _, _, _, _, client, isOnline = BNGetFriendInfo(i)
-		if isOnline and client == BNET_CLIENT_WOW then
-			BNSendGameData(presenceID, 'SLE_DEV_REQ', 'slesay#'..presenceID)
-		end
-	end
-end
-
-if SLE:Auth() then
-	local selectedChannel = ''
-	local UserListCache = {}
-	local highestVersion = tonumber(SLE.version)
-	local flag = 'SLE_DEV_SAYS'
-	local addonChannel = 'GUILD'
-	local addonTarget = ""
-	local output = 'SAY'
-	local text = ''
-	local wtarget = ""
-	local bnetP = ""
-
-	function SLE:delete(...)
-		local _, id = ...
-		id = tostring(id)
-		bnettesttbl[id] = nil
-	end
-	SLE:RegisterEvent('BN_FRIEND_ACCOUNT_OFFLINE', 'delete')
-
-	RegisterAddonMessagePrefix('SLE_DEV_INFO')
-
-	local f = CreateFrame('Frame')
-	f:RegisterEvent('CHAT_MSG_ADDON')
-	f:RegisterEvent('BN_CHAT_MSG_ADDON')
-	f:RegisterEvent('BN_FRIEND_ACCOUNT_ONLINE')
-	f:RegisterEvent('PLAYER_ENTERING_WORLD')
-	f:SetScript('OnEvent', function(self, event, prefix, message, channel, sender)
-		if event == 'BN_FRIEND_ACCOUNT_ONLINE' or event == 'BN_FRIEND_ACCOUNT_OFFLINE' then
-			SLE:GetBNetInfo()
-		end
-		if event == 'PLAYER_ENTERING_WORLD' then
-			SLE:GetBNetInfo()
-		end
-		if prefix == 'SLE_DEV_INFO' then
-			if event == 'CHAT_MSG_ADDON' or event == 'BN_CHAT_MSG_ADDON' then
-				if not message:find("SLEinfo") then
-					local userLevel, userClass, userName, userRealm, userVersion = strsplit('#', message)
-					if (userName == E.myname and userRealm == E.myrealm) then return end;
-
-					userVersion = tonumber(userVersion)
-
-					if userVersion > highestVersion then
-						highestVersion = userVersion
-					end
-
-					local id = #UserListCache + 1;
-
-					for i=1,#UserListCache do
-						if (UserListCache[i].userName == userName and UserListCache[i].userRealm == userRealm) then
-							id = i;
-							break;
-						end
-					end
-
-					UserListCache[id] = {
-						['userLevel'] = userLevel,
-						['userClass'] = userClass,
-						['userName'] = userName,
-						['userRealm'] = userRealm,
-						['userVersion'] = userVersion,
-					}
-
-					if (IsAddOnLoaded("ElvUI_Config")) then
-						ACD:SelectGroup('ElvUI', 'sle', 'developer', 'userList')
-					end
-				else
-					local _, numBNetOnline = BNGetNumFriends()
-					for i = 1, numBNetOnline do
-						local presenceID, presenceName, _, _, toon, _, _, _ = BNGetFriendInfo(i)
-						message = message:gsub("SLEinfo", '')
-						local pid = tonumber(message)
-						if pid == presenceID then
-							bnettesttbl[message] = presenceName;
-						end
-					end
-				end
-			end
-		end
-	end)
-
-	local function configTable()
-		E.Options.args.sle.args.developer = {
-			order = 999,
-			type = 'group',
-			name = "Developer",
-			childGroups = 'tab',
-			args = {
-				header = {
-					order = 1,
-					type = "header",
-					name = "Evil Overlord Control Panel",
-				},
-				testdesc = {
-					order = 2,
-					type = "description",
-					name = "WTF are you doing here, asshole?!",
-				},
-				userList = {
-					order = 3,
-					type = "group",
-					name = "User List",
-					args = {
-						listheader = {
-							order = 1,
-							type = "header",
-							name = "List of possible victims",
-						},
-						List = {
-							type = 'select',
-							name = 'Choose a channel',
-							order = 2,
-							get = function() return selectedChannel end,
-							set = function(_, value)
-								selectedChannel = value
-							end,
-							values = {
-								[''] = ' ',
-								['GUILD'] = 'Guild',
-								['INSTANCE_CHAT'] = 'Instance',
-								['PARTY'] = 'Party',
-								['RAID'] = 'Raid',
-								['BNET'] = 'BNet',
-							},
-						},
-						submitbutton = {
-							type = 'execute',
-							order = 3,
-							name = function()
-								return selectedChannel ~= '' and "Update List" or "Clear List"
-							end,
-							func = function(info, value)
-								UserListCache = {} -- Clear Cache
-
-								if selectedChannel == 'BNET' then
-									local _, numBNetOnline = BNGetNumFriends()
-									for i = 1, numBNetOnline do
-										local presenceID, _, _, _, _, _, client, isOnline = BNGetFriendInfo(i)
-										if isOnline and client == BNET_CLIENT_WOW then
-											BNSendGameData(presenceID, 'SLE_DEV_REQ', 'userlist')
-										end
-									end
-								elseif selectedChannel ~= '' then
-									SendAddonMessage('SLE_DEV_REQ', 'userlist', selectedChannel)
-								end
-							end,
-						},
-						Space = {
-							type = 'description',
-							name = ' ',
-							order = 4,
-						},
-						userList = {
-							type = 'group',
-							name = function()
-								return 'Userlist : '..selectedChannel
-							end,
-							order = 5,
-							guiInline = true,
-							args = {},
-							hidden = function() return selectedChannel == '' end,
-						},
-					},
-				},
-				devcommand = {
-					order = 500,
-					type = "group",
-					name = "Commands",
-					args = {
-						header = {
-							order = 1,
-							type = "header",
-							name = "Developer commands execution GUI",
-						},
-						desc = {
-							order = 2,
-							type = 'description',
-							name = "The GUI for executing old /slesays and /slecmd without typing all the shit mannually.",
-						},
-						flag = {
-							type = 'select',
-							name = 'Addon message type',
-							order = 3,
-							get = function() return flag end,
-							set = function(_, value)
-								flag = value
-							end,
-							values = {
-								['SLE_DEV_SAYS'] = 'S&L Says',
-								['SLE_DEV_CMD'] = 'S&L Command',
-							},
-						},
-						channel = {
-							type = 'select',
-							name = 'Addon message channel',
-							order = 4,
-							get = function() return addonChannel end,
-							set = function(_, value)
-								addonChannel = value
-								--if addonChannel == "BNET" then
-								--	SLE:GetBNetInfo()
-								--end
-							end,
-							values = {
-								['GUILD'] = 'Guild',
-								['INSTANCE_CHAT'] = 'Instance',
-								['PARTY'] = 'Party',
-								['RAID'] = 'Raid',
-								['WHISPER'] = 'Whisper',
-								['BNET'] = 'BNet',
-							},
-						},
-						bnetlist = {
-							type = 'select',
-							name = 'BNet List',
-							order = 5,
-							disabled = function() return addonChannel ~= 'BNET' end,
-							get = function() return bnetP end,
-							set = function(_, value)
-								bnetP = value
-								--if addonChannel == "BNET" then
-								--	SLE:GetBNetInfo()
-								--end
-							end,
-							values = function()
-								SLE:GetBNetInfo()
-								return bnettesttbl
-							end,
-						},
-						target = {
-							order = 6,
-							type = 'input',
-							width = 'full',
-							name = 'Unit to send message to',
-							disabled = function() return addonChannel == 'BNET' end,
-							get = function() return addonTarget end,
-							set = function(_, value)
-								addonTarget = value
-							end,
-						},
-						message = {
-							order = 7,
-							type = "group",
-							name = 'Message',
-							guiInline = true,
-							args = {
-								channel = {
-									type = 'select',
-									order = 1,
-									name = 'Output channel (S&L Says only)',
-									disabled = function() return flag ~= 'SLE_DEV_SAYS' end,
-									get = function() return output end,
-									set = function(_, value)
-										output = value
-									end,
-									values = {
-										['GUILD'] = 'Guild',
-										['INSTANCE_CHAT'] = 'Instance',
-										['PARTY'] = 'Party',
-										['RAID'] = 'Raid',
-										['SAY'] = "Say",
-										['YELL'] = "Yell",
-										['WHISPER'] = "Whisper",
-									},
-								},
-								message = {
-									type = 'input',
-									order = 2,
-									width = 'full',
-									name = 'Message to send/Script to execute',
-									get = function() return text end,
-									set = function(_, value)
-										text = value
-									end,
-								},
-								whispTarget = {
-									type = 'input',
-									order = 3,
-									width = 'full',
-									name = 'Whisper target (S&L Says with whisper only)',
-									disabled = function() return (flag ~= 'SLE_DEV_SAYS') or (flag == 'SLE_DEV_SAYS' and output ~= 'WHISPER') end,
-									get = function() return wtarget end,
-									set = function(_, value)
-										wtarget = value
-									end,
-								},
-							},
-						},
-						submitbutton = {
-							type = 'execute',
-							order = 8,
-							name = "Execute command",
-							desc = "Unleash the chaos!!!",
-							func = function ()
-								SLE:Print('Trying to execute this command...')
-								E:sleCommand(flag, addonChannel, addonTarget, output, text, wtarget, bnetP)
-							end,
-						},
-					},
-				},
-
-				devgroupone = {
-					order = 500,
-					type = "group",
-					name = "Test Group",
-					args = {
-						subgroup = {
-							order = 1,
-							type = "header",
-							name = "Dafuq we have this?",
-						},
-					},
-				},
-			},
-		}
-		for i = 1, 40 do
-			E.Options.args.sle.args.developer.args.userList.args.userList.args[tostring(i)] = {
-				type = 'description',
-				order = i,
-				name = function()
-					if UserListCache[i] then
-						local Level = GetQuestDifficultyColor(UserListCache[i]['userLevel'])
-						Level = format('|cff%02x%02x%02x%s|r', Level.r *255, Level.g *255, Level.b *255, UserListCache[i]['userLevel'])
-
-						local ClassColor = '|c'..RAID_CLASS_COLORS[(UserListCache[i]['userClass'])]['colorStr']
-						local UserName = ClassColor..UserListCache[i]['userName']..'|r'
-
-						local UserRealm = UserListCache[i]['userRealm']
-
-						local UserVersion = UserListCache[i]['userVersion']
-						UserVersion = (UserVersion == highestVersion and '|cffceff00' or '|cffff5678')..UserVersion
-
-						local Icon = '';
-						local realm = UserRealm:gsub(' ','');
-						if (SLE.SpecialChatIcons[realm] and SLE.SpecialChatIcons[realm][UserListCache[i]['userName']]) then
-							Icon = SLE.SpecialChatIcons[realm][UserListCache[i]['userName']];
-
-						end
-						return Level..'  '..UserName.. '|cffffffff - '..UserRealm..' : '..UserVersion..Icon
-					else
-						return ' '
-					end
-				end,
-				hidden = function() return not UserListCache[i] end,
-			}
-		end
-	end
-	table.insert(E.SLEConfigs, configTable)
-end
\ No newline at end of file
diff --git a/ElvUI_SLE/dev/staticpopups.lua b/ElvUI_SLE/dev/staticpopups.lua
deleted file mode 100755
index 9fea07f..0000000
--- a/ElvUI_SLE/dev/staticpopups.lua
+++ /dev/null
@@ -1,33 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-
-E.PopupDialogs["VERSION_MISMATCH"] = {
-	text = L["Your version of ElvUI is older than recommended to use with Shadow & Light. Please, download the latest version from tukui.org."],
-	button1 = CLOSE,
-	timeout = 0,
-	whileDead = 1,
-	preferredIndex = 3,
-}
-
-E.PopupDialogs['ENHANCED_SLE_INCOMPATIBLE'] = {
-	text = L['Oh lord, you have got ElvUI Enhanced and Shadow & Light both enabled at the same time. Select an addon to disable.'],
-	OnAccept = function() DisableAddOn("ElvUI_Enhanced"); ReloadUI() end,
-	OnCancel = function() DisableAddOn("ElvUI_SLE"); ReloadUI() end,
-	button1 = 'ElvUI Enhanced',
-	button2 = 'Shadow & Light',
-	button3 = L['Disable Warning'],
-	OnAlt = function ()
-		E.global.ignoreEnhancedIncompatible = true;
-	end,
-	timeout = 0,
-	whileDead = 1,
-	hideOnEscape = false,
-}
-
-E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'] = {
-	text = gsub(L["INCOMPATIBLE_ADDON"], "ElvUI", "Shadow & Light"),
-	OnAccept = function(self) DisableAddOn(E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].addon); ReloadUI(); end,
-	OnCancel = function(self) E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].optiontable[E.PopupDialogs['SLE_INCOMPATIBLE_ADDON'].value] = false; ReloadUI(); end,
-	timeout = 0,
-	whileDead = 1,
-	hideOnEscape = false,
-}
\ No newline at end of file
diff --git a/ElvUI_SLE/dev/test.lua b/ElvUI_SLE/dev/test.lua
deleted file mode 100755
index 1489f9c..0000000
--- a/ElvUI_SLE/dev/test.lua
+++ /dev/null
@@ -1,21 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
---[[local T = E:NewModule('Test', 'AceHook-3.0', 'AceEvent-3.0');
-
-local f1, f2, b1, b2
-
-function T:Initialize()
-	f1 = CreateFrame("PlayerModel")
-	f1:SetPoint("TOPLEFT", LeftChatPanel,"TOPLEFT",0,0)
-	f1:SetHeight(E.db.chat.panelHeight)
-	f1:SetWidth(E.db.chat.panelWidth)
-
-	f1:SetFrameStrata(LeftChatPanel:GetFrameStrata())
-	f1:SetFrameLevel(LeftChatPanel:GetFrameLevel() - 2)
-	f1:SetScale(0.71)
-	f1:SetUnit("player")
-
-	f1:SetPosition(2.5,0,-0.9)
-	f1:SetFacing(0.5)
-end
-
-E:RegisterModule(T:GetName())]]
diff --git a/ElvUI_SLE/layout/layout.lua b/ElvUI_SLE/layout/layout.lua
deleted file mode 100755
index 9c52f14..0000000
--- a/ElvUI_SLE/layout/layout.lua
+++ /dev/null
@@ -1,75 +0,0 @@
-local E, L, V, P, G =  unpack(ElvUI); --Inport: Engine, Locales, ProfileDB, GlobalDB
-local LO = E:GetModule('Layout');
-local DTP = E:GetModule('DTPanels');
-
-local Point = Point
-
-local PANEL_HEIGHT = 22;
-local SIDE_BUTTON_WIDTH = 16;
-
-LO.ToggleChatPanelsSLE = LO.ToggleChatPanels
-function LO:ToggleChatPanels()
-	LO.ToggleChatPanelsSLE(self)
-
-	if E.db.chat.panelBackdrop == 'SHOWBOTH' then
-		LeftChatPanel.backdrop:Show()
-		RightChatPanel.backdrop:Show()
-
-		LeftChatDataPanel:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', SIDE_BUTTON_WIDTH, (E.PixelMode and -19 or -21)) --lower line of datapanel
-		LeftChatDataPanel:Point('TOPRIGHT', LeftChatPanel, 'BOTTOMLEFT', 16 + E.db.sle.datatext.chatleft.width, (E.PixelMode and 1 or -1)) --upper line of datapanel
-		RightChatDataPanel:Point('BOTTOMLEFT', RightChatPanel, 'BOTTOMRIGHT', - (E.db.sle.datatext.chatright.width + 16), (E.PixelMode and -19 or -21)) --lower-left corner of right datapanel
-		RightChatDataPanel:Point('TOPRIGHT', RightChatPanel, 'BOTTOMRIGHT', -SIDE_BUTTON_WIDTH, (E.PixelMode and 1 or -1))	--upper-right corner of right datapanel
-		LeftChatToggleButton:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', 0, (E.PixelMode and -19 or -21))
-		RightChatToggleButton:Point('BOTTOMRIGHT', RightChatPanel, 'BOTTOMRIGHT', 0, (E.PixelMode and -19 or -21))
-		LO:ToggleChatTabPanels()
-	elseif E.db.chat.panelBackdrop == 'HIDEBOTH' then
-		LeftChatPanel.backdrop:Hide()
-		RightChatPanel.backdrop:Hide()
-
-		LeftChatDataPanel:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', SIDE_BUTTON_WIDTH, (E.PixelMode and -19 or -21)) --lower line of datapanel
-		LeftChatDataPanel:Point('TOPRIGHT', LeftChatPanel, 'BOTTOMLEFT', 16 + E.db.sle.datatext.chatleft.width, (E.PixelMode and 1 or -1)) --upper line of datapanel
-		RightChatDataPanel:Point('BOTTOMLEFT', RightChatPanel, 'BOTTOMRIGHT', - (E.db.sle.datatext.chatright.width + 16), (E.PixelMode and -19 or -21)) --lower-left corner of right datapanel
-		RightChatDataPanel:Point('TOPRIGHT', RightChatPanel, 'BOTTOMRIGHT', -SIDE_BUTTON_WIDTH, (E.PixelMode and 1 or -1))	--upper-right corner of right datapanel
-		LeftChatToggleButton:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', 0, (E.PixelMode and -19 or -21))
-		RightChatToggleButton:Point('BOTTOMRIGHT', RightChatPanel, 'BOTTOMRIGHT', 0, (E.PixelMode and -19 or -21))
-		LO:ToggleChatTabPanels(true, true)
-	elseif E.db.chat.panelBackdrop == 'LEFT' then
-		LeftChatPanel.backdrop:Show()
-		RightChatPanel.backdrop:Hide()
-
-		LeftChatDataPanel:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', SIDE_BUTTON_WIDTH, (E.PixelMode and -19 or -21)) --lower line of datapanel
-		LeftChatDataPanel:Point('TOPRIGHT', LeftChatPanel, 'BOTTOMLEFT', 16 + E.db.sle.datatext.chatleft.width, (E.PixelMode and 1 or -1)) --upper line of datapanel
-		RightChatDataPanel:Point('BOTTOMLEFT', RightChatPanel, 'BOTTOMRIGHT', - (E.db.sle.datatext.chatright.width + 16), (E.PixelMode and -19 or -21)) --lower-left corner of right datapanel
-		RightChatDataPanel:Point('TOPRIGHT', RightChatPanel, 'BOTTOMRIGHT', -SIDE_BUTTON_WIDTH, (E.PixelMode and 1 or -1))	--upper-right corner of right datapanel
-		LeftChatToggleButton:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', 0, (E.PixelMode and -19 or -21))
-		RightChatToggleButton:Point('BOTTOMRIGHT', RightChatPanel, 'BOTTOMRIGHT', 0, (E.PixelMode and -19 or -21))
-		LO:ToggleChatTabPanels(true)
-	else
-		LeftChatPanel.backdrop:Hide()
-		RightChatPanel.backdrop:Show()
-
-		LeftChatDataPanel:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', SIDE_BUTTON_WIDTH, (E.PixelMode and -19 or -21)) --lower line of datapanel
-		LeftChatDataPanel:Point('TOPRIGHT', LeftChatPanel, 'BOTTOMLEFT', 16 + E.db.sle.datatext.chatleft.width, (E.PixelMode and 1 or -1)) --upper line of datapanel
-		RightChatDataPanel:Point('BOTTOMLEFT', RightChatPanel, 'BOTTOMRIGHT', - (E.db.sle.datatext.chatright.width + 16), (E.PixelMode and -19 or -21)) --lower-left corner of right datapanel
-		RightChatDataPanel:Point('TOPRIGHT', RightChatPanel, 'BOTTOMRIGHT', -SIDE_BUTTON_WIDTH, (E.PixelMode and 1 or -1))	--upper-right corner of right datapanel
-		LeftChatToggleButton:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', 0, (E.PixelMode and -19 or -21))
-		RightChatToggleButton:Point('BOTTOMRIGHT', RightChatPanel, 'BOTTOMRIGHT', 0, (E.PixelMode and -19 or -21))
-		LO:ToggleChatTabPanels(nil, true)
-	end
-end
-
-LO.CreateChatPanelsSLE = LO.CreateChatPanels
-function LO:CreateChatPanels()
-	LO.CreateChatPanelsSLE(self)
-
-	--Left Chat Tab
-	LeftChatTab:Point('TOPLEFT', LeftChatPanel, 'TOPLEFT', 2, -2)
-	LeftChatTab:Point('BOTTOMRIGHT', LeftChatPanel, 'TOPRIGHT', -2, -PANEL_HEIGHT)
-
-	--Preventing left chat datapanel fading
-	ChatFrame1EditBox:Hide()
-
-	--Right Chat Tab
-	RightChatTab:Point('TOPRIGHT', RightChatPanel, 'TOPRIGHT', -2, -2)
-	RightChatTab:Point('BOTTOMLEFT', RightChatPanel, 'TOPLEFT', 2, -PANEL_HEIGHT)
-end
diff --git a/ElvUI_SLE/libs/LibBabble-SubZone-3.0/Changelog-LibBabble-SubZone-3.0-5.1-release1.txt b/ElvUI_SLE/libs/LibBabble-SubZone-3.0/Changelog-LibBabble-SubZone-3.0-5.1-release1.txt
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibBabble-3.0.lua b/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibBabble-3.0.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibBabble-SubZone-3.0.lua b/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibBabble-SubZone-3.0.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibBabble-SubZone-3.0.toc b/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibBabble-SubZone-3.0.toc
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/LibStub.lua b/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/LibStub.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/LibStub.toc b/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/LibStub.toc
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test.lua b/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test2.lua b/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test2.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test3.lua b/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test3.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test4.lua b/ElvUI_SLE/libs/LibBabble-SubZone-3.0/LibStub/tests/test4.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/LibBabble-SubZone-3.0/lib.xml b/ElvUI_SLE/libs/LibBabble-SubZone-3.0/lib.xml
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/LibRangeCheck-2.0/LibRangeCheck-2.0.lua b/ElvUI_SLE/libs/LibRangeCheck-2.0/LibRangeCheck-2.0.lua
index dbc73e4..4d49153 100644
--- a/ElvUI_SLE/libs/LibRangeCheck-2.0/LibRangeCheck-2.0.lua
+++ b/ElvUI_SLE/libs/LibRangeCheck-2.0/LibRangeCheck-2.0.lua
@@ -146,7 +146,6 @@ HarmSpells["ROGUE"] = {
     2764, -- ["Throw"], -- 30 (Throwing Specialization: +5, +10)
     3018, -- ["Shoot"], -- 30
     2094, -- ["Blind"], -- 15
-    6770, -- ["Sap"], -- 10
 --    8676, -- ["Ambush"], -- 5 (Glyph of Ambush: +5)
 --    921, -- ["Pick Pocket"], -- 5 (Glyph of Pick Pocket: + 5)
     2098, -- ["Eviscerate"], -- 5
@@ -160,7 +159,6 @@ HarmSpells["SHAMAN"] = {
     403, -- ["Lightning Bolt"], -- 30 (Elemental Reach: +5)
     370, -- ["Purge"], -- 30
     8042, -- ["Earth Shock"], -- 25 (Elemental Reach: +7; Gladiator Gloves: +5)
-    57994, -- ["Wind Shear"], -- 25
     73899, -- ["Primal Strike"],. -- 5
 }

@@ -447,6 +445,9 @@ end

 -- return the spellIndex of the given spell by scanning the spellbook
 local function findSpellIdx(spellName)
+    if not spellName or spellName == "" then
+        return nil
+    end
     for i = 1, getNumSpells() do
         local spell, rank = GetSpellBookItemName(i, BOOKTYPE_SPELL)
         if spell == spellName then return i end
@@ -473,7 +474,7 @@ local function createCheckerList(spellList, itemList, interactList)
     if spellList then
         for i = 1, #spellList do
             local sid = spellList[i]
-            local name, _, _, _, _, _, _, minRange, range = GetSpellInfo(sid)
+            local name, _, _, minRange, range = GetSpellInfo(sid)
             local spellIdx = findSpellIdx(name)
             if spellIdx and range then
                 minRange = math.floor(minRange + 0.5)
diff --git a/ElvUI_SLE/libs/load_libs.xml b/ElvUI_SLE/libs/load_libs.xml
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/oUF_NecroStrike/oUF_NecroStrike.lua b/ElvUI_SLE/libs/oUF_NecroStrike/oUF_NecroStrike.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/libs/oUF_NecroStrike/oUF_NecroStrike.toc b/ElvUI_SLE/libs/oUF_NecroStrike/oUF_NecroStrike.toc
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/locales/china.lua b/ElvUI_SLE/locales/china.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/locales/english.lua b/ElvUI_SLE/locales/english.lua
old mode 100755
new mode 100644
index 0096b97..5dbe533
--- a/ElvUI_SLE/locales/english.lua
+++ b/ElvUI_SLE/locales/english.lua
@@ -5,7 +5,6 @@ local L = AceLocale:NewLocale("ElvUI", "enUS", true);
 if not L then return; end

 --General--
-L["Shadow & Light"] = true
 L["Below you can see option groups presented by Shadow & Light."] = true
 L["General options of Shadow & Light."] = true
 L["SLE_DESC"] = [=[This is an edit of ElvUI that adds some functionality to the original addon and changes some previously existed options.
@@ -16,22 +15,19 @@ L["PvP Auto Release"] = true
 L["Automatically release body when killed inside a battleground."] = true
 L["Pet autocast corners"] = true
 L["Show/hide triangles in corners of autocastable buttons."] = true
-L["Loot History"] = true
 L["Options to tweak Loot History window behaviour."] = true
 L["Auto hide"] = true
-L["Automaticaly hide Blizzard loot histroy frame when leaving the instance."] = true
-L["Sets alpha of loot histroy frame."] = true
-L["SLE_LOGIN_MSG"] = [=[You are using |cff1784d1Shadow & Light Edit|r version |cff1784d1%s%s|r for ElvUI.
+L["SLE_LOGIN_MSG"] = [=[You are using |cff1784d1Shadow & Light|r version |cff1784d1%s%s|r for ElvUI.
 If you wish to use the original ElvUI addon, disable this edit's plugin in your Addons manager.
 Have a nice day.]=]
-L["Your version of ElvUI is older than recommended to use with Shadow & Light. Please, download the latest version from tukui.org."] = true
+L['MSG_OUTDATED'] = "Your version of ElvUI is older than recommended to use with Shadow & Light. Your version is |cff1784d1%.2f|r (recommended is |cff1784d1%.2f|r). Please update your ElvUI."
+-- L["Your version of ElvUI is older than recommended to use with Shadow & Light. Please, download the latest version from tukui.org."] = true
 L["Reset All"] = true
 L["Reset all Shadow & Light options and movers to their defaults"] = true
 L["Reset these options to defaults"] = true
 L['Oh lord, you have got ElvUI Enhanced and Shadow & Light both enabled at the same time. Select an addon to disable.'] =  true

 --Install--
-L["Shadow & Light Settings"] = true
 L["You can now choose if you what to use one of authors' set of options. This will change the positioning of most elements but also change a bunch of other options within ElvUI's config."] = true
 L["SLE_Install_Text2"] = [=[This step is optional and only to be used if you are wanting to use one of our configurations.
 |cffFF0000Warning:|r Please note that the authors' may or may not use any of the layout/theme you have selected as they may not have utilized the options.]=]
@@ -132,11 +128,8 @@ L["Trove of the Thunder King:"] = true
 L["Looted"] = true
 L["Not looted"] = true
 L["SLE_AUTHOR_INFO"] = "Shadow & Light by Darth Predator & Repooc"
-L["SLE_CONTACTS"] = [=[Bug reports, suggestions and other stuff accepted via:
-- Private Massage on TukUI.org to Darth Predator or Repooc
-- AddOn's page/ticket system on curse.com
-- Forums on tukui.org, Addons/Help section
-- AddOn's repo on github.com]=]
+L["SLE_CONTACTS"] = [=[If you have suggestions or a bug report,
+please submit ticket at http://git.tukui.org/repooc/elvui-shadowandlight]=]
 L["DP_1"] = "DT Panel 1"
 L["DP_2"] = "DT Panel 2"
 L["DP_3"] = "DT Panel 3"
@@ -268,15 +261,19 @@ L["This will import All Class specific filters from this author."] = true
 L['Import All'] = true

 --Loot--
-L['Loot Announcer'] = true
-L["LOOT_DESC"] = [[This module will announce loot dropped when you open the loot window.
-This will work only if you are raid leadedr, assist or master looter or if you hold left control key while looting to manually announce the items in chat.]]
 L["Auto Announce"] = true
-L["Automatically announce in selected chat channel."] = true
-L["Loot Quality"] = true
-L["Set the minimum quality of an item to announce."] = true
-L["Announce loot to the selected channel."] = true
+L["Automaticaly hides Loot Roll Histroy frame when leaving the instance."] = true
+L["AUTOANNOUNCE_DESC"] = "When enabled, will automatically announce the loot when the loot window opens.\n\n|cffFF0000Note:|r Raid Lead, Assist, & Master Looter Only."
+L['Loot Announcer'] = true
+L["LOOT_DESC"] = "Will announce loot to specified chat channel at the selected loot threshold."
+L["LOOTH_DESC"] = "These are options for tweaking the Loot Roll History window."
 L["Loot Dropped:"] = true
+L["Loot Roll History"] = true
+L["Loot Quality"] = true
+L["Automatically announce in selected chat channel."] = true
+L["Select chat channel to announce loot to."] = true
+L["Sets the alpha of Loot Roll Histroy frame."] = true
+L["Sets the minimum loot threshold to announce."] = true

 --Marks--
 L['Options for panels providing fast access to raid markers and flares.'] = true
@@ -333,7 +330,7 @@ L['Show minimap buttons on mouseover.'] = true

 --Enhanced Vehicle Bar--
 L["Enhanced Vehicle Bar"] = true
-L["Use the enhanced vehicle bar based on work by Azilroka"] = true
+L["A different look/feel vehicle bar based on work by Azilroka"] = true

 --Raid Utility--
 L["Raid Utility"] = true
@@ -347,6 +344,7 @@ L["Flying & Ground"] = true
 L["Swimming"] = true

 --Tooltip--
+L["TTOFFSET_DESC"] = "This adds the ability to have the tooltip offset from the cursor.  Make sure to have the \"Cursor Anchor\" option enabled in ElvUI's Tooltip section to use this feature."
 L["Tooltip enhancements"] = true
 L["Faction Icon"] = true
 L["Tooltip Cursor Offset"] = true
@@ -377,7 +375,6 @@ L["Boss Mod"] = true
 L["Click to toggle iFilger's config UI"] = true

 --Unitframes--
-L["Additional unit frames options"] = true
 L["Options for customizing unit frames. Please don't change these setting when ElvUI's testing frames for bosses and arena teams are shown. That will make them invisible until retoggling."] = true
 L["Player Frame Indicators"] = true
 L["Combat Icon"] = true
diff --git a/ElvUI_SLE/locales/french.lua b/ElvUI_SLE/locales/french.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/locales/german.lua b/ElvUI_SLE/locales/german.lua
old mode 100755
new mode 100644
index 013fdd3..6bd2658
--- a/ElvUI_SLE/locales/german.lua
+++ b/ElvUI_SLE/locales/german.lua
@@ -4,7 +4,6 @@ local L = AceLocale:NewLocale("ElvUI", "deDE")
 if not L then return end

 --General--
-L["Shadow & Light"] = "Schatten & Licht"
 L["SLE_DESC"] = [=[Das ist ein Edit von ElvUI das einige Funktionen zum Original Addon hinzufügt und bereits existierende Optionen ändert.
 Der Edit ändert in keiner Hinsicht Originale Dateien so das du es ohne Probleme aus deinem Addon Manager deaktivieren kannst.]=]
 L["LFR Lockout"] = "LFR Abklingzeiten"
@@ -13,7 +12,7 @@ L["PvP Auto Release"] = "PvP Auto Freilassen"
 L["Automatically release body when killed inside a battleground."] = "Geist automatisch freilassen wenn man innerhalb eines Schlachtfeldes stirbt."
 L["Pet autocast corners"] = "Begleiter autozauber Ecken"
 L["Show/hide triangles in corners of autocastable buttons."] = "Zeige/Verstecke dreiecke in den Ecken der automatisch zaubernden Tasten."
-L["SLE_LOGIN_MSG"] = [=[Du benutzt |cff1784d1Schatten & Licht Edit|r v|cff1784d1%s%s|r für ElvUI.
+L["SLE_LOGIN_MSG"] = [=[Du benutzt |cff1784d1Schatten & Licht|r v|cff1784d1%s%s|r für ElvUI.
 Möchtest du das Original ElvUI Addon benutzen, deaktiviere das Edit Plugin aus deinem Addon Manager.
 Habt einen schönen Tag.]=]
 L["Your version of ElvUI is older than recommended to use with Shadow & Light. Please, download the latest version from tukui.org."] = "Deine Version von Elvui ist älter als die empfohlene zum benutzen mit Schatten & Licht. Bitte, downloade die letzte Version von tukui.org."
@@ -22,7 +21,6 @@ L["Reset all Shadow & Light options and movers to their defaults"] = true
 L["Reset these options to defaults"] = true

 --Install--
-L["Shadow & Light Settings"] = "Schatten & Licht Einstellungen"
 L["You can now choose if you what to use one of authors' set of options. This will change not only the positioning of some elements but also change a bunch of other options."] = "Du kannst nun eine Einstellugen eines Authors wählen. Das wird nicht nur die Postitionierung von einigen Elementen sondern auch eine reihe anderer Optionen geändert."
 L["SLE_Install_Text2"] = [=[Elv's Standart Taste muss nur angeklickt werden um eine unserer Konfigurationen rückgängig zu machen.
 |cffFF0000Warnung:|r das wird alles zurücksetzen auf das Hohe Auflösungs Layout.]=]
diff --git a/ElvUI_SLE/locales/italian.lua b/ElvUI_SLE/locales/italian.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/locales/korean.lua b/ElvUI_SLE/locales/korean.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/locales/load_locales.xml b/ElvUI_SLE/locales/load_locales.xml
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/locales/portuguese.lua b/ElvUI_SLE/locales/portuguese.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/locales/russian.lua b/ElvUI_SLE/locales/russian.lua
old mode 100755
new mode 100644
index f7042d4..da80334
--- a/ElvUI_SLE/locales/russian.lua
+++ b/ElvUI_SLE/locales/russian.lua
@@ -5,7 +5,6 @@ local L = AceLocale:NewLocale("ElvUI", "ruRU")
 if not L then return; end

 --General--
-L["Shadow & Light"] = true
 L["Below you can see option groups presented by Shadow & Light."] = "Ниже располагаются группы опций, добавленные Shadow & Light."
 L["General options of Shadow & Light."] = "Общие опции Shadow & Light."
 L["SLE_DESC"] = [=[Это редакция ElvUI добавляет некоторые новые функции к оригинальному аддону и изменяет функционал некоторых старых опций.
@@ -16,22 +15,19 @@ L["PvP Auto Release"] = "Автоматический выход из тела"
 L["Automatically release body when killed inside a battleground."] = "Автоматически выходить из тела на полях боя."
 L["Pet autocast corners"] = "Автокаст питомца"
 L["Show/hide triangles in corners of autocastable buttons."] = "Показать/скрыть треугольники в углах кнопок с автоматически применяемыми заклинаниями питомца."
-L["Loot History"] = "История добычи"
 L["Options to tweak Loot History window behaviour."] = "Опции поведения окна истории добычи в подземельях."
 L["Auto hide"] = "Автоматически скрывать"
-L["Automaticaly hide Blizzard loot histroy frame when leaving the instance."] = "Автоматически скрывать окно истории добычи Blizzard при выходе из подземелья."
-L["Sets alpha of loot histroy frame."] = "Устанавливает прозрачность окна истории добычи"
 L["SLE_LOGIN_MSG"] = [=[Вы используете редакцию ElvUI под названием |cff1784d1"Shadow & Light"|r версия |cff1784d1%s%s|r.
 Если вы хотите использовать оригинальный ElvUI, просто отключите плагин этой редакции в вашем менеджере аддонов.
 Приятной игры.]=]
-L["Your version of ElvUI is older than recommended to use with Shadow & Light. Please, download the latest version from tukui.org."] = "Ваша версия ElvUI старее, чем рекомендованная для использования с Shadow & Light. Пожалуйста, скачайте последнюю версию с tukui.org."
+L['MSG_OUTDATED'] = "Ваша версия ElvUI старее, чем рекомендованная для использования с Shadow & Light. У Вас версия |cff1784d1%.2f|r (рекомендованая |cff1784d1%.2f|r). Пожалуйста, обновите ElvUI."
+-- L["Your version of ElvUI is older than recommended to use with Shadow & Light. Please, download the latest version from tukui.org."] = "Ваша версия ElvUI старее, чем рекомендованная для использования с Shadow & Light. Пожалуйста, скачайте последнюю версию с tukui.org."
 L["Reset All"] = "Сбросить все"
 L["Reset all Shadow & Light options and movers to their defaults"] = "Сбросить все настройки и фиксаторы редакции на умолчания"
 L["Reset these options to defaults"] = "Восстановить умолчания для этих опций"
 L['Oh lord, you have got ElvUI Enhanced and Shadow & Light both enabled at the same time. Select an addon to disable.'] =  "Ох ты ж ежик! У Вас одновременно включены Shadow & Light и ElvUI Enhanced. Выберите который из них отключить."

 --Install--
-L["Shadow & Light Settings"] = "Установки Shadow & Light"
 L["You can now choose if you what to use one of authors' set of options. This will change not only the positioning of some elements but also change a bunch of other options."] = "Вы можете выбрать использование одного из набора конфигурации от авторов. Это изменит не только расположение ваших рамок и панелей, но и некоторого количества других опций."
 L["SLE_Install_Text2"] = [=[Этот шаг опционален и должен использоваться только в случае, если Вы хотите использовать одну из наших конфигураций.
 |cffFF0000Внимание:|r Пожалуйста помните, что авторы могут не использовать тему/роль, которую вы выбрали, и потому результат не всегда будет хорошим.]=]
@@ -131,10 +127,7 @@ L["Looted"] = "Получено"
 L["Not looted"] = "Не получено"
 L["SLE_AUTHOR_INFO"] = "\"Shadow & Light\" от Darth Predator и Repooc"
 L["SLE_CONTACTS"] = [=[При возникновении вопросов, предложений и прочего обращаться:
-- Личное сообщение на форуме TukUI (tukui.org), ник Darth Predator или Repooc
-- Страница/система тикетов на curse.com
-- Форумы tukui.org, раздел Addons/Help
-- Репозиторий проекта на github.com]=]
+http://git.tukui.org/repooc/elvui-shadowandlight]=]
 L["DP_1"] = "Панель 1"
 L["DP_2"] = "Панель 2"
 L["DP_3"] = "Панель 3"
@@ -271,11 +264,6 @@ L["Cross World Marker"] = "Маркер крест"
 L["Star World Marker"] = "Маркер звезда"
 L["Clear World Markers"] = "Удалить маркеры"

---Nameplates--
-L["Target Count"] = "Число выделений"
-L["Display the number of party / raid members targetting the nameplate unit."] = "Показывать количество членов группы/рейда, выбравших в цель этот юнит."
-L["Threat Text"] = "Текст угрозы"
-L["Display threat level as text on targeted, boss or mouseover nameplate."] = "Отображает текст угрозы на индикаторе цели, босса или юнита под курсором."

 --Import Section
 L["SLE_IMPORTS"] = "|cffFF0000Важно:|r Используйте импортирование фильтров осторожно, так как они удалят ваши собсвенные фильтры!\nИмпортирование классового фильтра перезапишет любые изменения, которые Вы в него вносили."
@@ -289,15 +277,20 @@ L["This will import All Class specific filters from this author."] = "Это и
 L['Import All'] = "Импорт всего"

 --Loot--
-L['Loot Announcer'] = "Оповещение о добыче"
-L["LOOT_DESC"] = [[Этот модуль будет выводить список выпавшей добычи при открытии окна добычи.
-Вывод осуществляется только если Вы лидер, помощник или ответственный за добычу или при зажатии левой клавиши control при осмотре трупа для принудительного вывода.]]
 L["Auto Announce"] = "Авто оповещение"
-L["Automatically announce in selected chat channel."] = "Автоматически выводить список добычи в выбранный канал чата"
-L["Loot Quality"] = "Качество добычи"
-L["Set the minimum quality of an item to announce."] = "Минимальное качество предмета, для вывода в чате."
-L["Announce loot to the selected channel."] = "Канал чата, для вывода сообщений."
+L["Automaticaly hides Loot Roll Histroy frame when leaving the instance."] = "Автоматически скрывать окно истории добычи Blizzard при выходе из подземелья."
+--L["AUTOANNOUNCE_DESC"] = true
+L['Loot Announcer'] = "Оповещение о добыче"
+--L["LOOT_DESC"] = [[Этот модуль будет выводить список выпавшей добычи при открытии окна добычи.
+--Вывод осуществляется только если Вы лидер, помощник или ответственный за добычу или при зажатии левой клавиши control при осмотре трупа для принудительного вывода.]]
+--L["LOOTH_DESC"] = true
 L["Loot Dropped:"] = "Список добычи:"
+L["Loot Roll History"] = "История добычи"
+L["Loot Quality"] = "Качество добычи"
+L["Automatically announce in selected chat channel."] = "Автоматически выводить список добычи в выбранный канал чата"
+L["Select chat channel to announce loot to."] = "Канал чата, для вывода сообщений."
+L["Sets the alpha of Loot Roll Histroy frame."] = "Устанавливает прозрачность окна истории добычи"
+L["Sets the minimum loot threshold to announce."] = "Минимальное качество предмета, для вывода в чате."

 --Minimap--
 L["Minimap Options"] = "Опции миникарты"
@@ -327,7 +320,7 @@ L['Show minimap buttons on mouseover.'] = "Отображать иконпри

 --Enhanced Vehicle Bar--
 L["Enhanced Vehicle Bar"] = "Улучшенный контроль машин"
-L["Use the enhanced vehicle bar based on work by Azilroka"] = "Использовать улучшенную панель управления средствами передвижения, основанную на коде Azilroka"
+L["A different look/feel vehicle bar based on work by Azilroka"] = "Использовать улучшенную панель управления средствами передвижения, основанную на коде Azilroka"

 --Mover groups
 L["S&L: All"] = "S&L: Все"
@@ -335,6 +328,12 @@ L["S&L: Datatexts"] = "S&L: Инфо-тексты"
 L["S&L: Backgrounds"] = "S&L: Фоновые фреймы"
 L["S&L: Misc"] = "S&L: Прочее"

+--Nameplates--
+L["Target Count"] = "Число выделений"
+L["Display the number of party / raid members targetting the nameplate unit."] = "Показывать количество членов группы/рейда, выбравших в цель этот юнит."
+L["Threat Text"] = "Текст угрозы"
+L["Display threat level as text on targeted, boss or mouseover nameplate."] = "Отображает текст угрозы на индикаторе цели, босса или юнита под курсором."
+
 --Raid Utility--
 L["Raid Utility"] = "Управление рейдом"

@@ -377,7 +376,6 @@ L["Boss Mod"] = "Босс мод"
 L["Click to toggle iFilger's config UI"] = "Нажмите для отображения настроек iFilger"

 --Unitframes--
-L["Additional unit frames options"] = "Дополнительные опции рамок юнитов"
 L["Options for customizing unit frames. Please don't change these setting when ElvUI's testing frames for bosses and arena teams are shown. That will make them invisible until retoggling."] = "Опции для дополнительной настройки рамок юнитов. Пожалуйста, не изменяйте эти настройки в то же время, кода включен тестовый режим рамок боссов и арены в ElvUI. Это сделает их невидимыми до повторного включения."
 L["Player Frame Indicators"] = "Индикаторы игрока"
 L["Combat Icon"] = "Иконка боя"
diff --git a/ElvUI_SLE/locales/spanish.lua b/ElvUI_SLE/locales/spanish.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/locales/taiwan.lua b/ElvUI_SLE/locales/taiwan.lua
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/media/fonts/Accidental_Presidency.ttf b/ElvUI_SLE/media/fonts/Accidental_Presidency.ttf
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/media/fonts/Buffet_Script.ttf b/ElvUI_SLE/media/fonts/Buffet_Script.ttf
new file mode 100644
index 0000000..c16e8e4
Binary files /dev/null and b/ElvUI_SLE/media/fonts/Buffet_Script.ttf differ
diff --git a/ElvUI_SLE/media/fonts/DORISBR.TTF b/ElvUI_SLE/media/fonts/DORISBR.TTF
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/media/fonts/Durandal_Light.ttf b/ElvUI_SLE/media/fonts/Durandal_Light.ttf
new file mode 100644
index 0000000..3e3661d
Binary files /dev/null and b/ElvUI_SLE/media/fonts/Durandal_Light.ttf differ
diff --git a/ElvUI_SLE/media/fonts/Intro_Black.ttf b/ElvUI_SLE/media/fonts/Intro_Black.ttf
new file mode 100644
index 0000000..c72b52f
Binary files /dev/null and b/ElvUI_SLE/media/fonts/Intro_Black.ttf differ
diff --git a/ElvUI_SLE/media/fonts/KGSmallTownSouthernGirl.ttf b/ElvUI_SLE/media/fonts/KGSmallTownSouthernGirl.ttf
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/media/fonts/Rubino_Plain.ttf b/ElvUI_SLE/media/fonts/Rubino_Plain.ttf
new file mode 100644
index 0000000..5d26c0d
Binary files /dev/null and b/ElvUI_SLE/media/fonts/Rubino_Plain.ttf differ
diff --git a/ElvUI_SLE/media/fonts/Trafaret.ttf b/ElvUI_SLE/media/fonts/Trafaret.ttf
new file mode 100644
index 0000000..c975c81
Binary files /dev/null and b/ElvUI_SLE/media/fonts/Trafaret.ttf differ
diff --git a/ElvUI_SLE/media/fonts/Univers.ttf b/ElvUI_SLE/media/fonts/Univers.ttf
new file mode 100644
index 0000000..f0b5cb5
Binary files /dev/null and b/ElvUI_SLE/media/fonts/Univers.ttf differ
diff --git a/ElvUI_SLE/media/fonts/cyrillic_old.ttf b/ElvUI_SLE/media/fonts/cyrillic_old.ttf
new file mode 100644
index 0000000..2a7d1f8
Binary files /dev/null and b/ElvUI_SLE/media/fonts/cyrillic_old.ttf differ
diff --git a/ElvUI_SLE/media/load_media.xml b/ElvUI_SLE/media/load_media.xml
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/media/sharedmedia.lua b/ElvUI_SLE/media/sharedmedia.lua
old mode 100755
new mode 100644
index 0263ebf..2879bc0
--- a/ElvUI_SLE/media/sharedmedia.lua
+++ b/ElvUI_SLE/media/sharedmedia.lua
@@ -2,8 +2,19 @@ local LSM = LibStub("LibSharedMedia-3.0")

 if LSM == nil then return end

+--Repooc's additions
 LSM:Register("font", "Accidental Presidency", [[Interface\AddOns\ElvUI_SLE\media\fonts\Accidental_Presidency.ttf]])
 LSM:Register("font", "Doris PP", [[Interface\AddOns\ElvUI_SLE\media\fonts\DORISBR.TTF]])
 LSM:Register("font", "KGSmallTownSouthernGirl", [[Interface\AddOns\ElvUI_SLE\media\fonts\KGSmallTownSouthernGirl.ttf]])
 LSM:Register("statusbar", "Polished Wood", [[Interface\AddOns\ElvUI_SLE\media\textures\bar15]])
-LSM:Register("sound", "Sheep", [[Interface\AddOns\ElvUI_SLE\media\sounds\sheep.mp3]])
\ No newline at end of file
+LSM:Register("sound", "Sheep", [[Interface\AddOns\ElvUI_SLE\media\sounds\sheep.mp3]])
+
+--Darth's additions
+LSM:Register("font", "Buffet Script", [[Interface\AddOns\ElvUI_SLE\media\fonts\Buffet_Script.ttf]])
+LSM:Register("font", "Old Cyrillic", [[Interface\AddOns\ElvUI_SLE\media\fonts\cyrillic_old.ttf]], LSM.LOCALE_BIT_ruRU + LSM.LOCALE_BIT_western)
+LSM:Register("font", "Durandal Light", [[Interface\AddOns\ElvUI_SLE\media\fonts\Durandal_Light.ttf]], LSM.LOCALE_BIT_ruRU + LSM.LOCALE_BIT_western)
+LSM:Register("font", "Trafaret", [[Interface\AddOns\ElvUI_SLE\media\fonts\Trafaret.ttf]], LSM.LOCALE_BIT_ruRU + LSM.LOCALE_BIT_western)
+LSM:Register("font", "Intro Black", [[Interface\AddOns\ElvUI_SLE\media\fonts\Intro_Black.ttf]], LSM.LOCALE_BIT_ruRU + LSM.LOCALE_BIT_western)
+LSM:Register("font", "Univers", [[Interface\AddOns\ElvUI_SLE\media\fonts\Univers.ttf]], LSM.LOCALE_BIT_ruRU + LSM.LOCALE_BIT_western)
+LSM:Register("font", "Rubino", [[Interface\AddOns\ElvUI_SLE\media\fonts\Rubino_Plain.ttf]], LSM.LOCALE_BIT_ruRU + LSM.LOCALE_BIT_western)
+LSM:Register("sound", "It's The Gri...", [[Interface\AddOns\ElvUI_SLE\media\sounds\TheGrCorpus.mp3]])
\ No newline at end of file
diff --git a/ElvUI_SLE/media/sounds/TheGrCorpus.mp3 b/ElvUI_SLE/media/sounds/TheGrCorpus.mp3
new file mode 100644
index 0000000..d1b25de
Binary files /dev/null and b/ElvUI_SLE/media/sounds/TheGrCorpus.mp3 differ
diff --git a/ElvUI_SLE/media/sounds/sheep.mp3 b/ElvUI_SLE/media/sounds/sheep.mp3
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/media/textures/Chat_Friend.blp b/ElvUI_SLE/media/textures/Chat_Friend.blp
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/media/textures/Chat_RPG.blp b/ElvUI_SLE/media/textures/Chat_RPG.blp
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/media/textures/Chat_Test.blp b/ElvUI_SLE/media/textures/Chat_Test.blp
old mode 100755
new mode 100644
diff --git a/ElvUI_SLE/media/textures/Config_SL.blp b/ElvUI_SLE/media/textures/Config_SL.blp
deleted file mode 100644
index 6697b1e..0000000
Binary files a/ElvUI_SLE/media/textures/Config_SL.blp and /dev/null differ
diff --git a/ElvUI_SLE/media/textures/Gradation.tga b/ElvUI_SLE/media/textures/Gradation.tga
new file mode 100644
index 0000000..422ce5a
Binary files /dev/null and b/ElvUI_SLE/media/textures/Gradation.tga differ
diff --git a/ElvUI_SLE/media/textures/SLE_Banner.blp b/ElvUI_SLE/media/textures/SLE_Banner.blp
new file mode 100644
index 0000000..a3d8911
Binary files /dev/null and b/ElvUI_SLE/media/textures/SLE_Banner.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Alliance.blp b/ElvUI_SLE/media/textures/crests/Alliance.blp
new file mode 100644
index 0000000..1c11404
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Alliance.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/BloodElf.blp b/ElvUI_SLE/media/textures/crests/BloodElf.blp
new file mode 100644
index 0000000..69ee2e1
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/BloodElf.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Draenei.blp b/ElvUI_SLE/media/textures/crests/Draenei.blp
new file mode 100644
index 0000000..706e657
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Draenei.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Dwarf.blp b/ElvUI_SLE/media/textures/crests/Dwarf.blp
new file mode 100644
index 0000000..8dc8399
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Dwarf.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Gnome.blp b/ElvUI_SLE/media/textures/crests/Gnome.blp
new file mode 100644
index 0000000..e6723d6
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Gnome.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Goblin.blp b/ElvUI_SLE/media/textures/crests/Goblin.blp
new file mode 100644
index 0000000..0c03cc8
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Goblin.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Horde.blp b/ElvUI_SLE/media/textures/crests/Horde.blp
new file mode 100644
index 0000000..75e3d53
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Horde.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Human.blp b/ElvUI_SLE/media/textures/crests/Human.blp
new file mode 100644
index 0000000..4a6fa38
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Human.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Neutral.blp b/ElvUI_SLE/media/textures/crests/Neutral.blp
new file mode 100644
index 0000000..862b825
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Neutral.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/NightElf.blp b/ElvUI_SLE/media/textures/crests/NightElf.blp
new file mode 100644
index 0000000..d7cd864
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/NightElf.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Orc.blp b/ElvUI_SLE/media/textures/crests/Orc.blp
new file mode 100644
index 0000000..c1798cf
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Orc.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Pandaren.blp b/ElvUI_SLE/media/textures/crests/Pandaren.blp
new file mode 100644
index 0000000..862b825
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Pandaren.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Scourge.blp b/ElvUI_SLE/media/textures/crests/Scourge.blp
new file mode 100644
index 0000000..c4de4fd
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Scourge.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Tauren.blp b/ElvUI_SLE/media/textures/crests/Tauren.blp
new file mode 100644
index 0000000..9aa5c79
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Tauren.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Troll.blp b/ElvUI_SLE/media/textures/crests/Troll.blp
new file mode 100644
index 0000000..8aa216b
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Troll.blp differ
diff --git a/ElvUI_SLE/media/textures/crests/Worgen.blp b/ElvUI_SLE/media/textures/crests/Worgen.blp
new file mode 100644
index 0000000..9fa3c3c
Binary files /dev/null and b/ElvUI_SLE/media/textures/crests/Worgen.blp differ
diff --git a/ElvUI_SLE/modules/auras.lua b/ElvUI_SLE/modules/auras.lua
new file mode 100644
index 0000000..26de7b9
--- /dev/null
+++ b/ElvUI_SLE/modules/auras.lua
@@ -0,0 +1,41 @@
+local E, L, V, P, G = unpack(ElvUI);
+local AT = E:GetModule('SLE_AuraTimers');
+local A = E:GetModule('Auras');
+
+function AT:UpdateAura(button, index)
+	if not E.db.sle.auras.enable then return end
+	local isDebuff
+	local filter = button:GetParent():GetAttribute('filter')
+	local unit = button:GetParent():GetAttribute("unit")
+	local name, _, _, _, dtype, duration, expiration = UnitAura(unit, index, filter)
+
+	if (name) then
+		if UnitBuff('player', name) then
+			isDebuff = false
+		elseif UnitDebuff('player', name) then
+			isDebuff = true
+		end
+
+		if isDebuff == false and E.db.sle.auras.buffs.hideTimer then
+			button.time:Hide()
+		elseif isDebuff == false then
+			button.time:Show()
+		end
+
+		if isDebuff == true and E.db.sle.auras.debuffs.hideTimer then
+			button.time:Hide()
+		elseif isDebuff == true then
+			button.time:Show()
+		end
+	end
+end
+
+function AT:UpdateTempEnchant(button, index)
+	--Might do tempenchant stuff later
+end
+
+function AT:Initialize()
+	if E.private.auras.enable ~= true then return end
+	hooksecurefunc(A, 'UpdateAura', AT.UpdateAura)
+	--hooksecurefunc(A, 'UpdateTempEnchant', AT.UpdateTempEnchant)
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/autorelease.lua b/ElvUI_SLE/modules/autorelease.lua
new file mode 100644
index 0000000..ce67e0f
--- /dev/null
+++ b/ElvUI_SLE/modules/autorelease.lua
@@ -0,0 +1,47 @@
+local E, L, V, P, G = unpack(ElvUI);
+local AR = E:GetModule('SLE_AutoRelease')
+local myclass = E.myclass
+local IsInInstance = IsInInstance
+local soulstone = GetSpellInfo(20707)
+local UnitLevel = UnitLevel
+local GetSpellCooldown = GetSpellCooldown
+local level = 0
+local cd
+local GetTime = GetTime
+local RepopMe = RepopMe
+
+local function Check(level, cd)
+	if ((myclass ~= "SHAMAN") and not (soulstone and UnitBuff("player", soulstone))) then
+		RepopMe()
+	elseif myclass == "SHAMAN" and (level < 32 or cd > 0) then
+		RepopMe()
+	end
+end
+
+local function Releasing()
+	local inInstance, instanceType = IsInInstance()
+	if myclass == "SHAMAN" then
+		level = UnitLevel("player")
+		local start, duration = GetSpellCooldown(20608)
+		if duration == nil then duration = 0 end
+		cd = (start + duration - GetTime())
+	end
+	if (inInstance and (instanceType == "pvp")) then
+		if E.db.sle.pvpautorelease then Check(level, cd) end
+	end
+
+	-- auto resurrection for world PvP area...when active
+	if E.db.sle.pvpautorelease then
+		for index = 1, GetNumWorldPVPAreas() do
+			local _, localizedName, isActive = GetWorldPVPAreaInfo(index)
+			if (GetRealZoneText() == localizedName and isActive) then Check(level, cd) end
+		end
+	end
+end
+
+function AR:Initialize()
+	ShowUIPanel(GhostFrame)
+	E:CreateMover(GhostFrame, "GhostFrameMover", L["Ghost Frame"], nil, nil, nil, "ALL,S&L,S&L MISC")
+	HideUIPanel(GhostFrame)
+	self:RegisterEvent("PLAYER_DEAD", Releasing);
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/autorelease/autorelease.lua b/ElvUI_SLE/modules/autorelease/autorelease.lua
deleted file mode 100755
index dad7b69..0000000
--- a/ElvUI_SLE/modules/autorelease/autorelease.lua
+++ /dev/null
@@ -1,51 +0,0 @@
---Credit to Repooc.
---Remade his auto release featule to module which allows profile setting of the function not the global one.
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local AR = E:NewModule('AutoRelease', 'AceHook-3.0', 'AceEvent-3.0');
-local myclass = E.myclass
-local IsInInstance = IsInInstance
-local soulstone = GetSpellInfo(20707)
-local UnitLevel = UnitLevel
-local GetSpellCooldown = GetSpellCooldown
-local level = 0
-local cd
-local GetTime = GetTime
-local RepopMe = RepopMe
-
-local function Check(level, cd)
-	if ((myclass ~= "SHAMAN") and not (soulstone and UnitBuff("player", soulstone))) then
-		RepopMe()
-	elseif myclass == "SHAMAN" and (level < 32 or cd > 0) then
-		RepopMe()
-	end
-end
-
-function AR:Releasing()
-	local inInstance, instanceType = IsInInstance()
-	if myclass == "SHAMAN" then
-		level = UnitLevel("player")
-		local start, duration = GetSpellCooldown(20608)
-		if duration == nil then duration = 0 end
-		cd = (start + duration - GetTime())
-	end
-	if (inInstance and (instanceType == "pvp")) then
-		if E.db.sle.pvpautorelease then Check(level, cd) end
-	end
-
-	-- auto resurrection for world PvP area...when active
-	if E.db.sle.pvpautorelease then
-		for index = 1, GetNumWorldPVPAreas() do
-			local _, localizedName, isActive = GetWorldPVPAreaInfo(index)
-			if (GetRealZoneText() == localizedName and isActive) then Check(level, cd) end
-		end
-	end
-end
-
-function AR:Initialize()
-	ShowUIPanel(GhostFrame)
-	E:CreateMover(GhostFrame, "GhostFrameMover", L["Ghost Frame"], nil, nil, nil, "ALL,S&L,S&L MISC")
-	HideUIPanel(GhostFrame)
-	self:RegisterEvent("PLAYER_DEAD", "Releasing");
-end
-
-E:RegisterModule(AR:GetName())
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/autorelease/load_autorelease.xml b/ElvUI_SLE/modules/autorelease/load_autorelease.xml
deleted file mode 100755
index 8184b08..0000000
--- a/ElvUI_SLE/modules/autorelease/load_autorelease.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='autorelease.lua'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/autorelease/options.lua b/ElvUI_SLE/modules/autorelease/options.lua
deleted file mode 100755
index 2c0bbd6..0000000
--- a/ElvUI_SLE/modules/autorelease/options.lua
+++ /dev/null
@@ -1,30 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local function configTable()
---Main options group
-E.Options.args.sle.args.options.args.general.args.pvpautorelease = {
-	type = "group",
-    name = L["PvP Auto Release"],
-    order = 5,
-	args = {
-		header = {
-			order = 1,
-			type = "header",
-			name = L["PvP Auto Release"],
-		},
-		intro = {
-			order = 2,
-			type = "description",
-			name = L["Automatically release body when killed inside a battleground."],
-		},
-		enable = {
-			order = 3,
-			type = "toggle",
-			name = L["Enable"],
-			get = function(info) return E.db.sle.pvpautorelease end,
-			set = function(info, value) E.db.sle.pvpautorelease = value; end
-		},
-	},
-}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/backgrounds.lua b/ElvUI_SLE/modules/backgrounds.lua
new file mode 100644
index 0000000..938cc62
--- /dev/null
+++ b/ElvUI_SLE/modules/backgrounds.lua
@@ -0,0 +1,116 @@
+local E, L, V, P, G = unpack(ElvUI);
+local BG = E:GetModule('SLE_BackGrounds');
+
+local BGb, BGl, BGr, BGa, Fr
+
+--Frames setup
+local function CreateFrames()
+	BGb = CreateFrame('Frame', "BottomBG", E.UIParent);
+	BGl = CreateFrame('Frame', "LeftBG", E.UIParent);
+	BGr = CreateFrame('Frame', "RightBG", E.UIParent);
+	BGa = CreateFrame('Frame', "ActionBG", E.UIParent);
+
+	Fr = {
+		BottomBG = {BGb,"bottom"},
+		LeftBG = {BGl,"left"},
+		RightBG = {BGr,"right"},
+		ActionBG = {BGa,"action"},
+	}
+
+	for _,v in pairs(Fr) do
+		v[1]:SetFrameLevel(v[1]:GetFrameLevel() - 1)
+		v[1]:SetScript("OnShow", function() v[1]:SetFrameStrata('BACKGROUND') end)
+		v[1].tex = v[1]:CreateTexture(nil, 'OVERLAY')
+		v[1]:Hide()
+	end
+
+	--Make EnableMouse and option b/c of drunk russian
+	BGb:EnableMouse(true) --Maybe add an option to actually allow change this click catching?
+	BGa:EnableMouse(true)
+	BGb.tex:SetAlpha(0.5)
+
+	--Also the problem. As long as bottom bg can be transparent it's no good in keeping fixed transparency for the texture.
+	--Maybe add an option to change this from using Elv's trnsparency to additional user-set one?
+	BGl.tex:SetAlpha(E.db.general.backdropfadecolor.a - 0.7 > 0 and E.db.general.backdropfadecolor.a - 0.7 or 0.5)
+	BGr.tex:SetAlpha(E.db.general.backdropfadecolor.a - 0.7 > 0 and E.db.general.backdropfadecolor.a - 0.7 or 0.5)
+	BGa.tex:SetAlpha(E.db.general.backdropfadecolor.a - 0.7 > 0 and E.db.general.backdropfadecolor.a - 0.7 or 0.5)
+end
+
+--Frames Size
+local function FramesSize()
+	if not BGb then return end
+	local db = E.db.sle.backgrounds
+	for _,v in pairs(Fr) do
+		v[1]:SetSize(db[v[2]].width, db[v[2]].height)
+	end
+end
+
+--Frames points
+local function FramesPositions()
+	if not BGb then return end
+	BGb:Point("BOTTOM", E.UIParent, "BOTTOM", 0, 21);
+	BGl:Point("BOTTOMRIGHT", E.UIParent, "BOTTOM", -(E.screenwidth/4 + 32)/2 - 1, 21);
+	BGr:Point("BOTTOMLEFT", E.UIParent, "BOTTOM", (E.screenwidth/4 + 32)/2 + 1, 21);
+	BGa:Point("BOTTOM", E.UIParent, "BOTTOM", 0, E.screenheight/6 + 9);
+end
+
+--Updating textures
+local function UpdateTex()
+	if not BGb then return end
+	local db = E.db.sle.backgrounds
+	for _,v in pairs(Fr) do
+		v[1].tex:Point('TOPLEFT', v[1], 'TOPLEFT', 2, -2)
+		v[1].tex:Point('BOTTOMRIGHT', v[1], 'BOTTOMRIGHT', -2, 2)
+		v[1].tex:SetTexture(db[v[2]].texture)
+	end
+end
+
+--Visibility / Enable check
+function BG:FramesVisibility()
+	if not BGb then return end
+	local db = E.db.sle.backgrounds
+	for _,v in pairs(Fr) do
+		if db[v[2]].enabled then
+			v[1]:Show()
+		else
+			v[1]:Hide()
+		end
+	end
+end
+
+function BG:UpdateFrames()
+	if not BGb then return end
+	local db = E.db.sle.backgrounds
+	for _,v in pairs(Fr) do
+		v[1]:SetTemplate(db[v[2]].template, true)
+		v[1]:SetAlpha(db[v[2]].alpha)
+	end
+	FramesSize()
+	BG:FramesVisibility()
+    UpdateTex()
+end
+
+function BG:RegisterHide()
+	if not BGb then return end
+	local db = E.db.sle.backgrounds
+	for k,v in pairs(Fr) do
+		if db[v[2]].pethide then
+			E.FrameLocks[k] = true
+		else
+			E.FrameLocks[k] = nil
+		end
+	end
+end
+
+function BG:Initialize()
+	if not E.private.sle.backgrounds then return end
+	CreateFrames()
+	FramesPositions()
+	BG:UpdateFrames()
+	BG:RegisterHide()
+
+	E:CreateMover(BottomBG, "BottomBG_Mover", L["Bottom BG"], nil, nil, nil, "S&L,S&L BG")
+	E:CreateMover(LeftBG, "LeftBG_Mover", L["Left BG"], nil, nil, nil, "S&L,S&L BG")
+	E:CreateMover(RightBG, "RightBG_Mover", L["Right BG"], nil, nil, nil, "S&L,S&L BG")
+	E:CreateMover(ActionBG, "ActionBG_Mover", L["Actionbar BG"], nil, nil, nil, "S&L,S&L BG")
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/backgrounds/backgrounds.lua b/ElvUI_SLE/modules/backgrounds/backgrounds.lua
deleted file mode 100755
index e159367..0000000
--- a/ElvUI_SLE/modules/backgrounds/backgrounds.lua
+++ /dev/null
@@ -1,108 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local BG = E:NewModule('BackGrounds', 'AceHook-3.0', 'AceEvent-3.0');
-
-local BGb = CreateFrame('Frame', "BottomBG", E.UIParent);
-local BGl = CreateFrame('Frame', "LeftBG", E.UIParent);
-local BGr = CreateFrame('Frame', "RightBG", E.UIParent);
-local BGa = CreateFrame('Frame', "ActionBG", E.UIParent);
-
-local Fr = {
-	BottomBG = {BGb,"bottom"},
-	LeftBG = {BGl,"left"},
-	RightBG = {BGr,"right"},
-	ActionBG = {BGa,"action"},
-}
-
---Frames setup
-function BG:FramesCreate()
-	for _,v in pairs(Fr) do
-		v[1]:SetFrameLevel(v[1]:GetFrameLevel() - 1)
-		v[1]:SetScript("OnShow", function() v[1]:SetFrameStrata('BACKGROUND') end)
-		v[1].tex = v[1]:CreateTexture(nil, 'OVERLAY')
-		v[1]:Hide()
-	end
-
-	BGb:EnableMouse(true) --Maybe add an option to actually allow change this click catching?
-	BGb.tex:SetAlpha(0.5)
-	--Also the problem. As long as bottom bg can be transparent it's no good in keeping fixed transparency for the texture.
-	--Maybe add an option to change this from using Elv's trnsparency to additional user-set one?
-	BGl.tex:SetAlpha(E.db.general.backdropfadecolor.a - 0.7 > 0 and E.db.general.backdropfadecolor.a - 0.7 or 0.5)
-
-	BGr.tex:SetAlpha(E.db.general.backdropfadecolor.a - 0.7 > 0 and E.db.general.backdropfadecolor.a - 0.7 or 0.5)
-
-	BGa:EnableMouse(true)
-	BGa.tex:SetAlpha(E.db.general.backdropfadecolor.a - 0.7 > 0 and E.db.general.backdropfadecolor.a - 0.7 or 0.5)
-end
-
---Frames Size
-function BG:FramesSize()
-	local db = E.db.sle.backgrounds
-	for _,v in pairs(Fr) do
-		v[1]:SetSize(db[v[2]].width, db[v[2]].height)
-	end
-end
-
---Frames points
-function BG:FramesPositions()
-	BGb:Point("BOTTOM", E.UIParent, "BOTTOM", 0, 21);
-	BGl:Point("BOTTOMRIGHT", E.UIParent, "BOTTOM", -(E.screenwidth/4 + 32)/2 - 1, 21);
-	BGr:Point("BOTTOMLEFT", E.UIParent, "BOTTOM", (E.screenwidth/4 + 32)/2 + 1, 21);
-	BGa:Point("BOTTOM", E.UIParent, "BOTTOM", 0, E.screenheight/6 + 9);
-end
-
---Updating textures
-function BG:UpdateTex()
-	local db = E.db.sle.backgrounds
-	for _,v in pairs(Fr) do
-		v[1].tex:Point('TOPLEFT', v[1], 'TOPLEFT', 2, -2)
-		v[1].tex:Point('BOTTOMRIGHT', v[1], 'BOTTOMRIGHT', -2, 2)
-		v[1].tex:SetTexture(db[v[2]].texture)
-	end
-end
-
---Visibility / Enable check
-function BG:FramesVisibility()
-	local db = E.db.sle.backgrounds
-	for _,v in pairs(Fr) do
-		if db[v[2]].enabled then
-			v[1]:Show()
-		else
-			v[1]:Hide()
-		end
-	end
-end
-
-function BG:UpdateFrames()
-	local db = E.db.sle.backgrounds
-	for _,v in pairs(Fr) do
-				v[1]:SetTemplate(db[v[2]].template, true)
-	end
-	BG:FramesSize()
-	BG:FramesVisibility()
-    BG:UpdateTex()
-end
-
-function BG:RegisterHide()
-	local db = E.db.sle.backgrounds
-	for k,v in pairs(Fr) do
-		if db[v[2]].pethide then
-			E.FrameLocks[k] = true
-		else
-			E.FrameLocks[k] = nil
-		end
-	end
-end
-
-function BG:Initialize()
-	BG:FramesCreate()
-	BG:FramesPositions()
-	BG:UpdateFrames()
-	BG:RegisterHide()
-
-	E:CreateMover(BottomBG, "BottomBG_Mover", L["Bottom BG"], nil, nil, nil, "S&L,S&L BG")
-	E:CreateMover(LeftBG, "LeftBG_Mover", L["Left BG"], nil, nil, nil, "S&L,S&L BG")
-	E:CreateMover(RightBG, "RightBG_Mover", L["Right BG"], nil, nil, nil, "S&L,S&L BG")
-	E:CreateMover(ActionBG, "ActionBG_Mover", L["Actionbar BG"], nil, nil, nil, "S&L,S&L BG")
-end
-
-E:RegisterModule(BG:GetName())
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/backgrounds/load_backgrounds.xml b/ElvUI_SLE/modules/backgrounds/load_backgrounds.xml
deleted file mode 100755
index 2251ed2..0000000
--- a/ElvUI_SLE/modules/backgrounds/load_backgrounds.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='backgrounds.lua'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/backgrounds/options.lua b/ElvUI_SLE/modules/backgrounds/options.lua
deleted file mode 100755
index e79896c..0000000
--- a/ElvUI_SLE/modules/backgrounds/options.lua
+++ /dev/null
@@ -1,147 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local BG = E:GetModule('BackGrounds')
-local function configTable()
-local drop = {
-	--Group name = {short name, order}
-	["Bottom BG"] = {"bottom", 1},
-	["Left BG"] = {"left", 2},
-	["Right BG"] = {"right", 3},
-	["Actionbar BG"] = {"action", 4},
-}
-
---Options for additional background frames. Main group
-E.Options.args.sle.args.datatext.args.backgrounds = {
-	type = "group",
-	name = L["Backgrounds"],
-	order = 3,
-	args = {
-		header = {
-			order = 1,
-			type = "header",
-			name = L["Additional Background Panels"],
-		},
-		intro = {
-			order = 2,
-			type = "description",
-			name = L["BG_DESC"]
-		},
-		Reset = {
-			order = 3,
-			type = 'execute',
-			name = L['Restore Defaults'],
-			desc = L["Reset these options to defaults"],
-			func = function() E:GetModule('SLE'):Reset(nil, nil, nil, true) end,
-		},
-		spacerreset = {
-			order = 4,
-			type = 'description',
-			name = "",
-		},
-		bottom_enabled = {
-			order = 5,
-			type = "toggle",
-			name = L["Bottom BG"],
-			desc = L["Show/Hide this frame."],
-			get = function(info) return E.db.sle.backgrounds.bottom.enabled end,
-			set = function(info, value) E.db.sle.backgrounds.bottom.enabled = value; BG:FramesVisibility() end
-		},
-		left_enabled = {
-			order = 6,
-			type = "toggle",
-			name = L["Left BG"],
-			desc = L["Show/Hide this frame."],
-			get = function(info) return E.db.sle.backgrounds.left.enabled end,
-			set = function(info, value) E.db.sle.backgrounds.left.enabled = value; BG:FramesVisibility() end
-		},
-		spacer = {
-			order = 7,
-			type = "description",
-			name = "",
-		},
-		right_enabled = {
-			order = 8,
-			type = "toggle",
-			name = L["Right BG"],
-			desc = L["Show/Hide this frame."],
-			get = function(info) return E.db.sle.backgrounds.right.enabled end,
-			set = function(info, value) E.db.sle.backgrounds.right.enabled = value; BG:FramesVisibility() end
-		},
-		action_enabled = {
-			order = 9,
-			type = "toggle",
-			name = L["Actionbar BG"],
-			desc = L["Show/Hide this frame."],
-			get = function(info) return E.db.sle.backgrounds.action.enabled end,
-			set = function(info, value) E.db.sle.backgrounds.action.enabled = value; BG:FramesVisibility() end
-		},
-	}
-}
-
---Subgroups
-for k,v in pairs(drop) do
-	E.Options.args.sle.args.datatext.args.backgrounds.args[v[1]] = {
-		type = "group",
-		name = L[k],
-		order = v[2],
-		get = function(info) return E.db.sle.backgrounds[v[1]][ info[#info] ] end,
-		disabled = function() return not E.db.sle.backgrounds[v[1]].enabled end,
-		args = {
-			width = { --setting width (obviously)
-				order = 1,
-				type = "range",
-				name = L['Width'],
-				desc = L["Sets width of the frame"],
-				min = 50, max = E.screenwidth, step = 1,
-				set = function(info, value) E.db.sle.backgrounds[v[1]].width = value; BG:FramesSize() end,
-			},
-			height = {
-				order = 2,
-				type = "range",
-				name = L['Height'],
-				desc = L["Sets height of the frame"],
-				min = 30, max = E.screenheight/2, step = 1,
-				set = function(info, value) E.db.sle.backgrounds[v[1]].height = value; BG:FramesSize() end,
-			},
-			spacer = { --Empty slot for making sliders move to next line
-				order = 3,
-				type = "description",
-				name = "",
-			},
-			--Setting custom texture for those who like it
-			texture = {
-				order = 6,
-				type = 'input',
-				width = 'full',
-				name = L["Texture"],
-				desc = L["Set the texture to use in this frame.  Requirements are the same as the chat textures."],
-				set = function(info, value)
-					E.db.sle.backgrounds[v[1]].texture = value
-					E:UpdateMedia()
-					BG:UpdateTex()
-				end,
-			},
-			template = {
-				order = 7,
-				type = "select",
-				name = L["Backdrop Template"],
-				desc = L["Change the template used for this backdrop."],
-				get = function(info) return E.db.sle.backgrounds[v[1]].template end,
-				set = function(info, value) E.db.sle.backgrounds[v[1]].template = value; BG:UpdateFrames() end,
-				values = {
-					['Default'] = L["Default"],
-					['Transparent'] = L["Transparent"],
-				},
-			},
-			pethide = {
-				order = 8,
-				type = "toggle",
-				name = L["Hide in Pet Batlle"],
-				desc = L["Show/Hide this frame during Pet Battles."],
-				set = function(info, value) E.db.sle.backgrounds[v[1]].pethide = value; BG:RegisterHide() end
-			},
-		},
-	}
-end
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/baginfo.lua b/ElvUI_SLE/modules/baginfo.lua
new file mode 100644
index 0000000..e46bf1a
--- /dev/null
+++ b/ElvUI_SLE/modules/baginfo.lua
@@ -0,0 +1,139 @@
+local E, L, V, P, G = unpack(ElvUI);
+local BI = E:GetModule('SLE_BagInfo')
+local B = E:GetModule('Bags')
+
+local byte, format = string.byte, string.format
+local tinsert, twipe = table.insert, table.wipe
+
+local updateTimer
+local containers = {}
+local infoArray = {}
+local equipmentMap = {}
+
+local function Utf8Sub(str, start, numChars)
+	local currentIndex = start
+	while numChars > 0 and currentIndex <= #str do
+		local char = byte(str, currentIndex)
+
+		if char > 240 then
+			currentIndex = currentIndex + 4
+		elseif char > 225 then
+			currentIndex = currentIndex + 3
+		elseif char > 192 then
+			currentIndex = currentIndex + 2
+		else
+			currentIndex = currentIndex + 1
+		end
+
+		numChars = numChars -1
+	end
+
+	return str:sub(start, currentIndex - 1)
+end
+
+local function MapKey(bag, slot)
+	return format("%d_%d", bag, slot)
+end
+
+local quickFormat = {
+	[0] = function(font, map) font:SetText() end,
+	[1] = function(font, map) font:SetFormattedText("|cffffffaa%s|r", Utf8Sub(map[1], 1, 4)) end,
+	[2] = function(font, map) font:SetFormattedText("|cffffffaa%s %s|r", Utf8Sub(map[1], 1, 4), Utf8Sub(map[2], 1, 4)) end,
+	[3] = function(font, map) font:SetFormattedText("|cffffffaa%s %s %s|r", Utf8Sub(map[1], 1, 4), Utf8Sub(map[2], 1, 4), Utf8Sub(map[3], 1, 4)) end,
+}
+
+local function BuildEquipmentMap(clear)
+	-- clear mapped names
+	for k, v in pairs(equipmentMap) do
+		twipe(v)
+	end
+
+	if clear then return end
+
+	local name, player, bank, bags, slot, bag, key
+
+	for i = 1, GetNumEquipmentSets() do
+		name = GetEquipmentSetInfo(i)
+		GetEquipmentSetLocations(name, infoArray)
+		for _, location in pairs(infoArray) do
+			if type(location) == "number" and (location < -1 or location > 1) then
+				player, bank, bags, _, slot, bag = EquipmentManager_UnpackLocation(location)
+				if ((bank or bags) and slot and bag) then
+					key = MapKey(bag, slot)
+					equipmentMap[key] = equipmentMap[key] or {}
+					tinsert(equipmentMap[key], name)
+				end
+			end
+		end
+	end
+end
+
+local function UpdateContainerFrame(frame, bag, slot)
+	if (not frame.equipmentinfo) then
+		frame.equipmentinfo = frame:CreateFontString(nil, "OVERLAY")
+		frame.equipmentinfo:FontTemplate(E.media.font, 12, "THINOUTLINE")
+		frame.equipmentinfo:SetWordWrap(true)
+		frame.equipmentinfo:SetJustifyH('CENTER')
+		frame.equipmentinfo:SetJustifyV('MIDDLE')
+	end
+
+	if (frame.equipmentinfo) then
+		frame.equipmentinfo:SetAllPoints(frame)
+
+		local key = MapKey(bag, slot)
+		if equipmentMap[key] then
+			quickFormat[#equipmentMap[key] < 4 and #equipmentMap[key] or 3](frame.equipmentinfo, equipmentMap[key])
+		else
+			quickFormat[0](frame.equipmentinfo, nil)
+		end
+	end
+end
+
+local function UpdateBagInformation(clear)
+	updateTimer = nil
+
+	BuildEquipmentMap(clear)
+	for _, container in pairs(containers) do
+		for _, bagID in ipairs(container.BagIDs) do
+			for slotID = 1, GetContainerNumSlots(bagID) do
+				UpdateContainerFrame(container.Bags[bagID][slotID], bagID, slotID)
+			end
+		end
+	end
+end
+
+local function DelayUpdateBagInformation(event)
+	-- delay to make sure multiple bag events are consolidated to one update.
+	if not updateTimer then
+		updateTimer = BI:ScheduleTimer(UpdateBagInformation, .25)
+	end
+end
+
+function BI:ToggleSettings()
+	if updateTimer then
+		self:CancelTimer(updateTimer)
+	end
+
+	if E.private.sle.equip.setoverlay then
+		self:RegisterEvent("EQUIPMENT_SETS_CHANGED", DelayUpdateBagInformation)
+		self:RegisterEvent("BAG_UPDATE", DelayUpdateBagInformation)
+		UpdateBagInformation()
+	else
+		self:UnregisterEvent("EQUIPMENT_SETS_CHANGED")
+		self:UnregisterEvent("BAG_UPDATE")
+		UpdateBagInformation(true)
+	end
+end
+
+function BI:Initialize()
+	if not E.private.bags.enable then return end
+
+	tinsert(containers, _G["ElvUI_ContainerFrame"])
+	self:SecureHook(B, "OpenBank", function()
+		self:Unhook(B, "OpenBank")
+		tinsert(containers, _G["ElvUI_BankContainerFrame"])
+		BI:ToggleSettings()
+	end)
+
+	BI:ToggleSettings()
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/bags/baginfo.lua b/ElvUI_SLE/modules/bags/baginfo.lua
deleted file mode 100755
index a6e4b5a..0000000
--- a/ElvUI_SLE/modules/bags/baginfo.lua
+++ /dev/null
@@ -1,136 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local BI = E:NewModule('BagInfo', 'AceHook-3.0', 'AceEvent-3.0', 'AceTimer-3.0')
-local B = E:GetModule('Bags')
-
-local byte, format = string.byte, string.format
-local tinsert, twipe = table.insert, table.wipe
-
-local updateTimer
-local containers = {}
-local infoArray = {}
-local equipmentMap = {}
-
-local function Utf8Sub(str, start, numChars)
-  local currentIndex = start
-  while numChars > 0 and currentIndex <= #str do
-    local char = byte(str, currentIndex)
-    if char > 240 then
-      currentIndex = currentIndex + 4
-    elseif char > 225 then
-      currentIndex = currentIndex + 3
-    elseif char > 192 then
-      currentIndex = currentIndex + 2
-    else
-      currentIndex = currentIndex + 1
-    end
-    numChars = numChars -1
-  end
-  return str:sub(start, currentIndex - 1)
-end
-
-local function MapKey(bag, slot)
-	return format("%d_%d", bag, slot)
-end
-
-local quickFormat = {
-	[0] = function(font, map) font:SetText() end,
-	[1] = function(font, map) font:SetFormattedText("|cffffffaa%s|r", Utf8Sub(map[1], 1, 4)) end,
-	[2] = function(font, map) font:SetFormattedText("|cffffffaa%s %s|r", Utf8Sub(map[1], 1, 4), Utf8Sub(map[2], 1, 4)) end,
-	[3] = function(font, map) font:SetFormattedText("|cffffffaa%s %s %s|r", Utf8Sub(map[1], 1, 4), Utf8Sub(map[2], 1, 4), Utf8Sub(map[3], 1, 4)) end,
-}
-
-function BI:BuildEquipmentMap(clear)
-	-- clear mapped names
-	for k, v in pairs(equipmentMap) do
-		twipe(v)
-	end
-	if clear then return end
-
-	local name, player, bank, bags, slot, bag, key
-	for i = 1, GetNumEquipmentSets() do
-		name = GetEquipmentSetInfo(i)
-		GetEquipmentSetLocations(name, infoArray)
-		for _, location in pairs(infoArray) do
-			if location < -1 or location > 1 then
-				player, bank, bags, _, slot, bag = EquipmentManager_UnpackLocation(location)
-				if ((bank or bags) and slot and bag) then
-					key = MapKey(bag, slot)
-					equipmentMap[key] = equipmentMap[key] or {}
-					tinsert(equipmentMap[key], name)
-				end
-			end
-		end
-	end
-end
-
-function BI:UpdateContainerFrame(frame, bag, slot)
-	if (not frame.equipmentinfo) then
-		frame.equipmentinfo = frame:CreateFontString(nil, "OVERLAY")
-		frame.equipmentinfo:FontTemplate(E.media.font, 12, "THINOUTLINE")
-		frame.equipmentinfo:SetWordWrap(true)
-		frame.equipmentinfo:SetJustifyH('CENTER')
-		frame.equipmentinfo:SetJustifyV('MIDDLE')
-	end
-
-	if (frame.equipmentinfo) then
-		frame.equipmentinfo:SetAllPoints(frame)
-
-		local key = MapKey(bag, slot)
-		if equipmentMap[key] then
-			quickFormat[#equipmentMap[key] < 4 and #equipmentMap[key] or 3](frame.equipmentinfo, equipmentMap[key])
-		else
-			quickFormat[0](frame.equipmentinfo, nil)
-		end
-	end
-end
-
-function BI:UpdateBagInformation(clear)
-	updateTimer = nil
-
-	self:BuildEquipmentMap(clear)
-	for _, container in pairs(containers) do
-		for _, bagID in ipairs(container.BagIDs) do
-			for slotID = 1, GetContainerNumSlots(bagID) do
-				self:UpdateContainerFrame(container.Bags[bagID][slotID], bagID, slotID)
-			end
-		end
-	end
-end
-
-function BI:DelayUpdateBagInformation(event)
-	-- delay to make sure multiple bag events are consolidated to one update.
-	if not updateTimer then
-		updateTimer = BI:ScheduleTimer("UpdateBagInformation", .25)
-	end
-end
-
-function BI:ToggleSettings()
-	if updateTimer then
-		self:CancelTimer(updateTimer)
-	end
-
-	if E.private.sle.equip.setoverlay then
-		self:RegisterEvent("EQUIPMENT_SETS_CHANGED", "DelayUpdateBagInformation")
-		self:RegisterEvent("BAG_UPDATE", "DelayUpdateBagInformation")
-		BI:UpdateBagInformation()
-	else
-		self:UnregisterEvent("EQUIPMENT_SETS_CHANGED")
-		self:UnregisterEvent("BAG_UPDATE")
-		BI:UpdateBagInformation(true)
-	end
-end
-
-function BI:Initialize()
-	if not E.private.bags.enable then return end
-
-	tinsert(containers, _G["ElvUI_ContainerFrame"])
-	self:SecureHook(B, "OpenBank", function()
-		self:Unhook(B, "OpenBank")
-		tinsert(containers, _G["ElvUI_BankContainerFrame"])
-		BI:ToggleSettings()
-	end)
-
-	BI:ToggleSettings()
-end
-
-E:RegisterModule(BI:GetName())
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/bags/load_bags.xml b/ElvUI_SLE/modules/bags/load_bags.xml
deleted file mode 100755
index bea7397..0000000
--- a/ElvUI_SLE/modules/bags/load_bags.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='baginfo.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/characterframe/characterframe.lua b/ElvUI_SLE/modules/characterframe/characterframe.lua
old mode 100755
new mode 100644
index bc1c09c..199792c
--- a/ElvUI_SLE/modules/characterframe/characterframe.lua
+++ b/ElvUI_SLE/modules/characterframe/characterframe.lua
@@ -1,8 +1,9 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local CFO = E:NewModule('CharacterFrameOptions', 'AceEvent-3.0');
+local E, L, V, P, G = unpack(ElvUI)
+local CFO = E:GetModule('CharacterFrameOptions')
 local LSM = LibStub("LibSharedMedia-3.0")

-local f = CreateFrame('Frame', 'KnightArmory', PaperDollFrame)
+local CA = CreateFrame('Frame', 'CharacterArmory', PaperDollFrame)
+local SlotIDList = {}
 local C = SLArmoryConstants
 local backgrounds = {
 	["SPACE"] = "Space",
@@ -12,68 +13,195 @@ local backgrounds = {
 	["CASTLE"] = "Castle",
 }

-local function GemSocket_OnClick(self, button)
-	self = self:GetParent()
-
-	if CursorHasItem() then
-		local CursorType, _, ItemLink = GetCursorInfo()
-
-		-- Check cursor item is gem type
-		if CursorType == 'item' and select(6, GetItemInfo(ItemLink)) == select(8, GetAuctionItemClasses()) then
-			SocketInventoryItem(GetInventorySlotInfo(self.slotName))
-			ClickSocketButton(self.socketNumber)
-
-			return
+do --<< Button Script >>--
+	CA.OnEnter = function(self)
+		if self.Link or self.Message then
+			GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
+
+			self:SetScript('OnUpdate', function()
+				GameTooltip:ClearLines()
+
+				if self.Link then
+					GameTooltip:SetHyperlink(self.Link)
+				end
+
+				if self.Link and self.Message then GameTooltip:AddLine(' ') end -- Line space
+
+				if self.Message then
+					GameTooltip:AddLine(self.Message, 1, 1, 1)
+				end
+
+				GameTooltip:Show()
+			end)
 		end
 	end
-
-	if self.GemItemID then
-		local itemName, itemLink = GetItemInfo(self.GemItemID)
-
-		if not IsShiftKeyDown() then
-			SetItemRef(itemLink, itemLink, 'LeftButton')
-		else
-			if button == 'RightButton' then
+
+	CA.OnLeave = function(self)
+		self:SetScript('OnUpdate', nil)
+		GameTooltip:Hide()
+	end
+
+	CA.GemSocket_OnEnter = function(self)
+		GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
+
+		local Parent = self:GetParent()
+
+		if Parent.GemItemID then
+			if type(Parent.GemItemID) == 'number' then
+				if GetItemInfo(Parent.GemItemID) then
+					GameTooltip:SetHyperlink(select(2, GetItemInfo(Parent.GemItemID)))
+				else
+					self:SetScript('OnUpdate', function()
+						if GetItemInfo(Parent.GemItemID) then
+							CA.GemSocket_OnEnter(self)
+							self:SetScript('OnUpdate', nil)
+						end
+					end)
+					return
+				end
+			else
+				GameTooltip:ClearLines()
+				GameTooltip:AddLine('|cffffffff'..Parent.GemItemID)
+			end
+		elseif Parent.GemType then
+			GameTooltip:ClearLines()
+			GameTooltip:AddLine('|cffffffff'.._G['EMPTY_SOCKET_'..Parent.GemType])
+		end
+
+		GameTooltip:Show()
+	end
+
+	CA.GemSocket_OnClick = function(self, button)
+		self = self:GetParent()
+
+		if CursorHasItem() then
+			local CursorType, _, ItemLink = GetCursorInfo()
+
+			-- Check cursor item is gem type
+			if CursorType == 'item' and select(6, GetItemInfo(ItemLink)) == select(8, GetAuctionItemClasses()) then
 				SocketInventoryItem(GetInventorySlotInfo(self.slotName))
-			elseif HandleModifiedItemClick(itemLink) then
-			elseif BrowseName and BrowseName:IsVisible() then
-				AuctionFrameBrowse_Reset(BrowseResetButton)
-				BrowseName:SetText(itemName)
-				BrowseName:SetFocus()
+				ClickSocketButton(self.socketNumber)
+
+				return
+			end
+		end
+
+		if self.GemItemID then
+			local itemName, itemLink = GetItemInfo(self.GemItemID)
+
+			if not IsShiftKeyDown() then
+				SetItemRef(itemLink, itemLink, 'LeftButton')
+			else
+				if button == 'RightButton' then
+					SocketInventoryItem(GetInventorySlotInfo(self.slotName))
+				elseif HandleModifiedItemClick(itemLink) then
+				elseif BrowseName and BrowseName:IsVisible() then
+					AuctionFrameBrowse_Reset(BrowseResetButton)
+					BrowseName:SetText(itemName)
+					BrowseName:SetFocus()
+				end
 			end
 		end
 	end
-end
-
-local function GemSocket_OnRecieveDrag(self)
-	self = self:GetParent()
-
-	if CursorHasItem() then
-		local CursorType, _, ItemLink = GetCursorInfo()
-
-		if CursorType == 'item' and select(6, GetItemInfo(ItemLink)) == select(8, GetAuctionItemClasses()) then
-			SocketInventoryItem(GetInventorySlotInfo(self.slotName))
-			ClickSocketButton(self.socketNumber)
+
+	CA.GemSocket_OnRecieveDrag = function(self)
+		self = self:GetParent()
+
+		if CursorHasItem() then
+			local CursorType, _, ItemLink = GetCursorInfo()
+
+			if CursorType == 'item' and select(6, GetItemInfo(ItemLink)) == select(8, GetAuctionItemClasses()) then
+				SocketInventoryItem(GetInventorySlotInfo(self.slotName))
+				ClickSocketButton(self.socketNumber)
+			end
 		end
 	end
 end

-local function CreateArmoryFrame(self)
+function CA:Setup_CharacterArmory()
 	--<< Core >>--
 	self:Point('TOPLEFT', CharacterFrameInset, 10, 20)
 	self:Point('BOTTOMRIGHT', CharacterFrameInsetRight, 'BOTTOMLEFT', -10, 5)

+	--<< Updater >>--
+	local args
+	self:SetScript('OnEvent', function(self, Event, ...)
+		if Event == 'SOCKET_INFO_SUCCESS' or Event == 'ITEM_UPGRADE_MASTER_UPDATE' or Event == 'TRANSMOGRIFY_UPDATE' or Event == 'PLAYER_ENTERING_WORLD' then
+			if Event == 'TRANSMOGRIFY_UPDATE' then
+				print(...)
+			end
+			self.GearUpdated = nil
+			self:SetScript('OnUpdate', self.CharacterArmory_DataSetting)
+		elseif Event == 'UNIT_INVENTORY_CHANGED' then
+			args = ...
+
+			if args == 'player' then
+				self.GearUpdated = nil
+				self:SetScript('OnUpdate', self.CharacterArmory_DataSetting)
+			end
+		elseif Event == 'PLAYER_EQUIPMENT_CHANGED' then
+			args = ...
+
+			self.GearUpdated = type(self.GearUpdated) == 'table' and self.GearUpdated or {}
+			self.GearUpdated[#self.GearUpdated + 1] = SlotIDList[args]
+			self:SetScript('OnUpdate', self.CharacterArmory_DataSetting)
+		elseif Event == 'COMBAT_LOG_EVENT_UNFILTERED' then
+			_, Event, _, _, _, _, _, _, args = ...
+
+			if Event == 'ENCHANT_APPLIED' and args == E.myname then
+				self.GearUpdated = nil
+				self:SetScript('OnUpdate', self.CharacterArmory_DataSetting)
+			end
+		elseif Event == 'UPDATE_INVENTORY_DURABILITY' then
+			self.DurabilityUpdated = nil
+			self:SetScript('OnUpdate', self.CharacterArmory_DataSetting)
+		end
+	end)
+	hooksecurefunc('CharacterFrame_Collapse', function()
+		CharacterFrame:SetWidth(448);
+	end)
+	hooksecurefunc('CharacterFrame_Expand', function()
+		CharacterFrame:SetWidth(650);
+	end)
+	hooksecurefunc('PaperDollFrame_SetLevel', function()
+		CharacterLevelText:SetText('|c'..RAID_CLASS_COLORS[E.myclass].colorStr..CharacterLevelText:GetText())
+
+		--Maybe Adjust Name, Level, Avg iLvL if bliz skinning is off?
+		CharacterFrameTitleText:ClearAllPoints()
+		CharacterFrameTitleText:Point('TOP', self, 'TOP', 0, 0)
+		CharacterFrameTitleText:SetParent(self)
+		CharacterLevelText:ClearAllPoints()
+		CharacterLevelText:SetPoint('TOP', CharacterFrameTitleText, 'BOTTOM', 0, 3)
+		CharacterLevelText:SetParent(self)
+	end)
+	--hooksecurefunc('CharacterFrame_Collapse', function() if Info.CharacterArmory_Activate then CharacterFrame:SetWidth(448) end end)
+	--hooksecurefunc('CharacterFrame_Expand', function() if Info.CharacterArmory_Activate then CharacterFrame:SetWidth(650) end end)
+	--hooksecurefunc('PaperDollFrame_SetLevel', function()
+		--if Info.CharacterArmory_Activate then
+			--CharacterLevelText:SetText('|c'..RAID_CLASS_COLORS[E.myclass].colorStr..CharacterLevelText:GetText())
+
+			--Maybe Adjust Name, Level, Avg iLvL if bliz skinning is off?
+			--CharacterFrameTitleText:ClearAllPoints()
+			--CharacterFrameTitleText:Point('TOP', self, 0, 15)
+			--CharacterFrameTitleText:SetParent(self)
+			--CharacterLevelText:ClearAllPoints()
+			--CharacterLevelText:SetPoint('TOP', CharacterFrameTitleText, 'BOTTOM', 0, -4)
+			--CharacterLevelText:SetParent(self)
+		--end
+	--end)
+
 	--<< Background >>--
 	self.BG = self:CreateTexture(nil, 'BACKGROUND')
 	--self.BG:SetInside()
 	self.BG:SetPoint("TOPLEFT", self, "TOPLEFT", -7, -20)
 	self.BG:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", 7, 2)
+	CFO:UpdateCharacterBG()

 	--<< Change Model Frame's frameLevel >>--
 	CharacterModelFrame:SetFrameLevel(self:GetFrameLevel() + 2)

 	--<< Average Item Level >>--
-	C.Toolkit.TextSetting(self, nil, { ['Tag'] = 'AverageItemLevel', ['FontSize'] = 12, }, 'BOTTOM', CharacterModelFrame, 'TOP', 0, 14)
+	C.Toolkit.TextSetting(self, nil, { Tag = 'AverageItemLevel', FontSize = 12, }, 'TOP', CharacterLevelText, 'BOTTOM', 0, 3)
 	local function ValueColorUpdate()
 		self.AverageItemLevel:SetText(C.Toolkit.Color_Value(L['Average'])..': '..format('%.2f', select(2, GetAverageItemLevel())))
 	end
@@ -99,28 +227,28 @@ local function CreateArmoryFrame(self)
 		Slot.Gradation:SetTexture('Interface\\AddOns\\ElvUI_SLE\\media\\textures\\Gradation')

 		if Slot.Direction == 'LEFT' then
-			Slot.Gradation:SetTexCoord(0, .5, 0, .5)
+			Slot.Gradation:SetTexCoord(0, 1, 0, 1)
 		else
-			Slot.Gradation:SetTexCoord(.5, 1, 0, .5)
+			Slot.Gradation:SetTexCoord(1, 0, 0, 1)
 		end

 		if slotName ~= 'ShirtSlot' and slotName ~= 'TabardSlot' then
 			-- Item Level
-			C.Toolkit.TextSetting(Slot, nil, { ['Tag'] = 'ItemLevel', ['FontSize'] = 10, ['directionH'] = Slot.Direction, }, 'TOP'..Slot.Direction, _G['Character'..slotName], 'TOP'..(Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 2 or -2, -1)
+			C.Toolkit.TextSetting(Slot, nil, { Tag = 'ItemLevel', FontSize = 10, directionH = Slot.Direction, }, 'TOP'..Slot.Direction, _G['Character'..slotName], 'TOP'..(Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 2 or -2, -1)

 			-- Enchantment Name
-			C.Toolkit.TextSetting(Slot, nil, { ['Tag'] = 'ItemEnchant', ['FontSize'] = 8, ['directionH'] = Slot.Direction, }, Slot.Direction, _G['Character'..slotName], Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT', Slot.Direction == 'LEFT' and 2 or -2, 1)
+			C.Toolkit.TextSetting(Slot, nil, { Tag = 'ItemEnchant', FontSize = 8, directionH = Slot.Direction, }, Slot.Direction, _G['Character'..slotName], Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT', Slot.Direction == 'LEFT' and 2 or -2, 1)
 			Slot.EnchantWarning = CreateFrame('Button', nil, Slot)
 			Slot.EnchantWarning:Size(E.db.sle.characterframeoptions.itemenchant.warningSize)
 			Slot.EnchantWarning.Texture = Slot.EnchantWarning:CreateTexture(nil, 'OVERLAY')
 			Slot.EnchantWarning.Texture:SetInside()
 			Slot.EnchantWarning.Texture:SetTexture('Interface\\AddOns\\ElvUI_SLE\\media\\textures\\Warning-Small')
 			Slot.EnchantWarning:Point(Slot.Direction, Slot.ItemEnchant, Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT', Slot.Direction == 'LEFT' and 3 or -3, 0)
-			Slot.EnchantWarning:SetScript('OnEnter', C.CommonScript.OnEnter)
-			Slot.EnchantWarning:SetScript('OnLeave', C.CommonScript.OnLeave)
+			Slot.EnchantWarning:SetScript('OnEnter', self.OnEnter)
+			Slot.EnchantWarning:SetScript('OnLeave', self.OnLeave)

 			-- Durability
-			C.Toolkit.TextSetting(Slot, nil, { ['Tag'] = 'Durability', ['FontSize'] = 10, ['directionH'] = Slot.Direction, }, 'BOTTOM'..Slot.Direction, _G['Character'..slotName], 'BOTTOM'..(Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 2 or -2, 3)
+			C.Toolkit.TextSetting(Slot, nil, { Tag = 'Durability', FontSize = 10, directionH = Slot.Direction, }, 'BOTTOM'..Slot.Direction, _G['Character'..slotName], 'BOTTOM'..(Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 2 or -2, 3)

 			-- Gem Socket
 			for i = 1, MAX_NUM_SOCKETS do
@@ -149,10 +277,10 @@ local function CreateArmoryFrame(self)
 				Slot['Socket'..i].Socket:SetInside()
 				Slot['Socket'..i].Socket:SetFrameLevel(Slot['Socket'..i]:GetFrameLevel() + 1)
 				Slot['Socket'..i].Socket:RegisterForClicks('AnyUp')
-				Slot['Socket'..i].Socket:SetScript('OnEnter', C.CommonScript.OnEnter)
-				Slot['Socket'..i].Socket:SetScript('OnLeave', C.CommonScript.OnLeave)
-				Slot['Socket'..i].Socket:SetScript('OnClick', GemSocket_OnClick)
-				Slot['Socket'..i].Socket:SetScript('OnReceiveDrag', GemSocket_OnRecieveDrag)
+				Slot['Socket'..i].Socket:SetScript('OnEnter', self.OnEnter)
+				Slot['Socket'..i].Socket:SetScript('OnLeave', self.OnLeave)
+				Slot['Socket'..i].Socket:SetScript('OnClick', self.GemSocket_OnClick)
+				Slot['Socket'..i].Socket:SetScript('OnReceiveDrag', self.GemSocket_OnRecieveDrag)

 				Slot['Socket'..i].Texture = Slot['Socket'..i].Socket:CreateTexture(nil, 'OVERLAY')
 				Slot['Socket'..i].Texture:SetTexCoord(.1, .9, .1, .9)
@@ -168,81 +296,109 @@ local function CreateArmoryFrame(self)
 			Slot.SocketWarning.Texture = Slot.SocketWarning:CreateTexture(nil, 'OVERLAY')
 			Slot.SocketWarning.Texture:SetInside()
 			Slot.SocketWarning.Texture:SetTexture('Interface\\AddOns\\ElvUI_SLE\\media\\textures\\Warning-Small')
-			Slot.SocketWarning:SetScript('OnEnter', C.CommonScript.OnEnter)
-			Slot.SocketWarning:SetScript('OnLeave', C.CommonScript.OnLeave)
+			Slot.SocketWarning:SetScript('OnEnter', self.OnEnter)
+			Slot.SocketWarning:SetScript('OnLeave', self.OnLeave)
 		end

+		SlotIDList[Slot.ID] = slotName
 		self[slotName] = Slot
 	end

 	-- GameTooltip for counting gem sockets and getting enchant effects
-	self.ScanTTForEnchanting1 = CreateFrame('GameTooltip', 'KnightArmoryScanTT_E1', nil, 'GameTooltipTemplate')
-	self.ScanTTForEnchanting1:SetOwner(UIParent, 'ANCHOR_NONE')
-
-	-- GameTooltip for checking that texture in tooltip is socket texture
-	self.ScanTTForEnchanting2 = CreateFrame('GameTooltip', 'KnightArmoryScanTT_E2', nil, 'GameTooltipTemplate')
-	self.ScanTTForEnchanting2:SetOwner(UIParent, 'ANCHOR_NONE')
+	self.ScanTT = CreateFrame('GameTooltip', 'SLE_CharacterArmory_ScanTT', nil, 'GameTooltipTemplate')
+	self.ScanTT:SetOwner(UIParent, 'ANCHOR_NONE')

 	-- For resizing paper doll frame when it toggled.
 	self.ChangeCharacterFrameWidth = CreateFrame('Frame')
-	self.ChangeCharacterFrameWidth:SetScript('OnShow', function() if PaperDollFrame:IsVisible() then PANEL_DEFAULT_WIDTH = 448 CFO:ArmoryFrame_DataSetting() end end)
-	self.ChangeCharacterFrameWidth:SetScript('OnHide', function() PANEL_DEFAULT_WIDTH = 338 end)
+	self.ChangeCharacterFrameWidth:SetScript('OnShow', function()
+		if PaperDollFrame:IsVisible() then
+			self:CharacterArmory_DataSetting()
+		end
+	end)

-	CreateArmoryFrame = nil
+	self.Setup_CharacterArmory = nil
 end

-function CFO:ChangeGradiantVisibility()
-	for _, slotName in pairs(C.GearList) do
-		if E.db.sle.characterframeoptions.shownormalgradient ~= false then
-			f[slotName].Gradation:Show()
-		else
-			f[slotName].Gradation:Hide()
-		end
+local needUpdate
+function CA:CharacterArmory_DataSetting()
+	if not self:IsVisible() then return end
+
+	needUpdate = nil
+
+	if not self.DurabilityUpdated then
+		needUpdate = self:Update_Durability() or needUpdate
+	end
+
+	if self.GearUpdated ~= true then
+		needUpdate = self:Update_Gear() or needUpdate
+	end
+
+	if not needUpdate then
+		self:SetScript('OnUpdate', nil)
 	end
 end

-function CFO:ResizeErrorIcon()
+function CA:Update_Durability()
+	local Slot, r, g, b, CurrentDurability, MaxDurability
+
 	for _, slotName in pairs(C.GearList) do
-		if slotName ~= 'ShirtSlot' and slotName ~= 'TabardSlot' then
-			f[slotName].SocketWarning:Size(E.db.sle.characterframeoptions.itemgem.warningSize)
-			f[slotName].EnchantWarning:Size(E.db.sle.characterframeoptions.itemenchant.warningSize)
-			for i = 1, MAX_NUM_SOCKETS do
-				f[slotName]['Socket'..i]:Size(E.db.sle.characterframeoptions.itemgem.socketSize)
+		Slot = self[slotName]
+		CurrentDurability, MaxDurability = GetInventoryItemDurability(Slot.ID)
+
+		if CurrentDurability and MaxDurability then
+			if E.db.sle.characterframeoptions.itemdurability.show ~= false then
+				r, g, b = E:ColorGradient((CurrentDurability / MaxDurability), 1, 0, 0, 1, 1, 0, 0, 1, 0)
+				Slot.Durability:SetFormattedText("%s%.0f%%|r", E:RGBToHex(r, g, b), (CurrentDurability / MaxDurability) * 100)
+				Slot.Socket1:Point('BOTTOM'..Slot.Direction, Slot.Durability, 'BOTTOM'..(Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 3 or -3, -2)
 			end
+		elseif Slot.Durability then
+			Slot.Durability:SetText('')
+			Slot.Socket1:Point('BOTTOM'..Slot.Direction, _G['Character'..slotName], 'BOTTOM'..(Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 3 or -3, 3)
 		end
 	end
+
+	self.DurabilityUpdated = true
 end

-function CFO:ArmoryFrame_DataSetting()
-	if not f:IsVisible() then return end
-	local BGdrop = E.db.sle.characterframeoptions.image.dropdown
+function CA:ClearTooltip(tooltip)
+	local tooltipName = tooltip:GetName()
+
+	tooltip:ClearLines()
+	for i = 1, 10 do
+		_G[tooltipName..'Texture'..i]:SetTexture(nil)
+		_G[tooltipName..'Texture'..i]:ClearAllPoints()
+		_G[tooltipName..'Texture'..i]:Point('TOPLEFT', tooltip)
+	end
+end

+function CA:Update_Gear()
+	--if not CA:IsVisible() then return end
+	print("yep")
 	-- Get Player Profession
 	local Prof1, Prof2 = GetProfessions()
 	local Prof1_Level, Prof2_Level = 0, 0
-	CFO.PlayerProfession = {}
+	self.PlayerProfession = {}

 	if Prof1 then Prof1, _, Prof1_Level = GetProfessionInfo(Prof1) end
 	if Prof2 then Prof2, _, Prof2_Level = GetProfessionInfo(Prof2) end
-	if Prof1 and C.ProfessionList[Prof1] then CFO.PlayerProfession[(C.ProfessionList[Prof1].Key)] = Prof1_Level end
-	if Prof2 and C.ProfessionList[Prof2] then CFO.PlayerProfession[(C.ProfessionList[Prof2].Key)] = Prof2_Level end
+	if Prof1 and C.ProfessionList[Prof1] then self.PlayerProfession[(C.ProfessionList[Prof1].Key)] = Prof1_Level end
+	if Prof2 and C.ProfessionList[Prof2] then self.PlayerProfession[(C.ProfessionList[Prof2].Key)] = Prof2_Level end

-	local ErrorDetected
+	local ErrorDetected, needUpdate, needUpdateList
 	local r, g, b
-	local Slot, ItemLink, ItemRarity, BasicItemLevel, TrueItemLevel, ItemUpgradeID, ItemTexture, IsEnchanted, UsableEffect, CurrentLineText, GemID, GemTotal_1, GemTotal_2, GemCount, CurrentDurability, MaxDurability
-	local arg1, itemID, enchantID, _, _, _, _, arg2, arg3, arg4, arg5, arg6
+	local Slot, ItemLink, ItemData, ItemRarity, BasicItemLevel, TrueItemLevel, ItemUpgradeID, ItemTexture, IsEnchanted, UsableEffect, CurrentLineText, GemID, GemCount_Default, GemCount_Enable, GemCount_Now, GemCount

-	for _, slotName in pairs(C.GearList) do
+	for _, slotName in pairs(self.GearUpdated or C.GearList) do
 		if not (slotName == 'ShirtSlot' or slotName == 'TabardSlot') then
-			Slot = f[slotName]
-			Slot:EnableMouse(true)
+			Slot = self[slotName]
+			ItemLink = GetInventoryItemLink('player', Slot.ID)
+			--Slot:EnableMouse(true)

 			do --<< Clear Setting >>--
-				ErrorDetected, TrueItemLevel, IsEnchanted, UsableEffect, ItemRarity, ItemUpgradeID, ItemTexture = nil, nil, nil, nil, nil, nil, nil
+				needUpdate, ErrorDetected, TrueItemLevel, IsEnchanted, UsableEffect, ItemUpgradeID, ItemTexture = nil, nil, nil, nil, nil, nil, nil

 				Slot.ItemLevel:SetText(nil)
 				Slot.ItemEnchant:SetText(nil)
-				Slot.Durability:SetText('')
 				for i = 1, MAX_NUM_SOCKETS do
 					Slot['Socket'..i].Texture:SetTexture(nil)
 					Slot['Socket'..i].Socket.Link = nil
@@ -251,56 +407,56 @@ function CFO:ArmoryFrame_DataSetting()
 					Slot['Socket'..i]:Hide()
 				end

-				Slot.Socket1:Point('BOTTOM'..Slot.Direction, _G['Character'..slotName], 'BOTTOM'..(Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 3 or -3, 0)
+				--Slot.Socket1:Point('BOTTOM'..Slot.Direction, _G['Character'..slotName], 'BOTTOM'..(Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 3 or -3, 0)
 				Slot.EnchantWarning:Hide()
 				Slot.EnchantWarning.Message = nil
 				Slot.SocketWarning:Point(Slot.Direction, Slot.Socket1)
 				Slot.SocketWarning:Hide()
 				Slot.SocketWarning.Link = nil
 				Slot.SocketWarning.Message = nil
-
-				f.ScanTTForEnchanting1:ClearLines()
-				f.ScanTTForEnchanting2:ClearLines()
-				for i = 1, 10 do
-					_G['KnightArmoryScanTT_E1Texture'..i]:SetTexture(nil)
-					_G['KnightArmoryScanTT_E2Texture'..i]:SetTexture(nil)
-				end
 			end

-			ItemLink = GetInventoryItemLink('player', Slot.ID)
-
 			if ItemLink then
 				do --<< Gem Parts >>--
-					arg1, itemID, enchantID, _, _, _, _, arg2, arg3, arg4, arg5, arg6 = strsplit(':', ItemLink)
+					ItemData = { strsplit(':', ItemLink) }
+					ItemData[4], ItemData[5], ItemData[6], ItemData[7] = 0, 0, 0, 0

-					f.ScanTTForEnchanting1:SetInventoryItem('player', Slot.ID)
-					f.ScanTTForEnchanting2:SetHyperlink(format('%s:%s:%d:0:0:0:0:%s:%s:%s:%s:%s', arg1, itemID, enchantID, arg2, arg3, arg4, arg5, arg6))
+					for i = 1, #ItemData do
+						ItemData.FixedLink = (ItemData.FixedLink and ItemData.FixedLink..':' or '')..ItemData[i]
+					end
+
+					self:ClearTooltip(self.ScanTT)
+					self.ScanTT:SetHyperlink(ItemData.FixedLink)

-					GemTotal_1, GemTotal_2, GemCount = 0, 0, 0
+					GemCount_Default, GemCount_Now, GemCount = 0, 0, 0

 					-- First, Counting default gem sockets
 					for i = 1, MAX_NUM_SOCKETS do
-						ItemTexture = _G['KnightArmoryScanTT_E2Texture'..i]:GetTexture()
+						ItemTexture = _G['SLE_CharacterArmory_ScanTTTexture'..i]:GetTexture()

 						if ItemTexture and ItemTexture:find('Interface\\ItemSocketingFrame\\') then
-							GemTotal_1 = GemTotal_1 + 1
-							Slot['Socket'..GemTotal_1].GemType = strupper(gsub(ItemTexture, 'Interface\\ItemSocketingFrame\\UI--EmptySocket--', ''))
+							GemCount_Default = GemCount_Default + 1
+							Slot['Socket'..GemCount_Default].GemType = strupper(gsub(ItemTexture, 'Interface\\ItemSocketingFrame\\UI--EmptySocket--', ''))
 						end
 					end

 					-- Second, Check if slot's item enable to adding a socket
+					GemCount_Enable = GemCount_Default
 					if (slotName == 'WaistSlot' and UnitLevel('player') >= 70) or -- buckle
-						((slotName == 'WristSlot' or slotName == 'HandsSlot') and CFO.PlayerProfession.BlackSmithing and CFO.PlayerProfession.BlackSmithing >= 550) then -- BlackSmith
+						((slotName == 'WristSlot' or slotName == 'HandsSlot') and self.PlayerProfession.BlackSmithing and self.PlayerProfession.BlackSmithing >= 550) then -- BlackSmith

-						GemTotal_1 = GemTotal_1 + 1
-						Slot['Socket'..GemTotal_1].GemType = 'PRISMATIC'
+						GemCount_Enable = GemCount_Enable + 1
+						Slot['Socket'..GemCount_Enable].GemType = 'PRISMATIC'
 					end

+					self:ClearTooltip(self.ScanTT)
+					self.ScanTT:SetInventoryItem('player', Slot.ID)
+
 					-- Apply current item's gem setting
 					for i = 1, MAX_NUM_SOCKETS do
-						ItemTexture = _G['KnightArmoryScanTT_E1Texture'..i]:GetTexture()
+						ItemTexture = _G['SLE_CharacterArmory_ScanTTTexture'..i]:GetTexture()
 						GemID = select(i, GetInventoryItemGems(Slot.ID))
-
+
 						if Slot['Socket'..i].GemType and C.GemColor[Slot['Socket'..i].GemType] then
 							r, g, b = unpack(C.GemColor[Slot['Socket'..i].GemType])
 							Slot['Socket'..i].Socket:SetBackdropColor(r, g, b, .5)
@@ -310,7 +466,7 @@ function CFO:ArmoryFrame_DataSetting()
 							Slot['Socket'..i].Socket:SetBackdropBorderColor(1, 1, 1)
 						end

-						if ItemTexture then
+						if ItemTexture or GemID then
 							if E.db.sle.characterframeoptions.itemgem.show then
 								Slot['Socket'..i]:Show()
 								Slot.SocketWarning:Point(Slot.Direction, Slot['Socket'..i], (Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 3 or -3, 0)
@@ -318,16 +474,28 @@ function CFO:ArmoryFrame_DataSetting()
 								Slot['Socket'..i]:Hide()
 								Slot.SocketWarning:Point(Slot.Direction, Slot['Socket1'], (Slot.Direction == 'LEFT' and 'LEFT' or 'RIGHT'), 0, 0)
 							end
-							GemTotal_2 = GemTotal_2 + 1
+
+							GemCount_Now = GemCount_Now + 1

 							if GemID then
 								GemCount = GemCount + 1
-								Slot['Socket'..i].Texture:SetTexture(ItemTexture)
 								Slot['Socket'..i].GemItemID = GemID
-								Slot['Socket'..i].Socket.Link = select(2, GetItemInfo(GemID))
+
+								_, Slot['Socket'..i].Socket.Link, _, _, _, _, _, _, _, ItemTexture = GetItemInfo(GemID)
+
+								if ItemTexture then
+									Slot['Socket'..i].Texture:SetTexture(ItemTexture)
+								else
+									needUpdate = true
+								end
 							end
 						end
 					end
+
+					--print(slotName..' : ', GemCount_Default, GemCount_Enable, GemCount_Now, GemCount)
+					if GemCount_Now < GemCount_Default then -- ItemInfo not loaded
+						needUpdate = true
+					end
 				end

 				_, _, ItemRarity, BasicItemLevel, _, _, _, _, _, ItemTexture = GetItemInfo(ItemLink)
@@ -335,8 +503,9 @@ function CFO:ArmoryFrame_DataSetting()

 				ItemUpgradeID = ItemLink:match(':(%d+)\124h%[')

-				for i = 1, f.ScanTTForEnchanting1:NumLines() do
-					CurrentLineText = _G['KnightArmoryScanTT_E1TextLeft'..i]:GetText()
+				--<< Enchant Parts >>--
+				for i = 1, self.ScanTT:NumLines() do
+					CurrentLineText = _G['SLE_CharacterArmory_ScanTTTextLeft'..i]:GetText()

 					if CurrentLineText:find(C.ItemLevelKey_Alt) then
 						TrueItemLevel = tonumber(CurrentLineText:match(C.ItemLevelKey_Alt))
@@ -383,9 +552,9 @@ function CFO:ArmoryFrame_DataSetting()
 						if ItemUpgradeID == '0' then
 							ItemUpgradeID = nil
 						else
-							if not C.ItemUpgrade[ItemUpgradeID] then
-								print('New Upgrade ID |cffceff00['..ItemUpgradeID..']|r : |cffceff00'..(TrueItemLevel - BasicItemLevel))
-							end
+							--if not C.ItemUpgrade[ItemUpgradeID] then
+								--print('New Upgrade ID |cffceff00['..ItemUpgradeID..']|r : |cffceff00'..(TrueItemLevel - BasicItemLevel))
+							--end

 							ItemUpgradeID = TrueItemLevel - BasicItemLevel
 						end
@@ -396,19 +565,7 @@ function CFO:ArmoryFrame_DataSetting()
 					end
 				end

-				--<< Durability Parts >>--
-				CurrentDurability, MaxDurability = GetInventoryItemDurability(Slot.ID)
-				if CurrentDurability and MaxDurability then
-					if E.db.sle.characterframeoptions.itemdurability.show ~= false then
-						--Slot.Durability:Show()
-						r, g, b = E:ColorGradient((CurrentDurability / MaxDurability), 1, 0, 0, 1, 1, 0, 0, 1, 0)
-						Slot.Durability:FontTemplate(LSM:Fetch("font", E.db.sle.characterframeoptions.itemdurability.font), E.db.sle.characterframeoptions.itemdurability.fontSize, E.db.sle.characterframeoptions.itemdurability.fontOutline)
-						Slot.Durability:SetFormattedText("%s%.0f%%|r", E:RGBToHex(r, g, b), (CurrentDurability / MaxDurability) * 100)
-						Slot.Socket1:Point('BOTTOM'..Slot.Direction, Slot.Durability, 'BOTTOM'..(Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 3 or -3, -3)
-					end
-				end
-
-				-- Check Error
+				--[[ Check Error
 				if (not IsEnchanted and C.EnchantableSlots[slotName]) or ((slotName == 'Finger0Slot' or slotName == 'Finger1Slot') and CFO.PlayerProfession.Enchanting and CFO.PlayerProfession.Enchanting >= 550 and not IsEnchanted) then
 					ErrorDetected = true
 					if E.db.sle.characterframeoptions.itemenchant.showwarning ~= false then
@@ -500,42 +657,70 @@ function CFO:ArmoryFrame_DataSetting()
 							end
 						end)
 					end
-				end
+				end]]
 			end

 			-- Change Gradation
-			if ErrorDetected and E.db.sle.characterframeoptions.showerrorgradient ~= false then
-				if Slot.Direction == 'LEFT' then
-					Slot.Gradation:SetTexCoord(0, .5, .5, 1)
-				else
-					Slot.Gradation:SetTexCoord(.5, 1, .5, 1)
-				end
+			if ErrorDetected and E.db.sle.characterframeoptions.showerrorgradient then
+				Slot.Gradation:SetVertexColor(1, 0, 0)
 			else
-				if Slot.Direction == 'LEFT' then
-					Slot.Gradation:SetTexCoord(0, .5, 0, .5)
-				else
-					Slot.Gradation:SetTexCoord(.5, 1, 0, .5)
-				end
+				Slot.Gradation:SetVertexColor(unpack(E.db.sle.characterframeoptions.gradientColor))
+			end
+
+			if needUpdate then
+				needUpdateList = needUpdateList or {}
+				needUpdateList[#needUpdateList + 1] = slotName
 			end
 		end
 	end
-
+
+	self.AverageItemLevel:SetText(C.Toolkit.Color_Value(STAT_AVERAGE_ITEM_LEVEL)..': '..format('%.2f', select(2, GetAverageItemLevel())))
+
+	if needUpdateList then
+		self.GearUpdated = needUpdateList
+		return true
+	end
+
+	self.GearUpdated = true
+end
+
+function CFO:UpdateCharacterBG()
+	local BGdrop = E.db.sle.characterframeoptions.image.dropdown
 	if E.db.sle.characterframeoptions.showimage ~= false then
 		if BGdrop ~= "CUSTOM" then
-			f.BG:SetTexture('Interface\\AddOns\\ElvUI_SLE\\media\\textures\\'..backgrounds[BGdrop])
+			CA.BG:SetTexture('Interface\\AddOns\\ElvUI_SLE\\media\\textures\\'..backgrounds[BGdrop])
 		else
-			f.BG:SetTexture(E.db.sle.characterframeoptions.image.custom)
+			CA.BG:SetTexture(E.db.sle.characterframeoptions.image.custom)
 		end
 	else
-		f.BG:SetTexture(nil);
+		CA.BG:SetTexture(nil);
 	end
-
-	f.AverageItemLevel:SetText(C.Toolkit.Color_Value(L['Average'])..': '..format('%.2f', select(2, GetAverageItemLevel())))
 end

-function CFO:StartArmoryFrame()
+function CFO:ChangeGradiantVisibility()
+	for _, slotName in pairs(C.GearList) do
+		if E.db.sle.characterframeoptions.shownormalgradient ~= false then
+			CA[slotName].Gradation:Show()
+		else
+			CA[slotName].Gradation:Hide()
+		end
+	end
+end
+
+function CFO:ResizeErrorIcon()
+	for _, slotName in pairs(C.GearList) do
+		if slotName ~= 'ShirtSlot' and slotName ~= 'TabardSlot' then
+			CA[slotName].SocketWarning:Size(E.db.sle.characterframeoptions.itemgem.warningSize)
+			CA[slotName].EnchantWarning:Size(E.db.sle.characterframeoptions.itemenchant.warningSize)
+			for i = 1, MAX_NUM_SOCKETS do
+				CA[slotName]['Socket'..i]:Size(E.db.sle.characterframeoptions.itemgem.socketSize)
+			end
+		end
+	end
+end
+
+function CA:StartArmoryFrame()
 	-- Setting frame
-	CHARACTERFRAME_EXPANDED_WIDTH = 650
 	CharacterFrame:SetHeight(444)
 	CharacterFrameInsetRight:SetPoint('TOPLEFT', CharacterFrameInset, 'TOPRIGHT', 110, 0)
 	CharacterFrameExpandButton:SetPoint('BOTTOMRIGHT', CharacterFrameInsetRight, 'BOTTOMLEFT', -3, 7)
@@ -558,24 +743,35 @@ function CFO:StartArmoryFrame()
 	CharacterModelFrameControlFrame:ClearAllPoints()
 	CharacterModelFrameControlFrame:SetPoint('BOTTOM', CharacterModelFrame, 'BOTTOM', -1.5, 1)

-	if CreateArmoryFrame then
-		CreateArmoryFrame(KnightArmory)
+	if CA.Setup_CharacterArmory then
+		CA:Setup_CharacterArmory()
+	else
+		CA:Show()
 	end
-	CFO:ArmoryFrame_DataSetting()
+	CA:CharacterArmory_DataSetting()

-	-- Run ArmoryMode
-	CFO:RegisterEvent('SOCKET_INFO_SUCCESS', 'ArmoryFrame_DataSetting')
+	-- Run SLE CharacterArmoryMode
+	--[[CFO:RegisterEvent('SOCKET_INFO_SUCCESS', 'ArmoryFrame_DataSetting')
 	CFO:RegisterEvent('PLAYER_EQUIPMENT_CHANGED', 'ArmoryFrame_DataSetting')
 	CFO:RegisterEvent('PLAYER_ENTERING_WORLD', 'ArmoryFrame_DataSetting')
 	CFO:RegisterEvent('UNIT_INVENTORY_CHANGED', 'ArmoryFrame_DataSetting')
 	CFO:RegisterEvent('EQUIPMENT_SWAP_FINISHED', 'ArmoryFrame_DataSetting')
 	CFO:RegisterEvent('UPDATE_INVENTORY_DURABILITY', 'ArmoryFrame_DataSetting')
 	CFO:RegisterEvent('ITEM_UPGRADE_MASTER_UPDATE', 'ArmoryFrame_DataSetting')
+	]]
+	CA:RegisterEvent('SOCKET_INFO_SUCCESS')
+	CA:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
+	CA:RegisterEvent('UNIT_INVENTORY_CHANGED')
+	CA:RegisterEvent('ITEM_UPGRADE_MASTER_UPDATE')
+	CA:RegisterEvent('TRANSMOGRIFY_UPDATE')
+	CA:RegisterEvent('COMBAT_LOG_EVENT_UNFILTERED')
+	CA:RegisterEvent('UPDATE_INVENTORY_DURABILITY')
+	CA:RegisterEvent('PLAYER_ENTERING_WORLD')

 	-- For frame resizing
-	f.ChangeCharacterFrameWidth:SetParent(PaperDollFrame)
+	CA.ChangeCharacterFrameWidth:SetParent(PaperDollFrame)
 	if PaperDollFrame:IsVisible() then
-		f.ChangeCharacterFrameWidth:Show()
+		CA.ChangeCharacterFrameWidth:Show()
 		CharacterFrame:SetWidth(CharacterFrameInsetRight:IsShown() and 650 or 448)
 	end
 end
@@ -583,32 +779,7 @@ end
 function CFO:Initialize()
 	if not E.private.sle.characterframeoptions.enable then return end

-	hooksecurefunc(_G, 'PaperDollFrame_SetLevel', function()
-		local primaryTalentTree = GetSpecialization()
-		local classDisplayName, class = UnitClass("player")
-		local classColorString = RAID_CLASS_COLORS[class].colorStr
-		local specName, _;
-		local PLAYER_LEVEL = "|c%s%s %s %s %s|r"
-		local PLAYER_LEVEL_NO_SPEC = "|c%s%s %s %s|r"
-		if (primaryTalentTree) then
-			_, specName = GetSpecializationInfo(primaryTalentTree);
-		end
-
-		if (specName and specName ~= "") then
-			CharacterLevelText:SetFormattedText(PLAYER_LEVEL, classColorString, LEVEL, UnitLevel("player"), specName, classDisplayName);
-		else
-			CharacterLevelText:SetFormattedText(PLAYER_LEVEL_NO_SPEC, classColorString, LEVEL, UnitLevel("player"), classDisplayName);
-		end
-
-		CharacterFrameTitleText:ClearAllPoints()
-		CharacterFrameTitleText:Point('TOP', f, 'TOP', 0, 0)
-		CharacterFrameTitleText:SetParent(f)
-		CharacterLevelText:ClearAllPoints()
-		CharacterLevelText:SetPoint('TOP', CharacterFrameTitleText, 'BOTTOM', 0, 0)
-		CharacterLevelText:SetParent(f)
-	end)

-	CFO:StartArmoryFrame()
-end

-E:RegisterModule(CFO:GetName())
\ No newline at end of file
+	CA:StartArmoryFrame()
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/characterframe/communication.lua b/ElvUI_SLE/modules/characterframe/communication.lua
index 2660e78..f4d2807 100644
--- a/ElvUI_SLE/modules/characterframe/communication.lua
+++ b/ElvUI_SLE/modules/characterframe/communication.lua
@@ -245,7 +245,7 @@ if not AISM then
 				DataString = '0'
 			end

-			for i = 1, MAX_NUM_TALENT_TIERS do
+			for i = 1, MAX_TALENT_TIERS do
 				selectedSlot = '0'

 				for k = 1, NUM_TALENT_COLUMNS do
@@ -759,7 +759,7 @@ if not AISM then
 						elseif self.DataTypeTable[DataType] == 'Specialization' then
 							TableToSave.Specialization[Group].SpecializationID = stringTable[1]

-							for i = 1, MAX_NUM_TALENT_TIERS do
+							for i = 1, MAX_TALENT_TIERS do
 								for k = 1, NUM_TALENT_COLUMNS do
 									TableToSave.Specialization[Group]['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)] = k == stringTable[i + 1] and true or false
 								end
diff --git a/ElvUI_SLE/modules/characterframe/core.lua b/ElvUI_SLE/modules/characterframe/core.lua
index 8f22db0..305706e 100644
--- a/ElvUI_SLE/modules/characterframe/core.lua
+++ b/ElvUI_SLE/modules/characterframe/core.lua
@@ -1,4 +1,4 @@
-local E, L, V, P, G, _  = unpack(ElvUI)
+local E, L, V, P, G = unpack(ElvUI)

 -- Constants
 SLArmoryConstants = {
@@ -7,32 +7,27 @@ SLArmoryConstants = {
 	['EnchantKey'] = ENCHANTED_TOOLTIP_LINE:gsub('%%s', '(.+)'),
 	['ItemSetBonusKey'] = ITEM_SET_BONUS:gsub('%%s', '(.+)'),
 	['TransmogrifiedKey'] = TRANSMOGRIFIED:gsub('%%s', '(.+)'),
-
 	['GearList'] = {
 		'HeadSlot', 'HandsSlot', 'NeckSlot', 'WaistSlot', 'ShoulderSlot', 'LegsSlot', 'BackSlot', 'FeetSlot', 'ChestSlot', 'Finger0Slot',
 		'ShirtSlot', 'Finger1Slot', 'TabardSlot', 'Trinket0Slot', 'WristSlot', 'Trinket1Slot', 'SecondaryHandSlot', 'MainHandSlot'
 	},
-
 	['EnchantableSlots'] = {
-		['ShoulderSlot'] = true, ['BackSlot'] = true, ['ChestSlot'] = true, ['WristSlot'] = true, ['HandsSlot'] = true,
-		['LegsSlot'] = true, ['FeetSlot'] = true, ['MainHandSlot'] = true, ['SecondaryHandSlot'] = true
+		['NeckSlot'] = true, ['BackSlot'] = true, ['Finger0Slot'] = true, ['Finger1Slot'] = true, ['MainHandSlot'] = true, ['SecondaryHandSlot'] = true
 	},
-
 	['UpgradeColor'] = {
 		[16] = '|cffff9614', [12] = '|cfff88ef4', [8] = '|cff2eb7e4', [4] = '|cffceff00'
 	},
-
 	['GemColor'] = {
 		['RED'] = { 1, .2, .2, }, ['YELLOW'] = { .97, .82, .29, }, ['BLUE'] = { .47, .67, 1, }
 	},
-
 	['EmptySocketString'] = {
 		[EMPTY_SOCKET_BLUE] = true, [EMPTY_SOCKET_COGWHEEL] = true, [EMPTY_SOCKET_HYDRAULIC] = true, [EMPTY_SOCKET_META] = true,
 		[EMPTY_SOCKET_NO_COLOR] = true, [EMPTY_SOCKET_PRISMATIC] = true, [EMPTY_SOCKET_RED] = true, [EMPTY_SOCKET_YELLOW] = true
 	},
-
+	--171 per Darth can we trust him? lol
 	['ItemUpgrade'] = {
 		['0'] = 0, ['1'] = 8,
+		['171'] = 0,
 		['373'] = 4, ['374'] = 8, ['375'] = 4, ['376'] = 4, ['377'] = 4, ['379'] = 4, ['380'] = 4,
 		['445'] = 0, ['446'] = 4, ['447'] = 8, ['451'] = 0, ['452'] = 8, ['453'] = 0, ['454'] = 4,
 		['455'] = 8, ['456'] = 0, ['457'] = 8, ['458'] = 0, ['459'] = 4, ['460'] = 8, ['461'] = 12,
@@ -41,28 +36,25 @@ SLArmoryConstants = {
 		['491'] = 0, ['492'] = 4, ['493'] = 8, ['494'] = 0, ['495'] = 4, ['496'] = 8, ['497'] = 12, ['498'] = 16,
 		['504'] = 12, ['505'] = 16, ['506'] = 20, ['507'] = 24,
 	},
-
 	['ItemBindString'] = { -- Usually transmogrify string is located upper than bind string so we need to check this string for adding a transmogrify string in tooltip.
-			[ITEM_BIND_ON_EQUIP] = true,
-			[ITEM_BIND_ON_PICKUP] = true,
-			[ITEM_BIND_TO_ACCOUNT] = true,
-			[ITEM_BIND_TO_BNETACCOUNT] = true
-		},
-
+		[ITEM_BIND_ON_EQUIP] = true,
+		[ITEM_BIND_ON_PICKUP] = true,
+		[ITEM_BIND_TO_ACCOUNT] = true,
+		[ITEM_BIND_TO_BNETACCOUNT] = true
+	},
 	['CanTransmogrifySlot'] = {
-			['HeadSlot'] = true,
-			['ShoulderSlot'] = true,
-			['BackSlot'] = true,
-			['ChestSlot'] = true,
-			['WristSlot'] = true,
-			['HandsSlot'] = true,
-			['WaistSlot'] = true,
-			['LegsSlot'] = true,
-			['FeetSlot'] = true,
-			['MainHandSlot'] = true,
-			['SecondaryHandSlot'] = true
-		},
-
+		['HeadSlot'] = true,
+		['ShoulderSlot'] = true,
+		['BackSlot'] = true,
+		['ChestSlot'] = true,
+		['WristSlot'] = true,
+		['HandsSlot'] = true,
+		['WaistSlot'] = true,
+		['LegsSlot'] = true,
+		['FeetSlot'] = true,
+		['MainHandSlot'] = true,
+		['SecondaryHandSlot'] = true
+	},
 	['ItemEnchant_Profession_Inscription'] = {
 		['NeedLevel'] = 600,
 		['4912'] = true, -- ?? ?? ????			Secret Ox Horn Inscription
@@ -70,7 +62,6 @@ SLArmoryConstants = {
 		['4914'] = true, -- ?? ??? ?? ????	Secret Tiger Claw Inscription
 		['4915'] = true, -- ?? ??? ??? ????	Secret Tiger Fang Inscription
 	},
-
 	['ItemEnchant_Profession_LeatherWorking'] = {
 		['NeedLevel'] = 575,
 		['4875'] = true, -- ?? ?? - ?				Fur Lining - Strength
@@ -78,16 +69,13 @@ SLArmoryConstants = {
 		['4878'] = true, -- ?? ?? - ??			Fur Lining - Stamina
 		['4879'] = true, -- ?? ?? - ???			Fur Lining - Agility
 	},
-
 	['ItemEnchant_Profession_Tailoring'] = {
 		['NeedLevel'] = 550,
 		['4892'] = true, -- ??? ??					Lightweave Embroidery
 		['4893'] = true, -- ??? ??					Darkglow Embroidery
 		['4894'] = true, -- ?? ??					Swordguard Embroidery
 	},
-
 	['ProfessionList'] = {},
-
 	['CommonScript'] = {
 		['OnEnter'] = function(self)
 			if self.Link or self.Message then
@@ -168,7 +156,6 @@ SLArmoryConstants = {
 			end
 		end,
 	},
-
 	['Toolkit'] = {
 		['Color_Value'] = function(InputText)
 			return E:RGBToHex(E.media.rgbvaluecolor[1], E.media.rgbvaluecolor[2], E.media.rgbvaluecolor[3])..(InputText and InputText..'|r' or '')
@@ -196,12 +183,12 @@ SLArmoryConstants = {

 				self = self.text
 			end
-
+
 			self:FontTemplate(Style.Font and LibStub('LibSharedMedia-3.0'):Fetch('font', Style.Font), Style.FontSize, Style.FontOutline)
 			self:SetJustifyH(Style.directionH or 'CENTER')
 			self:SetJustifyV(Style.directionV or 'MIDDLE')
 			self:SetText(Text)
-
+
 			if ... then
 				self:Point(...)
 			else
@@ -247,7 +234,7 @@ SLArmoryConstants = {
 }

 --Get Profession Information
-local ProfessionName, ProfessionTexture
+--local ProfessionName, ProfessionTexture
 for ProfessionSkillID, Key in pairs({
 	[105206] = 'Alchemy',
 	[110396] = 'BlackSmithing',
@@ -262,8 +249,9 @@ for ProfessionSkillID, Key in pairs({
 	[102161] = 'Mining',
 	[102216] = 'Skinning'
 })
+
 do
-	ProfessionName, _, ProfessionTexture = GetSpellInfo(ProfessionSkillID)
+	local ProfessionName, _, ProfessionTexture = GetSpellInfo(ProfessionSkillID)

 	SLArmoryConstants.ProfessionList[ProfessionName] = {
 		['Key'] = Key,
@@ -331,7 +319,6 @@ _, L['Spec_Warlock_Affliction'] = GetSpecializationInfoByID(265)
 _, L['Spec_Warlock_Demonology'] = GetSpecializationInfoByID(266)
 _, L['Spec_Warlock_Destruction'] = GetSpecializationInfoByID(267)

-
 SLArmoryConstants['ClassRole'] = {
 	['WARRIOR'] = {
 		[L['Spec_Warrior_Arms']] = {		--무기
diff --git a/ElvUI_SLE/modules/characterframe/inspectframe.lua b/ElvUI_SLE/modules/characterframe/inspectframe.lua
index ee06111..ec4a5ef 100644
--- a/ElvUI_SLE/modules/characterframe/inspectframe.lua
+++ b/ElvUI_SLE/modules/characterframe/inspectframe.lua
@@ -1,6 +1,6 @@
-local E, L, V, P, G, _  = unpack(ElvUI)
+local E, L, V, P, G = unpack(ElvUI);
 local AISM = _G['Armory_InspectSupportModule']
-local IFO = E:NewModule('InspectFrameOptions', 'AceEvent-3.0')
+local IFO = E:GetModule('InspectFrameOptions')
 local SLE = E:GetModule('SLE');
 local S = E:GetModule('Skins')

@@ -2236,5 +2236,4 @@ function IFO:Initialize()
 	]]

 	SLI.Activate = true
-end
-E:RegisterModule(IFO:GetName())
\ No newline at end of file
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/characterframe/load_characterframe.xml b/ElvUI_SLE/modules/characterframe/load_characterframe.xml
old mode 100755
new mode 100644
index a72b240..d61040e
--- a/ElvUI_SLE/modules/characterframe/load_characterframe.xml
+++ b/ElvUI_SLE/modules/characterframe/load_characterframe.xml
@@ -1,9 +1,9 @@
 <Ui xmlns="http://www.blizzard.com/wow/ui/">
 	<Script file='core.lua'/>
-	<Script file='communication.lua'/>
-	<Script file='notifyinspect.lua'/>
+	<!--<Script file='communication.lua'/>
+	<Script file='notifyinspect.lua'/>-->
 	<Script file='characterframe.lua'/>
-	<Script file='inspectframe.lua'/>
+	<!--<Script file='inspectframe.lua'/>
 	<Button name="KnightInspect_UnitPopup" hidden="true" toplevel="true">
 		<ButtonText>
 			<Anchors>
@@ -15,6 +15,5 @@
 		<NormalFont style="GameFontHighlightSmallLeft"/>
 		<HighlightFont style="GameFontHighlightSmallLeft"/>
 		<DisabledFont style="GameFontDisableSmallLeft"/>
-	</Button>
-	<Script file='options.lua'/>
+	</Button>-->
 </Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/characterframe/options.lua b/ElvUI_SLE/modules/characterframe/options.lua
deleted file mode 100755
index 223b7d6..0000000
--- a/ElvUI_SLE/modules/characterframe/options.lua
+++ /dev/null
@@ -1,370 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local CFO = E:GetModule('CharacterFrameOptions')
-
-local function configTable()
-	E.Options.args.sle.args.characterframeoptions = {
-		type = 'group',
-		name = L["Armory Mode"],
-		order = 6,
-		childGroups = 'tab',
-		args = {
-			intro = {
-				order = -1,
-				type = 'description',
-				name = L['Test Description'],
-			},
-			characterframe = {
-				order = 2,
-				type = 'group',
-				name = L['Character Frame'],
-				args = {
-					header = {
-						order = 1,
-						type = "header",
-						name = L["Character Frame Options"],
-					},
-					intro = {
-						order = 2,
-						type = 'description',
-						name = L['CFO_DESC'],
-					},
-					enable = {
-						order = 3,
-						type = "toggle",
-						name = L["Enable"],
-						desc = L["Enable/Disable Character Frame Options"],
-						get = function(info) return E.private.sle.characterframeoptions.enable end,
-						set = function(info, value) E.private.sle.characterframeoptions.enable = value; E:StaticPopup_Show("PRIVATE_RL") end
-					},
-					decoration = {
-						type = "group",
-						name = L["Decoration"],
-						order = 55,
-						disabled = function() return not E.private.sle.characterframeoptions.enable end,
-						args = {
-							normalgradient = {
-								order = 1,
-								type = 'toggle',
-								name = L["Show Equipment Gradients"],
-								desc = L["Shows gradient effect for all equipment slots."],
-								get = function(info) return E.db.sle.characterframeoptions.shownormalgradient end,
-								set = function(info, value) E.db.sle.characterframeoptions.shownormalgradient = value; CFO:ChangeGradiantVisibility(); end,
-							},
-							errorgradient = {
-								order = 2,
-								type = 'toggle',
-								name = L["Show Error Gradients"],
-								desc = L["Highlights equipment slot if an error has been found."],
-								disabled = function() return not E.private.sle.characterframeoptions.enable or not E.db.sle.characterframeoptions.shownormalgradient end,
-								get = function(info) return E.db.sle.characterframeoptions.showerrorgradient end,
-								set = function(info, value) E.db.sle.characterframeoptions.showerrorgradient = value; CFO:ArmoryFrame_DataSetting(); end,
-							},
-							bgimage = {
-								order = 3,
-								type = 'toggle',
-								name = L["Show Background Image"],
-								get = function(info) return E.db.sle.characterframeoptions.showimage end,
-								set = function(info, value) E.db.sle.characterframeoptions.showimage = value; CFO:ArmoryFrame_DataSetting(); end,
-							},
-							dropdown = {
-								type = 'select',
-								name = L['Background picture'],
-								order = 4,
-								disabled = function() return not E.db.sle.characterframeoptions.showimage end,
-								values = {
-									['SPACE'] = 'Space',
-									['ALLIANCE'] = FACTION_ALLIANCE,
-									['HORDE'] = FACTION_HORDE,
-									['CUSTOM'] = L["Custom"],
-									["EMPIRE"] = "The Empire",
-									["CASTLE"] = "Castle",
-								},
-								get = function() return E.db.sle.characterframeoptions.image.dropdown end,
-								set = function(_, value)
-									E.db.sle.characterframeoptions.image.dropdown = value; CFO:ArmoryFrame_DataSetting();
-								end,
-
-							},
-							custom = {
-								order = 5,
-								type = 'input',
-								width = 'full',
-								name = L["Texture"],
-								desc = L["Set the texture to use in this frame. Requirements are the same as the chat textures."],
-								disabled = function() return E.db.sle.characterframeoptions.image.dropdown ~= "CUSTOM" or not E.db.sle.characterframeoptions.showimage end,
-								get = function() return E.db.sle.characterframeoptions.image.custom end,
-								set = function(info, value)
-									E.db.sle.characterframeoptions.image.custom = value;
-									CFO:ArmoryFrame_DataSetting();
-								end,
-							},
-						},
-					},
-					itemlevel = {
-						type = "group",
-						name = STAT_AVERAGE_ITEM_LEVEL,
-						order = 66,
-						disabled = function() return not E.private.sle.characterframeoptions.enable end,
-						args = {
-							show = {
-								order = 3,
-								type = "toggle",
-								name = L["Show Item Level"],
-								get = function(info) return E.db.sle.characterframeoptions.itemlevel.show end,
-								set = function(info, value) E.db.sle.characterframeoptions.itemlevel.show = value; CFO:ArmoryFrame_DataSetting(); end,
-							},
-							fontGroup = {
-								order = 5,
-								type = 'group',
-								guiInline = true,
-								name = L['Font'],
-								args = {
-									font = {
-										type = "select", dialogControl = 'LSM30_Font',
-										order = 1,
-										--name = L["Fonts"],
-										name = L["Font"],
-										desc = L["The font that the item level will use."],
-										values = AceGUIWidgetLSMlists.font,
-										get = function(info) return E.db.sle.characterframeoptions.itemlevel.font end,
-										set = function(info, value) E.db.sle.characterframeoptions.itemlevel.font = value; CFO:ArmoryFrame_DataSetting(); end,
-									},
-									fontSize = {
-										order = 2,
-										name = L["Font Size"],
-										desc = L["Set the font size that the item level will use."],
-										type = "range",
-										min = 6, max = 22, step = 1,
-										get = function(info) return E.db.sle.characterframeoptions.itemlevel.fontSize end,
-										set = function(info, value) E.db.sle.characterframeoptions.itemlevel.fontSize = value; CFO:ArmoryFrame_DataSetting(); end,
-									},
-									fontOutline = {
-										order = 3,
-										name = L["Font Outline"],
-										desc = L["Set the font outline that the item level will use."],
-										type = "select",
-										values = {
-											['NONE'] = L['None'],
-											['OUTLINE'] = 'OUTLINE',
-											['MONOCHROME'] = 'MONOCHROME',
-											['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
-											['THICKOUTLINE'] = 'THICKOUTLINE',
-										},
-										get = function(info) return E.db.sle.characterframeoptions.itemlevel.fontOutline end,
-										set = function(info, value) E.db.sle.characterframeoptions.itemlevel.fontOutline = value; CFO:ArmoryFrame_DataSetting(); end,
-									},
-								},
-							},
-						},
-					},
-					itemdurabilty = {
-						type = "group",
-						name = DURABILITY,
-						order = 77,
-						disabled = function() return not E.private.sle.characterframeoptions.enable end,
-						args = {
-							show = {
-								order = 3,
-								type = "toggle",
-								name = L["Show Durability"],
-								get = function(info) return E.db.sle.characterframeoptions.itemdurability.show end,
-								set = function(info, value) E.db.sle.characterframeoptions.itemdurability.show = value; CFO:ArmoryFrame_DataSetting(); end,
-							},
-							fontGroup = {
-								order = 5,
-								type = 'group',
-								guiInline = true,
-								name = L['Font'],
-								args = {
-									font = {
-										type = "select", dialogControl = 'LSM30_Font',
-										order = 1,
-										name = L["Font"],
-										desc = L["The font that the item durability will use."],
-										values = AceGUIWidgetLSMlists.font,
-										get = function(info) return E.db.sle.characterframeoptions.itemdurability.font end,
-										set = function(info, value) E.db.sle.characterframeoptions.itemdurability.font = value; CFO:ArmoryFrame_DataSetting(); end,
-									},
-									fontSize = {
-										order = 2,
-										name = L["Font Size"],
-										desc = L["Set the font size that the item durability will use."],
-										type = "range",
-										min = 6, max = 22, step = 1,
-										get = function(info) return E.db.sle.characterframeoptions.itemdurability.fontSize end,
-										set = function(info, value) E.db.sle.characterframeoptions.itemdurability.fontSize = value; CFO:ArmoryFrame_DataSetting(); end,
-									},
-									fontOutline = {
-										order = 3,
-										name = L["Font Outline"],
-										desc = L["Set the font outline that the item durability will use."],
-										type = "select",
-										values = {
-											['NONE'] = L['None'],
-											['OUTLINE'] = 'OUTLINE',
-											['MONOCHROME'] = 'MONOCHROME',
-											['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
-											['THICKOUTLINE'] = 'THICKOUTLINE',
-										},
-										get = function(info) return E.db.sle.characterframeoptions.itemdurability.fontOutline end,
-										set = function(info, value) E.db.sle.characterframeoptions.itemdurability.fontOutline = value; CFO:ArmoryFrame_DataSetting(); end,
-									},
-								},
-							},
-						},
-					},
-					itemenchant = {
-						type = "group",
-						name = L["Enchanting"],
-						order = 88,
-						disabled = function() return not E.private.sle.characterframeoptions.enable end,
-						args = {
-							show = {
-								order = 1,
-								type = "toggle",
-								name = L["Show Enchants"],
-								desc = L["Show the enchantment effect near the enchanted item"],
-								get = function(info) return E.db.sle.characterframeoptions.itemenchant.show end,
-								set = function(info, value) E.db.sle.characterframeoptions.itemenchant.show = value; CFO:ArmoryFrame_DataSetting(); end,
-							},
-							mouseover = {
-								order = 2,
-								type = "toggle",
-								name = L['Mouse Over'],
-								desc = L["Show the enchantment effect near the enchanted item (not the item itself) when mousing over."],
-								disabled = function() return not E.db.sle.characterframeoptions.itemenchant.show or not E.private.sle.characterframeoptions.enable end,
-								get = function(info) return E.db.sle.characterframeoptions.itemenchant.mouseover end,
-								set = function(info, value) E.db.sle.characterframeoptions.itemenchant.mouseover = value; CFO:ArmoryFrame_DataSetting(); end,
-							},
-							showwarning = {
-								order = 3,
-								type = "toggle",
-								name = L["Show Warning"],
-								get = function(info) return E.db.sle.characterframeoptions.itemenchant.showwarning end,
-								set = function(info, value) E.db.sle.characterframeoptions.itemenchant.showwarning = value; CFO:ArmoryFrame_DataSetting(); end,
-							},
-							warningsize = {
-								order = 4,
-								name = L["Warning Size"],
-								desc = L["Set the icon size that the warning notification will use."],
-								type = "range",
-								min = 8, max = 18, step = 1,
-								get = function(info) return E.db.sle.characterframeoptions.itemenchant.warningSize end,
-								set = function(info, value) E.db.sle.characterframeoptions.itemenchant.warningSize = value; CFO:ResizeErrorIcon(); end,
-							},
-							fontGroup = {
-								order = 5,
-								type = 'group',
-								guiInline = true,
-								name = L['Font'],
-								args = {
-									font = {
-										type = "select", dialogControl = 'LSM30_Font',
-										order = 1,
-										name = L["Font"],
-										desc = L["The font that the enchant notification will use."],
-										values = AceGUIWidgetLSMlists.font,
-										get = function(info) return E.db.sle.characterframeoptions.itemenchant.font end,
-										set = function(info, value) E.db.sle.characterframeoptions.itemenchant.font = value; CFO:ArmoryFrame_DataSetting(); end,
-									},
-									fontSize = {
-										order = 2,
-										name = L["Font Size"],
-										desc = L["Set the font size that the enchant notification will use."],
-										type = "range",
-										min = 6, max = 22, step = 1,
-										get = function(info) return E.db.sle.characterframeoptions.itemenchant.fontSize end,
-										set = function(info, value) E.db.sle.characterframeoptions.itemenchant.fontSize = value; CFO:ArmoryFrame_DataSetting(); end,
-									},
-									fontOutline = {
-										order = 3,
-										name = L["Font Outline"],
-										desc = L["Set the font outline that the enchant notification will use."],
-										type = "select",
-										values = {
-											['NONE'] = L['None'],
-											['OUTLINE'] = 'OUTLINE',
-											['MONOCHROME'] = 'MONOCHROME',
-											['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
-											['THICKOUTLINE'] = 'THICKOUTLINE',
-										},
-										get = function(info) return E.db.sle.characterframeoptions.itemenchant.fontOutline end,
-										set = function(info, value) E.db.sle.characterframeoptions.itemenchant.fontOutline = value; CFO:ArmoryFrame_DataSetting(); end,
-									},
-								},
-							},
-						},
-					},
-					itemgem = {
-						type = "group",
-						name = L["Gem Sockets"],
-						order = 99,
-						disabled = function() return not E.private.sle.characterframeoptions.enable end,
-						args = {
-							show = {
-								order = 1,
-								type = "toggle",
-								name = L["Show Gems"],
-								desc = L["Show gem slots near the item"],
-								get = function(info) return E.db.sle.characterframeoptions.itemgem.show end,
-								set = function(info, value) E.db.sle.characterframeoptions.itemgem.show = value; CFO:ArmoryFrame_DataSetting(); end,
-							},
-							showwarning = {
-								order = 2,
-								type = "toggle",
-								name = L["Show Warning"],
-								get = function(info) return E.db.sle.characterframeoptions.itemgem.showwarning end,
-								set = function(info, value) E.db.sle.characterframeoptions.itemgem.showwarning = value; CFO:ArmoryFrame_DataSetting(); end,
-							},
-							warningsize = {
-								order = 3,
-								name = L["Warning Size"],
-								desc = L["Set the icon size that the warning notification will use."],
-								type = "range",
-								min = 8, max = 18, step = 1,
-								get = function(info) return E.db.sle.characterframeoptions.itemgem.warningSize end,
-								set = function(info, value) E.db.sle.characterframeoptions.itemgem.warningSize = value; CFO:ResizeErrorIcon(); end,
-							},
-							socketsize = {
-								order = 4,
-								name = L["Socket Size"],
-								desc = L["Set the size of sockets to show."],
-								type = "range",
-								min = 10, max = 18, step = 1,
-								get = function(info) return E.db.sle.characterframeoptions.itemgem.socketSize end,
-								set = function(info, value) E.db.sle.characterframeoptions.itemgem.socketSize = value; CFO:ResizeErrorIcon(); end,
-							},
-						},
-					},
-				},
-			},
-			inspectframe = {
-				order = 2,
-				type = 'group',
-				name = L['Inspect Frame'],
-				args = {
-					header = {
-						order = 1,
-						type = "header",
-						name = L["Inspect Frame Options"],
-					},
-					intro = {
-						order = 2,
-						type = 'description',
-						name = L['IFO_DESC'],
-					},
-					enable = {
-						order = 3,
-						type = "toggle",
-						name = L["Enable"],
-						desc = L["Enable/Disable Inspect Frame Options"],
-						get = function(info) return E.private.sle.inspectframeoptions.enable end,
-						set = function(info, value) E.private.sle.inspectframeoptions.enable = value; E:StaticPopup_Show("PRIVATE_RL") end
-					},
-				},
-			},
-		},
-	}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/chat.lua b/ElvUI_SLE/modules/chat.lua
new file mode 100644
index 0000000..f60c68a
--- /dev/null
+++ b/ElvUI_SLE/modules/chat.lua
@@ -0,0 +1,385 @@
+local E, L, V, P, G = unpack(ElvUI);
+local CH = E:GetModule('Chat')
+local SLE = E:GetModule('SLE');
+local LSM = LibStub("LibSharedMedia-3.0")
+local CreatedFrames = 0;
+local lfgRoles = {};
+local chatFilters = {};
+local lfgChannels = {
+	"PARTY_LEADER",
+	"PARTY",
+	"RAID",
+	"RAID_LEADER",
+	"INSTANCE_CHAT",
+	"INSTANCE_CHAT_LEADER",
+}
+
+local Myname = E.myname
+local GetGuildRosterInfo = GetGuildRosterInfo
+local IsInGuild = IsInGuild
+local GuildMaster = ""
+local GMName, GMRealm
+
+local len, gsub, find, sub, gmatch, format, random = string.len, string.gsub, string.find, string.sub, string.gmatch, string.format, math.random
+local tinsert, tremove, tsort, twipe, tconcat = table.insert, table.remove, table.sort, table.wipe, table.concat
+
+local PLAYER_REALM = gsub(E.myrealm,'[%s%-]','')
+local PLAYER_NAME = Myname.."-"..PLAYER_REALM
+
+local rolePaths = {
+	TANK = [[|TInterface\AddOns\ElvUI\media\textures\tank:15:15:0:0:64:64:2:56:2:56|t]],
+	HEALER = [[|TInterface\AddOns\ElvUI\media\textures\healer:15:15:0:0:64:64:2:56:2:56|t]],
+	DAMAGER = [[|TInterface\AddOns\ElvUI\media\textures\dps:15:15|t]]
+}
+
+--Chat icon paths
+local adapt = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\adapt:0:2|t"
+local repooc = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Chat_Logo:0:2|t"
+local darth = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Chat_LogoD:0:2|t"
+local friend = "|TInterface\\Icons\\Spell_Holy_PrayerofSpirit:16:16|t"
+local test = "|TInterface\\Icons\\Achievement_PVP_H_03:16:16|t"
+local rpg = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\Chat_RPG:13:35|t"
+local kitalie = "|TInterface\\Icons\\%s:12:12:0:0:64:64:4:60:4:60|t"
+local leader = [[|TInterface\GroupFrame\UI-Group-LeaderIcon:12:12|t]]
+
+
+local specialChatIcons = {
+	["Spirestone"] = {
+		["Sifupooc"] = repooc,
+		["Dapooc"] = repooc,
+		["Lapooc"] = repooc,
+		["Warpooc"] = repooc,
+		["Repooc"] = repooc,
+		["Cursewordz"] = repooc,
+		--Adapt Roster
+		["Mobius"] = adapt,
+		["Urgfelstorm"] = adapt,
+		["Kilashandra"] = adapt,
+		["Electrro"] = adapt,
+		["Afterthot"] = adapt,
+		["Lavathing"] = adapt,
+		["Finkle"] = adapt,
+		["Chopsti"] = adapt,
+		["Taiin"] = adapt
+	},
+	["Illidan"] = {
+		--Darth's toon
+		["Darthpred"] = darth,
+		--Repooc's Toon
+		["Repøøc"] = repooc,
+		["Repooc"] = repooc
+	},
+	["WyrmrestAccord"] = {
+		["Kìtalie"] = kitalie:format("inv_cloth_challengewarlock_d_01helm"),
+		["Sagome"] = kitalie:format("inv_helm_leather_challengemonk_d_01"),
+		["Ainy"] = kitalie:format("inv_helm_plate_challengedeathknight_d_01"),
+		["Norinael"] = kitalie:format("inv_helmet_plate_challengepaladin_d_01"),
+		["Tritalie"] = kitalie:format("inv_helm_cloth_challengemage_d_01"),
+		["Myùn"] = kitalie:format("inv_helmet_mail_challengeshaman_d_01"),
+		["Nevaleigh"] = kitalie:format("inv_helmet_leather_challengerogue_d_01"),
+		["Celenii"] = kitalie:format("inv_helmet_cloth_challengepriest_d_01"),
+		["Varysa"] = kitalie:format("inv_helmet_mail_challengehunter_d_01"),
+		["Caylasena"] = kitalie:format("inv_helm_plate_challengewarrior_d_01"),
+		["Arillora"] = kitalie:format("inv_helmet_challengedruid_d_01"),
+		["Dapooc"] = repooc,
+	},
+	["СвежевательДуш"] = {
+		--Darth's toons
+		["Большойгном"] = test, --Testing toon
+		["Фергесон"] = friend
+	},
+	["ВечнаяПесня"] = {
+		--Darth's toons
+		["Дартпредатор"] = darth,
+		["Алея"] = darth,
+		["Ваззули"] = darth,
+		["Сиаранна"] = darth,
+		["Джатон"] = darth,
+		["Фикстер"] = darth,
+		["Киландра"] = darth,
+		["Нарджо"] = darth,
+		["Келинира"] = darth,
+		["Крениг"] = darth,
+		["Мейжи"] = darth,
+		--Darth's friends
+		["Леани"] = friend,
+		--Da tester lol
+		["Харореанн"] = test,
+		["Нерререанн"] = test
+	},
+	["Ревущийфьорд"] = {
+		["Рыжая"] = friend,
+		["Рыжа"] = friend,
+		--Some people
+		["Брэгар"] = test
+	},
+	["Азурегос"] = {
+		["Брэгари"] = test
+	},
+	["Andorhal"] = {
+		["Dapooc"] = repooc,
+		["Rovert"] = repooc,
+		["Sliceoflife"] = repooc
+	},
+}
+
+SLE.SpecialChatIcons = specialChatIcons
+
+local function Style(self, frame)
+	CreatedFrames = frame:GetID()
+end
+
+--Replacement of chat tab position and size function
+local PixelOff = E.PixelMode and 31 or 27
+
+local function Position()
+	if not E.db.sle.datatext.chathandle then return end
+	local BASE_OFFSET = 60
+	if E.PixelMode then
+		BASE_OFFSET = BASE_OFFSET - 3
+	end
+	local chat, id, isDocked, point
+	for i=1, CreatedFrames do
+		chat = _G[format("ChatFrame%d", i)]
+		id = chat:GetID()
+		tab = _G[format("ChatFrame%sTab", i)]
+		point = GetChatWindowSavedPosition(id)
+		isDocked = chat.isDocked
+
+		if point == "BOTTOMRIGHT" and chat:IsShown() and not (id > NUM_CHAT_WINDOWS) and id == CH.RightChatWindowID then
+			chat:ClearAllPoints()
+			if E.db.datatexts.rightChatPanel then
+				chat:Point("BOTTOMRIGHT", RightChatDataPanel, "TOPRIGHT", 10, 3)
+			else
+				BASE_OFFSET = BASE_OFFSET - 24
+				chat:SetPoint("BOTTOMLEFT", RightChatPanel, "BOTTOMLEFT", 4, 4)
+			end
+			if id ~= 2 then
+				chat:SetSize(E.db.chat.panelWidth - 11, (E.db.chat.panelHeight - PixelOff))
+			end
+		elseif not isDocked and chat:IsShown() then
+
+		else
+			if id ~= 2 and not (id > NUM_CHAT_WINDOWS) then
+				if  not E.db.datatexts.leftChatPanel then
+					BASE_OFFSET = BASE_OFFSET - 24
+					chat:SetPoint("BOTTOMLEFT", LeftChatPanel, "BOTTOMLEFT", 1, 4)
+				end
+				chat:Size(E.db.chat.panelWidth - 11, (E.db.chat.panelHeight - PixelOff))
+			end
+		end
+	end
+end
+
+local function GetChatIcon(sender)
+	local senderName, senderRealm
+	if sender then
+		senderName, senderRealm = string.split('-', sender)
+	else
+		senderName = Myname
+	end
+	senderRealm = senderRealm or PLAYER_REALM
+	senderRealm = senderRealm:gsub(' ', '')
+
+	--Disabling ALL special icons. IDK why Elv use that and why would we want to have that but whatever
+	if specialChatIcons[PLAYER_REALM] and specialChatIcons[PLAYER_REALM][Myname] ~= true then
+		if specialChatIcons[senderRealm] and specialChatIcons[senderRealm][senderName] then
+			return specialChatIcons[senderRealm][senderName]
+		end
+	end
+
+	if not IsInGuild() then return "" end
+	if not E.db.sle.chat.guildmaster then return "" end
+	if senderName == GMName and senderRealm == GMRealm then
+		return leader
+	end
+
+	return
+end
+
+function CH:GetPluginReplacementIcon(arg2, arg6, type)
+	local icon
+	if arg6 and (strlen(arg6) > 0) then
+		if ( arg6 == "GM" ) then
+			--If it was a whisper, dispatch it to the GMChat addon.
+			if ( type == "WHISPER" ) then
+				return;
+			end
+			--Add Blizzard Icon, this was sent by a GM
+			icon = "|TInterface\\ChatFrame\\UI-ChatIcon-Blizz:12:20:0:0:32:16:4:28:0:16|t ";
+		elseif ( arg6 == "DEV" ) then
+			--Add Blizzard Icon, this was sent by a Dev
+			icon = "|TInterface\\ChatFrame\\UI-ChatIcon-Blizz:12:20:0:0:32:16:4:28:0:16|t ";
+		elseif ( arg6 == "DND" or arg6 == "AFK") then
+			icon = GetChatIcon(arg2).._G["CHAT_FLAG_"..arg6]
+		else
+			icon = _G["CHAT_FLAG_"..arg6];
+		end
+	else
+		icon = GetChatIcon(arg2)
+
+		if(lfgRoles[arg2] and SLE:SimpleTable(lfgChannels, type)) then
+			icon = lfgRoles[arg2]..icon
+		end
+	end
+	if icon == "" then icon = nil end
+	return icon, true
+end
+
+function CH:CheckLFGRoles()
+	local isInGroup, isInRaid = IsInGroup(), IsInRaid()
+	local unit = isInRaid and "raid" or "party"
+	local name, realm
+	twipe(lfgRoles)
+
+	if(not isInGroup or not self.db.lfgIcons) then return end
+
+	local role = UnitGroupRolesAssigned("player")
+	if(role) then
+		lfgRoles[PLAYER_NAME] = rolePaths[role]
+	end
+
+	for i=1, GetNumGroupMembers() do
+		if(UnitExists(unit..i) and not UnitIsUnit(unit..i, "player")) then
+			role = UnitGroupRolesAssigned(unit..i)
+			local name, realm = UnitName(unit..i)
+
+			if(role and name) then
+				name = realm and name..'-'..realm or name..'-'..PLAYER_REALM;
+				lfgRoles[name] = rolePaths[role]
+			end
+		end
+	end
+end
+
+local function GMCheck()
+	local name, rank
+	if GetNumGuildMembers() == 0 and IsInGuild() then E:Delay(2, GMCheck); return end
+	if not IsInGuild() then GuildMaster = ""; GMName = ''; GMRealm = ''; return end
+	for i = 1, GetNumGuildMembers() do
+		name, _, rank = GetGuildRosterInfo(i)
+		if rank == 0 then
+			break
+		end
+	end
+
+	GuildMaster = name
+	if GuildMaster then
+		GMName, GMRealm = string.split('-', GuildMaster)
+	end
+	GMRealm = GMRealm or PLAYER_REALM
+	GMRealm = GMRealm:gsub(' ', '')
+end
+
+local function Roster(event, update)
+ if update then GMCheck() end
+end
+
+function CH:GMIconUpdate()
+	if E.private.chat.enable ~= true then return end
+	if E.db.sle.chat.guildmaster then
+		self:RegisterEvent('GUILD_ROSTER_UPDATE', Roster)
+		GMCheck()
+	else
+		self:UnregisterEvent('GUILD_ROSTER_UPDATE')
+		GuildMaster = ""
+		GMName = ''
+		GMRealm = ''
+	end
+end
+
+--Previously layout.lua
+local LO = E:GetModule('Layout');
+local PANEL_HEIGHT = 22;
+local SIDE_BUTTON_WIDTH = 16;
+local function ChatPanels()
+	if not E.db.sle.datatext.chathandle then return end
+
+	if not E:HasMoverBeenMoved("LeftChatMover") and E.db.datatexts.leftChatPanel then
+		if not E.db.movers then E.db.movers = {}; end
+		if E.PixelMode then
+			E.db.movers.LeftChatMover = "BOTTOMLEFTUIParentBOTTOMLEFT019"
+		else
+			E.db.movers.LeftChatMover = "BOTTOMLEFTUIParentBOTTOMLEFT021"
+		end
+		E:SetMoversPositions()
+	end
+
+	if not E:HasMoverBeenMoved("RightChatMover") and E.db.datatexts.rightChatPanel then
+		if not E.db.movers then E.db.movers = {}; end
+		if E.PixelMode then
+			E.db.movers.RightChatMover = "BOTTOMRIGHTUIParentBOTTOMRIGHT019"
+		else
+			E.db.movers.RightChatMover = "BOTTOMRIGHTUIParentBOTTOMRIGHT021"
+		end
+		E:SetMoversPositions()
+	end
+
+	if E.db.chat.panelBackdrop == 'SHOWBOTH' then
+		LeftChatPanel.backdrop:Show()
+		RightChatPanel.backdrop:Show()
+
+		LeftChatDataPanel:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', SIDE_BUTTON_WIDTH, (E.PixelMode and -19 or -21)) --lower line of datapanel
+		LeftChatDataPanel:Point('TOPRIGHT', LeftChatPanel, 'BOTTOMLEFT', 16 + E.db.sle.datatext.chatleft.width, (E.PixelMode and 1 or -1)) --upper line of datapanel
+		RightChatDataPanel:Point('BOTTOMLEFT', RightChatPanel, 'BOTTOMRIGHT', - (E.db.sle.datatext.chatright.width + 16), (E.PixelMode and -19 or -21)) --lower-left corner of right datapanel
+		RightChatDataPanel:Point('TOPRIGHT', RightChatPanel, 'BOTTOMRIGHT', -SIDE_BUTTON_WIDTH, (E.PixelMode and 1 or -1))	--upper-right corner of right datapanel
+		LeftChatToggleButton:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', 0, (E.PixelMode and -19 or -21))
+		RightChatToggleButton:Point('BOTTOMRIGHT', RightChatPanel, 'BOTTOMRIGHT', 0, (E.PixelMode and -19 or -21))
+		LO:ToggleChatTabPanels()
+	elseif E.db.chat.panelBackdrop == 'HIDEBOTH' then
+		LeftChatPanel.backdrop:Hide()
+		RightChatPanel.backdrop:Hide()
+
+		LeftChatDataPanel:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', SIDE_BUTTON_WIDTH, (E.PixelMode and -19 or -21)) --lower line of datapanel
+		LeftChatDataPanel:Point('TOPRIGHT', LeftChatPanel, 'BOTTOMLEFT', 16 + E.db.sle.datatext.chatleft.width, (E.PixelMode and 1 or -1)) --upper line of datapanel
+		RightChatDataPanel:Point('BOTTOMLEFT', RightChatPanel, 'BOTTOMRIGHT', - (E.db.sle.datatext.chatright.width + 16), (E.PixelMode and -19 or -21)) --lower-left corner of right datapanel
+		RightChatDataPanel:Point('TOPRIGHT', RightChatPanel, 'BOTTOMRIGHT', -SIDE_BUTTON_WIDTH, (E.PixelMode and 1 or -1))	--upper-right corner of right datapanel
+		LeftChatToggleButton:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', 0, (E.PixelMode and -19 or -21))
+		RightChatToggleButton:Point('BOTTOMRIGHT', RightChatPanel, 'BOTTOMRIGHT', 0, (E.PixelMode and -19 or -21))
+		LO:ToggleChatTabPanels(true, true)
+	elseif E.db.chat.panelBackdrop == 'LEFT' then
+		LeftChatPanel.backdrop:Show()
+		RightChatPanel.backdrop:Hide()
+
+		LeftChatDataPanel:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', SIDE_BUTTON_WIDTH, (E.PixelMode and -19 or -21)) --lower line of datapanel
+		LeftChatDataPanel:Point('TOPRIGHT', LeftChatPanel, 'BOTTOMLEFT', 16 + E.db.sle.datatext.chatleft.width, (E.PixelMode and 1 or -1)) --upper line of datapanel
+		RightChatDataPanel:Point('BOTTOMLEFT', RightChatPanel, 'BOTTOMRIGHT', - (E.db.sle.datatext.chatright.width + 16), (E.PixelMode and -19 or -21)) --lower-left corner of right datapanel
+		RightChatDataPanel:Point('TOPRIGHT', RightChatPanel, 'BOTTOMRIGHT', -SIDE_BUTTON_WIDTH, (E.PixelMode and 1 or -1))	--upper-right corner of right datapanel
+		LeftChatToggleButton:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', 0, (E.PixelMode and -19 or -21))
+		RightChatToggleButton:Point('BOTTOMRIGHT', RightChatPanel, 'BOTTOMRIGHT', 0, (E.PixelMode and -19 or -21))
+		LO:ToggleChatTabPanels(true)
+	else
+		LeftChatPanel.backdrop:Hide()
+		RightChatPanel.backdrop:Show()
+
+		LeftChatDataPanel:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', SIDE_BUTTON_WIDTH, (E.PixelMode and -19 or -21)) --lower line of datapanel
+		LeftChatDataPanel:Point('TOPRIGHT', LeftChatPanel, 'BOTTOMLEFT', 16 + E.db.sle.datatext.chatleft.width, (E.PixelMode and 1 or -1)) --upper line of datapanel
+		RightChatDataPanel:Point('BOTTOMLEFT', RightChatPanel, 'BOTTOMRIGHT', - (E.db.sle.datatext.chatright.width + 16), (E.PixelMode and -19 or -21)) --lower-left corner of right datapanel
+		RightChatDataPanel:Point('TOPRIGHT', RightChatPanel, 'BOTTOMRIGHT', -SIDE_BUTTON_WIDTH, (E.PixelMode and 1 or -1))	--upper-right corner of right datapanel
+		LeftChatToggleButton:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', 0, (E.PixelMode and -19 or -21))
+		RightChatToggleButton:Point('BOTTOMRIGHT', RightChatPanel, 'BOTTOMRIGHT', 0, (E.PixelMode and -19 or -21))
+		LO:ToggleChatTabPanels(nil, true)
+	end
+end
+
+local function CreateChatPanels()
+	--Left Chat Tab
+	LeftChatTab:Point('TOPLEFT', LeftChatPanel, 'TOPLEFT', 2, -2)
+	LeftChatTab:Point('BOTTOMRIGHT', LeftChatPanel, 'TOPRIGHT', -2, -PANEL_HEIGHT)
+	--Preventing left chat datapanel fading
+	ChatFrame1EditBox:Hide()
+	--Right Chat Tab
+	RightChatTab:Point('TOPRIGHT', RightChatPanel, 'TOPRIGHT', -2, -2)
+	RightChatTab:Point('BOTTOMLEFT', RightChatPanel, 'TOPLEFT', 2, -PANEL_HEIGHT)
+end
+
+hooksecurefunc(LO, "ToggleChatPanels", ChatPanels)
+hooksecurefunc(LO, "CreateChatPanels", CreateChatPanels)
+hooksecurefunc(CH, "StyleChat", Style)
+hooksecurefunc(CH, "PositionChat", Position)
+hooksecurefunc(CH, "Initialize", function(self)
+	if E.db.sle.chat.guildmaster then
+		self:RegisterEvent('GUILD_ROSTER_UPDATE', Roster)
+		GMCheck()
+	end
+end)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/chat/chat.lua b/ElvUI_SLE/modules/chat/chat.lua
deleted file mode 100755
index c62f231..0000000
--- a/ElvUI_SLE/modules/chat/chat.lua
+++ /dev/null
@@ -1,972 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local CH = E:GetModule('Chat')
-local SLE = E:GetModule('SLE');
-local LSM = LibStub("LibSharedMedia-3.0")
-local CreatedFrames = 0;
-local lfgRoles = {};
-local chatFilters = {};
-local lfgChannels = {
-	"PARTY_LEADER",
-	"PARTY",
-	"RAID",
-	"RAID_LEADER",
-	"INSTANCE_CHAT",
-	"INSTANCE_CHAT_LEADER",
-}
-
-local Myname = E.myname
---local Myrealm = E.myrealm
-
-local len, gsub, find, sub, gmatch, format, random = string.len, string.gsub, string.find, string.sub, string.gmatch, string.format, math.random
-local tinsert, tremove, tsort, twipe, tconcat = table.insert, table.remove, table.sort, table.wipe, table.concat
-
---Myrealm = Myrealm:gsub(' ', '')
-
-local PLAYER_REALM = gsub(E.myrealm,'[%s%-]','')
-local PLAYER_NAME = Myname.."-"..PLAYER_REALM
-
-local rolePaths = {
-	TANK = [[|TInterface\AddOns\ElvUI\media\textures\tank:15:15:0:0:64:64:2:56:2:56|t]],
-	HEALER = [[|TInterface\AddOns\ElvUI\media\textures\healer:15:15:0:0:64:64:2:56:2:56|t]],
-	DAMAGER = [[|TInterface\AddOns\ElvUI\media\textures\dps:15:15|t]]
-}
-
---Chat icon paths
-local elvui = "|TInterface\\AddOns\\ElvUI\\media\\textures\\ElvUI_Chat_Logo:13:22|t"
-local affinity = "|TInterface\\AddOns\\ElvUI\\media\\textures\\Bathrobe_Chat_Logo:15:15|t"
-local adapt = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\adapt:0:2|t"
-local repooc = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Chat_Logo:0:2|t"
-local darth = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Chat_LogoD:0:2|t"
-local friend = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\Chat_Friend:13:13|t"
-local test = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\Chat_Test:13:13|t"
-local rpg = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\Chat_RPG:13:35|t"
-local tyrone = "|TInterface\\AddOns\\ElvUI\\media\\textures\\tyrone_biggums_chat_logo:16:18|t"
-local hulkhead = "|TInterface\\AddOns\\ElvUI\\media\\textures\\hulk_head:18:22|t"
-local hellokitty = "|TInterface\\AddOns\\ElvUI\\media\\textures\\helloKittyChatLogo:18:20|t"
-local shortbus = "|TInterface\\AddOns\\ElvUI\\media\\textures\\short_bus:16:16|t"
-local kitalie = "|TInterface\\Icons\\%s:12:12:0:0:64:64:4:60:4:60|t"
-
-
-local specialChatIcons = {
-	["BleedingHollow"] = {
-		["Tirain"] = tyrone
-	},
-	["Spirestone"] = {
-		["Aeriane"] = true,
-		["Sinth"] = tyrone,
-		["Elvz"] = elvui,
-		["Sarah"] = hellokitty,
-		["Sara"] = hellokitty,
-		["Sarâh"] = hellokitty,
-		["Itzjonny"] = hulkhead,
-		["Elv"] = elvui,
-		["Incision"] = shortbus,
-		--SLE stuff
-		["Sifupooc"] = repooc,
-		["Dapooc"] = repooc,
-		["Lapooc"] = repooc,
-		["Warpooc"] = repooc,
-		["Repooc"] = repooc,
-		--Adapt Roster
-		["Mobius"] = adapt,
-		["Urgfelstorm"] = adapt,
-		["Kilashandra"] = adapt,
-		["Electrro"] = adapt,
-		["Afterthot"] = adapt,
-		["Lavathing"] = adapt,
-		["Finkle"] = adapt,
-		["Chopsti"] = adapt,
-		["Taiin"] = adapt
-	},
-	["Illidan"] = {
-		--Original Stuff
-		["Affinichi"] = affinity,
-		["Uplift"] = affinity,
-		["Affinitii"] = affinity,
-		["Affinity"] = affinity,
-		--Darth's toon
-		["Darthpred"] = darth,
-		--Repooc's Toon
-		["Repøøc"] = repooc,
-		["Repooc"] = repooc
-	},
-	["WyrmrestAccord"] = {
-		["Kìtalie"] = kitalie:format("inv_cloth_challengewarlock_d_01helm"),
-		["Sagome"] = kitalie:format("inv_helm_leather_challengemonk_d_01"),
-		["Ainy"] = kitalie:format("inv_helm_plate_challengedeathknight_d_01"),
-		["Norinael"] = kitalie:format("inv_helmet_plate_challengepaladin_d_01"),
-		["Tritalie"] = kitalie:format("inv_helm_cloth_challengemage_d_01"),
-		["Myùn"] = kitalie:format("inv_helmet_mail_challengeshaman_d_01"),
-		["Nevaleigh"] = kitalie:format("inv_helmet_leather_challengerogue_d_01"),
-		["Celenii"] = kitalie:format("inv_helmet_cloth_challengepriest_d_01"),
-		["Varysa"] = kitalie:format("inv_helmet_mail_challengehunter_d_01"),
-		["Caylasena"] = kitalie:format("inv_helm_plate_challengewarrior_d_01"),
-		["Arillora"] = kitalie:format("inv_helmet_challengedruid_d_01"),
-		["Dapooc"] = repooc,
-	},
-	["СвежевательДуш"] = {
-		--Darth's toons
-		["Большойгном"] = test, --Testing toon
-		["Фергесон"] = friend
-	},
-	["ВечнаяПесня"] = {
-		--Darth's toons
-		["Дартпредатор"] = darth,
-		["Алея"] = darth,
-		["Ваззули"] = darth,
-		["Сиаранна"] = darth,
-		["Джатон"] = darth,
-		["Фикстер"] = darth,
-		["Киландра"] = darth,
-		["Нарджо"] = darth,
-		["Келинира"] = darth,
-		["Крениг"] = darth,
-		["Мейжи"] = darth,
-		--Darth's friends
-		["Леани"] = friend,
-		--Da tester lol
-		["Харореанн"] = test,
-		["Нерререанн"] = test
-	},
-	["Ревущийфьорд"] = {
-		["Рыжая"] = friend,
-		["Рыжа"] = friend,
-				--Some people
-		["Брэгар"] = test
-	},
-	["Азурегос"] = {
-		["Брэгари"] = test
-	},
-	["Korialstrasz"] = {
-		["Cursewordz"] = repooc
-	},
-	["Andorhal"] = {
-		["Dapooc"] = repooc,
-		["Rovert"] = repooc,
-		["Sliceoflife"] = repooc
-	},
-}
-
-SLE.SpecialChatIcons = specialChatIcons;
-
-CH.StyleChatSLE = CH.StyleChat
-function CH:StyleChat(frame)
-	CH:StyleChatSLE(frame)
-	CreatedFrames = frame:GetID()
-end
-
---Replacement of chat tab position and size function
-function CH:PositionChat(override)
-	if not self.db.lockPositions or ((InCombatLockdown() and not override and self.initialMove) or (IsMouseButtonDown("LeftButton") and not override)) then return end
-	if not RightChatPanel or not LeftChatPanel then return; end
-	RightChatPanel:Size(E.db.chat.panelWidth, E.db.chat.panelHeight)
-	LeftChatPanel:Size(E.db.chat.panelWidth, E.db.chat.panelHeight)
-
-	if E.private.chat.enable ~= true then return end
-
-	local chat, chatbg, tab, id, point, button, isDocked, chatFound
-	for _, frameName in pairs(CHAT_FRAMES) do
-		chat = _G[frameName]
-		id = chat:GetID()
-		point = GetChatWindowSavedPosition(id)
-
-		if point == "BOTTOMRIGHT" and chat:IsShown() then
-			chatFound = true
-			break
-		end
-	end
-
-	if chatFound then
-		self.RightChatWindowID = id
-	else
-		self.RightChatWindowID = nil
-	end
-
-	for i=1, CreatedFrames do
-		local BASE_OFFSET = 60
-		if E.PixelMode then
-			BASE_OFFSET = BASE_OFFSET - 3
-		end
-		chat = _G[format("ChatFrame%d", i)]
-		chatbg = format("ChatFrame%dBackground", i)
-		button = _G[format("ButtonCF%d", i)]
-		id = chat:GetID()
-		tab = _G[format("ChatFrame%sTab", i)]
-		point = GetChatWindowSavedPosition(id)
-		isDocked = chat.isDocked
-		tab.isDocked = chat.isDocked
-		tab.owner = chat
-		if id > NUM_CHAT_WINDOWS then
-			point = point or select(1, chat:GetPoint());
-			if select(2, tab:GetPoint()):GetName() ~= bg then
-				isDocked = true
-			else
-				isDocked = false
-			end
-		end
-
-		if point == "BOTTOMRIGHT" and chat:IsShown() and not (id > NUM_CHAT_WINDOWS) and not isDocked and id == self.RightChatWindowID then
-			chat:ClearAllPoints()
-			if E.db.datatexts.rightChatPanel then
-				chat:Point("BOTTOMRIGHT", RightChatDataPanel, "TOPRIGHT", 10, 3) -- <<< Changed
-			else
-				BASE_OFFSET = BASE_OFFSET - 24
-				chat:Point("BOTTOMLEFT", RightChatDataPanel, "TOPLEFT", 4, 3)
-			end
-			if id ~= 2 then
-				chat:SetSize(E.db.chat.panelWidth - 10, (E.db.chat.panelHeight - (E.PixelMode and 31 or 27))) -- <<< Changed
-			else
-				chat:Size(E.db.chat.panelWidth - 10, (E.db.chat.panelHeight - (E.PixelMode and 31 or 27)) - CombatLogQuickButtonFrame_Custom:GetHeight())
-			end
-
-
-			FCF_SavePositionAndDimensions(chat)
-
-			tab:SetParent(RightChatPanel)
-			chat:SetParent(RightChatPanel)
-
-			if chat:IsMovable() then
-				chat:SetUserPlaced(true)
-			end
-			if E.db.chat.panelBackdrop == 'HIDEBOTH' or E.db.chat.panelBackdrop == 'LEFT' then
-				CH:SetupChatTabs(tab, true)
-			else
-				CH:SetupChatTabs(tab, false)
-			end
-		elseif not isDocked and chat:IsShown() then
-			tab:SetParent(UIParent)
-			chat:SetParent(UIParent)
-
-			CH:SetupChatTabs(tab, true)
-		else
-			if id ~= 2 and not (id > NUM_CHAT_WINDOWS) then
-				chat:ClearAllPoints()
-				if E.db.datatexts.leftChatPanel then
-					chat:Point("BOTTOMLEFT", LeftChatToggleButton, "TOPLEFT", 5, 3)
-				else
-					BASE_OFFSET = BASE_OFFSET - 24
-					chat:Point("BOTTOMLEFT", LeftChatToggleButton, "TOPLEFT", 5, 3)
-				end
-				chat:Size(E.db.chat.panelWidth - 6, (E.db.chat.panelHeight - (E.PixelMode and 31 or 27))) -- <<< Changed
-				FCF_SavePositionAndDimensions(chat)
-			end
-			chat:SetParent(LeftChatPanel)
-			if i > 2 then
-				tab:SetParent(GeneralDockManagerScrollFrameChild)
-			else
-				tab:SetParent(GeneralDockManager)
-			end
-			if chat:IsMovable() then
-				chat:SetUserPlaced(true)
-			end
-
-			if E.db.chat.panelBackdrop == 'HIDEBOTH' or E.db.chat.panelBackdrop == 'RIGHT' then
-				CH:SetupChatTabs(tab, true)
-			else
-				CH:SetupChatTabs(tab, false)
-			end
-		end
-	end
-
-	self.initialMove = true;
-end
-
-local function GetBNFriendColor(name, id)
-	local _, _, game, _, _, _, _, class = BNGetToonInfo(id)
-
-	if game ~= BNET_CLIENT_WOW or not class then
-		return name
-	else
-		for k,v in pairs(LOCALIZED_CLASS_NAMES_MALE) do if class == v then class = k end end
-		for k,v in pairs(LOCALIZED_CLASS_NAMES_FEMALE) do if class == v then class = k end end
-
-		if RAID_CLASS_COLORS[class] then
-			return "|c"..RAID_CLASS_COLORS[class].colorStr..name.."|r"
-		else
-			return name
-		end
-	end
-end
-
-E.NameReplacements = {}
-function CH:ChatFrame_MessageEventHandler(event, ...)
-	if ( strsub(event, 1, 8) == "CHAT_MSG" ) then
-		local arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14 = ...;
-		local type = strsub(event, 10);
-		local info = ChatTypeInfo[type];
-
-		local filter = false;
-		if ( chatFilters[event] ) then
-			local newarg1, newarg2, newarg3, newarg4, newarg5, newarg6, newarg7, newarg8, newarg9, newarg10, newarg11, newarg12, newarg13, newarg14;
-			for _, filterFunc in next, chatFilters[event] do
-				filter, newarg1, newarg2, newarg3, newarg4, newarg5, newarg6, newarg7, newarg8, newarg9, newarg10, newarg11, newarg12, newarg13, newarg14 = filterFunc(self, event, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14);
-				if ( filter ) then
-					return true;
-				elseif ( newarg1 ) then
-					arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14 = newarg1, newarg2, newarg3, newarg4, newarg5, newarg6, newarg7, newarg8, newarg9, newarg10, newarg11, newarg12, newarg13, newarg14;
-				end
-			end
-		end
-
-		arg2 = E.NameReplacements[arg2] or arg2
-		local coloredName = GetColoredName(event, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14);
-
-		local channelLength = strlen(arg4);
-		local infoType = type;
-		if ( (strsub(type, 1, 7) == "CHANNEL") and (type ~= "CHANNEL_LIST") and ((arg1 ~= "INVITE") or (type ~= "CHANNEL_NOTICE_USER")) ) then
-			if ( arg1 == "WRONG_PASSWORD" ) then
-				local staticPopup = _G[StaticPopup_Visible("CHAT_CHANNEL_PASSWORD") or ""];
-				if ( staticPopup and strupper(staticPopup.data) == strupper(arg9) ) then
-					-- Don't display invalid password messages if we're going to prompt for a password (bug 102312)
-					return;
-				end
-			end
-
-			local found = 0;
-			for index, value in pairs(self.channelList) do
-				if ( channelLength > strlen(value) ) then
-					-- arg9 is the channel name without the number in front...
-					if ( ((arg7 > 0) and (self.zoneChannelList[index] == arg7)) or (strupper(value) == strupper(arg9)) ) then
-						found = 1;
-						infoType = "CHANNEL"..arg8;
-						info = ChatTypeInfo[infoType];
-						if ( (type == "CHANNEL_NOTICE") and (arg1 == "YOU_LEFT") ) then
-							self.channelList[index] = nil;
-							self.zoneChannelList[index] = nil;
-						end
-						break;
-					end
-				end
-			end
-			if ( (found == 0) or not info ) then
-				return true;
-			end
-		end
-
-		local chatGroup = Chat_GetChatCategory(type);
-		local chatTarget;
-		if ( chatGroup == "CHANNEL" or chatGroup == "BN_CONVERSATION" ) then
-			chatTarget = tostring(arg8);
-		elseif ( chatGroup == "WHISPER" or chatGroup == "BN_WHISPER" ) then
-			if(not(strsub(arg2, 1, 2) == "|K")) then
-				chatTarget = strupper(arg2);
-			else
-				chatTarget = arg2;
-			end
-		end
-
-		if ( FCFManager_ShouldSuppressMessage(self, chatGroup, chatTarget) ) then
-			return true;
-		end
-
-		if ( chatGroup == "WHISPER" or chatGroup == "BN_WHISPER" ) then
-			if ( self.privateMessageList and not self.privateMessageList[strlower(arg2)] ) then
-				return true;
-			elseif ( self.excludePrivateMessageList and self.excludePrivateMessageList[strlower(arg2)]
-				and ( (chatGroup == "WHISPER" and GetCVar("whisperMode") ~= "popout_and_inline") or (chatGroup == "BN_WHISPER" and GetCVar("bnWhisperMode") ~= "popout_and_inline") ) ) then
-				return true;
-			end
-		elseif ( chatGroup == "BN_CONVERSATION" ) then
-			if ( self.bnConversationList and not self.bnConversationList[arg8] ) then
-				return true;
-			elseif ( self.excludeBNConversationList and self.excludeBNConversationList[arg8] and GetCVar("conversationMode") ~= "popout_and_inline") then
-				return true;
-			end
-		end
-
-		if (self.privateMessageList) then
-			-- Dedicated BN whisper windows need online/offline messages for only that player
-			if ( (chatGroup == "BN_INLINE_TOAST_ALERT" or chatGroup == "BN_WHISPER_PLAYER_OFFLINE") and not self.privateMessageList[strlower(arg2)] ) then
-				return true;
-			end
-
-			-- HACK to put certain system messages into dedicated whisper windows
-			if ( chatGroup == "SYSTEM") then
-				local matchFound = false;
-				local message = strlower(arg1);
-				for playerName, _ in pairs(self.privateMessageList) do
-					local playerNotFoundMsg = strlower(format(ERR_CHAT_PLAYER_NOT_FOUND_S, playerName));
-					local charOnlineMsg = strlower(format(ERR_FRIEND_ONLINE_SS, playerName, playerName));
-					local charOfflineMsg = strlower(format(ERR_FRIEND_OFFLINE_S, playerName));
-					if ( message == playerNotFoundMsg or message == charOnlineMsg or message == charOfflineMsg) then
-						matchFound = true;
-						break;
-					end
-				end
-
-				if (not matchFound) then
-					return true;
-				end
-			end
-		end
-
-		if ( type == "SYSTEM" or type == "SKILL" or type == "LOOT" or type == "CURRENCY" or type == "MONEY" or
-		     type == "OPENING" or type == "TRADESKILLS" or type == "PET_INFO" or type == "TARGETICONS" or type == "BN_WHISPER_PLAYER_OFFLINE") then
-			self:AddMessage(CH:ConcatenateTimeStamp(arg1), info.r, info.g, info.b, info.id);
-		elseif ( strsub(type,1,7) == "COMBAT_" ) then
-			self:AddMessage(CH:ConcatenateTimeStamp(arg1), info.r, info.g, info.b, info.id);
-		elseif ( strsub(type,1,6) == "SPELL_" ) then
-			self:AddMessage(CH:ConcatenateTimeStamp(arg1), info.r, info.g, info.b, info.id);
-		elseif ( strsub(type,1,10) == "BG_SYSTEM_" ) then
-			self:AddMessage(CH:ConcatenateTimeStamp(arg1), info.r, info.g, info.b, info.id);
-		elseif ( strsub(type,1,11) == "ACHIEVEMENT" ) then
-			self:AddMessage(format(CH:ConcatenateTimeStamp(arg1), "|Hplayer:"..arg2.."|h".."["..coloredName.."]".."|h"), info.r, info.g, info.b, info.id);
-		elseif ( strsub(type,1,18) == "GUILD_ACHIEVEMENT" ) then
-			self:AddMessage(format(CH:ConcatenateTimeStamp(arg1), "|Hplayer:"..arg2.."|h".."["..coloredName.."]".."|h"), info.r, info.g, info.b, info.id);
-		elseif ( type == "IGNORED" ) then
-			self:AddMessage(format(CH:ConcatenateTimeStamp(CHAT_IGNORED), arg2), info.r, info.g, info.b, info.id);
-		elseif ( type == "FILTERED" ) then
-			self:AddMessage(format(CH:ConcatenateTimeStamp(CHAT_FILTERED), arg2), info.r, info.g, info.b, info.id);
-		elseif ( type == "RESTRICTED" ) then
-			self:AddMessage(CH:ConcatenateTimeStamp(CHAT_RESTRICTED), info.r, info.g, info.b, info.id);
-		elseif ( type == "CHANNEL_LIST") then
-			if(channelLength > 0) then
-				self:AddMessage(format(CH:ConcatenateTimeStamp(_G["CHAT_"..type.."_GET"]..arg1), tonumber(arg8), arg4), info.r, info.g, info.b, info.id);
-			else
-				self:AddMessage(CH:ConcatenateTimeStamp(arg1), info.r, info.g, info.b, info.id);
-			end
-		elseif (type == "CHANNEL_NOTICE_USER") then
-			local globalstring = _G["CHAT_"..arg1.."_NOTICE_BN"];
-			if ( not globalstring ) then
-				globalstring = _G["CHAT_"..arg1.."_NOTICE"];
-			end
-
-			globalString = CH:ConcatenateTimeStamp(globalstring);
-
-			if(strlen(arg5) > 0) then
-				-- TWO users in this notice (E.G. x kicked y)
-				self:AddMessage(format(globalstring, arg8, arg4, arg2, arg5), info.r, info.g, info.b, info.id);
-			elseif ( arg1 == "INVITE" ) then
-				self:AddMessage(format(globalstring, arg4, arg2), info.r, info.g, info.b, info.id);
-			else
-				self:AddMessage(format(globalstring, arg8, arg4, arg2), info.r, info.g, info.b, info.id);
-			end
-		elseif (type == "CHANNEL_NOTICE") then
-			local globalstring = _G["CHAT_"..arg1.."_NOTICE_BN"];
-			if ( not globalstring ) then
-				globalstring = _G["CHAT_"..arg1.."_NOTICE"];
-			end
-			if ( arg10 > 0 ) then
-				arg4 = arg4.." "..arg10;
-			end
-
-			globalString = CH:ConcatenateTimeStamp(globalstring);
-
-			local accessID = ChatHistory_GetAccessID(Chat_GetChatCategory(type), arg8);
-			local typeID = ChatHistory_GetAccessID(infoType, arg8, arg12);
-			self:AddMessage(format(globalstring, arg8, arg4), info.r, info.g, info.b, info.id, false, accessID, typeID);
-		elseif ( type == "BN_CONVERSATION_NOTICE" ) then
-			local channelLink = format(CHAT_BN_CONVERSATION_GET_LINK, arg8, MAX_WOW_CHAT_CHANNELS + arg8);
-			local playerLink = format("|HBNplayer:%s:%s:%s:%s:%s|h[%s]|h", arg2, arg13, arg11, Chat_GetChatCategory(type), arg8, arg2);
-			local message = format(_G["CHAT_CONVERSATION_"..arg1.."_NOTICE"], channelLink, playerLink)
-
-			local accessID = ChatHistory_GetAccessID(Chat_GetChatCategory(type), arg8);
-			local typeID = ChatHistory_GetAccessID(infoType, arg8, arg12);
-			self:AddMessage(CH:ConcatenateTimeStamp(message), info.r, info.g, info.b, info.id, false, accessID, typeID);
-		elseif ( type == "BN_CONVERSATION_LIST" ) then
-			local channelLink = format(CHAT_BN_CONVERSATION_GET_LINK, arg8, MAX_WOW_CHAT_CHANNELS + arg8);
-			local message = format(CHAT_BN_CONVERSATION_LIST, channelLink, arg1);
-			self:AddMessage(CH:ConcatenateTimeStamp(message), info.r, info.g, info.b, info.id, false, accessID, typeID);
-		elseif ( type == "BN_INLINE_TOAST_ALERT" ) then
-			if ( arg1 == "FRIEND_OFFLINE" and not BNet_ShouldProcessOfflineEvents() ) then
-				return true;
-			end
-			local globalstring = _G["BN_INLINE_TOAST_"..arg1];
-			local message;
-			if ( arg1 == "FRIEND_REQUEST" ) then
-				message = globalstring;
-			elseif ( arg1 == "FRIEND_PENDING" ) then
-				message = format(BN_INLINE_TOAST_FRIEND_PENDING, BNGetNumFriendInvites());
-			elseif ( arg1 == "FRIEND_REMOVED" or arg1 == "BATTLETAG_FRIEND_REMOVED" ) then
-				message = format(globalstring, arg2);
-			elseif ( arg1 == "FRIEND_ONLINE" or arg1 == "FRIEND_OFFLINE") then
-				local hasFocus, toonName, client, realmName, realmID, faction, race, class, guild, zoneName, level, gameText = BNGetToonInfo(arg13);
-				if (toonName and toonName ~= "" and client and client ~= "") then
-					local toonNameText = BNet_GetClientEmbeddedTexture(client, 14)..toonName;
-					local playerLink = format("|HBNplayer:%s:%s:%s:%s:%s|h[%s] (%s)|h", arg2, arg13, arg11, Chat_GetChatCategory(type), 0, arg2, toonNameText);
-					message = format(globalstring, playerLink);
-				else
-					local playerLink = format("|HBNplayer:%s:%s:%s:%s:%s|h[%s]|h", arg2, arg13, arg11, Chat_GetChatCategory(type), 0, arg2);
-					message = format(globalstring, playerLink);
-				end
-			else
-				local playerLink = format("|HBNplayer:%s:%s:%s:%s:%s|h[%s]|h", arg2, arg13, arg11, Chat_GetChatCategory(type), 0, arg2);
-				message = format(globalstring, playerLink);
-			end
-			self:AddMessage(CH:ConcatenateTimeStamp(message), info.r, info.g, info.b, info.id);
-		elseif ( type == "BN_INLINE_TOAST_BROADCAST" ) then
-			if ( arg1 ~= "" ) then
-				arg1 = RemoveExtraSpaces(arg1);
-				local playerLink = format("|HBNplayer:%s:%s:%s:%s:%s|h[%s]|h", arg2, arg13, arg11, Chat_GetChatCategory(type), 0, arg2);
-				self:AddMessage(format(CH:ConcatenateTimeStamp(BN_INLINE_TOAST_BROADCAST), playerLink, arg1), info.r, info.g, info.b, info.id);
-			end
-		elseif ( type == "BN_INLINE_TOAST_BROADCAST_INFORM" ) then
-			if ( arg1 ~= "" ) then
-				arg1 = RemoveExtraSpaces(arg1);
-				self:AddMessage(CH:ConcatenateTimeStamp(BN_INLINE_TOAST_BROADCAST_INFORM), info.r, info.g, info.b, info.id);
-			end
-		elseif ( type == "BN_INLINE_TOAST_CONVERSATION" ) then
-			self:AddMessage(format(CH:ConcatenateTimeStamp(BN_INLINE_TOAST_CONVERSATION), arg1), info.r, info.g, info.b, info.id);
-		else
-			local body;
-
-			local _, fontHeight = FCF_GetChatWindowInfo(self:GetID());
-
-			if ( fontHeight == 0 ) then
-				--fontHeight will be 0 if it's still at the default (14)
-				fontHeight = 14;
-			end
-
-			-- Add AFK/DND flags
-			local pflag = "";
-			if(strlen(arg6) > 0) then
-				if ( arg6 == "GM" ) then
-					--If it was a whisper, dispatch it to the GMChat addon.
-					if ( type == "WHISPER" ) then
-						return;
-					end
-					--Add Blizzard Icon, this was sent by a GM
-					pflag = "|TInterface\\ChatFrame\\UI-ChatIcon-Blizz:12:20:0:0:32:16:4:28:0:16|t ";
-				elseif ( arg6 == "DEV" ) then
-					--Add Blizzard Icon, this was sent by a Dev
-					pflag = "|TInterface\\ChatFrame\\UI-ChatIcon-Blizz:12:20:0:0:32:16:4:28:0:16|t ";
-				elseif ( arg6 == "DND" or arg6 == "AFK") then
-					pflag = SLE:GetChatIcon(arg2).._G["CHAT_FLAG_"..arg6]
-				else
-					pflag = _G["CHAT_FLAG_"..arg6];
-				end
-			else
-				pflag = SLE:GetChatIcon(arg2)
-
-				if(pflag == true) then
-					pflag = ""
-				end
-
-				if(lfgRoles[arg2] and SLE:SimpleTable(lfgChannels, type)) then
-					pflag = lfgRoles[arg2]..pflag
-				end
-
-				pflag = pflag or ""
-			end
-
-			if ( type == "WHISPER_INFORM" and GMChatFrame_IsGM and GMChatFrame_IsGM(arg2) ) then
-				return;
-			end
-
-			local showLink = 1;
-			if ( strsub(type, 1, 7) == "MONSTER" or strsub(type, 1, 9) == "RAID_BOSS") then
-				showLink = nil;
-			else
-				arg1 = gsub(arg1, "%%", "%%%%");
-			end
-
-			-- Search for icon links and replace them with texture links.
-			for tag in gmatch(arg1, "%b{}") do
-				local term = strlower(gsub(tag, "[{}]", ""));
-				if ( ICON_TAG_LIST[term] and ICON_LIST[ICON_TAG_LIST[term]] ) then
-					arg1 = gsub(arg1, tag, ICON_LIST[ICON_TAG_LIST[term]] .. "0|t");
-				elseif ( GROUP_TAG_LIST[term] ) then
-					local groupIndex = GROUP_TAG_LIST[term];
-					local groupList = "[";
-					for i=1, GetNumGroupMembers() do
-						local name, rank, subgroup, level, class, classFileName = GetRaidRosterInfo(i);
-						if ( name and subgroup == groupIndex ) then
-							local classColorTable = RAID_CLASS_COLORS[classFileName];
-							if ( classColorTable ) then
-								name = format("\124cff%.2x%.2x%.2x%s\124r", classColorTable.r*255, classColorTable.g*255, classColorTable.b*255, name);
-							end
-							groupList = groupList..(groupList == "[" and "" or PLAYER_LIST_DELIMITER)..name;
-						end
-					end
-					groupList = groupList.."]";
-					arg1 = gsub(arg1, tag, groupList);
-				end
-			end
-
-			--Remove groups of many spaces
-			arg1 = RemoveExtraSpaces(arg1);
-
-			local playerLink;
-
-			if ( type ~= "BN_WHISPER" and type ~= "BN_WHISPER_INFORM" and type ~= "BN_CONVERSATION" ) then
-				playerLink = "|Hplayer:"..arg2..":"..arg11..":"..chatGroup..(chatTarget and ":"..chatTarget or "").."|h";
-			else
-				coloredName = GetBNFriendColor(arg2, arg13)
-				playerLink = "|HBNplayer:"..arg2..":"..arg13..":"..arg11..":"..chatGroup..(chatTarget and ":"..chatTarget or "").."|h";
-			end
-
-			local message = arg1;
-			if ( arg14 ) then	--isMobile
-				message = ChatFrame_GetMobileEmbeddedTexture(info.r, info.g, info.b)..message;
-			end
-
-			if ( (strlen(arg3) > 0) and (arg3 ~= self.defaultLanguage) ) then
-				local languageHeader = "["..arg3.."] ";
-				if ( showLink and (strlen(arg2) > 0) ) then
-					body = format(_G["CHAT_"..type.."_GET"]..languageHeader..message, pflag..playerLink.."["..coloredName.."]".."|h");
-				else
-					body = format(_G["CHAT_"..type.."_GET"]..languageHeader..message, pflag..arg2);
-				end
-			else
-				if ( not showLink or strlen(arg2) == 0 ) then
-					if ( type == "TEXT_EMOTE" ) then
-						body = message;
-					else
-						body = format(_G["CHAT_"..type.."_GET"]..message, pflag..arg2, arg2);
-					end
-				else
-					if ( type == "EMOTE" ) then
-						body = format(_G["CHAT_"..type.."_GET"]..message, pflag..playerLink..coloredName.."|h");
-					elseif ( type == "TEXT_EMOTE") then
-						body = gsub(message, arg2, pflag..playerLink..coloredName.."|h", 1);
-					else
-						body = format(_G["CHAT_"..type.."_GET"]..message, pflag..playerLink.."["..coloredName.."]".."|h");
-					end
-				end
-			end
-
-			-- Add Channel
-			arg4 = gsub(arg4, "%s%-%s.*", "");
-			if( chatGroup  == "BN_CONVERSATION" ) then
-				body = format(CHAT_BN_CONVERSATION_GET_LINK, MAX_WOW_CHAT_CHANNELS + arg8, MAX_WOW_CHAT_CHANNELS + arg8)..body;
-			elseif(channelLength > 0) then
-				body = "|Hchannel:channel:"..arg8.."|h["..arg4.."]|h "..body;
-			end
-
-			local accessID = ChatHistory_GetAccessID(chatGroup, chatTarget);
-			local typeID = ChatHistory_GetAccessID(infoType, chatTarget, arg12 == "" and arg13 or arg12);
-			if CH.db.shortChannels then
-				body = body:gsub("|Hchannel:(.-)|h%[(.-)%]|h", CH.ShortChannel)
-				body = body:gsub('CHANNEL:', '')
-				body = body:gsub("^(.-|h) "..L['whispers'], "%1")
-				body = body:gsub("^(.-|h) "..L['says'], "%1")
-				body = body:gsub("^(.-|h) "..L['yells'], "%1")
-				body = body:gsub("<"..AFK..">", "[|cffFF0000"..L['AFK'].."|r] ")
-				body = body:gsub("<"..DND..">", "[|cffE7E716"..L['DND'].."|r] ")
-				body = body:gsub("%[BN_CONVERSATION:", '%['.."")
-				body = body:gsub("^%["..RAID_WARNING.."%]", '['..L['RW']..']')
-			end
-			self:AddMessage(CH:ConcatenateTimeStamp(body), info.r, info.g, info.b, info.id, false, accessID, typeID);
-		end
-
-		if ( type == "WHISPER" or type == "BN_WHISPER" ) then
-			--BN_WHISPER FIXME
-			ChatEdit_SetLastTellTarget(arg2, type);
-			if ( self.tellTimer and (GetTime() > self.tellTimer) ) then
-				PlaySound("TellMessage");
-			end
-			self.tellTimer = GetTime() + CHAT_TELL_ALERT_TIME;
-			--FCF_FlashTab(self);
-		end
-
-		if ( not self:IsShown() ) then
-			if ( (self == DEFAULT_CHAT_FRAME and info.flashTabOnGeneral) or (self ~= DEFAULT_CHAT_FRAME and info.flashTab) ) then
-				if ( not CHAT_OPTIONS.HIDE_FRAME_ALERTS or type == "WHISPER" or type == "BN_WHISPER" ) then	--BN_WHISPER FIXME
-					if (not (type == "BN_CONVERSATION" and BNIsSelf(arg13))) then
-						if (not FCFManager_ShouldSuppressMessageFlash(self, chatGroup, chatTarget) ) then
-							--FCF_StartAlertFlash(self); THIS TAINTS<<<<<<<
-							_G[self:GetName().."Tab"].glow:Show()
-							_G[self:GetName().."Tab"]:SetScript("OnUpdate", CH.ChatTab_OnUpdate)
-						end
-					end
-				end
-			end
-		end
-		return true;
-	end
-end
-
-function CH:ChatEdit_AddHistory(editBox, line)
-	if line:find("/rl") then return; end
-
-	if ( strlen(line) > 0 ) then
-		for i, text in pairs(ElvCharacterDB.ChatEditHistory) do
-			if text == line then
-				return
-			end
-		end
-
-		tinsert(ElvCharacterDB.ChatEditHistory, #ElvCharacterDB.ChatEditHistory + 1, line)
-		if #ElvCharacterDB.ChatEditHistory > E.db.chat.editboxhistory then
-			for i=1,(#ElvCharacterDB.ChatEditHistory - E.db.chat.editboxhistory) do
-				tremove(ElvCharacterDB.ChatEditHistory, 1)
-			end
-		end
-	end
-end
-
-function SLE:GetChatIcon(sender)
-	local senderName, senderRealm
-	if sender then
-		senderName, senderRealm = string.split('-', sender)
-	else
-		senderName = Myname
-	end
-	senderRealm = senderRealm or PLAYER_REALM
-	senderRealm = senderRealm:gsub(' ', '')
-
-	--Disabling ALL special icons. IDK why Elv use that and why would we want to have that but whatever
-	if(specialChatIcons[PLAYER_REALM] == nil or (specialChatIcons[PLAYER_REALM] and specialChatIcons[PLAYER_REALM][Myname] ~= true)) then
-		if specialChatIcons[senderRealm] and specialChatIcons[senderRealm][senderName] then
-			return specialChatIcons[senderRealm][senderName]
-		end
-	end
-	return ""
-end
-
-function CH:ChatFrame_AddMessageEventFilter (event, filter)
-	assert(event and filter);
-
-	if ( chatFilters[event] ) then
-		-- Only allow a filter to be added once
-		for index, filterFunc in next, chatFilters[event] do
-			if ( filterFunc == filter ) then
-				return;
-			end
-		end
-	else
-		chatFilters[event] = {};
-	end
-
-	tinsert(chatFilters[event], filter);
-end
-
-function CH:ChatFrame_RemoveMessageEventFilter (event, filter)
-	assert(event and filter);
-
-	if ( chatFilters[event] ) then
-		for index, filterFunc in next, chatFilters[event] do
-			if ( filterFunc == filter ) then
-				tremove(chatFilters[event], index);
-			end
-		end
-
-		if ( #chatFilters[event] == 0 ) then
-			chatFilters[event] = nil;
-		end
-	end
-end
-
-function CH:CheckLFGRoles()
-	local isInGroup, isInRaid = IsInGroup(), IsInRaid()
-	local unit = isInRaid and "raid" or "party"
-	local name, realm
-	twipe(lfgRoles)
-
-	if(not isInGroup or not self.db.lfgIcons) then return end
-
-	local role = UnitGroupRolesAssigned("player")
-	if(role) then
-		lfgRoles[PLAYER_NAME] = rolePaths[role]
-	end
-
-	for i=1, GetNumGroupMembers() do
-		if(UnitExists(unit..i) and not UnitIsUnit(unit..i, "player")) then
-			role = UnitGroupRolesAssigned(unit..i)
-			local name, realm = UnitName(unit..i)
-
-			if(role and name) then
-				name = realm and name..'-'..realm or name..'-'..PLAYER_REALM;
-				lfgRoles[name] = rolePaths[role]
-			end
-		end
-	end
-end
-
-function CH:Initialize()
-	if ElvCharacterDB.ChatHistory then
-		ElvCharacterDB.ChatHistory = nil --Depreciated
-	end
-
-	self.db = E.db.chat
-
-	if E.private.chat.enable ~= true then
-		stopScript = true
-		DEFAULT_CHAT_FRAME:RegisterEvent("GUILD_MOTD")
-
-		local msg = GetGuildRosterMOTD()
-		if msg == "" then msg = nil end
-		if msg then
-			ChatFrame_SystemEventHandler(DEFAULT_CHAT_FRAME, "GUILD_MOTD", msg)
-		end
-
-		return
-	end
-
-
-	if not ElvCharacterDB.ChatEditHistory then
-		ElvCharacterDB.ChatEditHistory = {};
-	end
-
-	if not ElvCharacterDB.ChatLog or not self.db.chatHistory then
-		ElvCharacterDB.ChatLog = {};
-	end
-
-	self:UpdateChatKeywords()
-
-	self:UpdateFading()
-	E.Chat = self
-	self:SecureHook('ChatEdit_OnEnterPressed')
-	FriendsMicroButton:Kill()
-	ChatFrameMenuButton:Kill()
-
-
-    if WIM then
-      WIM.RegisterWidgetTrigger("chat_display", "whisper,chat,w2w,demo", "OnHyperlinkClick", function(self) CH.clickedframe = self end);
-	  WIM.RegisterItemRefHandler('url', WIM_URLLink)
-    end
-
-	self:SecureHook('FCF_SetChatWindowFontSize', 'SetChatFont')
-	self:RegisterEvent('PLAYER_ENTERING_WORLD', 'DelayGMOTD')
-	self:RegisterEvent('UPDATE_CHAT_WINDOWS', 'SetupChat')
-	self:RegisterEvent('UPDATE_FLOATING_CHAT_WINDOWS', 'SetupChat')
-	self:RegisterEvent('PET_BATTLE_CLOSE')
-
-	self:SetupChat()
-	self:UpdateAnchors()
-
-	self:RegisterEvent("GROUP_ROSTER_UPDATE", "CheckLFGRoles")
-
-	self:RegisterEvent('CHAT_MSG_INSTANCE_CHAT', 'SaveChatHistory')
-	self:RegisterEvent('CHAT_MSG_INSTANCE_CHAT_LEADER', 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_BN_WHISPER", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_BN_WHISPER_INFORM", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_CHANNEL", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_EMOTE", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_GUILD", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_GUILD_ACHIEVEMENT", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_OFFICER", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_PARTY", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_PARTY_LEADER", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_RAID", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_RAID_LEADER", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_RAID_WARNING", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_SAY", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_WHISPER", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_WHISPER_INFORM", 'SaveChatHistory')
-	self:RegisterEvent("CHAT_MSG_YELL", 'SaveChatHistory')
-
-	--First get all pre-existing filters and copy them to our version of chatFilters using ChatFrame_GetMessageEventFilters
-	for name, _ in pairs(ChatTypeGroup) do
-		for i=1, #ChatTypeGroup[name] do
-			local filterFuncTable = ChatFrame_GetMessageEventFilters(ChatTypeGroup[name][i])
-			if filterFuncTable then
-				chatFilters[ChatTypeGroup[name][i]] = {};
-
-				for j=1, #filterFuncTable do
-					local filterFunc = filterFuncTable[j]
-					tinsert(chatFilters[ChatTypeGroup[name][i]], filterFunc);
-				end
-			end
-		end
-	end
-
-	--CHAT_MSG_CHANNEL isn't located inside ChatTypeGroup
-	local filterFuncTable = ChatFrame_GetMessageEventFilters("CHAT_MSG_CHANNEL")
-	if filterFuncTable then
-		chatFilters["CHAT_MSG_CHANNEL"] = {};
-
-		for j=1, #filterFuncTable do
-			local filterFunc = filterFuncTable[j]
-			tinsert(chatFilters["CHAT_MSG_CHANNEL"], filterFunc);
-		end
-	end
-
-	--Now hook onto Blizzards functions for other addons
-	self:SecureHook("ChatFrame_AddMessageEventFilter");
-	self:SecureHook("ChatFrame_RemoveMessageEventFilter");
-
-	self:SecureHook("FCF_SetWindowAlpha")
-
-
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_CHANNEL", CH.CHAT_MSG_CHANNEL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_YELL", CH.CHAT_MSG_YELL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_SAY", CH.CHAT_MSG_SAY)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER_INFORM", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_GUILD", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_OFFICER", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY_LEADER", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID_LEADER", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_INSTANCE_CHAT", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_INSTANCE_CHAT_LEADER", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_BN_CONVERSATION", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_BN_WHISPER", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_BN_WHISPER_INFORM", CH.FindURL)
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_BN_INLINE_TOAST_BROADCAST", CH.FindURL)
-
-
-	GeneralDockManagerOverflowButton:ClearAllPoints()
-	GeneralDockManagerOverflowButton:Point('BOTTOMRIGHT', LeftChatTab, 'BOTTOMRIGHT', -2, 2)
-	GeneralDockManagerOverflowButtonList:SetTemplate('Transparent')
-	hooksecurefunc(GeneralDockManagerScrollFrame, 'SetPoint', function(self, point, anchor, attachTo, x, y)
-		if anchor == GeneralDockManagerOverflowButton and x == 0 and y == 0 then
-			self:SetPoint(point, anchor, attachTo, -2, -6)
-		end
-	end)
-
-	if self.db.chatHistory then
-		self.SoundPlayed = true;
-		self:DisplayChatHistory()
-		self.SoundPlayed = nil;
-	end
-
-
-	local S = E:GetModule('Skins')
-	S:HandleNextPrevButton(CombatLogQuickButtonFrame_CustomAdditionalFilterButton, true)
-	local frame = CreateFrame("Frame", "CopyChatFrame", E.UIParent)
-	tinsert(UISpecialFrames, "CopyChatFrame")
-	frame:SetTemplate('Transparent')
-	frame:Size(700, 200)
-	frame:Point('BOTTOM', E.UIParent, 'BOTTOM', 0, 3)
-	frame:Hide()
-	frame:EnableMouse(true)
-	frame:SetFrameStrata("DIALOG")
-
-
-	local scrollArea = CreateFrame("ScrollFrame", "CopyChatScrollFrame", frame, "UIPanelScrollFrameTemplate")
-	scrollArea:Point("TOPLEFT", frame, "TOPLEFT", 8, -30)
-	scrollArea:Point("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -30, 8)
-	S:HandleScrollBar(CopyChatScrollFrameScrollBar)
-
-	local editBox = CreateFrame("EditBox", "CopyChatFrameEditBox", frame)
-	editBox:SetMultiLine(true)
-	editBox:SetMaxLetters(99999)
-	editBox:EnableMouse(true)
-	editBox:SetAutoFocus(false)
-	editBox:SetFontObject(ChatFontNormal)
-	editBox:Width(scrollArea:GetWidth())
-	editBox:Height(200)
-	editBox:SetScript("OnEscapePressed", function() CopyChatFrame:Hide() end)
-	scrollArea:SetScrollChild(editBox)
-	CopyChatFrameEditBox:SetScript("OnTextChanged", function(self, userInput)
-		if userInput then return end
-		local _, max = CopyChatScrollFrameScrollBar:GetMinMaxValues()
-		for i=1, max do
-			ScrollFrameTemplate_OnMouseWheel(CopyChatScrollFrame, -1)
-		end
-	end)
-
-	local close = CreateFrame("Button", "CopyChatFrameCloseButton", frame, "UIPanelCloseButton")
-	close:SetPoint("TOPRIGHT")
-	close:SetFrameLevel(close:GetFrameLevel() + 1)
-	close:EnableMouse(true)
-
-	S:HandleCloseButton(close)
-
-	--Disable Blizzard
-	InterfaceOptionsSocialPanelTimestampsButton:SetAlpha(0)
-	InterfaceOptionsSocialPanelTimestampsButton:SetScale(0.000001)
-	InterfaceOptionsSocialPanelTimestamps:SetAlpha(0)
-	InterfaceOptionsSocialPanelTimestamps:SetScale(0.000001)
-
-	InterfaceOptionsSocialPanelChatStyle:EnableMouse(false)
-	InterfaceOptionsSocialPanelChatStyleButton:Hide()
-	InterfaceOptionsSocialPanelChatStyle:SetAlpha(0)
-
- 	CombatLogQuickButtonFrame_CustomAdditionalFilterButton:Size(20, 22)
- 	CombatLogQuickButtonFrame_CustomAdditionalFilterButton:Point("TOPRIGHT", CombatLogQuickButtonFrame_Custom, "TOPRIGHT", 0, -1)
-end
-
diff --git a/ElvUI_SLE/modules/chat/load_chat.xml b/ElvUI_SLE/modules/chat/load_chat.xml
deleted file mode 100755
index 8955d31..0000000
--- a/ElvUI_SLE/modules/chat/load_chat.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='chat.lua'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/chat/options.lua b/ElvUI_SLE/modules/chat/options.lua
deleted file mode 100755
index 5eabb06..0000000
--- a/ElvUI_SLE/modules/chat/options.lua
+++ /dev/null
@@ -1,27 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local function configTable()
-
-E.Options.args.sle.args.options.args.general.args.chat = {
-	order = 7,
-	type = "group",
-	name = L["Chat"],
-	args = {
-		header = {
-			order = 1,
-			type = "header",
-			name = L["Chat"],
-		},
-		editboxhistory = {
-			order = 2,
-			type = "range",
-			name = L["Chat Editbox History"],
-			desc = L["Amount of messages to save. Set to 0 to disable."],
-			min = 0, max = 20, step = 1,
-			get = function(info) return E.db.chat.editboxhistory end,
-			set = function(info, value)	E.db.chat.editboxhistory = value; end,
-		},
-	},
-}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/dashboard/dashboard.lua b/ElvUI_SLE/modules/dashboard/dashboard.lua
new file mode 100644
index 0000000..a2602de
--- /dev/null
+++ b/ElvUI_SLE/modules/dashboard/dashboard.lua
@@ -0,0 +1,85 @@
+local E, L, V, P, G = unpack(ElvUI);
+--[[ Dashboard for ElvUI
+Credits : Sinaris, Elv
+made for ElvUI under Sinaris permission. Big thanks :)
+]]
+local DTP = E:GetModule('SLE_DTPanels')
+local DT = E:GetModule('DataTexts')
+local LSM = LibStub("LibSharedMedia-3.0")
+if E.db.sle == nil then E.db.sle = {} end
+if E.db.sle.datatext == nil then E.db.sle.datatext = {} end
+if E.db.sle.datatext.dashboard == nil then E.db.sle.datatext.dashboard = {} end
+if E.db.sle.datatext.dashboard.width == nil then E.db.sle.datatext.dashboard.width = 100 end
+local DTPANELS_WIDTH = E.db.sle.datatext.dashboard.width
+local DTPANELS_HEIGHT = 20
+local PANEL_SPACING = 1
+local font = LSM:Fetch("font", E.db.datatexts.font)
+local fontsize = E.db.datatexts.fontSize
+local outline = E.db.datatexts.fontOutline
+
+local board = {}
+
+local bholder = CreateFrame("Frame", "BoardsHolder", E.UIParent)
+bholder:Point('TOPLEFT', E.UIParent, 'TOPLEFT', 0, -21)
+bholder:Size(((DTPANELS_WIDTH*4)+(PANEL_SPACING*3)), DTPANELS_HEIGHT)
+
+E:CreateMover(BoardsHolder, "Dashboard", L["Dashboard"], nil, nil, nil, "ALL,S&L,S&L MISC")
+
+local board = CreateFrame('frame', 'board', BoardsHolder)
+
+for i = 1, 4 do
+	board[i] = CreateFrame('frame', 'board'..i, bholder)
+	board[i]:SetFrameLevel(2)
+	board[i]:Size(DTPANELS_WIDTH, DTPANELS_HEIGHT)
+	board[i]:SetTemplate('Default', true)
+	board[i]:CreateShadow('Default')
+
+	if i == 1 then
+		board[i]:Point('TOPLEFT', bholder, 'TOPLEFT', 0, 0)
+	else
+		board[i]:Point('LEFT', board[i-1], 'RIGHT', PANEL_SPACING, 0)
+	end
+
+	board[i].Status = CreateFrame("StatusBar", "PanelStatus" .. i, board[i])
+	board[i].Status:SetFrameLevel(12)
+	board[i].Status:SetStatusBarTexture(E["media"].normTex)
+	board[i].Status:SetMinMaxValues(0, 100)
+	board[i].Status:SetStatusBarColor(.4, .4, .4, 1)
+	board[i].Status:Point("TOPLEFT", board[i], "TOPLEFT", 2, -2)
+	board[i].Status:Point("BOTTOMRIGHT", board[i], "BOTTOMRIGHT", -2, 2)
+
+	board[i].Text = board[i].Status:CreateFontString( nil, "OVERLAY" )
+	board[i].Text:FontTemplate()
+	board[i].Text:SetFont(font, fontsize, outline)
+	board[i].Text:Point("LEFT", board[i], "LEFT", 3, 0)
+	board[i].Text:SetJustifyV('MIDDLE')
+	board[i].Text:SetShadowColor(0, 0, 0)
+	board[i].Text:SetShadowOffset(1.25, -1.25)
+end
+
+function DTP:DashboardShow()
+	if E.db.sle.datatext.dashboard.enable then
+		E.FrameLocks['BoardsHolder'] = true
+		BoardsHolder:Show()
+	else
+		E.FrameLocks['BoardsHolder'] = nil
+		BoardsHolder:Hide()
+	end
+end
+
+local function SetupFonts()
+	font = LSM:Fetch("font", E.db.datatexts.font)
+	fontsize = E.db.datatexts.fontSize
+	outline = E.db.datatexts.fontOutline
+	for i = 1, 4 do
+		board[i].Text:SetFont(font, fontsize, outline)
+	end
+end
+hooksecurefunc(DT, "LoadDataTexts", SetupFonts)
+
+function DTP:DashWidth()
+	for i = 1, 4 do
+		board[i]:Size(E.db.sle.datatext.dashboard.width, DTPANELS_HEIGHT)
+	end
+	bholder:Size(((E.db.sle.datatext.dashboard.width*4)+(PANEL_SPACING*3)), DTPANELS_HEIGHT)
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/dashboard/datapanels/bags.lua b/ElvUI_SLE/modules/dashboard/datapanels/bags.lua
new file mode 100644
index 0000000..cc09486
--- /dev/null
+++ b/ElvUI_SLE/modules/dashboard/datapanels/bags.lua
@@ -0,0 +1,24 @@
+local E, L, V, P, G = unpack(ElvUI);
+local LastUpdate = 1
+
+board[2].Status:SetScript("OnUpdate", function(self)
+	local free, total, used = 0, 0, 0
+	for i = 0, NUM_BAG_SLOTS do
+		free, total = free + GetContainerNumFreeSlots(i), total + GetContainerNumSlots(i)
+	end
+	used = total - free
+	value = (used * 120 / total)
+
+	self:SetMinMaxValues(0, total)
+	self:SetValue(used)
+		board[2].Text:SetText(L["Bags"]..": " .. used .. " /" .. total)
+	if(used * 100 / total >= 75) then
+		self:SetStatusBarColor(1, 75 / 255, 75 / 255, 0.5, .8)
+	elseif used * 100 / total < 75 and used * 100 / total > 40 then
+		self:SetStatusBarColor(1, 180 / 255, 0, .8)
+	else
+		self:SetStatusBarColor(30 / 255, 1, 30 / 255, .8)
+	end
+end)
+
+board[2].Status:RegisterEvent("BAG_UPDATE")
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/dashboard/datapanels/durability.lua b/ElvUI_SLE/modules/dashboard/datapanels/durability.lua
new file mode 100644
index 0000000..641938a
--- /dev/null
+++ b/ElvUI_SLE/modules/dashboard/datapanels/durability.lua
@@ -0,0 +1,68 @@
+local E, L, V, P, G = unpack(ElvUI);
+local displayString = ""
+local total, totalDurability, totalPerc = 0, 0, 0
+local current, max, lastPanel, result
+local invDurability = {}
+
+local slots = {
+	["SecondaryHandSlot"] = L['Offhand'],
+	["MainHandSlot"] = L['Main Hand'],
+	["FeetSlot"] = L['Feet'],
+	["LegsSlot"] = L['Legs'],
+	["HandsSlot"] = L['Hands'],
+	["WristSlot"] = L['Wrist'],
+	["WaistSlot"] = L['Waist'],
+	["ChestSlot"] = L['Chest'],
+	["ShoulderSlot"] = L['Shoulder'],
+	["HeadSlot"] = L['Head'],
+}
+
+board[1].Status:SetScript("OnEvent", function( self, ...)
+
+	lastPanel = self
+	total = 0
+	totalDurability = 0
+	totalPerc = 0
+
+	for index, value in pairs(slots) do
+		local slot = GetInventorySlotInfo(index)
+		current, max = GetInventoryItemDurability(slot)
+
+		if current then
+			totalDurability = totalDurability + current
+			invDurability[value] = (current/max)*100
+			totalPerc = totalPerc + (current/max)*100
+			total = total + 1
+		end
+	end
+
+	if total ~= 0 then
+		result = totalPerc/total
+	else
+		result = 0
+	end
+
+	if total > 0 then
+		board[1].Text:SetFormattedText(displayString, result)
+	end
+
+	self:SetMinMaxValues(0, 100)
+	self:SetValue(result)
+
+	if( result >= 75 ) then
+		self:SetStatusBarColor(30 / 255, 1, 30 / 255, .8)
+	elseif result < 75 and result > 40 then
+		self:SetStatusBarColor(1, 180 / 255, 0, .8)
+	else
+		self:SetStatusBarColor(1, 75 / 255, 75 / 255, 0.5, .8)
+	end
+end)
+
+local function ValueColorUpdate(hex, r, g, b)
+	displayString = string.join("", DURABILITY, ": ", hex, "%d%%|r")
+end
+E['valueColorUpdateFuncs'][ValueColorUpdate] = true
+
+board[1].Status:RegisterEvent("UPDATE_INVENTORY_DURABILITY")
+board[1].Status:RegisterEvent("MERCHANT_SHOW")
+board[1].Status:RegisterEvent("PLAYER_ENTERING_WORLD")
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/dashboard/datapanels/fps.lua b/ElvUI_SLE/modules/dashboard/datapanels/fps.lua
new file mode 100644
index 0000000..9d1db9f
--- /dev/null
+++ b/ElvUI_SLE/modules/dashboard/datapanels/fps.lua
@@ -0,0 +1,22 @@
+local E, L, V, P, G = unpack(ElvUI);
+local LastUpdate = 1
+
+board[3].Status:SetScript("OnUpdate", function( self, elapsed)
+	LastUpdate = LastUpdate - elapsed
+
+	if(LastUpdate < 0) then
+		self:SetMinMaxValues(0, 200)
+		local value = floor(GetFramerate())
+		local max = 120
+		self:SetValue(value)
+		board[3].Text:SetText("FPS: " .. value)
+		if(value * 100 / max >= 75) then
+			self:SetStatusBarColor(30 / 255, 1, 30 / 255, .8)
+		elseif value * 100 / max < 75 and value * 100 / max > 40 then
+			self:SetStatusBarColor(1, 180 / 255, 0, .8)
+		else
+			self:SetStatusBarColor(1, 75 / 255, 75 / 255, 0.5, .8)
+		end
+		LastUpdate = 1
+	end
+end)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/dashboard/datapanels/ms.lua b/ElvUI_SLE/modules/dashboard/datapanels/ms.lua
new file mode 100644
index 0000000..3bece2f
--- /dev/null
+++ b/ElvUI_SLE/modules/dashboard/datapanels/ms.lua
@@ -0,0 +1,23 @@
+local E, L, V, P, G = unpack(ElvUI);
+local LastUpdate = 1
+
+board[4].Status:SetScript("OnUpdate", function(self, elapsed)
+	LastUpdate = LastUpdate - elapsed
+
+	if(LastUpdate < 0) then
+		self:SetMinMaxValues(0, 200)
+		local value = (select( 3, GetNetStats()))
+		local max = 200
+		self:SetValue(value)
+		board[4].Text:SetText("MS: " .. value)
+
+		if( value * 100 / max <= 35) then
+			self:SetStatusBarColor(30 / 255, 1, 30 / 255, .8)
+		elseif value * 100 / max > 35 and value * 100 / max < 75 then
+			self:SetStatusBarColor(1, 180 / 255, 0, .8)
+		else
+			self:SetStatusBarColor(1, 75 / 255, 75 / 255, 0.5, .8)
+		end
+		LastUpdate = 1
+	end
+end)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/dashboard/load_dashboard.xml b/ElvUI_SLE/modules/dashboard/load_dashboard.xml
new file mode 100644
index 0000000..c77944e
--- /dev/null
+++ b/ElvUI_SLE/modules/dashboard/load_dashboard.xml
@@ -0,0 +1,7 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/">
+	<Script file="dashboard.lua"/>
+	<Script file="datapanels\durability.lua"/>
+	<Script file="datapanels\bags.lua"/>
+	<Script file="datapanels\fps.lua"/>
+	<Script file="datapanels\ms.lua"/>
+</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts.lua b/ElvUI_SLE/modules/datatexts.lua
new file mode 100644
index 0000000..0b4e17e
--- /dev/null
+++ b/ElvUI_SLE/modules/datatexts.lua
@@ -0,0 +1,116 @@
+local E, L, V, P, G = unpack(ElvUI);
+local DTP = E:GetModule('SLE_DTPanels');
+local DT = E:GetModule('DataTexts');
+local LO = E:GetModule('Layout');
+local dp1 = CreateFrame('Frame', "DP_1", E.UIParent)
+local dp2 = CreateFrame('Frame', "DP_2", E.UIParent)
+local dp3 = CreateFrame('Frame', "DP_3", E.UIParent)
+local dp4 = CreateFrame('Frame', "DP_4", E.UIParent)
+local dp5 = CreateFrame('Frame', "DP_5", E.UIParent)
+local dp6 = CreateFrame('Frame', "DP_6", E.UIParent)
+local top = CreateFrame('Frame', "Top_Center", E.UIParent)
+local bottom = CreateFrame('Frame', "Bottom_Panel", E.UIParent)
+local rchat = CreateFrame('Frame', "Right_Chat_SLE", E.UIParent)
+local lchat = CreateFrame('Frame', "Left_Chat_SLE", E.UIParent)
+
+-- Move Elv's Datatext Panel Transparency Option to our section
+-- Make Drunk Russian handle elvs dt panel transparency
+
+local panels = {
+	--Panel = short, name, point, x, panel, slot
+	DP_1 = {"dp1", "DP_1", "TOPLEFT", 0, DP_1, 3},
+	DP_2 = {"dp2", "DP_2", "TOP", -(E.screenwidth/5), DP_2, 3},
+	DP_3 = {"dp3", "DP_3", "TOP", (E.screenwidth/5), DP_3, 3},
+	DP_4 = {"dp4", "DP_4", "TOPRIGHT", 0, DP_4, 3},
+	DP_5 = {"dp5", "DP_5", "BOTTOM", -(E.screenwidth/6 - 15), DP_5, 3},
+	DP_6 = {"dp6", "DP_6", "BOTTOM", (E.screenwidth/6 - 15), DP_6, 3},
+	Top_Center = {"top", "Top_Center", "TOP", 0, Top_Center, 1},
+	Bottom_Panel = {"bottom", "Bottom_Panel", "BOTTOM", 0, Bottom_Panel, 1},
+}
+
+-- New panels
+local function CreateDataPanels(panel, name, point, x, slot, short)
+	panel:SetFrameStrata('LOW')
+	panel:Point(point, E.UIParent, point, x, 0);
+	DT:RegisterPanel(panel, slot, 'ANCHOR_BOTTOM', 0, -4)
+	panel:Hide()
+end
+
+local function PanelResize()
+	local db = E.db.sle.datatext
+	for _,v in pairs(panels) do
+		v[5]:Size(db[v[1]].width, 20)
+	end
+	DT:UpdateAllDimensions()
+end
+
+local function AddPanels()
+	for _,v in pairs(panels) do
+		CreateDataPanels(v[5], v[2], v[3], v[4], v[6], v[1])
+	end
+
+	PanelResize()
+
+	for _,v in pairs(panels) do
+		E:CreateMover(v[5], v[2].."_Mover", L[v[2]], nil, nil, nil, "ALL,S&L,S&L DT")
+	end
+end
+
+function DTP:ChatResize()
+	LeftChatDataPanel:SetAlpha(E.db.sle.datatext.chatleft.alpha)
+	LeftChatToggleButton:SetAlpha(E.db.sle.datatext.chatleft.alpha)
+	RightChatDataPanel:SetAlpha(E.db.sle.datatext.chatright.alpha)
+	RightChatToggleButton:SetAlpha(E.db.sle.datatext.chatright.alpha)
+	if not E.db.sle.datatext.chathandle then return end
+	LeftChatDataPanel:Point('TOPRIGHT', LeftChatPanel, 'BOTTOMLEFT', 16 + E.db.sle.datatext.chatleft.width, (E.PixelMode and 1 or -1))
+	RightChatDataPanel:Point('BOTTOMLEFT', RightChatPanel, 'BOTTOMRIGHT', - E.db.sle.datatext.chatright.width - 16, (E.PixelMode and -19 or -21))
+end
+
+--Showing panels
+function DTP:ExtraDataBarSetup()
+	local db = E.db.sle.datatext
+	for _,v in pairs(panels) do
+		if db[v[1]].enabled then
+			v[5]:Show()
+		else
+			v[5]:Hide()
+		end
+		if not E.private.sle.datatext[v[1].."hide"] then
+			v[5]:SetAlpha(E.db.sle.datatext[v[1]].alpha)
+			if db[v[1]].transparent then
+				v[5]:SetTemplate("Transparent")
+			else
+				v[5]:SetTemplate("Default", true)
+			end
+		end
+	end
+end
+
+function DTP:Update()
+	DTP:ExtraDataBarSetup()
+	PanelResize()
+end
+
+function DTP:RegisterHide()
+	local db = E.db.sle.datatext
+	for k,v in pairs(panels) do
+		if db[v[1]].pethide then
+			E.FrameLocks[k] = true
+		else
+			E.FrameLocks[k] = nil
+		end
+	end
+end
+
+--Renew panels after loading screens
+function DTP:PLAYER_ENTERING_WORLD(...)
+	DTP:ExtraDataBarSetup()
+	DTP:RegisterHide()
+	DTP:ChatResize()
+	self:UnregisterEvent("PLAYER_ENTERING_WORLD");
+end
+
+function DTP:Initialize()
+	AddPanels()
+	self:RegisterEvent('PLAYER_ENTERING_WORLD')
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/add_panels.lua b/ElvUI_SLE/modules/datatexts/add_panels.lua
deleted file mode 100755
index cf28837..0000000
--- a/ElvUI_SLE/modules/datatexts/add_panels.lua
+++ /dev/null
@@ -1,104 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local DTP = E:NewModule('DTPanels', 'AceHook-3.0', 'AceEvent-3.0');
-local DT = E:GetModule('DataTexts');
-local LO = E:GetModule('Layout');
-local dp1 = CreateFrame('Frame', "DP_1", E.UIParent)
-local dp2 = CreateFrame('Frame', "DP_2", E.UIParent)
-local dp3 = CreateFrame('Frame', "DP_3", E.UIParent)
-local dp4 = CreateFrame('Frame', "DP_4", E.UIParent)
-local dp5 = CreateFrame('Frame', "DP_5", E.UIParent)
-local dp6 = CreateFrame('Frame', "DP_6", E.UIParent)
-local top = CreateFrame('Frame', "Top_Center", E.UIParent)
-local bottom = CreateFrame('Frame', "Bottom_Panel", E.UIParent)
-
-local panels = {
-	--Panel = short, name, point, x, panel, slot
-	DP_1 = {"dp1", "DP_1", "TOPLEFT", 0, DP_1, 3},
-	DP_2 = {"dp2", "DP_2", "TOP", -(E.screenwidth/5), DP_2, 3},
-	DP_3 = {"dp3", "DP_3", "TOP", (E.screenwidth/5), DP_3, 3},
-	DP_4 = {"dp4", "DP_4", "TOPRIGHT", 0, DP_4, 3},
-	DP_5 = {"dp5", "DP_5", "BOTTOM", -(E.screenwidth/6 - 15), DP_5, 3},
-	DP_6 = {"dp6", "DP_6", "BOTTOM", (E.screenwidth/6 - 15), DP_6, 3},
-	Top_Center = {"top", "Top_Center", "TOP", 0, Top_Center, 1},
-	Bottom_Panel = {"bottom", "Bottom_Panel", "BOTTOM", 0, Bottom_Panel, 1},
-}
-
---Added function to create new panels
-LO.InitializeSLE = LO.Initialize
-function LO:Initialize()
-	LO.InitializeSLE(self)
-	for _,v in pairs(panels) do
-		DTP:CreateDataPanels(v[5], v[2], v[3], v[4], v[6], v[1])
-	end
-	DTP:Resize()
-
-	for _,v in pairs(panels) do
-		E:CreateMover(v[5], v[2].."_Mover", L[v[2]], nil, nil, nil, "ALL,S&L,S&L DT")
-	end
-end
-
--- New panels
-function DTP:CreateDataPanels(panel, name, point, x, slot, short)
-	panel:SetFrameStrata('LOW')
-	panel:Point(point, E.UIParent, point, x, 0);
-	DT:RegisterPanel(panel, slot, 'ANCHOR_BOTTOM', 0, -4)
-	panel:Hide()
-end
-
-function DTP:Resize()
-	local db = E.db.sle.datatext
-	for _,v in pairs(panels) do
-		v[5]:Size(db[v[1]].width, 20)
-	end
-	DT:UpdateAllDimensions()
-end
-
-function DTP:ChatResize()
-	LeftChatDataPanel:Point('TOPRIGHT', LeftChatPanel, 'BOTTOMLEFT', 16 + E.db.sle.datatext.chatleft.width, (E.PixelMode and 1 or -1))
-	RightChatDataPanel:Point('BOTTOMLEFT', RightChatPanel, 'BOTTOMRIGHT', - E.db.sle.datatext.chatright.width - 16, (E.PixelMode and -19 or -21))
-end
-
---Showing panels
-function DTP:ExtraDataBarSetup()
-	local db = E.db.sle.datatext
-	for _,v in pairs(panels) do
-		if db[v[1]].enabled then
-			v[5]:Show()
-		else
-			v[5]:Hide()
-		end
-		if not E.private.sle.datatext[v[1].."hide"] then
-			if db[v[1]].transparent then
-				v[5]:SetTemplate("Transparent")
-			else
-				v[5]:SetTemplate("Default", true)
-			end
-		end
-	end
-end
-
-function DTP:Update()
-	DTP:ExtraDataBarSetup()
-	DTP:Resize()
-end
-
-function DTP:RegisterHide()
-	local db = E.db.sle.datatext
-	for k,v in pairs(panels) do
-		if db[v[1]].pethide then
-			E.FrameLocks[k] = true
-		else
-			E.FrameLocks[k] = nil
-		end
-	end
-end
-
---Renew panels after loading screens
-function DTP:PLAYER_ENTERING_WORLD(...)
-	DTP:ExtraDataBarSetup()
-	DTP:RegisterHide()
-	self:UnregisterEvent("PLAYER_ENTERING_WORLD");
-end
-DTP:RegisterEvent('PLAYER_ENTERING_WORLD')
-
-E:RegisterModule(DTP:GetName())
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/agility.lua b/ElvUI_SLE/modules/datatexts/agility.lua
deleted file mode 100644
index 96d73db..0000000
--- a/ElvUI_SLE/modules/datatexts/agility.lua
+++ /dev/null
@@ -1,21 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI)
-local DT = E:GetModule('DataTexts')
-
-local displayNumberString = ''
-local lastPanel
-
-local function OnEvent(self, event, ...)
-	self.text:SetFormattedText(displayNumberString, AGILITY_COLON, select(2, UnitStat("player", 2)))
-	lastPanel = self
-end
-
-local function ValueColorUpdate(hex, r, g, b)
-	displayNumberString = strjoin("", "%s ", hex, "%.f|r")
-
-	if lastPanel ~= nil then
-		OnEvent(lastPanel)
-	end
-end
-E['valueColorUpdateFuncs'][ValueColorUpdate] = true
-
-DT:RegisterDatatext('Agility', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
diff --git a/ElvUI_SLE/modules/datatexts/currency.lua b/ElvUI_SLE/modules/datatexts/currency.lua
deleted file mode 100644
index 59b3057..0000000
--- a/ElvUI_SLE/modules/datatexts/currency.lua
+++ /dev/null
@@ -1,290 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI)
-local DT = E:GetModule('DataTexts')
-local SLE = E:GetModule('SLE')
-
-local format, floor, abs, mod, pairs, tinsert = format, floor, abs, mod, pairs, tinsert
-local GetMoney, GetCurrencyInfo, GetNumWatchedTokens, GetBackpackCurrencyInfo, UnitLevel, GetCurrencyListInfo = GetMoney, GetCurrencyInfo, GetNumWatchedTokens, GetBackpackCurrencyInfo, UnitLevel, GetCurrencyListInfo
-
-local join = string.join
-
-local defaultColor = { 1, 1, 1 }
-local Profit	= 0
-local Spent		= 0
-local copperFormatter = join("", "%d", L.copperabbrev)
-local silverFormatter = join("", "%d", L.silverabbrev, " %.2d", L.copperabbrev)
-local goldFormatter =  join("", "%s", L.goldabbrev, " %.2d", L.silverabbrev, " %.2d", L.copperabbrev)
-local resetInfoFormatter = join("", "|cffaaaaaa", L["Reset Data: Hold Shift + Right Click"], "|r")
-local JEWELCRAFTING, COOKING, ARCHAEOLOGY
-
-local ArchaeologyFragments = { 398, 384, 393, 677, 400, 394, 397, 676, 401, 385, 399 }
-local CookingAwards = { 81, 402 }
-local JewelcraftingTokens = { 61, 361, 698 }
-local DungeonRaid = { 776, 752, 697, 738, 615, 614, 395, 396 }
-local PvPPoints = { 390, 392, 391 }
-local MiscellaneousCurrency = { 241, 416, 515, 777 }
-
-local _, Faction = UnitFactionGroup('player')
-local HordeColor = RAID_CLASS_COLORS['DEATHKNIGHT']
-local AllianceColor = RAID_CLASS_COLORS['SHAMAN']
-
-local function OrderedPairs(t, f)
-	local function orderednext(t, n)
-		local key = t[t.__next]
-		if not key then return end
-		t.__next = t.__next + 1
-		return key, t.__source[key]
-	end
-
-	local keys, kn = {__source = t, __next = 1}, 1
-	for k in pairs(t) do
-		keys[kn], kn = k, kn + 1
-	end
-	sort(keys, f)
-	return orderednext, keys
-end
-
-V['ElvUI_Currency'] = {
-	['Archaeology'] = true,
-	['Jewelcrafting'] = true,
-	['PvP'] = true,
-	['Raid'] = true,
-	['Cooking'] = true,
-	['Miscellaneous'] = true,
-	['Zero'] = true,
-	['Icons'] = true,
-	['Faction'] = true,
-	['Unused'] = true,
-}
-
-local function ToggleOption(name)
-	if E.private['ElvUI_Currency'][name] then
-		E.private['ElvUI_Currency'][name] = false
-	else
-		E.private['ElvUI_Currency'][name] = true
-	end
-end
-
-local function GetOption(name)
-	return E.private['ElvUI_Currency'][name]
-end
-
-local menu = {
-	{ text = L['ElvUI Improved Currency Options'], isTitle = true , notCheckable = true },
-	{ text = L['Show Archaeology Fragments'], checked = function() return GetOption('Archaeology') end, func = function() ToggleOption('Archaeology') end },
-	{ text = L['Show Jewelcrafting Tokens'], checked = function()  return GetOption('Jewelcrafting') end, func = function() ToggleOption('Jewelcrafting') end },
-	{ text = L['Show Player vs Player Currency'], checked = function() return GetOption('PvP') end, func = function() ToggleOption('PvP') end },
-	{ text = L['Show Dungeon and Raid Currency'], checked = function() return GetOption('Raid') end, func = function() ToggleOption('Raid') end },
-	{ text = L['Show Cooking Awards'], checked = function() return GetOption('Cooking') end, func = function() ToggleOption('Cooking') end },
-	{ text = L['Show Miscellaneous Currency'], checked = function() return GetOption('Miscellaneous') end, func = function() ToggleOption('Miscellaneous') end },
-	{ text = L['Show Zero Currency'], checked = function() return GetOption('Zero') end, func = function() ToggleOption('Zero') end },
-	{ text = L['Show Icons'], checked = function() return GetOption('Icons') end, func = function() ToggleOption('Icons') end },
-	{ text = L['Show Faction Totals'], checked = function() return GetOption('Faction') end, func = function() ToggleOption('Faction') end },
-	{ text = L['Show Unsed Currency'], checked = function() return GetOption('Unused') end, func = function() ToggleOption('Unused') end },
-}
-
-local HiddenCurrency = {}
-
-local function UnusedCheck()
-	if GetOption('Unused') then HiddenCurrency = {}; return end
-	for i = 1, GetCurrencyListSize() do
-		local name, _, _, isUnused = GetCurrencyListInfo(i)
-		if isUnused then
-			if not SLE:SimpleTable(HiddenCurrency, name) then
-				table.insert(HiddenCurrency,#(HiddenCurrency)+1, name)
-			end
-		else
-			if SLE:SimpleTable(HiddenCurrency, name) then
-				HiddenCurrency[i] = nil
-			end
-		end
-	end
-end
-
-local menuFrame = CreateFrame("Frame", "ElvUI_CurrencyMenuFrame", UIParent, 'UIDropDownMenuTemplate')
-
-local function GetCurrency(CurrencyTable, Text)
-	local Seperator = false
-	UnusedCheck()
-	for key, id in pairs(CurrencyTable) do
-		local name, amount, texture, week, weekmax, maxed, discovered = GetCurrencyInfo(id)
-		local LeftString = GetOption('Icons') and format('%s %s', format('|T%s:14:14:0:0:64:64:4:60:4:60|t', texture), name) or name
-		local RightString = amount
-		local unused = SLE:SimpleTable(HiddenCurrency, name) or nil
-
-		if id == 392 or id == 395 then
-			maxed = 4000
-		elseif id == 396 then
-			maxed = 3000
-		end
-
-		if id == 390 then
-			discovered = UnitLevel('player') >= SHOW_CONQUEST_LEVEL
-			RightString = format('%s %s | %s %s / %s', L['Current:'], amount, L['Weekly:'], week, weekmax)
-		elseif maxed <= 4000 and maxed > 0 then
-			RightString = format('%s / %s', amount, maxed)
-		end
-
-		local r1, g1, b1 = 1, 1, 1
-		for i = 1, GetNumWatchedTokens() do
-			local _, _, _, itemID = GetBackpackCurrencyInfo(i)
-			if id == itemID then
-				r1, g1, b1 = .24, .54, .78
-			end
-		end
-		local r2, g2, b2 = r1, g1, b1
-		if maxed > 0 and (amount == maxed) or weekmax > 0 and (week == weekmax) then r2, g2, b2 = .77, .12, .23 end
-		if not (amount == 0 and not GetOption('Zero') and r1 == 1) and discovered and not unused then
-			if not Seperator then
-				DT.tooltip:AddLine(' ')
-				DT.tooltip:AddLine(Text)
-				Seperator = true
-			end
-			DT.tooltip:AddDoubleLine(LeftString, RightString, r1, g1, b1, r2, g2, b2)
-		end
-	end
-end
-
-local function FormatMoney(money)
-	local gold, silver, copper = floor(abs(money / 10000)), abs(mod(money / 100, 100)), abs(mod(money, 100))
-	if gold ~= 0 then
-		return format(goldFormatter, BreakUpLargeNumbers(gold), silver, copper)
-	elseif silver ~= 0 then
-		return format(silverFormatter, silver, copper)
-	else
-		return format(copperFormatter, copper)
-	end
-end
-
-local function FormatTooltipMoney(money)
-	if not money then return end
-	local gold, silver, copper = floor(abs(money / 10000)), abs(mod(money / 100, 100)), abs(mod(money, 100))
-	return format(goldFormatter, BreakUpLargeNumbers(gold), silver, copper)
-end
-
-local function OnEvent(self, event, ...)
-	if not IsLoggedIn() then return end
-	local NewMoney = GetMoney();
-	ElvDB = ElvDB or { };
-	ElvDB['gold'] = ElvDB['gold'] or {};
-	ElvDB['gold'][E.myrealm] = ElvDB['gold'][E.myrealm] or {};
-	ElvDB['gold'][E.myrealm][E.myname] = ElvDB['gold'][E.myrealm][E.myname] or NewMoney;
-	ElvDB['class'] = ElvDB['class'] or {};
-	ElvDB['class'][E.myrealm] = ElvDB['class'][E.myrealm] or {};
-	ElvDB['class'][E.myrealm][E.myname] = select(2, UnitClass('player'))
-	ElvDB['faction'] = ElvDB['faction'] or {};
-	ElvDB['faction'][E.myrealm] = ElvDB['faction'][E.myrealm] or {};
-	ElvDB['faction'][E.myrealm][FACTION_HORDE] = ElvDB['faction'][E.myrealm][FACTION_HORDE] or {};
-	ElvDB['faction'][E.myrealm][FACTION_ALLIANCE] = ElvDB['faction'][E.myrealm][FACTION_ALLIANCE] or {};
-
-	local OldMoney = ElvDB['gold'][E.myrealm][E.myname] or NewMoney
-
-	local Change = NewMoney-OldMoney -- Positive if we gain money
-	if OldMoney>NewMoney then		-- Lost Money
-		Spent = Spent - Change
-	else							-- Gained Moeny
-		Profit = Profit + Change
-	end
-
-	self.text:SetText(FormatMoney(NewMoney))
-
-	ElvDB['gold'][E.myrealm][E.myname] = NewMoney
-	ElvDB['faction'][E.myrealm][Faction][E.myname] = NewMoney
-	if event == 'PLAYER_ENTERING_WORLD' or event == 'SPELLS_CHANGED' then
-		JEWELCRAFTING = nil
-		for k, v in pairs({GetProfessions()}) do
-			if v then
-				local name, _, _, _, _, _, skillid = GetProfessionInfo(v)
-				if skillid == 755 then
-					JEWELCRAFTING = name
-				elseif skillid == 185 then
-					COOKING = name
-				elseif skillid == 794 then
-					ARCHAEOLOGY = name
-				end
-			end
-		end
-	end
-end
-
-local function Click(self, btn)
-	if btn == "RightButton" then
-		if IsShiftKeyDown() then
-			ElvDB.gold = nil;
-			OnEvent(self)
-			DT.tooltip:Hide();
-		else
-			EasyMenu(menu, menuFrame, 'cursor', 0, 0, 'MENU', 2)
-			--[[
-			menuFrame.point = 'CENTER'
-			menuFrame.relativePoint = 'CENTER'
-			E:DropDown(menu, menuFrame);]]
-		end
-	else
-		ToggleAllBags()
-	end
-end
-
-local function OnEnter(self)
-	DT:SetupTooltip(self)
-
-	DT.tooltip:AddLine(L['Session:'])
-	DT.tooltip:AddDoubleLine(L["Earned:"], FormatMoney(Profit), 1, 1, 1, 1, 1, 1)
-	DT.tooltip:AddDoubleLine(L["Spent:"], FormatMoney(Spent), 1, 1, 1, 1, 1, 1)
-	if Profit < Spent then
-		DT.tooltip:AddDoubleLine(L["Deficit:"], FormatMoney(Profit-Spent), 1, 0, 0, 1, 1, 1)
-	elseif (Profit-Spent)>0 then
-		DT.tooltip:AddDoubleLine(L["Profit:"], FormatMoney(Profit-Spent), 0, 1, 0, 1, 1, 1)
-	end
-	DT.tooltip:AddLine' '
-
-	local totalGold, AllianceGold, HordeGold = 0, 0, 0
-	DT.tooltip:AddLine(L["Character: "])
-	for k,_ in OrderedPairs(ElvDB['gold'][E.myrealm]) do
-		if ElvDB['gold'][E.myrealm][k] then
-			local class = ElvDB['class'][E.myrealm][k]
-			local color = RAID_CLASS_COLORS[class or 'PRIEST']
-			DT.tooltip:AddDoubleLine(k, FormatTooltipMoney(ElvDB['gold'][E.myrealm][k]), color.r, color.g, color.b, 1, 1, 1)
-			if ElvDB['faction'][E.myrealm][FACTION_ALLIANCE][k] then
-				AllianceGold = AllianceGold + ElvDB['gold'][E.myrealm][k]
-			end
-			if ElvDB['faction'][E.myrealm][FACTION_HORDE][k] then
-				HordeGold = HordeGold + ElvDB['gold'][E.myrealm][k]
-			end
-			totalGold = totalGold + ElvDB['gold'][E.myrealm][k]
-		end
-	end
-
-	DT.tooltip:AddLine' '
-	DT.tooltip:AddLine(L["Server: "])
-	if GetOption('Faction') then
-		DT.tooltip:AddDoubleLine(format('%s: ', FACTION_HORDE), FormatTooltipMoney(HordeGold), HordeColor.r, HordeColor.g, HordeColor.b, 1, 1, 1)
-		DT.tooltip:AddDoubleLine(format('%s: ', FACTION_ALLIANCE), FormatTooltipMoney(AllianceGold), AllianceColor.r, AllianceColor.g, AllianceColor.b, 1, 1, 1)
-	end
-	DT.tooltip:AddDoubleLine(L["Total: "], FormatTooltipMoney(totalGold), 1, 1, 1, 1, 1, 1)
-
-	if ARCHAEOLOGY ~= nil and GetOption('Archaeology') then
-		GetCurrency(ArchaeologyFragments, format('%s %s:', ARCHAEOLOGY, ARCHAEOLOGY_RUNE_STONES))
-	end
-	if COOKING ~= nil and GetOption('Cooking') then
-		GetCurrency(CookingAwards, format("%s:", COOKING))
-	end
-	if JEWELCRAFTING ~= nil and GetOption('Jewelcrafting') then
-		GetCurrency(JewelcraftingTokens, format("%s:", JEWELCRAFTING))
-	end
-	if GetOption('Raid') then
-		GetCurrency(DungeonRaid, format('%s & %s:', CALENDAR_TYPE_DUNGEON, CALENDAR_TYPE_RAID))
-	end
-	if GetOption('PvP') then
-		GetCurrency(PvPPoints, format("%s:", PLAYER_V_PLAYER))
-	end
-	if GetOption('Miscellaneous') then
-		GetCurrency(MiscellaneousCurrency, format("%s:", MISCELLANEOUS))
-	end
-
-	DT.tooltip:AddLine' '
-	DT.tooltip:AddLine(resetInfoFormatter)
-
-	DT.tooltip:Show()
-end
-
-DT:RegisterDatatext('S&L Currency', {'PLAYER_ENTERING_WORLD', 'PLAYER_MONEY', 'SEND_MAIL_MONEY_CHANGED', 'SEND_MAIL_COD_CHANGED', 'PLAYER_TRADE_MONEY', 'TRADE_MONEY_CHANGED', 'SPELLS_CHANGED'}, OnEvent, nil, Click, OnEnter)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/dashboard/dashboard.lua b/ElvUI_SLE/modules/datatexts/dashboard/dashboard.lua
deleted file mode 100755
index 5fafa05..0000000
--- a/ElvUI_SLE/modules/datatexts/dashboard/dashboard.lua
+++ /dev/null
@@ -1,87 +0,0 @@
---[[ Dashboard for ElvUI
-Credits : Sinaris, Elv
-made for ElvUI under Sinaris permission. Big thanks :)
-]]
-
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-local DTP = E:GetModule('DTPanels')
-local DT = E:GetModule('DataTexts')
-local LSM = LibStub("LibSharedMedia-3.0")
-if E.db.sle == nil then E.db.sle = {} end
-if E.db.sle.datatext == nil then E.db.sle.datatext = {} end
-if E.db.sle.datatext.dashboard == nil then E.db.sle.datatext.dashboard = {} end
-if E.db.sle.datatext.dashboard.width == nil then E.db.sle.datatext.dashboard.width = 100 end
-local DTPANELS_WIDTH = E.db.sle.datatext.dashboard.width
-local DTPANELS_HEIGHT = 20
-local PANEL_SPACING = 1
-local font = LSM:Fetch("font", E.db.datatexts.font)
-local fontsize = E.db.datatexts.fontSize
-local outline = E.db.datatexts.fontOutline
-
-local board = {}
-
-local bholder = CreateFrame("Frame", "BoardsHolder", E.UIParent)
-bholder:Point('TOPLEFT', E.UIParent, 'TOPLEFT', 0, -21)
-bholder:Size(((DTPANELS_WIDTH*4)+(PANEL_SPACING*3)), DTPANELS_HEIGHT)
-
-E:CreateMover(BoardsHolder, "Dashboard", L["Dashboard"], nil, nil, nil, "ALL,S&L,S&L MISC")
-
-local board = CreateFrame('frame', 'board', BoardsHolder)
-
-for i = 1, 4 do
-	board[i] = CreateFrame('frame', 'board'..i, bholder)
-	board[i]:SetFrameLevel(2)
-	board[i]:Size(DTPANELS_WIDTH, DTPANELS_HEIGHT)
-	board[i]:SetTemplate('Default', true)
-	board[i]:CreateShadow('Default')
-
-	if i == 1 then
-		board[i]:Point('TOPLEFT', bholder, 'TOPLEFT', 0, 0)
-	else
-		board[i]:Point('LEFT', board[i-1], 'RIGHT', PANEL_SPACING, 0)
-	end
-
-	board[i].Status = CreateFrame("StatusBar", "PanelStatus" .. i, board[i])
-	board[i].Status:SetFrameLevel(12)
-	board[i].Status:SetStatusBarTexture(E["media"].normTex)
-	board[i].Status:SetMinMaxValues(0, 100)
-	board[i].Status:SetStatusBarColor(.4, .4, .4, 1)
-	board[i].Status:Point("TOPLEFT", board[i], "TOPLEFT", 2, -2)
-	board[i].Status:Point("BOTTOMRIGHT", board[i], "BOTTOMRIGHT", -2, 2)
-
-	board[i].Text = board[i].Status:CreateFontString( nil, "OVERLAY" )
-	board[i].Text:FontTemplate()
-	board[i].Text:SetFont(font, fontsize, outline)
-	board[i].Text:Point("LEFT", board[i], "LEFT", 3, 0)
-	board[i].Text:SetJustifyV('MIDDLE')
-	board[i].Text:SetShadowColor(0, 0, 0)
-	board[i].Text:SetShadowOffset(1.25, -1.25)
-end
-
-function DTP:DashboardShow()
-	if E.db.sle.datatext.dashboard.enable then
-		E.FrameLocks['BoardsHolder'] = true
-		BoardsHolder:Show()
-	else
-		E.FrameLocks['BoardsHolder'] = nil
-		BoardsHolder:Hide()
-	end
-end
-
-DT.LoadDataTextsSLE = DT.LoadDataTexts
-function DT:LoadDataTexts()
-	DT.LoadDataTextsSLE(self)
-	font = LSM:Fetch("font", E.db.datatexts.font)
-	fontsize = E.db.datatexts.fontSize
-	outline = E.db.datatexts.fontOutline
-	for i = 1, 4 do
-		board[i].Text:SetFont(font, fontsize, outline)
-	end
-end
-
-function DTP:DashWidth()
-	for i = 1, 4 do
-		board[i]:Size(E.db.sle.datatext.dashboard.width, DTPANELS_HEIGHT)
-	end
-	bholder:Size(((E.db.sle.datatext.dashboard.width*4)+(PANEL_SPACING*3)), DTPANELS_HEIGHT)
-end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/dashboard/datapanels/bags.lua b/ElvUI_SLE/modules/datatexts/dashboard/datapanels/bags.lua
deleted file mode 100755
index 5545571..0000000
--- a/ElvUI_SLE/modules/datatexts/dashboard/datapanels/bags.lua
+++ /dev/null
@@ -1,25 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-
-local LastUpdate = 1
-
-board[2].Status:SetScript("OnUpdate", function(self)
-	local free, total, used = 0, 0, 0
-	for i = 0, NUM_BAG_SLOTS do
-		free, total = free + GetContainerNumFreeSlots(i), total + GetContainerNumSlots(i)
-	end
-	used = total - free
-	value = (used * 120 / total)
-
-	self:SetMinMaxValues(0, total)
-	self:SetValue(used)
-		board[2].Text:SetText(L["Bags"]..": " .. used .. " /" .. total)
-	if(used * 100 / total >= 75) then
-		self:SetStatusBarColor(1, 75 / 255, 75 / 255, 0.5, .8)
-	elseif used * 100 / total < 75 and used * 100 / total > 40 then
-		self:SetStatusBarColor(1, 180 / 255, 0, .8)
-	else
-		self:SetStatusBarColor(30 / 255, 1, 30 / 255, .8)
-	end
-end)
-
-board[2].Status:RegisterEvent("BAG_UPDATE")
diff --git a/ElvUI_SLE/modules/datatexts/dashboard/datapanels/durability.lua b/ElvUI_SLE/modules/datatexts/dashboard/datapanels/durability.lua
deleted file mode 100755
index 81ac536..0000000
--- a/ElvUI_SLE/modules/datatexts/dashboard/datapanels/durability.lua
+++ /dev/null
@@ -1,65 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-
-local displayString = ""
-local total, totalDurability, totalPerc = 0, 0, 0
-local current, max, lastPanel
-local invDurability = {}
-
-local slots = {
-	["SecondaryHandSlot"] = L['Offhand'],
-	["MainHandSlot"] = L['Main Hand'],
-	["FeetSlot"] = L['Feet'],
-	["LegsSlot"] = L['Legs'],
-	["HandsSlot"] = L['Hands'],
-	["WristSlot"] = L['Wrist'],
-	["WaistSlot"] = L['Waist'],
-	["ChestSlot"] = L['Chest'],
-	["ShoulderSlot"] = L['Shoulder'],
-	["HeadSlot"] = L['Head'],
-}
-
-board[1].Status:SetScript("OnEvent", function( self, ...)
-
-	lastPanel = self
-	total = 0
-	totalDurability = 0
-	totalPerc = 0
-
-	for index, value in pairs(slots) do
-		local slot = GetInventorySlotInfo(index)
-		current, max = GetInventoryItemDurability(slot)
-
-		if current then
-			totalDurability = totalDurability + current
-			invDurability[value] = (current/max)*100
-			totalPerc = totalPerc + (current/max)*100
-			total = total + 1
-		end
-	end
-
-	result = totalPerc/total
-
-	if total > 0 then
-		board[1].Text:SetFormattedText(displayString, result)
-	end
-
-	self:SetMinMaxValues(0, 100)
-	self:SetValue(result)
-
-	if( result >= 75 ) then
-		self:SetStatusBarColor(30 / 255, 1, 30 / 255, .8)
-	elseif result < 75 and result > 40 then
-		self:SetStatusBarColor(1, 180 / 255, 0, .8)
-	else
-		self:SetStatusBarColor(1, 75 / 255, 75 / 255, 0.5, .8)
-	end
-end)
-
-local function ValueColorUpdate(hex, r, g, b)
-	displayString = string.join("", DURABILITY, ": ", hex, "%d%%|r")
-end
-E['valueColorUpdateFuncs'][ValueColorUpdate] = true
-
-board[1].Status:RegisterEvent("UPDATE_INVENTORY_DURABILITY")
-board[1].Status:RegisterEvent("MERCHANT_SHOW")
-board[1].Status:RegisterEvent("PLAYER_ENTERING_WORLD")
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/dashboard/datapanels/fps.lua b/ElvUI_SLE/modules/datatexts/dashboard/datapanels/fps.lua
deleted file mode 100755
index 73be1b0..0000000
--- a/ElvUI_SLE/modules/datatexts/dashboard/datapanels/fps.lua
+++ /dev/null
@@ -1,23 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-
-local LastUpdate = 1
-
-board[3].Status:SetScript("OnUpdate", function( self, elapsed)
-	LastUpdate = LastUpdate - elapsed
-
-	if(LastUpdate < 0) then
-		self:SetMinMaxValues(0, 200)
-		local value = floor(GetFramerate())
-		local max = 120
-		self:SetValue(value)
-		board[3].Text:SetText("FPS: " .. value)
-		if(value * 100 / max >= 75) then
-			self:SetStatusBarColor(30 / 255, 1, 30 / 255, .8)
-		elseif value * 100 / max < 75 and value * 100 / max > 40 then
-			self:SetStatusBarColor(1, 180 / 255, 0, .8)
-		else
-			self:SetStatusBarColor(1, 75 / 255, 75 / 255, 0.5, .8)
-		end
-		LastUpdate = 1
-	end
-end)
diff --git a/ElvUI_SLE/modules/datatexts/dashboard/datapanels/ms.lua b/ElvUI_SLE/modules/datatexts/dashboard/datapanels/ms.lua
deleted file mode 100755
index 11653d5..0000000
--- a/ElvUI_SLE/modules/datatexts/dashboard/datapanels/ms.lua
+++ /dev/null
@@ -1,24 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-
-local LastUpdate = 1
-
-board[4].Status:SetScript("OnUpdate", function(self, elapsed)
-	LastUpdate = LastUpdate - elapsed
-
-	if(LastUpdate < 0) then
-		self:SetMinMaxValues(0, 200)
-		local value = (select( 3, GetNetStats()))
-		local max = 200
-		self:SetValue(value)
-		board[4].Text:SetText("MS: " .. value)
-
-		if( value * 100 / max <= 35) then
-			self:SetStatusBarColor(30 / 255, 1, 30 / 255, .8)
-		elseif value * 100 / max > 35 and value * 100 / max < 75 then
-			self:SetStatusBarColor(1, 180 / 255, 0, .8)
-		else
-			self:SetStatusBarColor(1, 75 / 255, 75 / 255, 0.5, .8)
-		end
-		LastUpdate = 1
-	end
-end)
diff --git a/ElvUI_SLE/modules/datatexts/dashboard/load_dashboard.xml b/ElvUI_SLE/modules/datatexts/dashboard/load_dashboard.xml
deleted file mode 100755
index c77944e..0000000
--- a/ElvUI_SLE/modules/datatexts/dashboard/load_dashboard.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file="dashboard.lua"/>
-	<Script file="datapanels\durability.lua"/>
-	<Script file="datapanels\bags.lua"/>
-	<Script file="datapanels\fps.lua"/>
-	<Script file="datapanels\ms.lua"/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/energyregen.lua b/ElvUI_SLE/modules/datatexts/energyregen.lua
deleted file mode 100644
index 5e56dd9..0000000
--- a/ElvUI_SLE/modules/datatexts/energyregen.lua
+++ /dev/null
@@ -1,21 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI)
-local DT = E:GetModule('DataTexts')
-
-local displayNumberString = ''
-local lastPanel
-
-local function OnEvent(self, event, ...)
-	self.text:SetFormattedText(displayNumberString, STAT_ENERGY_REGEN, GetPowerRegen())
-	lastPanel = self
-end
-
-local function ValueColorUpdate(hex, r, g, b)
-	displayNumberString = strjoin("", "%s: ", hex, "%.f|r")
-
-	if lastPanel ~= nil then
-		OnEvent(lastPanel)
-	end
-end
-E['valueColorUpdateFuncs'][ValueColorUpdate] = true
-
-DT:RegisterDatatext('Energy Regen', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
diff --git a/ElvUI_SLE/modules/datatexts/friends.lua b/ElvUI_SLE/modules/datatexts/friends.lua
deleted file mode 100644
index fda3df0..0000000
--- a/ElvUI_SLE/modules/datatexts/friends.lua
+++ /dev/null
@@ -1,564 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local LibQTip = LibStub('LibQTip-1.0')
-local ACD = LibStub("AceConfigDialog-3.0")
-local DT = E:GetModule('DataTexts')
-local LDB = LibStub("LibDataBroker-1.1"):NewDataObject("S&L Friends",
-{
-	type	= "data source",
-	icon	= "Interface\\Icons\\INV_Drink_08.png",
-	label	= "S&L Friends",
-	text	= "S&L Friends"
-})
-local _G = getfenv(0)
-local string = _G.string
-local pairs = _G.pairs
-local ONE_MINUTE = 60;
-local ONE_HOUR = 60 * ONE_MINUTE;
-local ONE_DAY = 24 * ONE_HOUR;
-local ONE_MONTH = 30 * ONE_DAY;
-local ONE_YEAR = 12 * ONE_MONTH;
-
-local function sletime_Conversion(timeDifference, isAbsolute)
-   if ( not isAbsolute ) then
-      timeDifference = time() - timeDifference;
-   end
-   local year, month, day, hour, minute;
-
-   if ( timeDifference < ONE_MINUTE ) then
-      return LASTONLINE_SECS;
-   elseif ( timeDifference >= ONE_MINUTE and timeDifference < ONE_HOUR ) then
-      return format(LASTONLINE_MINUTES, floor(timeDifference / ONE_MINUTE));
-   elseif ( timeDifference >= ONE_HOUR and timeDifference < ONE_DAY ) then
-      return format(LASTONLINE_HOURS, floor(timeDifference / ONE_HOUR));
-   elseif ( timeDifference >= ONE_DAY and timeDifference < ONE_MONTH ) then
-      return format(LASTONLINE_DAYS, floor(timeDifference / ONE_DAY));
-   elseif ( timeDifference >= ONE_MONTH and timeDifference < ONE_YEAR ) then
-      return format(LASTONLINE_MONTHS, floor(timeDifference / ONE_MONTH));
-   else
-      return format(LASTONLINE_YEARS, floor(timeDifference / ONE_YEAR));
-   end
-end
-
-local frame = CreateFrame("frame")
-local tooltip
-local LDB_ANCHOR
-local wtcgString = BNET_CLIENT_WTCG
-local GROUP_CHECKMARK	= "|TInterface\\Buttons\\UI-CheckBox-Check:0|t"
-local AWAY_ICON		= "|TInterface\\FriendsFrame\\StatusIcon-Away:18|t"
-local BUSY_ICON		= "|TInterface\\FriendsFrame\\StatusIcon-DnD:18|t"
-local MOBILE_ICON	= "|TInterface\\ChatFrame\\UI-ChatIcon-ArmoryChat:18|t"
-local MINIMIZE		= "|TInterface\\BUTTONS\\UI-PlusButton-Up:0|t"
-local BROADCAST_ICON = "|TInterface\\FriendsFrame\\BroadcastIcon:0|t"
-
--- Setup the Title Font. 14
-local ssTitleFont = CreateFont("ssTitleFont")
-ssTitleFont:SetTextColor(1,0.823529,0)
-ssTitleFont:SetFont(GameTooltipText:GetFont(), 14)
-
--- Setup the Header Font. 12
-local ssHeaderFont = CreateFont("ssHeaderFont")
-ssHeaderFont:SetTextColor(1,0.823529,0)
-ssHeaderFont:SetFont(GameTooltipHeaderText:GetFont(), 12)
-
--- Setup the Regular Font. 12
-local ssRegFont = CreateFont("ssRegFont")
-ssRegFont:SetTextColor(1,0.823529,0)
-ssRegFont:SetFont(GameTooltipText:GetFont(), 12)
-
-local list_sort = {
-	TOONNAME = function(a, b)
-		return a["TOONNAME"] < b["TOONNAME"]
-	end,
-	LEVEL =	function(a, b)
-		if a["LEVEL"] < b["LEVEL"] then
-			return true
-		elseif a["LEVEL"] > b["LEVEL"] then
-			return false
-		else  -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end,
-	RANKINDEX =	function(a, b)
-		if a["RANKINDEX"] > b["RANKINDEX"] then
-			return true
-		elseif a["RANKINDEX"] < b["RANKINDEX"] then
-			return false
-		else -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end,
-	ZONENAME = function(a, b)
-		if a["ZONENAME"] < b["ZONENAME"] then
-			return true
-		elseif a["ZONENAME"] > b["ZONENAME"] then
-			return false
-		else -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end,
-	REALMNAME = function(a, b)
-		if a["REALMNAME"] < b["REALMNAME"] then
-			return true
-		elseif a["REALMNAME"] > b["REALMNAME"] then
-			return false
-		else -- TOONNAME
-			return a["ZONENAME"] < b["ZONENAME"]
-		end
-	end,
-	revTOONNAME	= function(a, b)
-		return a["TOONNAME"] > b["TOONNAME"]
-	end,
-	revLEVEL = function(a, b)
-		if a["LEVEL"] > b["LEVEL"] then
-			return true
-		elseif a["LEVEL"] < b["LEVEL"] then
-			return false
-		else  -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end,
-	revRANKINDEX = function(a, b)
-		if a["RANKINDEX"] < b["RANKINDEX"] then
-			return true
-		elseif a["RANKINDEX"] > b["RANKINDEX"] then
-			return false
-		else -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end,
-	revZONENAME	= function(a, b)
-		if a["ZONENAME"] > b["ZONENAME"] then
-			return true
-		elseif a["ZONENAME"] < b["ZONENAME"] then
-			return false
-		else -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end,
-	revREALMNAME = function(a, b)
-		if a["REALMNAME"] > b["REALMNAME"] then
-			return true
-		elseif a["REALMNAME"] < b["REALMNAME"] then
-			return false
-		else -- TOONNAME
-			return a["ZONENAME"] < b["ZONENAME"]
-		end
-	end
-}
-
-local function inGroup(name)
-	if GetNumSubgroupMembers() > 0 and UnitInParty(name) then
-		return true
-	elseif GetNumGroupMembers() > 0 and UnitInRaid(name) then
-		return true
-	end
-
-	return false
-end
-
-local function nameIndex(name)
-	local lookupname
-
-	for i = 1, GetNumFriends() do
-		lookupname = GetFriendInfo(i)
-		if lookupname == name then
-			return i
-		end
-	end
-end
-
-local function ColoredLevel(level)
-	if level ~= "" then
-		local color = GetQuestDifficultyColor(level)
-		return string.format("|cff%02x%02x%02x%d|r", color.r * 255, color.g * 255, color.b * 255, level)
-	end
-end
-
-local CLASS_COLORS, color = {}
-local classes_female, classes_male = {}, {}
-
-FillLocalizedClassList(classes_female, true)
-FillLocalizedClassList(classes_male, false)
-
-for token, localizedName in pairs(classes_female) do
-	color = RAID_CLASS_COLORS[token]
-	CLASS_COLORS[localizedName] = string.format("%02x%02x%02x", color.r * 255, color.g * 255, color.b * 255)
-end
-
-for token, localizedName in pairs(classes_male) do
-	color = RAID_CLASS_COLORS[token]
-	CLASS_COLORS[localizedName] = string.format("%02x%02x%02x", color.r * 255, color.g * 255, color.b * 255)
-end
-
-local function valueColor(totals)
-	if totals ~= "" then
-		local color = E.db.general.valuecolor
-		return string.format("|cff%02x%02x%02x%d|r", color.r * 255, color.g * 255, color.b * 255, totals)
-	end
-end
-
-function DT:update_Friends()
-	ShowFriends()
-	local friendsTotal, friendsOnline = GetNumFriends()
-	local bnTotal, bnOnline = BNGetNumFriends()
-	local totalOnline = friendsOnline + bnOnline
-	local totalFriends = friendsTotal + bnTotal
-
-	if E.db.sle.dt.friends.totals then
-		LDB.text = "|cffffffff"..L['Friends']..": |r"..valueColor(totalOnline).."/"..valueColor(totalFriends)
-	else
-		LDB.text = "|cffffffff"..L['Friends']..": |r"..valueColor(totalOnline)
-	end
-end
-
-local function Entry_OnMouseUp(frame, info, button)
-	local i_type, toon_name, full_name, presence_id = string.split(":", info)
-
-	if button == "LeftButton" then
-		if IsAltKeyDown() then
-			if i_type == "realid" then
-				local presenceID, presenceName, battleTag, isBattleTagPresence, toonName, toonID = BNGetFriendInfo(BNGetFriendIndex(presence_id))
-				--local _, toonName, client, realmName, realmID, faction, race, class, guild, zoneName, level, gameText = BNGetFriendToonInfo(BNGetFriendIndex(presence_id), 1)
-				local _, toonName, client, realmName, realmID, faction, race, class, guild, zoneName, level, gameText = BNGetToonInfo(toonID or 0)
-
-				InviteUnit(toon_name.."-"..realmName)
-				return
-			else
-				InviteUnit(toon_name)
-				return
-			end
-		end
-
-		if IsShiftKeyDown() then
-			SetItemRef("player:"..toon_name, "|Hplayer:"..toon_name.."|h["..toon_name.."|h", "LeftButton")
-			return
-		end
-
-		if IsControlKeyDown() then
-			if i_type == "friends" then
-				FriendsFrame.NotesID = nameIndex(toon_name)
- 				StaticPopup_Show("SET_FRIENDNOTE", GetFriendInfo(FriendsFrame.NotesID))
- 				return
-			end
-
-			if i_type == "realid" then
-				FriendsFrame.NotesID = presence_id
-				StaticPopup_Show("SET_BNFRIENDNOTE", full_name)
-				return
-			end
-		end
-
-		if i_type == "realid" then
-			local name = full_name..":"..presence_id
-			SetItemRef( "BNplayer:"..name, ("|HBNplayer:%1$s|h[%1$s]|h"):format(name), "LeftButton" )
-		else
-			SetItemRef( "player:"..full_name, ("|Hplayer:%1$s|h[%1$s]|h"):format(full_name), "LeftButton" )
-		end
-	elseif button == "RightButton" then
-		if IsControlKeyDown() then
-			--Possibly Set BNetBroadcast
-			--	E:StaticPopup_Show("SET_BN_BROADCAST")
-		end
-	elseif button == "MiddleButton" then
-		E.db.sle.dt.friends.expandBNBroadcast = not E.db.sle.dt.friends.expandBNBroadcast
-		LDB.OnEnter(LDB_ANCHOR)
-	end
-end
-
-local function HideOnMouseUp(cell, section)
-	E.db.sle.dt.friends[section] = not E.db.sle.dt.friends[section]
-	LDB.OnEnter(LDB_ANCHOR)
-end
-
-local function SetRealIDSort(cell, sortsection)
-	if E.db.sle.dt.friends["sortBN"] == sortsection then
-		E.db.sle.dt.friends["sortBN"] = "rev" .. sortsection
-	else
-		E.db.sle.dt.friends["sortBN"] = sortsection
-	end
-	LDB.OnEnter(LDB_ANCHOR)
-end
-
-function LDB:OnClick(button)
-	if button == "LeftButton" then
-		ToggleFriendsFrame()
-	end
-
-	if button == "RightButton" then
-		ElvConfigToggle:Click();
-		ACD:SelectGroup("ElvUI", "sle", "sldatatext", "slfriends")
-	end
-end
-
-function LDB.OnLeave() end
-
-function LDB.OnEnter(self)
-	if E.db.sle.dt.friends.combat and InCombatLockdown() then return end
-	LDB_ANCHOR = self
-
-	if LibQTip:IsAcquired("ShadowLightFriends") then
-		tooltip:Clear()
-	else
-		tooltip = LibQTip:Acquire("ShadowLightFriends", 8, "RIGHT", "RIGHT", "LEFT", "LEFT", "CENTER", "CENTER", "RIGHT")
-
-		tooltip:SetBackdropColor(0,0,0,1)
-
-		tooltip:SetHeaderFont(ssHeaderFont)
-		tooltip:SetFont(ssRegFont)
-
-		tooltip:SmartAnchorTo(self)
-		tooltip:SetAutoHideDelay(E.db.sle.dt.friends.tooltipAutohide, self)
-		tooltip:SetScript("OnShow", function(ttskinself) ttskinself:SetTemplate('Transparent') end)
-	end
-
-	local line = tooltip:AddLine()
-	tooltip:SetCell(line, 1, "Shadow & Light Friends", ssTitleFont, "CENTER", 0)
-	tooltip:AddLine(" ")
-
-	local _, numBNOnline = BNGetNumFriends()
-	local _, numFriendsOnline = GetNumFriends()
-
-	if (numBNOnline > 0) or (numFriendsOnline > 0) then
-		line = tooltip:AddLine()
-		if not E.db.sle.dt.friends.hideFriends then
-			tooltip:SetCell(line, 1, "|cffffffff" .. _G.FRIENDS .. "|r", "LEFT", 3)
-		else
-			tooltip:SetCell(line, 1, "|cffffffff" .. MINIMIZE .. _G.FRIENDS .. "|r", "LEFT", 3)
-		end
-		tooltip:SetCellScript(line, 1, "OnMouseUp", HideOnMouseUp, "hideFriends")
-
-		if not E.db.sle.dt.friends.hideFriends then
-			line = tooltip:AddHeader()
-			line = tooltip:SetCell(line, 1, "  ")
-			tooltip:SetCellScript(line, 1, "OnMouseUp", SetRealIDSort, "LEVEL")
-			line = tooltip:SetCell(line, 3, _G.NAME)
-			tooltip:SetCellScript(line, 3, "OnMouseUp", SetRealIDSort, "TOONNAME")
-			line = tooltip:SetCell(line, 4, _G.BATTLENET_FRIEND)
-			tooltip:SetCellScript(line, 4, "OnMouseUp", SetRealIDSort, "REALID")
-			line = tooltip:SetCell(line, 5, _G.LOCATION_COLON)
-			tooltip:SetCellScript(line, 5, "OnMouseUp", SetRealIDSort, "ZONENAME")
-			line = tooltip:SetCell(line, 6, _G.FRIENDS_LIST_REALM)
-			tooltip:SetCellScript(line, 6, "OnMouseUp", SetRealIDSort, "REALMNAME")
-			if not E.db.sle.dt.friends.hideFriendsNotes then
-				line = tooltip:SetCell(line, 7, _G.NOTE_COLON)
-			else
-				line = tooltip:SetCell(line, 7, MINIMIZE .. _G.NOTE_COLON)
-			end
-			tooltip:SetCellScript(line, 7, "OnMouseUp", HideOnMouseUp, "hideFriendsNotes")
-
-			tooltip:AddSeparator()
-
-			if numBNOnline > 0 then
-				local realid_table = {}
-				for i = 1, numBNOnline do
-					--local presenceID, givenName, surname = BNGetFriendInfo(i)
-					local presenceID, givenName, bTag, _, _, toonID, gameClient, isOnline, lastOnline, isAFK, isDND, broadcast, note, _, castTime = BNGetFriendInfo(i)
-					local _, toonName, client, realmName, realmID, faction, race, class, guild, zoneName, level, gameText = BNGetToonInfo(toonID or 0)
-					local broadcastTime = ""
-					if castTime then
-						broadcastTime = string.format(BNET_BROADCAST_SENT_TIME, sletime_Conversion(castTime));
-					end
-					--for toonidx = 1, BNGetNumFriendToons(i) do
-						local fcolor
-						local status = ""
-						--local _, _, _, _, _, _, _, isOnline, lastOnline, isAFK, isDND, broadcast, note = BNGetFriendInfoByID(presenceID)
-						--local _, toonName, client, realmName, realmID, faction, race, class, guild, zoneName, level, gameText = BNGetFriendToonInfo(i, toonidx)
-
-						if toonName then
-							if faction then
-								if faction == "Horde" then
-									fcolor = RED_FONT_COLOR_CODE
-								else
-									fcolor = "|cff0070dd"
-								end
-							end
-
-							if isAFK then
-								status = AWAY_ICON
-							end
-
-							if isDND then
-								status = BUSY_ICON
-							end
-
-							if note and note ~= "" then note = "|cffff8800{"..note.."}|r" end
-
-							table.insert(realid_table, {
-								GIVENNAME = givenName,
-								SURNAME = bTag or "",
-								LEVEL = level,
-								CLASS = class,
-								FCOLOR = fcolor,
-								STATUS = status,
-								BROADCAST_TEXT = broadcast or "",
-								BROADCAST_TIME = broadcastTime or "",
-								TOONNAME = toonName,
-								CLIENT = client,
-								ZONENAME = zoneName,
-								REALMNAME = realmName,
-								GAMETEXT = gameText,
-								NOTE = note,
-								PRESENCEID = presenceID
-								})
-						end
-					--end
-				end
-
-				if (E.db.sle.dt.friends["sortBN"] ~= "REALID") and (E.db.sle.dt.friends["sortBN"] ~= "revREALID") then
-					table.sort(realid_table, list_sort[E.db.sle.dt.friends["sortBN"]])
-				end
-
-				for _, player in ipairs(realid_table) do
-					local broadcast_flag
-					if not E.db.sle.dt.friends.expandBNBroadcast and player["BROADCAST_TEXT"] ~= "" then
-						broadcast_flag = " " .. BROADCAST_ICON
-					else
-						broadcast_flag = ""
-					end
-
-					line = tooltip:AddLine()
-					line = tooltip:SetCell(line, 1, ColoredLevel(player["LEVEL"]))
-					line = tooltip:SetCell(line, 2, player["STATUS"])
-					line = tooltip:SetCell(line, 3,
-						string.format("|cff%s%s",CLASS_COLORS[player["CLASS"]] or "B8B8B8", player["TOONNAME"] .. "|r")..
-						(inGroup(player["TOONNAME"]) and GROUP_CHECKMARK or ""))
-					line = tooltip:SetCell(line, 4,
-						"|cff82c5ff" .. player["GIVENNAME"] .. "|r" .. broadcast_flag)
-
-					if player["CLIENT"] == "WoW" then
-						line = tooltip:SetCell(line, 5, player["ZONENAME"])
-						line = tooltip:SetCell(line, 6, player["FCOLOR"] .. player["REALMNAME"] .. "|r")
-					elseif player["CLIENT"] == "App" then
-						--if player["CLIENT"] == "App" then
-							line = tooltip:SetCell(line, 5, "|cff82c5ffDesktop Application|r")
-							line = tooltip:SetCell(line, 6, "|cff01b2f1Battle.net|r")
-						--end
-					else
-						line = tooltip:SetCell(line, 5, player["GAMETEXT"])
-						if player["CLIENT"] == "S2" then
-							line = tooltip:SetCell(line, 6, "|cff82c5ffStarCraft 2|r")
-						end
-
-						if player["CLIENT"] == "D3" then
-							line = tooltip:SetCell(line, 6, "|cffad835aDiablo 3|r")
-						end
-
-						if player["CLIENT"] == wtcgString then
-							line = tooltip:SetCell(line, 6, "|cff82c5ffHearthstone|r")
-						end
-
-					end
-
-					if not E.db.sle.dt.friends.hideFriendsNotes then
-						line = tooltip:SetCell(line, 7, player["NOTE"])
-					end
-
-					tooltip:SetLineScript(line, "OnMouseUp", Entry_OnMouseUp, string.format("realid:%s:%s:%d", player["TOONNAME"], player["GIVENNAME"], player["PRESENCEID"]))
-
-					if E.db.sle.dt.friends.expandBNBroadcast and player["BROADCAST_TEXT"] ~= "" then
-						line = tooltip:AddLine()
-						line = tooltip:SetCell(line, 1, BROADCAST_ICON .. " |cff7b8489" .. player["BROADCAST_TEXT"] .. "|r "..player["BROADCAST_TIME"], "LEFT", 0)
-						tooltip:SetLineScript(line, "OnMouseUp", Entry_OnMouseUp, string.format("realid:%s:%s:%d", player["TOONNAME"], player["GIVENNAME"], player["PRESENCEID"]))
-					end
-				end
-				tooltip:AddLine(" ")
-			end
-
-			if numFriendsOnline > 0 then
-				local friend_table = {}
-				for i = 1,numFriendsOnline do
-					local toonName, level, class, zoneName, connected, status, note = GetFriendInfo(i)
-					note = note and "|cffff8800{"..note.."}|r" or ""
-
-					if status == CHAT_FLAG_AFK then
-						status = AWAY_ICON
-					elseif status == CHAT_FLAG_DND then
-						status = BUSY_ICON
-					end
-
-					table.insert(friend_table, {
-						TOONNAME = toonName,
-						LEVEL = level,
-						CLASS = class,
-						ZONENAME = zoneName,
-						REALMNAME = "",
-						STATUS = status,
-						NOTE = note
-						})
-				end
-
-				if (E.db.sle.dt.friends["sortBN"] ~= "REALID") and (E.db.sle.dt.friends["sortBN"] ~= "revREALID") then
-					table.sort(friend_table, list_sort[E.db.sle.dt.friends["sortBN"]])
-				else
-					table.sort(friend_table, list_sort["TOONNAME"])
-				end
-
-				for _, player in ipairs(friend_table) do
-					line = tooltip:AddLine()
-					line = tooltip:SetCell(line, 1, ColoredLevel(player["LEVEL"]))
-					line = tooltip:SetCell(line, 2, player["STATUS"])
-					line = tooltip:SetCell(line, 3,
-						string.format("|cff%s%s", CLASS_COLORS[player["CLASS"]] or "ffffff", player["TOONNAME"] .. "|r") .. (inGroup(player["TOONNAME"]) and GROUP_CHECKMARK or ""));
-					line = tooltip:SetCell(line, 5, player["ZONENAME"])
-					if not E.db.sle.dt.friends.hideFriendsNotes then
-						line = tooltip:SetCell(line, 7, player["NOTE"])
-					end
-					tooltip:SetLineScript(line, "OnMouseUp", Entry_OnMouseUp, string.format("friends:%s:%s", player["TOONNAME"], player["TOONNAME"]))
-				end
-			end
-		end
-		tooltip:AddLine(" ")
-	end
-
-	if not E.db.sle.dt.friends.hide_hintline then
-		line = tooltip:AddLine()
-		if not E.db.sle.dt.friends.minimize_hintline then
-			tooltip:SetCell(line, 1, "Hint:", "LEFT", 3)
-		else
-			tooltip:SetCell(line, 1, MINIMIZE .. "Hint:", "LEFT", 3)
-		end
-		tooltip:SetCellScript(line, 1, "OnMouseUp", HideOnMouseUp, "minimize_hintline")
-
-		if not E.db.sle.dt.friends.minimize_hintline then
-			line = tooltip:AddLine()
-			tooltip:SetCell(line, 1, "", "LEFT", 1)
-			tooltip:SetCell(line, 2, "|cffeda55fLeft Click|r to open the friends panel.", "LEFT", 3)
-			tooltip:SetCell(line, 5, "|cffeda55fRight Click|r to open configuration panel.", "LEFT", 3)
-			line = tooltip:AddLine()
-			tooltip:SetCell(line, 1, "", "LEFT", 1)
-			tooltip:SetCell(line, 2, "|cffeda55fLeft Click|r a line to whisper a player.", "LEFT", 3)
-			tooltip:SetCell(line, 5, "|cffeda55fShift+Left Click|r a line to lookup a player.", "LEFT", 3)
-			line = tooltip:AddLine()
-			tooltip:SetCell(line, 1, "", "LEFT", 1)
-			tooltip:SetCell(line, 2, "|cffeda55fCtrl+Left Click|r a line to edit a note.", "LEFT", 3)
-			tooltip:SetCell(line, 5, "|cffeda55fMiddleClick|r a line to expand RealID.", "LEFT", 3)
-			line = tooltip:AddLine()
-			tooltip:SetCell(line, 1, "", "LEFT", 1)
-			tooltip:SetCell(line, 2, "|cffeda55fAlt+Left Click|r a line to invite.", "LEFT", 3)
-			tooltip:SetCell(line, 5, "|cffeda55fLeft Click|r a Header to hide it or sort it.", "LEFT", 3)
-		end
-	end
-
-	tooltip:UpdateScrolling()
-	tooltip:Show()
-end
-
-frame:SetScript("OnEvent", function(self, event, ...)
-	if self[event] then
-		return self[event](self, event, ...)
-	end
-end)
-
-local DELAY = 15  --  Update every 15 seconds
-local elapsed = DELAY - 5
-
-frame:SetScript("OnUpdate", function (self, elapse)
-	elapsed = elapsed + elapse
-
-	if elapsed >= DELAY then
-		elapsed = 0
-		DT:update_Friends()
-	end
-end)
-
-frame:RegisterEvent("PLAYER_LOGIN")
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/guild.lua b/ElvUI_SLE/modules/datatexts/guild.lua
deleted file mode 100644
index 9de4d22..0000000
--- a/ElvUI_SLE/modules/datatexts/guild.lua
+++ /dev/null
@@ -1,423 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local LibQTip = LibStub('LibQTip-1.0')
-local ACD = LibStub("AceConfigDialog-3.0")
-local DT = E:GetModule('DataTexts')
-local LDB = LibStub("LibDataBroker-1.1"):NewDataObject("S&L Guild",
-{
-	type	= "data source",
-	icon	= "Interface\\Icons\\INV_Drink_08.png",
-	label	= "S&L Guild",
-	text	= "S&L Guild"
-})
-local _G = getfenv(0)
-local string = _G.string
-local pairs = _G.pairs
-local MyRealm = E.myrealm
-local frame = CreateFrame("frame")
-
-local tooltip
-local LDB_ANCHOR
-
-local GROUP_CHECKMARK	= "|TInterface\\Buttons\\UI-CheckBox-Check:0|t"
-local AWAY_ICON		= "|TInterface\\FriendsFrame\\StatusIcon-Away:18|t"
-local BUSY_ICON		= "|TInterface\\FriendsFrame\\StatusIcon-DnD:18|t"
-local MOBILE_ICON	= "|TInterface\\ChatFrame\\UI-ChatIcon-ArmoryChat:18|t"
-local MINIMIZE		= "|TInterface\\BUTTONS\\UI-PlusButton-Up:0|t"
-
-local FACTION_COLOR_HORDE = RED_FONT_COLOR_CODE
-local FACTION_COLOR_ALLIANCE = "|cff0070dd"
-
--- Setup the Title Font. 14
-local ssTitleFont = CreateFont("ssTitleFont")
-ssTitleFont:SetTextColor(1,0.823529,0)
-ssTitleFont:SetFont(GameTooltipText:GetFont(), 14)
-
--- Setup the Header Font. 12
-local ssHeaderFont = CreateFont("ssHeaderFont")
-ssHeaderFont:SetTextColor(1,0.823529,0)
-ssHeaderFont:SetFont(GameTooltipHeaderText:GetFont(), 12)
-
--- Setup the Regular Font. 12
-local ssRegFont = CreateFont("ssRegFont")
-ssRegFont:SetTextColor(1,0.823529,0)
-ssRegFont:SetFont(GameTooltipText:GetFont(), 12)
-
-local list_sort = {
-	TOONNAME = function(a, b)
-		return a["TOONNAME"] < b["TOONNAME"]
-	end,
-	LEVEL =	function(a, b)
-		if a["LEVEL"] < b["LEVEL"] then
-			return true
-		elseif a["LEVEL"] > b["LEVEL"] then
-			return false
-		else  -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end,
-	RANKINDEX =	function(a, b)
-		if a["RANKINDEX"] > b["RANKINDEX"] then
-			return true
-		elseif a["RANKINDEX"] < b["RANKINDEX"] then
-			return false
-		else -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end,
-	ZONENAME = function(a, b)
-		if a["ZONENAME"] < b["ZONENAME"] then
-			return true
-		elseif a["ZONENAME"] > b["ZONENAME"] then
-			return false
-		else -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end,
-	revTOONNAME	= function(a, b)
-		return a["TOONNAME"] > b["TOONNAME"]
-	end,
-	revLEVEL = function(a, b)
-		if a["LEVEL"] > b["LEVEL"] then
-			return true
-		elseif a["LEVEL"] < b["LEVEL"] then
-			return false
-		else  -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end,
-	revRANKINDEX = function(a, b)
-		if a["RANKINDEX"] < b["RANKINDEX"] then
-			return true
-		elseif a["RANKINDEX"] > b["RANKINDEX"] then
-			return false
-		else -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end,
-	revZONENAME	= function(a, b)
-		if a["ZONENAME"] > b["ZONENAME"] then
-			return true
-		elseif a["ZONENAME"] < b["ZONENAME"] then
-			return false
-		else -- TOONNAME
-			return a["TOONNAME"] < b["TOONNAME"]
-		end
-	end
-}
-
-local function inGroup(name)
-	if GetNumSubgroupMembers() > 0 and UnitInParty(name) then
-		return true
-	elseif GetNumGroupMembers() > 0 and UnitInRaid(name) then
-		return true
-	end
-
-	return false
-end
-
-local function guild_name_to_index(name)
-	local lookupname
-
-	for i = 1, GetNumGuildMembers() do
-		lookupname = GetGuildRosterInfo(i)
-
-		if lookupname == name then
-			return i
-		end
-	end
-end
-
-local function ColoredLevel(level)
-	if level ~= "" then
-		local color = GetQuestDifficultyColor(level)
-		return string.format("|cff%02x%02x%02x%d|r", color.r * 255, color.g * 255, color.b * 255, level)
-	end
-end
-
-local CLASS_COLORS, color = {}
-local classes_female, classes_male = {}, {}
-
-FillLocalizedClassList(classes_female, true)
-FillLocalizedClassList(classes_male, false)
-
-for token, localizedName in pairs(classes_female) do
-	color = RAID_CLASS_COLORS[token]
-	CLASS_COLORS[localizedName] = string.format("%02x%02x%02x", color.r * 255, color.g * 255, color.b * 255)
-end
-
-for token, localizedName in pairs(classes_male) do
-	color = RAID_CLASS_COLORS[token]
-	CLASS_COLORS[localizedName] = string.format("%02x%02x%02x", color.r * 255, color.g * 255, color.b * 255)
-end
-
-local function valueColor(totals)
-	if totals ~= "" then
-		local color = E.db.general.valuecolor
-		return string.format("|cff%02x%02x%02x%d|r", color.r * 255, color.g * 255, color.b * 255, totals)
-	end
-end
-
-function DT:update_Guild()
-	if IsInGuild() then
-		GuildRoster()
-		local guildTotal, online = GetNumGuildMembers()
-			for i = 1, GetNumGuildMembers() do
-				local _, _, _, _, _, _, _, _, connected, _, _, _, _, isMobile = GetGuildRosterInfo(i)
-				if isMobile then
-					online = online + 1
-				end
-			end
-		if E.db.sle.dt.guild.totals then
-			LDB.text = --[["|cff82c5ff"]]"|cffffffff"..GUILD..": |r"..valueColor(online).."/"..valueColor(guildTotal)--[["|r"]]
-		else
-			LDB.text = "|cffffffff"..GUILD..": |r"..valueColor(online)
-		end
-	else
-		LDB.text = "|cffffffff"..L['No Guild'].."|r"
-	end
-end
-
-local function Entry_OnMouseUp(frame, info, button)
-	local i_type, toon_name, full_name, presence_id = string.split(":", info)
-
-	if button == "LeftButton" then
-		if IsAltKeyDown() then
-			InviteUnit(toon_name)
-			return
-		end
-
-		if IsShiftKeyDown() then
-			SetItemRef("player:"..toon_name, "|Hplayer:"..toon_name.."|h["..toon_name.."|h", "LeftButton")
-			return
-		end
-
-		if IsControlKeyDown() then
-			if i_type == "guild" and CanEditPublicNote() then
-				SetGuildRosterSelection(guild_name_to_index(toon_name))
-				StaticPopup_Show("SET_GUILDPLAYERNOTE")
-				return
-			end
-		end
-
-		SetItemRef( "player:"..full_name, ("|Hplayer:%1$s|h[%1$s]|h"):format(full_name), "LeftButton" )
-	elseif button == "RightButton" then
-		if IsControlKeyDown() then
-			if i_type == "guild" and CanEditOfficerNote() then
-				SetGuildRosterSelection(guild_name_to_index(toon_name))
-				StaticPopup_Show("SET_GUILDOFFICERNOTE")
-			end
-		end
-	end
-end
-
-local function HideOnMouseUp(cell, section)
-	E.db.sle.dt.guild[section] = not E.db.sle.dt.guild[section]
-	LDB.OnEnter(LDB_ANCHOR)
-end
-
-local function SetGuildSort(cell, sortsection)
-	if E.db.sle.dt.guild["sortGuild"] == sortsection then
-		E.db.sle.dt.guild["sortGuild"] = "rev" .. sortsection
-	else
-		E.db.sle.dt.guild["sortGuild"] = sortsection
-	end
-	LDB.OnEnter(LDB_ANCHOR)
-end
-
-function LDB:OnClick(button)
-	if button == "LeftButton" then
-		ToggleGuildFrame(1)
-	end
-
-	if button == "RightButton" then
-		ElvConfigToggle:Click();
-		ACD:SelectGroup("ElvUI", "sle", "sldatatext", "slguild")
-	end
-end
-
-function LDB.OnLeave() end
-
-function LDB.OnEnter(self)
-	if E.db.sle.dt.guild.combat and InCombatLockdown() then return end
-	LDB_ANCHOR = self
-
-	if LibQTip:IsAcquired("ShadowLightGuild") then
-		tooltip:Clear()
-	else
-		tooltip = LibQTip:Acquire("ShadowLightGuild", 8, "RIGHT", "RIGHT", "LEFT", "LEFT", "CENTER", "CENTER", "RIGHT")
-
-		tooltip:SetBackdropColor(0,0,0,1)
-
-		tooltip:SetHeaderFont(ssHeaderFont)
-		tooltip:SetFont(ssRegFont)
-
-		tooltip:SmartAnchorTo(self)
-		tooltip:SetAutoHideDelay(E.db.sle.dt.guild.tooltipAutohide, self)
-		tooltip:SetScript("OnShow", function(ttskinself) ttskinself:SetTemplate('Transparent') end)
-	end
-
-	local line = tooltip:AddLine()
-	tooltip:SetCell(line, 1, "Shadow & Light Guild", ssTitleFont, "CENTER", 0)
-	tooltip:AddLine(" ")
-
-	if IsInGuild() then
-		local guild_table = {}
-		if not E.db.sle.dt.guild.hide_gmotd then
-			line = tooltip:AddLine()
-			if not E.db.sle.dt.guild.minimize_gmotd then
-				tooltip:SetCell(line, 1, "|cffffffff" .. _G.CHAT_GUILD_MOTD_SEND .. "|r", "LEFT", 3)
-			else
-				tooltip:SetCell(line, 1, "|cffffffff".. MINIMIZE .. _G.CHAT_GUILD_MOTD_SEND .. "|r", "LEFT", 3)
-			end
-			tooltip:SetCellScript(line, 1, "OnMouseUp", HideOnMouseUp, "minimize_gmotd")
-
-			if not E.db.sle.dt.guild.minimize_gmotd then
-				line = tooltip:AddLine()
-				tooltip:SetCell(line, 1, "|cff00ff00"..GetGuildRosterMOTD().."|r", "LEFT", 0, nil, nil, nil, 100)
-			end
-
-			tooltip:AddLine(" ")
-		end
-
-		local ssGuildName
-		if not E.db.sle.dt.guild.hide_guildname then
-			ssGuildName = GetGuildInfo("player")
-		else
-			ssGuildName = _G.GUILD
-		end
-
-		line = tooltip:AddLine()
-		if not E.db.sle.dt.guild.hideGuild then
-			tooltip:SetCell(line, 1, "|cffffffff" .. ssGuildName .."|r", "LEFT", 3)
-		else
-			line = tooltip:SetCell(line, 1, MINIMIZE .. "|cffffffff" .. ssGuildName .. "|r", "LEFT", 3)
-		end
-		tooltip:SetCellScript(line, 1, "OnMouseUp", HideOnMouseUp, "hideGuild")
-
-		if not E.db.sle.dt.guild.hideGuild then
-			line = tooltip:AddHeader()
-			line = tooltip:SetCell(line, 1, "  ")
-			tooltip:SetCellScript(line, 1, "OnMouseUp", SetGuildSort, "LEVEL")
-			line = tooltip:SetCell(line, 3, _G.NAME)
-			tooltip:SetCellScript(line, 3, "OnMouseUp", SetGuildSort, "TOONNAME")
-			line = tooltip:SetCell(line, 5, _G.ZONE)
-			tooltip:SetCellScript(line, 5, "OnMouseUp", SetGuildSort, "ZONENAME")
-			line = tooltip:SetCell(line, 6, _G.RANK)
-			tooltip:SetCellScript(line, 6, "OnMouseUp", SetGuildSort, "RANKINDEX")
-
-			if not E.db.sle.dt.guild.hide_guild_onotes then
-				line = tooltip:SetCell(line, 7, _G.NOTE_COLON)
-			else
-				line = tooltip:SetCell(line, 7, MINIMIZE .. _G.NOTE_COLON)
-			end
-			tooltip:SetCellScript(line, 7, "OnMouseUp", HideOnMouseUp, "hide_guild_onotes")
-
-			tooltip:AddSeparator()
-
-			for i = 1, GetNumGuildMembers() do
-				local toonName, rank, rankindex, level, class, zoneName, note, onote, connected, status, classFileName, achievementPoints, achievementRank, isMobile = GetGuildRosterInfo(i)
-				local toonShortName, toonRealm = string.split("-", toonName)
-				if MyRealm == toonRealm then toonName = toonShortName end
-				if connected or isMobile then
-					if note and note ~= '' then note="|cff00ff00["..note.."]|r" end
-					if onote and onote ~= '' then onote = "|cff00ffff["..onote.."]|r" end
-
-					if status == 1 then
-						status = AWAY_ICON
-					elseif status == 2 then
-						status = BUSY_ICON
-					elseif status == 0 then
-						status = ''
-					end
-
-					if isMobile then
-						status = MOBILE_ICON
-						zoneName = "Remote Chat"
-					end
-
-					table.insert(guild_table, {
-						TOONNAME = toonName,
-						RANK = rank,
-						RANKINDEX = rankindex,
-						LEVEL = level,
-						CLASS = class,
-						ZONENAME = zoneName,
-						NOTE = note,
-						ONOTE = onote,
-						STATUS = status
-						})
-				end
-			end
-
-			table.sort(guild_table, list_sort[E.db.sle.dt.guild["sortGuild"]])
-
-			for _, player in ipairs(guild_table) do
-					line = tooltip:AddLine()
-					line = tooltip:SetCell(line, 1, ColoredLevel(player["LEVEL"]))
-					line = tooltip:SetCell(line, 2, player["STATUS"])
-					line = tooltip:SetCell(line, 3,
-						string.format("|cff%s%s", CLASS_COLORS[player["CLASS"]] or "ffffff", player["TOONNAME"] .. "|r") .. (inGroup(player["TOONNAME"]) and GROUP_CHECKMARK or ""))
-					line = tooltip:SetCell(line, 5, player["ZONENAME"] or "???")
-					line = tooltip:SetCell(line, 6, player["RANK"])
-					if not E.db.sle.dt.guild.hide_guild_onotes then
-						line = tooltip:SetCell(line, 7, player["NOTE"] .. player["ONOTE"])
-					end
-
-					tooltip:SetLineScript(line, "OnMouseUp", Entry_OnMouseUp, string.format("guild:%s:%s", player["TOONNAME"], player["TOONNAME"]))
-			end
-		end
-		tooltip:AddLine(" ")
-	end
-
-	if not E.db.sle.dt.guild.hide_hintline then
-		line = tooltip:AddLine()
-		if not E.db.sle.dt.guild.minimize_hintline then
-			tooltip:SetCell(line, 1, "Hint:", "LEFT", 3)
-		else
-			tooltip:SetCell(line, 1, MINIMIZE .. "Hint:", "LEFT", 3)
-		end
-		tooltip:SetCellScript(line, 1, "OnMouseUp", HideOnMouseUp, "minimize_hintline")
-
-		if not E.db.sle.dt.guild.minimize_hintline then
-			line = tooltip:AddLine()
-			tooltip:SetCell(line, 1, "", "LEFT", 1)
-			tooltip:SetCell(line, 2, "|cffeda55fLeft Click|r to open the guild panel.", "LEFT", 3)
-			tooltip:SetCell(line, 5, "|cffeda55fRight Click|r to open configuration panel.", "LEFT", 3)
-			line = tooltip:AddLine()
-			tooltip:SetCell(line, 1, "", "LEFT", 1)
-			tooltip:SetCell(line, 2, "|cffeda55fLeft Click|r a line to whisper a player.", "LEFT", 3)
-			tooltip:SetCell(line, 5, "|cffeda55fShift+Left Click|r a line to lookup a player.", "LEFT", 3)--
-			line = tooltip:AddLine()
-			tooltip:SetCell(line, 1, "", "LEFT", 1)
-			tooltip:SetCell(line, 2, "|cffeda55fCtrl+Left Click|r a line to edit note.", "LEFT", 3)
-			tooltip:SetCell(line, 5, "|cffeda55fCtrl+Right Click|r a line to edit officer note.", "LEFT", 3)
-			line = tooltip:AddLine()
-			tooltip:SetCell(line, 1, "", "LEFT", 1)
-			tooltip:SetCell(line, 2, "|cffeda55fAlt+Left Click|r a line to invite.", "LEFT", 3)--
-			tooltip:SetCell(line, 5, "|cffeda55fLeft Click|r a Header to hide it or sort it.", "LEFT", 3)--
-		end
-	end
-
-	tooltip:UpdateScrolling()
-	tooltip:Show()
-end
-
-frame:SetScript("OnEvent", function(self, event, ...)
-	if self[event] then
-		return self[event](self, event, ...)
-	end
-end)
-
-local DELAY = 15  --  Update every 15 seconds
-local elapsed = DELAY - 5
-
-frame:SetScript("OnUpdate", function (self, elapse)
-	elapsed = elapsed + elapse
-
-	if elapsed >= DELAY then
-		elapsed = 0
-		DT:update_Guild()
-	end
-end)
-
-frame:RegisterEvent("PLAYER_LOGIN")
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/intellect.lua b/ElvUI_SLE/modules/datatexts/intellect.lua
deleted file mode 100644
index 8665bfb..0000000
--- a/ElvUI_SLE/modules/datatexts/intellect.lua
+++ /dev/null
@@ -1,21 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI)
-local DT = E:GetModule('DataTexts')
-
-local displayNumberString = ''
-local lastPanel
-
-local function OnEvent(self, event, ...)
-	self.text:SetFormattedText(displayNumberString, INTELLECT_COLON, select(2, UnitStat("player", 4)))
-	lastPanel = self
-end
-
-local function ValueColorUpdate(hex, r, g, b)
-	displayNumberString = strjoin("", "%s ", hex, "%.f|r")
-
-	if lastPanel ~= nil then
-		OnEvent(lastPanel)
-	end
-end
-E['valueColorUpdateFuncs'][ValueColorUpdate] = true
-
-DT:RegisterDatatext('Intellect', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
diff --git a/ElvUI_SLE/modules/datatexts/itemlevel.lua b/ElvUI_SLE/modules/datatexts/itemlevel.lua
deleted file mode 100644
index 3d74ff6..0000000
--- a/ElvUI_SLE/modules/datatexts/itemlevel.lua
+++ /dev/null
@@ -1,263 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI)
-local DT = E:GetModule('DataTexts')
-
-local displayString = ''
-local lastPanel
-local floor = floor
-local GetInventoryItemLink, GetInventorySlotInfo = GetInventoryItemLink, GetInventorySlotInfo
-
-local slots = {
-	[1] = { "HeadSlot", HEADSLOT },
-	[2] = { "NeckSlot", NECKSLOT },
-	[3] = { "ShoulderSlot", SHOULDERSLOT },
-	[4] = { "BackSlot", BACKSLOT },
-	[5] = { "ChestSlot", CHESTSLOT },
-	[6] = { "WristSlot", WRISTSLOT },
-	[7] = { "HandsSlot", HANDSSLOT },
-	[8] = { "WaistSlot", WAISTSLOT },
-	[9] = { "LegsSlot", LEGSSLOT },
-	[10] = { "FeetSlot", FEETSLOT },
-	[11] = { "Finger0Slot", FINGER0SLOT_UNIQUE },
-	[12] = { "Finger1Slot", FINGER1SLOT_UNIQUE },
-	[13] = { "Trinket0Slot", TRINKET0SLOT_UNIQUE },
-	[14] = { "Trinket1Slot", TRINKET1SLOT_UNIQUE },
-	[15] = { "MainHandSlot", MAINHANDSLOT },
-	[16] = { "SecondaryHandSlot", SECONDARYHANDSLOT },
-}
-
-local levelColors = {
-	[0] = { 1, 0, 0 },
-	[1] = { 0, 1, 0 },
-	[2] = { 1, 1, .5 },
-}
-
-local levelAdjust = {
-	["0"]=0,["1"]=8,["373"]=4,["374"]=8,["375"]=4,["376"]=4,["377"]=4,["379"]=4,["380"]=4,
-	["445"]=0,["446"]=4,["447"]=8,["451"]=0,["452"]=8,["453"]=0,["454"]=4,["455"]=8,
-	["456"]=0,["457"]=8,["458"]=0,["459"]=4,["460"]=8,["461"]=12,["462"]=16,
-	["465"]=0,["466"]=4,["467"]=8,["468"] = 0,["469"] = 4,["470"] = 8,["471"] = 12,["472"] = 16,
-	["491"]=0,["492"]=4,["493"]=8,["494"]=4,["495"]=8,["496"]=8,["497"]=12,["498"]=16
-}
-
-local heirlooms = {
-	[80] = {
-		42943, --Bloodied Arcanite Reaper
-		42944, --Balanced Heartseeker
-		42945, --Venerable Dal'Rend's Sacred Charge
-		42946, --Charmed Ancient Bone Bow
-		42947, --Dignified Headmaster's Charge
-		42948, --Devout Aurastone Hammer
-		42949, --Polished Spaulders of Valor
-		42950, --Champion Herod's Shoulder
-		42951, --Mystical Pauldrons of Elements
-		42952, --Stained Shadowcraft Spaulders
-		42984, --Preened Ironfeather Shoulders
-		42985, --Tattered Dreadmist Mantle
-		42991, --Swift Hand of Justice
-		42992, --Discerning Eye of the Beast
-		44091, --Sharpened Scarlet Kris
-		44092, --Reforged Truesilver Champion
-		44093, --Upgraded Dwarven Hand Cannon
-		44094, --The Blessed Hammer of Grace
-		44095, --Grand Staff of Jordan
-		44096, --Battleworn Thrash Blade
-		44097, --Inherited Insignia of the Horde
-		44098, --Inherited Insignia of the Alliance
-		44099, --Strengthened Stockade Pauldrons
-		44100, --Pristine Lightforge Spaulders
-		44101, --Prized Beastmaster's Mantle
-		44102, --Aged Pauldrons of The Five Thunders
-		44103, --Exceptional Stormshroud Shoulders
-		44105, --Lasting Feralheart Spaulders
-		44107, --Exquisite Sunderseer Mantle
-		48677, --Champion's Deathdealer Breastplate
-		48683, --Mystical Vest of Elements
-		48685, --Polished Breastplate of Valor
-		48687, --Preened Ironfeather Breastplate
-		48689, --Stained Shadowcraft Tunic
-		48691, --Tattered Dreadmist Robe
-		48716, --Venerable Mass of McGowan
-		48718, --Repurposed Lava Dredger
-		50255, --Dread Pirate Ring
-		69889, --Burnished Breastplate of Might
-		69890, --Burnished Pauldrons of Might
-		69893, --Bloodsoaked Skullforge Reaver
-		79131, --Burnished Warden Staff
-	},
-	[85] = {
-		61931, --Polished Helm of Valor
-		61935, --Tarnished Raging Berserker's Helm
-		61936, --Mystical Coif of Elements
-		61937, --Stained Shadowcraft Cap
-		61942, --Preened Tribal War Feathers
-		61958, --Tattered Dreadmist Mask
-		62023, --Polished Legplates of Valor
-		62024, --Tarnished Leggings of Destruction
-		62025, --Mystical Kilt of Elements
-		62026, --Stained Shadowcraft Pants
-		62027, --Preened Wildfeather Leggings
-		62029, --Tattered Dreadmist Leggings
-		62038, --Worn Stoneskin Gargoyle Cape
-		62039, --Inherited Cape of the Black Baron
-		62040, --Ancient Bloodmoon Cloak
-		69887, --Burnished Helm of Might
-		69888, --Burnished Legplates of Might
-		69892, --Ripped Sandstorm Cloak
-		93841, --Smoothbore Dwarven Hand Cannon
-		93843, --Hardened Arcanite Reaper
-		93844, --Refinished Warden Staff
-		93845, --Gore-Steeped Skullforge Reaver
-		93846, --Re-Engineered Lava Dredger
-		93847, --Crushing Mass of McGowan
-		93848, --Battle-Hardened Thrash Blade
-		93849, --Elder Staff of Jordan
-		93850, --The Sanctified hammer of Grace
-		93851, --Battle-Forged Truesilver Champion
-		93852, --Deadly Scarlet Kris
-		93853, --Pious Aurastone hammer
-		93854, --Scholarly Headmaster's Charge
-		93855, --War-Torn Ancient Bone Bow
-		93856, --Noble Dal'Rend's Sacred Charge
-		93857, --Vengeful Heartseeker
-		93859, --Bloodstained Dreadmist Mantle
-		93860, --Bloodstained Dreadmist Robe
-		93861, --Prestigious Sunderseer Mantle
-		93862, --Supple Shadowcraft Spaulders
-		93863, --Supple Shadowcraft Tunic
-		93864, --Majestic Ironfeather Shoulders
-		93865, --Majestic Ironfeather Breastplate
-		93866, --Wild Feralheart Spaulders
-		93867, --Superior Stormshroud Shoulders
-		93876, --Awakened Pauldrons of Elements
-		93885, --Awakened Vest of Elements
-		93886, --Adorned Beastmaster's Mantle
-		93887, --Grand Champion Herod's Shoulder
-		93888, --Furious Deathdealer Breastplate
-		93889, --Venerated Pauldrons of The Five Thunders
-		93890, --Gleaming Spaulders of Valor
-		93891, --Gleaming Breastplate of Valor
-		93892, --Brushed Breaastplate of Might
-		93893, --Brushed Pauldrons of Might
-		93894, --Immaculate Lightforge Spaulders
-		93895, --Reinforced Stockade Pauldrons
-		93896, --Forceful Hand of Justice
-		93897, --Piercing Eye of the Beast
-		93899, --Bequeathed Insignia of the Alliance
-		93900, --Inherited Mark of Tyranny
-		93902, --Flamescarred Draconian Deflector
-		93903, --Weathered Observer's Shield
-		93904, --Musty Tome of the Lost
-	},
-	[90] = {
-		104399, --Hellscream's Warbow (Normal)
-		104400, --Hellscream's Razor (Normal)
-		104401, --Hellscream's Doomblade (Normal)
-		104402, --Hellscream's Warmace (Normal)
-		104403, --Hellscream's Pig Sticker (Normal)
-		104404, --Hellscream's Cleaver (Normal)
-		104405, --Hellscream's Decapitator (Normal)
-		104406, --Hellscream's War Staff (Normal)
-		104407, --Hellscream's Shield Wall (Normal)
-		104408, --Hellscream's Tome of Destruction (Normal)
-		104409, --Hellscream's Barrier (Normal)
-		105670, --Hellscream's Warbow (Flex)
-		105671, --Hellscream's Razor (Flex)
-		105672, --Hellscream's Cleaver (Flex)
-		105673, --Hellscream's Pig Sticker (Flex)
-		105674, --Hellscream's Barrier (Flex)
-		105675, --Hellscream's Warmace (Flex)
-		105676, --Hellscream's Tome of Destruction (Flex)
-		105677, --Hellscream's War Staff (Flex)
-		105678, --Hellscream's Doomblade (Flex)
-		105679, --Hellscream's Decapitator (Flex)
-		105680, --Hellscream's Shield Wall (Flex)
-		105683, --Hellscream's Warbow (Heroic)
-		105684, --Hellscream's Razor (Heroic)
-		105685, --Hellscream's Cleaver (Heroic)
-		105686, --Hellscream's Pig Sticker (Heroic)
-		105687, --Hellscream's Barrier (Heroic)
-		105688, --Hellscream's Warmace (Heroic)
-		105689, --Hellscream's Tome of Destruction (Heroic)
-		105690, --Hellscream's War Staff (Heroic)
-		105691, --Hellscream's Doomblade (Heroic)
-		105692, --Hellscream's Decapitator (Heroic)
-		105693, --Hellscream's Shield Wall (Heroic)
-	},
-}
-
-local function HeirLoomLevel(itemLink)
-	local ItemID, _, _, _, _, _, _, _, level = strmatch(itemLink, '|Hitem:(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+)')
-	ItemID, level = tonumber(ItemID), tonumber(level)
-	for _, ID in pairs(heirlooms[90]) do
-		if ID == ItemID then
-			return select(4, GetItemInfo(itemLink))
-		end
-	end
-	for _, ID in pairs(heirlooms[85]) do
-		if ID == ItemID and level > 85 then
-			level = 85
-			break
-		end
-	end
-	for _, ID in pairs(heirlooms[80]) do
-		if ID == ItemID and level > 80 then
-			level = 80
-			break
-		end
-	end
-
-	if level > 80 then
-		return (( level - 81) * 12) + 285;
-	elseif level > 67 then
-		return (( level - 68) * 6) + 115;
-	elseif level > 59 then
-		return (( level - 60) * 3) + 85;
-	else
-		return level
-	end
-end
-
-local function GetItemLevel(itemLink)
-	local rarity, itemLevel = select(3, GetItemInfo(itemLink))
-	if rarity == 7 then
-		itemLevel = HeirLoomLevel(itemLink)
-	end
-	local upgrade = strmatch(itemLink, ":(%d+)\124h%[")
-	if itemLevel and upgrade and levelAdjust[upgrade] then
-		itemLevel = itemLevel + levelAdjust[upgrade]
-	end
-	return itemLevel
-end
-
-local function OnEvent(self)
-	self.avgItemLevel, self.avgEquipItemLevel = GetAverageItemLevel()
-	self.text:SetFormattedText(displayString, ITEM_LEVEL_ABBR, floor(self.avgEquipItemLevel), floor(self.avgItemLevel))
-end
-
-local function OnEnter(self)
-	local avgItemLevel, avgEquipItemLevel = self.avgItemLevel, self.avgEquipItemLevel
-
-	DT:SetupTooltip(self)
-	DT.tooltip:AddDoubleLine(TOTAL, floor(avgItemLevel), 1, 1, 1, 0, 1, 0)
-	DT.tooltip:AddDoubleLine(GMSURVEYRATING3, floor(avgEquipItemLevel), 1, 1, 1, 0, 1, 0)
-	DT.tooltip:AddLine(" ")
-	for i = 1, 16 do
-		local itemLink = GetInventoryItemLink("player", GetInventorySlotInfo(slots[i][1]))
-		if itemLink then
-			itemLevel = GetItemLevel(itemLink)
-			if itemLevel and avgEquipItemLevel then
-				local color = levelColors[(itemLevel < avgEquipItemLevel - 10 and 0 or (itemLevel > avgEquipItemLevel + 10 and 1 or (2)))]
-				DT.tooltip:AddDoubleLine(slots[i][2], itemLevel, 1, 1, 1, color[1], color[2], color[3])
-			end
-		end
-	end
-	DT.tooltip:Show()
-end
-
-local function ValueColorUpdate(hex, r, g, b)
-	displayString = string.join("", "|cffffffff%s:|r", " ", hex, "%d / %d|r")
-	if lastPanel ~= nil then OnEvent(lastPanel) end
-end
-E["valueColorUpdateFuncs"][ValueColorUpdate] = true
-
-DT:RegisterDatatext("S&L Item Level", {"PLAYER_ENTERING_WORLD", "PLAYER_EQUIPMENT_CHANGED", "UNIT_INVENTORY_CHANGED"}, OnEvent, nil, nil, OnEnter)
diff --git a/ElvUI_SLE/modules/datatexts/lfr.lua b/ElvUI_SLE/modules/datatexts/lfr.lua
deleted file mode 100755
index cb4c4e7..0000000
--- a/ElvUI_SLE/modules/datatexts/lfr.lua
+++ /dev/null
@@ -1,407 +0,0 @@
---LFR boss status calculations--
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local DT = E:GetModule('DataTexts')
-
-local GetLFGDungeonEncounterInfo = GetLFGDungeonEncounterInfo
-local AddLine = AddLine
-local AddDoubleLine = AddDoubleLine
-local GetMapNameByID = GetMapNameByID
-
---For 4 boss raid
-function DT:FourKill(id)
-	local killNum = 0
-	for i =1,4 do
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	if killNum == 4 then
-		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/4", RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
-	else
-		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/4", GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b)
-	end
-end
-
-function DT:FourShift(id)
-	for i =1,4 do --1st part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif (isIneligible) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-end
-
---For 6 boss raid
-function DT:SixKill(id1, id2)
-	local killNum = 0
-	for i =1,3 do --1st part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id1, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	for i =4,6 do --2nd part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id2, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	if killNum == 6 then
-		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/6", RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
-	else
-		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/6", GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b)
-	end
-end
-
-function DT:SixShift(id1, id2)
-	for i =1,3 do --1st part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id1, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif ( isIneligible ) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-	for i =4,6 do --2nd part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id2, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif (isIneligible) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-end
-
---For 8 boss raid
-function DT:EightKill(id1, id2)
-	local killNum = 0
-	for i =1,4 do --1st part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id1, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	for i =5,8 do --2nd part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id2, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	if killNum == 8 then
-		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/8", RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
-	else
-		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/8", GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b)
-	end
-end
-
-function DT:EightShift(id1, id2)
-	for i =1,4 do --1st part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id1, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif (isIneligible) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-	for i =5,8 do --2nd part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id2, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif (isIneligible) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-end
-
---For 12 boss raid
-function DT:TwelveKill(id1, id2, id3, id4)
-	local killNum = 0
-	for i =1,3 do --1st part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id1, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	for i =4,6 do --2nd part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id2, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	for i =7,9 do --3rd part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id3, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	for i =10,12 do --4th part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id4, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	if killNum == 12 then
-		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/12", RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
-	else
-		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/12", GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b)
-	end
-end
-
-function DT:TwelveShift(id1, id2, id3, id4)
-	for i =1,3 do --1st part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id1, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif ( isIneligible ) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-	for i =4,6 do --2nd part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id2, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif (isIneligible) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-	for i =7,9 do --3rd part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id3, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif (isIneligible) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-	for i =10,12 do --4th part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id4, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif (isIneligible) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-end
-
---For 14 boss raid
-function DT:FourteenKill(id1, id2, id3, id4)
-	local killNum = 0
-	for i =1,4 do --1st part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id1, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	for i =5,8 do --2nd part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id2, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	for i =9,11 do --3rd part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id3, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	for i =12,14 do --4th part
-		_, _, isKilled = GetLFGDungeonEncounterInfo(id4, i);
-		if (isKilled) then
-			killNum = killNum + 1
-		end
-	end
-	if killNum == 14 then
-		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/14", RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
-	else
-		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/14", GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b)
-	end
-end
-
-function DT:FourteenShift(id1, id2, id3, id4)
-	for i =1,4 do --1st part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id1, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif (isIneligible) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-	for i =5,8 do --2nd part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id2, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif (isIneligible) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-	for i =9,11 do --3rd part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id3, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif (isIneligible) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-	for i =12,14 do --4th part
-		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id4, i);
-		if (isKilled) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
-		elseif (isIneligible) then
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		else
-			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
-		end
-	end
-end
-
-function DT:DragonSoul(id1, id2)
-	if IsShiftKeyDown() then
-		DT:EightShift(id1, id2)
-	else
-		DT:EightKill(id1, id2)
-	end
-end
-
-function DT:Mogushan(id1, id2)
-	if IsShiftKeyDown() then
-		DT:SixShift(id1, id2)
-	else
-		DT:SixKill(id1, id2)
-	end
-end
-
-function DT:HoF(id1, id2)
-	if IsShiftKeyDown() then
-		DT:SixShift(id1, id2)
-	else
-		DT:SixKill(id1, id2)
-	end
-end
-
-function DT:ToES(id)
-	if IsShiftKeyDown() then
-		DT:FourShift(id)
-	else
-		DT:FourKill(id)
-	end
-end
-
-function DT:ToT(id1, id2, id3, id4)
-	if IsShiftKeyDown() then
-		DT:TwelveShift(id1, id2, id3, id4)
-	else
-		DT:TwelveKill(id1, id2, id3, id4)
-	end
-end
-
-function DT:SoO(id1, id2, id3, id4)
-	if IsShiftKeyDown() then
-		DT:FourteenShift(id1, id2, id3, id4)
-	else
-		DT:FourteenKill(id1, id2, id3, id4)
-	end
-end
-
-function DT:LFRShow()
-	local lvl = UnitLevel("player")
-	local ilvl = GetAverageItemLevel()
-	DT.tooltip:AddLine(" ")
-	DT.tooltip:AddLine(RAID_FINDER)
-	if E.db.sle.lfrshow.ds then
-		DT.tooltip:AddLine(" "..GetMapNameByID(824))
-		if lvl == 85 and ilvl >= 372 then
-			DT:DragonSoul(416, 417)
-		else
-			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
-		end
-		DT.tooltip:AddLine(" ")
-	end
-		if E.db.sle.lfrshow.mv then
-		DT.tooltip:AddLine(" "..GetMapNameByID(896))
-		if lvl == 90 and ilvl >= 460 then
-			DT:Mogushan(527, 528)
-		else
-			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
-		end
-		DT.tooltip:AddLine(" ")
-	end
-
-	if E.db.sle.lfrshow.hof then
-			DT.tooltip:AddLine(" "..GetMapNameByID(897))
-		if lvl == 90 and ilvl >= 470 then
-			DT:HoF(529, 530)
-		else
-			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
-		end
-		DT.tooltip:AddLine(" ")
-	end
-
-	if E.db.sle.lfrshow.toes then
-		DT.tooltip:AddLine(" "..GetMapNameByID(886))
-		if lvl == 90 and ilvl >= 470 then
-			DT:ToES(526)
-		else
-			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
-		end
-		DT.tooltip:AddLine(" ")
-	end
-
-	if E.db.sle.lfrshow.tot then
-		DT.tooltip:AddLine(" "..GetMapNameByID(930))
-		if lvl == 90 and ilvl >= 480 then
-			DT:ToT(610, 611, 612, 613)
-		else
-			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
-		end
-		DT.tooltip:AddLine(" ")
-	end
-
-	if E.db.sle.lfrshow.soo then
-		DT.tooltip:AddLine(" "..GetMapNameByID(953))
-		if lvl == 90 and ilvl >= 496 then
-			DT:SoO(716, 717, 724, 725)
-		else
-			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
-		end
-		DT.tooltip:AddLine(" ")
-	end
-
-	if E.db.sle.lfrshow.soof then
-		DT.tooltip:AddLine(" "..FLEX_RAID.." "..GetMapNameByID(953))
-		if lvl == 90 then
-			DT:SoO(726, 728, 729, 730)
-		else
-			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
-		end
-		DT.tooltip:AddLine(" ")
-	end
-	if not E.db.sle.lfrshow.ds and not E.db.sle.lfrshow.mv and not E.db.sle.lfrshow.hof and not E.db.sle.lfrshow.toes and not E.db.sle.lfrshow.tot and not E.db.sle.lfrshow.soo and not E.db.sle.lfrshow.soof then
-		DT.tooltip:AddLine(" "..L["You didn't select any instance to track."])
-	end
-end
diff --git a/ElvUI_SLE/modules/datatexts/load_datatexts.xml b/ElvUI_SLE/modules/datatexts/load_datatexts.xml
deleted file mode 100755
index 8aa3bfa..0000000
--- a/ElvUI_SLE/modules/datatexts/load_datatexts.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='lfr.lua'/>
-	<Script file='version.lua'/>
-	<Script file='regen.lua'/>
-	<Script file='agility.lua'/>
-	<Script file='strength.lua'/>
-	<Script file='energyregen.lua'/>
-	<Script file='intellect.lua'/>
-	<Script file='stamina.lua'/>
-	<Script file='spirit.lua'/>
-	<Script file='time.lua'/>
-	<Script file='add_panels.lua'/>
-	<Script file='friends.lua'/>
-	<Script file='guild.lua'/>
-	<Script file='itemlevel.lua'/>
-	<Script file='played.lua'/>
-	<Script file='mail.lua'/>
-	<Script file='micromenu.lua'/>
-	<Script file='currency.lua'/>
-	<Script file='range.lua'/>
-	<Include file='dashboard\load_dashboard.xml'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/mail.lua b/ElvUI_SLE/modules/datatexts/mail.lua
deleted file mode 100644
index 979a864..0000000
--- a/ElvUI_SLE/modules/datatexts/mail.lua
+++ /dev/null
@@ -1,86 +0,0 @@
-local E, L, V, P, G, _ =  unpack(ElvUI);
-local DT = E:GetModule('DataTexts')
-
-local Mail_Icon = "|TInterface\\MINIMAP\\TRACKING\\Mailbox.blp:14:14|t";
-local OldShow = MiniMapMailFrame.Show
-
-local Read;
-local AddLine = AddLine
-
-local function MakeIconString()
-	local str = ""
-		str = str..Mail_Icon
-
-	return str
-end
-
-function DT:SLEmailUp(newmail)
-	if not E.db.sle.dt.mail.icon then
-		MiniMapMailFrame:Hide()
-		MiniMapMailFrame.Show = nil
-	else
-		if not MiniMapMailFrame.Show then
-			MiniMapMailFrame.Show = OldShow
-		end
-		if newmail then
-			MiniMapMailFrame:Show()
-		end
-	end
-end
-
-local function OnEvent(self, event, ...)
-	local newMail = false
-
-	if event == "UPDATE_PENDING_MAIL" or event == "PLAYER_ENTERING_WORLD" or event =="PLAYER_LOGIN" then
-
-		newMail = HasNewMail()
-
-		if unreadMail ~= newMail then
-			unreadMail = newMail
-		end
-
-		DT:SLEmailUp(newmail)
-
-		self:UnregisterEvent("PLAYER_ENTERING_WORLD")
-		self:UnregisterEvent("PLAYER_LOGIN")
-	end
-
-	if event == "MAIL_INBOX_UPDATE" or event == "MAIL_SHOW" or event == "MAIL_CLOSED" then
-		for i = 1, GetInboxNumItems() do
-			local _, _, _, _, _, _, _, _, wasRead = GetInboxHeaderInfo(i);
-			if( not wasRead ) then
-				newMail = true;
-				break;
-			end
-		end
-	end
-
-	if newMail then
-		self.text:SetText(MakeIconString().."New Mail")
-		Read = false;
-	else
-		self.text:SetText("No Mail")
-		Read = true;
-	end
-
-end
-
-local function OnEnter(self)
-	DT:SetupTooltip(self)
-
-
-
-	local sender1, sender2, sender3 = GetLatestThreeSenders()
-
-	if not Read then
-		DT.tooltip:AddLine(HAVE_MAIL_FROM)
-		if sender1 then DT.tooltip:AddLine("    "..sender1) end
-		if sender2 then DT.tooltip:AddLine("    "..sender2) end
-		if sender3 then DT.tooltip:AddLine("    "..sender3) end
-
-	end
-	DT.tooltip:Show()
-end
-
-DT:RegisterDatatext('S&L Mail', {'PLAYER_ENTERING_WORLD', 'MAIL_INBOX_UPDATE', 'UPDATE_PENDING_MAIL', 'MAIL_CLOSED', 'PLAYER_LOGIN','MAIL_SHOW'}, OnEvent, nil, nil, OnEnter)
-
diff --git a/ElvUI_SLE/modules/datatexts/micromenu.lua b/ElvUI_SLE/modules/datatexts/micromenu.lua
deleted file mode 100644
index befbcd4..0000000
--- a/ElvUI_SLE/modules/datatexts/micromenu.lua
+++ /dev/null
@@ -1,73 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI)
-local DT = E:GetModule('DataTexts')
-
-local gsub, upper = string.gsub, string.upper
-local menuFrame = CreateFrame("Frame", "ElvUI_SLE_MainMenuFrame", E.UIParent)
-menuFrame:SetTemplate("Transparent", true)
-
-local calendar_string = gsub(SLASH_CALENDAR1, "/", "")
-calendar_string = gsub(calendar_string, "^%l", upper)
-
-local menu = {
-	{ text = L['Main Menu'], func = function()
-		if not GameMenuFrame:IsShown() then
-			ShowUIPanel(GameMenuFrame);
-		else
-			HideUIPanel(GameMenuFrame);
-		end
-	end },
-	{ text = CHARACTER_BUTTON, func = function() ToggleCharacter("PaperDollFrame") end },
-	{ text = SPELLBOOK_ABILITIES_BUTTON, func = function() if not SpellBookFrame:IsShown() then ShowUIPanel(SpellBookFrame) else HideUIPanel(SpellBookFrame) end end },
-	{ text = MOUNTS_AND_PETS, func = function() TogglePetJournal() end },
-	{ text = TALENTS_BUTTON, func = function()
-		if not PlayerTalentFrame then
-			TalentFrame_LoadUI()
-		end
-
-		if not GlyphFrame then
-			GlyphFrame_LoadUI()
-		end
-
-		if not PlayerTalentFrame:IsShown() then
-			ShowUIPanel(PlayerTalentFrame)
-		else
-			HideUIPanel(PlayerTalentFrame)
-		end
-	end },
-	{ text = TIMEMANAGER_TITLE, func = function() ToggleFrame(TimeManagerFrame) end },
-	{ text = ACHIEVEMENT_BUTTON, func = function() ToggleAchievementFrame() end },
-	{ text = QUESTLOG_BUTTON, func = function() ToggleFrame(QuestLogFrame) end },
-	{ text = SOCIAL_BUTTON, func = function() ToggleFriendsFrame() end },
-	{ text = calendar_string, func = function() GameTimeFrame:Click() end },
-	{ text = PLAYER_V_PLAYER, func = function()
-		if not PVPUIFrame then
-			PVP_LoadUI()
-		end
-		ToggleFrame(PVPUIFrame)
-	end },
-	{ text = ACHIEVEMENTS_GUILD_TAB, func = function()
-		if IsInGuild() then
-			if not GuildFrame then GuildFrame_LoadUI() end
-			GuildFrame_Toggle()
-		else
-			if not LookingForGuildFrame then LookingForGuildFrame_LoadUI() end
-			if not LookingForGuildFrame then return end
-			LookingForGuildFrame_Toggle()
-		end
-	end },
-	{ text = LFG_TITLE, func = function() PVEFrame_ToggleFrame(); end },
-	{ text = L["Raid Browser"], func = function() ToggleFrame(RaidBrowserFrame) end },
-	{ text = ENCOUNTER_JOURNAL, func = function() if not IsAddOnLoaded('Blizzard_EncounterJournal') then EncounterJournal_LoadUI(); end ToggleFrame(EncounterJournal) end },
-	{ text = BLIZZARD_STORE, func = function() StoreMicroButton:Click() end },
-	{ text = HELP_BUTTON, func = function() ToggleHelpFrame() end },
-}
-
-local function OnClick(self)
-	E:DropDown(menu, menuFrame)
-end
-
-local function OnEvent(self, event, ...)
-	self.text:SetText(L['Main Menu'])
-end
-
-DT:RegisterDatatext('S&L MicroMenu', {'PLAYER_LOGIN'}, OnEvent, nil, OnClick, nil)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/options.lua b/ElvUI_SLE/modules/datatexts/options.lua
deleted file mode 100755
index d749a43..0000000
--- a/ElvUI_SLE/modules/datatexts/options.lua
+++ /dev/null
@@ -1,496 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local DTP = E:GetModule('DTPanels')
-local DT = E:GetModule('DataTexts')
-
-local datatexts = {}
-local function configTable()
-local drop = {
-	--Group name = {short name, order, slot}
-	["DP_1"] = {"dp1", 1, 3},
-	["DP_2"] = {"dp2", 2, 3},
-	["DP_3"] = {"dp3", 3, 3},
-	["DP_4"] = {"dp4", 4, 3},
-	["DP_5"] = {"dp5", 5, 3},
-	["DP_6"] = {"dp6", 6, 3},
-	["Top_Center"] = {"top", 7, 1},
-	["Bottom_Panel"] = {"bottom", 8, 1},
-}
-local chatT = {
-	--Group name = {short name, order, elv's varible, chat panel(used to call functions)}
-	["Left Chat"] = {"chatleft", 9, "leftChatPanel", "LeftChat"},
-	["Right Chat"] = {"chatright", 10, "rightChatPanel", "RightChat"},
-}
-
---Datatext panels
-E.Options.args.sle.args.datatext = {
-	type = "group",
-	name = L["Panels & Dashboard"],
-	order = 10,
-	childGroups = "tab",
-	args = {
-		panels = {
-			type = "group",
-			name = L["Panels & Dashboard"],
-			order = 1,
-			args = {
-				header = {
-					order = 1,
-					type = "header",
-					name = L["Additional Datatext Panels"],
-				},
-				intro = {
-					order = 2,
-					type = "description",
-					name = L["DP_DESC"]
-				},
-				Reset = {
-					order = 3,
-					type = 'execute',
-					name = L['Restore Defaults'],
-					desc = L["Reset these options to defaults"],
-					func = function() E:GetModule('SLE'):Reset(nil, nil, true) end,
-				},
-				spacer = {
-					order = 4,
-					type = 'description',
-					name = "",
-				},
-				dashboard = {
-					order = 5,
-					type = "toggle",
-					name = L["Dashboard"],
-					desc = L["Show/Hide dashboard."],
-					get = function(info) return E.db.sle.datatext.dashboard.enable end,
-					set = function(info, value) E.db.sle.datatext.dashboard.enable = value; DTP:DashboardShow() end
-				},
-				width = {
-					order = 6,
-					type = "range",
-					name = L["Dashboard Panels Width"],
-					desc = L["Sets size of dashboard panels."],
-					disabled = function() return not E.db.sle.datatext.dashboard.enable end,
-					min = 75, max = 200, step = 1,
-					get = function(info) return E.db.sle.datatext.dashboard.width end,
-					set = function(info, value) E.db.sle.datatext.dashboard.width = value; DTP:DashWidth() end,
-				},
-			},
-		},
-	},
-}
-
-for k,v in pairs(drop) do
-E.Options.args.sle.args.datatext.args.panels.args[v[1]] = {
-	order = v[2],
-	type = "group",
-	name = L[k],
-	get = function(info) return E.db.sle.datatext[v[1]][ info[#info] ] end,
-	args = {
-		enabled = {
-			order = 1,
-			type = "toggle",
-			name = L["Enable"],
-			desc = L["Show/Hide this panel."],
-			set = function(info, value) E.db.sle.datatext[v[1]].enabled = value; DTP:ExtraDataBarSetup() end
-		},
-		width = {
-			order = 2,
-			type = "range",
-			name = L['Width'],
-			desc = L["Sets size of this panel"],
-			disabled = function() return not E.db.sle.datatext[v[1]].enabled end,
-			min = 100 * v[3], max = E.screenwidth/2, step = 1,
-			set = function(info, value) E.db.sle.datatext[v[1]].width = value; DTP:Resize() end,
-		},
-		hide = {
-			order = 3,
-			type = "toggle",
-			name = L['Hide panel background'],
-			desc = L["Don't show this panel, only datatexts assinged to it"],
-			disabled = function() return not E.db.sle.datatext[v[1]].enabled end,
-			get = function(info) return E.private.sle.datatext[v[1].."hide"] end,
-			set = function(info, value) E.private.sle.datatext[v[1].."hide"] = value; E:StaticPopup_Show("PRIVATE_RL") end,
-		},
-		transparent = {
-			order = 4,
-			name = L['Panel Transparency'],
-			type = 'toggle',
-			disabled = function() return not E.db.sle.datatext[v[1]].enabled or E.private.sle.datatext[v[1].."hide"] end,
-			--get = function(info) return E.db.sle.datatext[v[1]]."transparent"] end,
-			set = function(info, value) E.db.sle.datatext[v[1]].transparent = value; DTP:ExtraDataBarSetup() end,
-		},
-		pethide = {
-			order = 5,
-			name = L['Hide in Pet Battle'],
-			type = 'toggle',
-			desc = L['Show/Hide this frame during Pet Battles.'],
-			set = function(info, value) E.db.sle.datatext[v[1]].pethide = value; DTP:RegisterHide() end,
-		},
-	},
-}
-end
-
-for k,v in pairs(chatT) do
-E.Options.args.sle.args.datatext.args.panels.args[v[1]] = {
-	order = v[2],
-	type = "group",
-	name = L[k],
-	args = {
-		enabled = {
-			order = 1,
-			type = "toggle",
-			name = L["Enable"],
-			desc = L["Show/Hide this panel."],
-			get = function(info) return E.db.datatexts[v[3]] end,
-			set = function(info, value)
-				E.db.datatexts[v[3]] = value;
-				if E.db[v[4].."PanelFaded"] then
-					E.db[v[4].."PanelFaded"] = true;
-					Hide[v[4]]()
-				end
-				E:GetModule('Chat'):UpdateAnchors()
-				E:GetModule('Layout'):ToggleChatPanels()
-				E:GetModule('Bags'):PositionBagFrames()
-			end
-		},
-		width = {
-			order = 2,
-			type = "range",
-			name = L['Width'],
-			desc = L["Sets size of this panel"],
-			disabled = function() return not E.db.datatexts[v[3]] end,
-			min = 150, max = E.screenwidth/2, step = 1,
-			get = function(info) return E.db.sle.datatext[v[1]].width end,
-			set = function(info, value) E.db.sle.datatext[v[1]].width = value; DTP:ChatResize() end,
-		},
-	},
-
-}
-end
-
-E.Options.args.sle.args.datatext.args.sldatatext = {
-	type = "group",
-	name = L["S&L Datatexts"],
-	order = 2,
-	args = {
-		header = {
-			order = 1,
-			type = "header",
-			name = L["Datatext Options"],
-		},
-		intro = {
-			order = 2,
-			type = "description",
-			name = L["Some datatexts that Shadow & Light are supplied with, has settings that can be modified to alter the displayed information. Please use the dropdown box to select which datatext you would like to configure."]
-		},
-		spacer = {
-			order = 3,
-			type = 'description',
-			name = "",
-		},
-		timedt = {
-			type = "group",
-			name = RAID_FINDER,
-			order = 1,
-			args = {
-				lfrshow = {
-					order = 1,
-					type = "toggle",
-					name = L["LFR Lockout"],
-					desc = L["Show/Hide LFR lockout info in time datatext's tooltip."],
-					get = function(info) return E.db.sle.lfrshow.enabled end,
-					set = function(info, value) E.db.sle.lfrshow.enabled = value; end
-				},
-				instances = {
-					order = 2,
-					type = "group",
-					name = L["Loot History"],
-					guiInline = true,
-					get = function(info) return E.db.sle.lfrshow[ info[#info] ] end,
-					set = function(info, value) E.db.sle.lfrshow[ info[#info] ] = value; end,
-					args = {
-						ds = {
-							order = 1,
-							type = "toggle",
-							name = GetMapNameByID(824),
-						},
-						mv = {
-							order = 2,
-							type = "toggle",
-							name = GetMapNameByID(896),
-						},
-						hof = {
-							order = 3,
-							type = "toggle",
-							name = GetMapNameByID(897),
-						},
-						toes = {
-							order = 4,
-							type = "toggle",
-							name = GetMapNameByID(886),
-						},
-						tot = {
-							order = 5,
-							type = "toggle",
-							name = GetMapNameByID(930),
-						},
-						soo = {
-							order = 6,
-							type = "toggle",
-							name = GetMapNameByID(953),
-						},
-						soof = {
-							order = 7,
-							type = "toggle",
-							name = FLEX_RAID.." "..GetMapNameByID(953),
-						},
-					},
-				},
-				hubs = {
-					order = 3,
-					type = "group",
-					name = L["World Loot"],
-					guiInline = true,
-					get = function(info) return E.db.sle.lfrshow[ info[#info] ] end,
-					set = function(info, value) E.db.sle.lfrshow[ info[#info] ] = value; end,
-					args = {
-						leishen = {
-							order = 1,
-							type = "toggle",
-							name = GetMapNameByID(928),
-							desc = L["Show/Hide the status of Key to the Palace of Lei Shen and Trove of the Thunder King."],
-						},
-					},
-				},
-			},
-		},
-		slcurrency = {
-			type = "group",
-			name = "S&L Currency",
-			order = 2,
-			args = {
-				header = {
-					order = 1,
-					type = "description",
-					name = L['ElvUI Improved Currency Options'],
-				},
-				arch = {
-					order = 2,
-					type = "toggle",
-					name = L['Show Archaeology Fragments'],
-					get = function(info) return E.private['ElvUI_Currency']['Archaeology'] end,
-					set = function(info, value) E.private['ElvUI_Currency']['Archaeology'] = value; end,
-				},
-				jewel = {
-					order = 3,
-					type = "toggle",
-					name = L['Show Jewelcrafting Tokens'],
-					get = function(info) return E.private['ElvUI_Currency']['Jewelcrafting'] end,
-					set = function(info, value) E.private['ElvUI_Currency']['Jewelcrafting'] = value; end,
-				},
-				pvp = {
-					order = 4,
-					type = "toggle",
-					name = L['Show Player vs Player Currency'],
-					get = function(info) return E.private['ElvUI_Currency']['PvP'] end,
-					set = function(info, value) E.private['ElvUI_Currency']['PvP'] = value; end,
-				},
-				dungeon = {
-					order = 5,
-					type = "toggle",
-					name = L['Show Dungeon and Raid Currency'],
-					get = function(info) return E.private['ElvUI_Currency']['Raid'] end,
-					set = function(info, value) E.private['ElvUI_Currency']['Raid'] = value; end,
-				},
-				cook = {
-					order = 6,
-					type = "toggle",
-					name = L['Show Cooking Awards'],
-					get = function(info) return E.private['ElvUI_Currency']['Cooking'] end,
-					set = function(info, value) E.private['ElvUI_Currency']['Cooking'] = value; end,
-				},
-				misc = {
-					order = 7,
-					type = "toggle",
-					name = L['Show Miscellaneous Currency'],
-					get = function(info) return E.private['ElvUI_Currency']['Miscellaneous'] end,
-					set = function(info, value) E.private['ElvUI_Currency']['Miscellaneous'] = value; end,
-				},
-				zero = {
-					order = 8,
-					type = "toggle",
-					name = L['Show Zero Currency'],
-					get = function(info) return E.private['ElvUI_Currency']['Zero'] end,
-					set = function(info, value) E.private['ElvUI_Currency']['Zero'] = value; end,
-				},
-				icons = {
-					order = 9,
-					type = "toggle",
-					name = L['Show Icons'],
-					get = function(info) return E.private['ElvUI_Currency']['Icons'] end,
-					set = function(info, value) E.private['ElvUI_Currency']['Icons'] = value; end,
-				},
-				faction = {
-					order = 10,
-					type = "toggle",
-					name = L['Show Faction Totals'],
-					get = function(info) return E.private['ElvUI_Currency']['Faction'] end,
-					set = function(info, value) E.private['ElvUI_Currency']['Faction'] = value; end,
-				},
-				unused = {
-					order = 11,
-					type = "toggle",
-					name = L['Show Unsed Currency'],
-					get = function(info) return E.private['ElvUI_Currency']['Unused'] end,
-					set = function(info, value) E.private['ElvUI_Currency']['Unused'] = value; end,
-				},
-			},
-		},
-		slfriends = {
-			type = "group",
-			name = L["S&L Friends"],
-			order = 3,
-			args = {
-				header = {
-					order = 1,
-					type = "description",
-					name = L["These options are for modifing the Shadow & Light Friends datatext."],
-				},
-				combat = {
-					order = 2,
-					type = "toggle",
-					name = L["Hide In Combat"],
-					desc = L["Will not show the tooltip while in combat."],
-					get = function(info) return E.db.sle.dt.friends.combat end,
-					set = function(info, value) E.db.sle.dt.friends.combat = value; end,
-				},
-				hidetotals = {
-					order = 3,
-					type = "toggle",
-					name = L["Show Totals"],
-					desc = L["Show total friends in the datatext."],
-					get = function(info) return E.db.sle.dt.friends.totals end,
-					set = function(info, value) E.db.sle.dt.friends.totals = value; DT:update_Friends() end,
-				},
-				hidehintline = {
-					order = 4,
-					type = "toggle",
-					name = L["Hide Hints"],
-					desc = L["Hide the hints in the tooltip."],
-					get = function(info) return E.db.sle.dt.friends.hide_hintline end,
-					set = function(info, value) E.db.sle.dt.friends.hide_hintline = value; end,
-				},
-				bnbroadcast = {
-					order = 5,
-					type = "toggle",
-					name = L["Expand RealID"],
-					desc = L["Display realid with two lines to view broadcasts."],
-					get = function(info) return E.db.sle.dt.friends.expandBNBroadcast end,
-					set = function(info, value) E.db.sle.dt.friends.expandBNBroadcast = value; end,
-				},
-				spacer = {
-					order = 6,
-					type = 'description',
-					name = "",
-				},
-				tooltipautohide = {
-					order = 7,
-					type = "range",
-					name = L["Autohide Delay:"],
-					desc = L["Adjust the tooltip autohide delay when mouse is no longer hovering of the datatext."],
-					min = 0.1, max = 1, step = 0.1,
-					get = function(info) return E.db.sle.dt.friends.tooltipAutohide end,
-					set = function(info, value) E.db.sle.dt.friends.tooltipAutohide = value; end,
-				},
-			},
-		},
-		slguild = {
-			type = "group",
-			name = L["S&L Guild"],
-			order = 4,
-			args = {
-				header = {
-					order = 1,
-					type = "description",
-					name = L["These options are for modifing the Shadow & Light Guild datatext."],
-				},
-				combat = {
-					order = 2,
-					type = "toggle",
-					name = L["Hide In Combat"],
-					desc = L["Will not show the tooltip while in combat."],
-					get = function(info) return E.db.sle.dt.guild.combat end,
-					set = function(info, value) E.db.sle.dt.guild.combat = value; end,
-				},
-				hidetotals = {
-					order = 3,
-					type = "toggle",
-					name = L["Show Totals"],
-					desc = L["Show total guild members in the datatext."],
-					get = function(info) return E.db.sle.dt.guild.totals end,
-					set = function(info, value) E.db.sle.dt.guild.totals = value; DT:update_Guild() end,
-				},
-				hidehintline = {
-					order = 4,
-					type = "toggle",
-					name = L["Hide Hints"],
-					desc = L["Display the hints in the tooltip."],
-					get = function(info) return E.db.sle.dt.guild.hide_hintline end,
-					set = function(info, value) E.db.sle.dt.guild.hide_hintline = value; end,
-				},
-				hidemotd = {
-					order = 5,
-					type = "toggle",
-					name = L["Hide MOTD"],
-					desc = L["Hide the guild's Message of the Day in the tooltip."],
-					get = function(info) return E.db.sle.dt.guild.hide_gmotd end,
-					set = function(info, value) E.db.sle.dt.guild.hide_gmotd = value; end,
-				},
-				hideguildname = {
-					order = 6,
-					type = "toggle",
-					name = L["Hide Guild Name"],
-					desc = L["Hide the guild's name in the tooltip."],
-					get = function(info) return E.db.sle.dt.guild.hide_guildname end,
-					set = function(info, value) E.db.sle.dt.guild.hide_guildname = value; end,
-				},
-				spacer = {
-					order = 7,
-					type = 'description',
-					name = "",
-				},
-				tooltipautohide = {
-					order = 8,
-					type = "range",
-					name = L["Autohide Delay:"],
-					desc = L["Adjust the tooltip autohide delay when mouse is no longer hovering of the datatext."],
-					min = 0.1, max = 1, step = 0.1,
-					get = function(info) return E.db.sle.dt.guild.tooltipAutohide end,
-					set = function(info, value) E.db.sle.dt.guild.tooltipAutohide = value; end,
-				},
-			},
-		},
-		slmail = {
-			type = "group",
-			name = L["S&L Mail"],
-			order = 5,
-			args = {
-				header = {
-					order = 1,
-					type = "description",
-					name = L["These options are for modifing the Shadow & Light Mail datatext."],
-				},
-				icon = {
-					order = 2,
-					type = "toggle",
-					name = L["Minimap icon"],
-					desc = L["If enabled will show new mail icon on minimap."],
-					get = function(info) return E.db.sle.dt.mail.icon end,
-					set = function(info, value) E.db.sle.dt.mail.icon = value; DT:SLEmailUp() end,
-				}
-			},
-		},
-	},
-}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/played.lua b/ElvUI_SLE/modules/datatexts/played.lua
deleted file mode 100644
index 62992bd..0000000
--- a/ElvUI_SLE/modules/datatexts/played.lua
+++ /dev/null
@@ -1,167 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local DT = E:GetModule('DataTexts')
-
-local format, GetTime, ChatFrame_TimeBreakDown, InCombatLockdown = format, GetTime, ChatFrame_TimeBreakDown, InCombatLockdown
-local PlayedTimeFormatFull = '%d '..L["D"]..' %02d:%02d:%02d'
-local PlayedTimeFormatNoDay = '%02d:%02d:%02d'
-local TotalPlayTime, LevelPlayTime, SessionPlayTime, LevelPlayedOffset, LastLevelTime
-local MyRealm = E.myrealm
-local MyName = E.myname
-local MyClass = E.myclass
-local AddLine, AddDoubleLine = AddLine, AddDoubleLine
-
-local OnEnter = function(self)
-	if not InCombatLockdown() and SessionPlayTime then
-	DT:SetupTooltip(self)
-		local SessionDay, SessionHour, SessionMinute, SessionSecond = ChatFrame_TimeBreakDown(GetTime() - SessionPlayTime)
-		local TotalDay, TotalHour, TotalMinute, TotalSecond = ChatFrame_TimeBreakDown(TotalPlayTime + (GetTime() - SessionPlayTime))
-		local LevelDay, LevelHour, LevelMinute, LevelSecond = ChatFrame_TimeBreakDown(LevelPlayTime + (GetTime() - LevelPlayTimeOffset))
-		local LastLevelDay, LastLevelHour, LastLevelMinute, LastLevelSecond = ChatFrame_TimeBreakDown(LastLevelTime)
-		--local Panel, Anchor, xOff, yOff = self:GetTooltipAnchor()
-		--DT.tooltip:SetOwner(Panel, Anchor, xOff, yOff)
-		DT.tooltip:ClearLines()
-		DT.tooltip:AddLine(TIME_PLAYED_MSG, 1, 1, 1)
-		DT.tooltip:AddLine(' ')
-		DT.tooltip:AddDoubleLine(L["Session:"], SessionDay > 0 and format(PlayedTimeFormatFull, SessionDay, SessionHour, SessionMinute, SessionSecond) or format(PlayedTimeFormatNoDay, SessionHour, SessionMinute, SessionSecond), 1, 1, 1, 1, 1, 1)
-		if LastLevelSecond > 0 then
-			DT.tooltip:AddDoubleLine(L["Previous Level:"], LastLevelDay > 0 and format(PlayedTimeFormatFull, LastLevelDay. LastLevelHour, LastLevelMinute, LastLevelSecond) or format(PlayedTimeFormatNoDay, LastLevelHour, LastLevelMinute, LastLevelSecond), 1, 1, 1, 1, 1, 1)
-		end
-		DT.tooltip:AddDoubleLine(LEVEL..':', LevelDay > 0 and format(PlayedTimeFormatFull, LevelDay, LevelHour, LevelMinute, LevelSecond) or format(PlayedTimeFormatNoDay, LevelHour, LevelMinute, LevelSecond), 1, 1, 1, 1, 1, 1)
-		--DT.tooltip:AddDoubleLine(LEVEL..':', LevelDay > 0 and format(PlayedTimeFormatFull, LevelDay. LevelHour, LevelMinute, LevelSecond) or format(PlayedTimeFormatNoDay, LevelHour, LevelMinute, LevelSecond), 1, 1, 1, 1, 1, 1)
-		DT.tooltip:AddDoubleLine(TOTAL..':', TotalDay > 0 and format(PlayedTimeFormatFull, TotalDay, TotalHour, TotalMinute, TotalSecond) or format(PlayedTimeFormatNoDay, TotalHour, TotalMinute, TotalSecond), 1, 1, 1, 1, 1, 1)
-		DT.tooltip:AddLine(' ')
-		DT.tooltip:AddLine(L["Account Time Played"], 1, 1, 1)
-		DT.tooltip:AddLine(' ')
-		local Class, Level, AccountDay, AccountHour, AccountMinute, AccountSecond, TotalAccountTime
-		for player, subtable in pairs(ElvDB['sle']['TimePlayed'][MyRealm]) do
-			for k, v in pairs(subtable) do
-				if k == 'TotalTime' then
-					AccountDay, AccountHour, AccountMinute, AccountSecond = ChatFrame_TimeBreakDown(v)
-					TotalAccountTime = (TotalAccountTime or 0) + v
-				end
-				if k == 'Class' then Class = v end
-				if k == 'Level' then Level = v end
-			end
-			local color = RAID_CLASS_COLORS[Class]
-			DT.tooltip:AddDoubleLine(format('%s |cFFFFFFFF- %s %d', player, LEVEL, Level), format(PlayedTimeFormatFull, AccountDay, AccountHour, AccountMinute, AccountSecond), color.r, color.g, color.b, 1, 1, 1)
-		end
-		DT.tooltip:AddLine(' ')
-		local TotalAccountDay, TotalAccountHour, TotalAccountMinute, TotalAccountSecond = ChatFrame_TimeBreakDown(TotalAccountTime)
-		DT.tooltip:AddDoubleLine(TOTAL, format(PlayedTimeFormatFull, TotalAccountDay, TotalAccountHour, TotalAccountMinute, TotalAccountSecond), 1, 0, 1, 1, 1, 1)
-		DT.tooltip:AddLine(' ')
-		DT.tooltip:AddLine(L["Reset Data: Hold Shift + Right Click"])
-		DT.tooltip:Show()
-	end
-end
-
-local ElapsedTimer = 0
-local OnUpdate = function(self, elapsed)
-	ElapsedTimer = ElapsedTimer + elapsed
-	if (not self.text) then
-		local text = self:CreateFontString(nil, 'OVERLAY')
-		text:SetFont(DataText.Font, DataText.Size, DataText.Flags)
-		text:SetText(TIME_PLAYED_MSG)
-		self.text = text
-	end
-
-	if TotalPlayTime and LevelPlayTime and SessionPlayTime then
-		local Day, Hour, Minute, Second
-		if UnitLevel('player') ~= MAX_PLAYER_LEVEL then
-			Day, Hour, Minute, Second = ChatFrame_TimeBreakDown(LevelPlayTime + (GetTime() - LevelPlayTimeOffset))
-		else
-			Day, Hour, Minute, Second = ChatFrame_TimeBreakDown(TotalPlayTime + (GetTime() - SessionPlayTime))
-		end
-		if Day > 0 then
-			self.text:SetFormattedText('%d '..L["D"]..' %02d:%02d', Day, Hour, Minute)
-		else
-			self.text:SetFormattedText('%02d:%02d', Hour, Minute)
-		end
-	else
-		if ElapsedTimer > 1 and not self.Requested then
-			self.Requested = true
-			RequestTimePlayed()
-		end
-	end
-end
-
-local OnEvent = function(self, event, ...)
-	if not ElvDB['sle'] then ElvDB['sle'] = {} end
-	if not ElvDB['sle']['TimePlayed'] then ElvDB['sle']['TimePlayed'] = {} end
-	if not ElvDB['sle']['TimePlayed'][MyRealm] then ElvDB['sle']['TimePlayed'][MyRealm] = {} end
-	if not ElvDB['sle']['TimePlayed'][MyRealm][MyName] then ElvDB['sle']['TimePlayed'][MyRealm][MyName] = {} end
-	ElvDB['sle']['TimePlayed'][MyRealm][MyName]['Class'] = MyClass
-	ElvDB['sle']['TimePlayed'][MyRealm][MyName]['Level'] = UnitLevel('player')
-	LastLevelTime = ElvDB['sle']['TimePlayed'][MyRealm][MyName]['LastLevelTime'] or 0
-	if event == 'TIME_PLAYED_MSG' then
-		local TotalTime, LevelTime = ...
-		TotalPlayTime = TotalTime
-		LevelPlayTime = LevelTime
-		if SessionPlayTime == nil then SessionPlayTime = GetTime() end
-		LevelPlayTimeOffset = GetTime()
-		ElvDB['sle']['TimePlayed'][MyRealm][MyName]['TotalTime'] = TotalTime
-		ElvDB['sle']['TimePlayed'][MyRealm][MyName]['LevelTime'] = LevelTime
-	end
-	if event == 'PLAYER_LEVEL_UP' then
-		LastLevelTime = floor(LevelPlayTime + (GetTime() - LevelPlayTimeOffset))
-		ElvDB['sle']['TimePlayed'][MyRealm][MyName]['LastLevelTime'] = LastLevelTime
-		LevelPlayTime = 1
-		LevelPlayTimeOffset = GetTime()
-		ElvDB['sle']['TimePlayed'][MyRealm][MyName]['Level'] = UnitLevel('player')
-	end
-	if event == 'PLAYER_ENTERING_WORLD' then
-		self:UnregisterEvent(event)
-		if not IsAddOnLoaded('DataStore_Characters') then
-			RequestTimePlayed()
-		end
-	end
-	if event == 'PLAYER_LOGOUT' then
-		RequestTimePlayed()
-	end
-end
-
-local function Reset()
-	ElvDB['sle']['TimePlayed'][MyRealm] = {}
-	ElvDB['sle']['TimePlayed'][MyRealm][MyName] = {}
-	ElvDB['sle']['TimePlayed'][MyRealm][MyName]['Level'] = UnitLevel('player')
-	ElvDB['sle']['TimePlayed'][MyRealm][MyName]['LastLevelTime'] = LastLevelTime
-	ElvDB['sle']['TimePlayed'][MyRealm][MyName]['Class'] = MyClass
-	RequestTimePlayed()
-	print(': Time Played has been reset!')
-end
-
-local OnMouseDown = function(self, button)
-	if button == 'RightButton' then
-		if IsShiftKeyDown()then
-			Reset()
-		end
-	end
-end
-
---[[
-local Enable = function(self)
-	if (not self.Text) then
-		local Text = self:CreateFontString(nil, 'OVERLAY')
-		Text:SetFont(DataText.Font, DataText.Size, DataText.Flags)
-		Text:SetText('Time Played')
-		self.Text = Text
-	end
-
-	self:RegisterEvent('TIME_PLAYED_MSG')
-	self:RegisterEvent('PLAYER_LEVEL_UP')
-	self:RegisterEvent('PLAYER_ENTERING_WORLD')
-	self:RegisterEvent('PLAYER_LOGOUT')
-	self:SetScript('OnMouseDown', OnMouseDown)
-	self:SetScript('OnUpdate', OnUpdate)
-	self:SetScript('OnEnter', OnEnter)
-	self:SetScript('OnEvent', OnEvent)
-	self:SetScript('OnLeave', GameTooltip_Hide)
-end
-
-local Disable = function(self)
-	self.Text:SetText('')
-	self:UnregisterAllEvents()
-	self:SetScript('OnEvent', nil)
-	self:SetScript('OnEnter', nil)
-	self:SetScript('OnLeave', nil)
-end]]
-DT:RegisterDatatext('S&L Time Played', {'TIME_PLAYED_MSG', 'PLAYER_LEVEL_UP', 'PLAYER_ENTERING_WORLD' , 'PLAYER_LOGOUT'}, OnEvent, OnUpdate, OnMouseDown, OnEnter, OnLeave)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/range.lua b/ElvUI_SLE/modules/datatexts/range.lua
deleted file mode 100644
index d86d97b..0000000
--- a/ElvUI_SLE/modules/datatexts/range.lua
+++ /dev/null
@@ -1,53 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI)
-local DT = E:GetModule('DataTexts')
-
-local RC = LibStub("LibRangeCheck-2.0")
-local displayString = ''
-local lastPanel
-local int = 1
-local curMin, curMax
-local updateTargetRange = false
-local forceUpdate = false
-
-local function OnUpdate(self, t)
-	if not updateTargetRange then return end
-
-	int = int - t
-	if int > 0 then return end
-	int = .25
-
-	local min, max = RC:GetRange('target')
-	if not forceUpdate and (min == curMin and max == curMax) then return end
-
-	curMin = min
-	curMax = max
-
-	if min and max then
-		self.text:SetFormattedText(displayString, WHC_TITLE_HUNTER_2, min, max)
-	else
-		self.text:SetText(SPELL_FAILED_BAD_IMPLICIT_TARGETS)
-	end
-	forceUpdate = false
-	lastPanel = self
-end
-
-local function OnEvent(self, event)
-	updateTargetRange = UnitName("target") ~= nil
-	int = 0
-	if updateTargetRange then
-		forceUpdate = true
-	else
-		self.text:SetText(SPELL_FAILED_BAD_IMPLICIT_TARGETS)
-	end
-end
-
-local function ValueColorUpdate(hex, r, g, b)
-	displayString = string.join("", "%s: ", hex, "%d|r-", hex, "%d|r")
-
-	if lastPanel ~= nil then
-		OnEvent(lastPanel)
-	end
-end
-E.valueColorUpdateFuncs[ValueColorUpdate] = true
-
-DT:RegisterDatatext('S&L Target Range', {"PLAYER_TARGET_CHANGED"}, OnEvent, OnUpdate)
diff --git a/ElvUI_SLE/modules/datatexts/regen.lua b/ElvUI_SLE/modules/datatexts/regen.lua
deleted file mode 100755
index ee0e358..0000000
--- a/ElvUI_SLE/modules/datatexts/regen.lua
+++ /dev/null
@@ -1,28 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local DT = E:GetModule('DataTexts')
-
-local displayNumberString = ''
-local lastPanel;
-local join = string.join
-
-local function OnEvent(self, event, unit)
-	local baseMR, castingMR = GetManaRegen()
-	if InCombatLockdown() then
-		self.text:SetFormattedText(displayNumberString, "MP5", castingMR*5)
-	else
-		self.text:SetFormattedText(displayNumberString, "MP5", baseMR*5)
-	end
-
-	lastPanel = self
-end
-
-local function ValueColorUpdate(hex, r, g, b)
-	displayNumberString = join("", "%s: ", hex, "%.2f|r")
-
-	if lastPanel ~= nil then
-		OnEvent(lastPanel)
-	end
-end
-E['valueColorUpdateFuncs'][ValueColorUpdate] = true
-
-DT:RegisterDatatext('MP5', {"UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
diff --git a/ElvUI_SLE/modules/datatexts/spirit.lua b/ElvUI_SLE/modules/datatexts/spirit.lua
deleted file mode 100755
index 08f8a97..0000000
--- a/ElvUI_SLE/modules/datatexts/spirit.lua
+++ /dev/null
@@ -1,21 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI)
-local DT = E:GetModule('DataTexts')
-
-local displayNumberString = ''
-local lastPanel
-
-local function OnEvent(self, event, ...)
-	self.text:SetFormattedText(displayNumberString, SPIRIT_COLON, select(2, UnitStat("player", 5)))
-	lastPanel = self
-end
-
-local function ValueColorUpdate(hex, r, g, b)
-	displayNumberString = strjoin("", "%s ", hex, "%.f|r")
-
-	if lastPanel ~= nil then
-		OnEvent(lastPanel)
-	end
-end
-E['valueColorUpdateFuncs'][ValueColorUpdate] = true
-
-DT:RegisterDatatext('Spirit', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
diff --git a/ElvUI_SLE/modules/datatexts/stamina.lua b/ElvUI_SLE/modules/datatexts/stamina.lua
deleted file mode 100644
index 724c03d..0000000
--- a/ElvUI_SLE/modules/datatexts/stamina.lua
+++ /dev/null
@@ -1,21 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI)
-local DT = E:GetModule('DataTexts')
-
-local displayNumberString = ''
-local lastPanel
-
-local function OnEvent(self, event, ...)
-	self.text:SetFormattedText(displayNumberString, STAMINA_COLON, select(2, UnitStat("player", 3)))
-	lastPanel = self
-end
-
-local function ValueColorUpdate(hex, r, g, b)
-	displayNumberString = strjoin("", "%s ", hex, "%.f|r")
-
-	if lastPanel ~= nil then
-		OnEvent(lastPanel)
-	end
-end
-E['valueColorUpdateFuncs'][ValueColorUpdate] = true
-
-DT:RegisterDatatext('Stamina', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
diff --git a/ElvUI_SLE/modules/datatexts/strength.lua b/ElvUI_SLE/modules/datatexts/strength.lua
deleted file mode 100644
index 31042a2..0000000
--- a/ElvUI_SLE/modules/datatexts/strength.lua
+++ /dev/null
@@ -1,21 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI)
-local DT = E:GetModule('DataTexts')
-
-local displayNumberString = ''
-local lastPanel
-
-local function OnEvent(self, event, ...)
-	self.text:SetFormattedText(displayNumberString, STRENGTH_COLON, select(2, UnitStat("player", 1)))
-	lastPanel = self
-end
-
-local function ValueColorUpdate(hex, r, g, b)
-	displayNumberString = strjoin("", "%s ", hex, "%.f|r")
-
-	if lastPanel ~= nil then
-		OnEvent(lastPanel)
-	end
-end
-E['valueColorUpdateFuncs'][ValueColorUpdate] = true
-
-DT:RegisterDatatext('Strength', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
diff --git a/ElvUI_SLE/modules/datatexts/time.lua b/ElvUI_SLE/modules/datatexts/time.lua
deleted file mode 100755
index 558380f..0000000
--- a/ElvUI_SLE/modules/datatexts/time.lua
+++ /dev/null
@@ -1,214 +0,0 @@
---Replacement of Elv's time datatext with some additions
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local DT = E:GetModule('DataTexts')
-
-local format = string.format
-local join = string.join
-local floor = math.floor
-local wipe = table.wipe
-
-local APM = { TIMEMANAGER_PM, TIMEMANAGER_AM }
-local europeDisplayFormat = '';
-local ukDisplayFormat = '';
-local europeDisplayFormat_nocolor = join("", "%02d", ":|r%02d")
-local ukDisplayFormat_nocolor = join("", "", "%d", ":|r%02d", " %s|r")
-local timerLongFormat = "%d:%02d:%02d"
-local timerShortFormat = "%d:%02d"
-local lockoutInfoFormat = "%s%s |cffaaaaaa(%s, %s/%s)"
-local lockoutInfoFormatNoEnc = "%s%s |cffaaaaaa(%s)"
-local formatBattleGroundInfo = "%s: "
-local lockoutColorExtended, lockoutColorNormal = { r=0.3,g=1,b=0.3 }, { r=.8,g=.8,b=.8 }
-local lockoutFormatString = { "%dd %02dh %02dm", "%dd %dh %02dm", "%02dh %02dm", "%dh %02dm", "%dh %02dm", "%dm" }
-local curHr, curMin, curAmPm
-local enteredFrame = false;
-
-local level = UnitLevel("player")
-
-local Update, lastPanel; -- UpValue
-local localizedName, isActive, canQueue, startTime, canEnter
-local name, reset, locked, extended, isRaid, maxPlayers, difficulty, numEncounters, encounterProgress
-
-local function ValueColorUpdate(hex, r, g, b)
-	europeDisplayFormat = join("", "%02d", hex, ":|r%02d")
-	ukDisplayFormat = join("", "", "%d", hex, ":|r%02d", hex, " %s|r")
-
-	if lastPanel ~= nil then
-		Update(lastPanel, 20000)
-	end
-end
-E['valueColorUpdateFuncs'][ValueColorUpdate] = true
-
-local function ConvertTime(h, m)
-	local AmPm
-	if E.db.datatexts.time24 == true then
-		return h, m, -1
-	else
-		if h >= 12 then
-			if h > 12 then h = h - 12 end
-			AmPm = 1
-		else
-			if h == 0 then h = 12 end
-			AmPm = 2
-		end
-	end
-	return h, m, AmPm
-end
-
-local function CalculateTimeValues(tooltip)
-	if (tooltip and E.db.datatexts.localtime) or (not tooltip and not E.db.datatexts.localtime) then
-		return ConvertTime(GetGameTime())
-	else
-		local	dateTable =	date("*t")
-		return ConvertTime(dateTable["hour"], dateTable["min"])
-	end
-end
-
-local function CalculateTimeLeft(time)
-	local hour = floor(time / 3600)
-	local min = floor(time / 60 - (hour*60))
-	local sec = time - (hour * 3600) - (min * 60)
-
-	return hour, min, sec
-end
-
-local function Click()
-	GameTimeFrame:Click();
-end
-
-local function OnLeave(self)
-	DT.tooltip:Hide();
-	enteredFrame = false;
-end
-
-local function OnEvent()
-	if event == "UPDATE_INSTANCE_INFO" and enteredFrame then
-		RequestRaidInfo()
-	end
-end
-
-local function OnEnter(self)
-	DT:SetupTooltip(self)
-
-	if(not enteredFrame) then
-		enteredFrame = true;
-		RequestRaidInfo()
-	end
-
-	DT.tooltip:AddLine(VOICE_CHAT_BATTLEGROUND);
-	for i = 1, GetNumWorldPVPAreas() do
-		_, localizedName, isActive, canQueue, startTime, canEnter = GetWorldPVPAreaInfo(i)
-		if canEnter then
-			if isActive then
-				startTime = WINTERGRASP_IN_PROGRESS
-			elseif startTime == nil then
-				startTime = QUEUE_TIME_UNAVAILABLE
-			else
-				startTime = SecondsToTime(startTime, false, nil, 3)
-			end
-			DT.tooltip:AddDoubleLine(format(formatBattleGroundInfo, localizedName), startTime, 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b)
-		end
-	end
-
-	--LFR lockout text
-	if E.db.sle.lfrshow.enabled then
-		DT:LFRShow()
-	end
-
-	local oneraid, lockoutColor
-	for i = 1, GetNumSavedInstances() do
-		name, _, reset, difficultyId, locked, extended, _, isRaid, maxPlayers, difficulty, numEncounters, encounterProgress  = GetSavedInstanceInfo(i)
-		if isRaid and (locked or extended) and name then
-			if not oneraid then
-				DT.tooltip:AddLine(" ")
-				DT.tooltip:AddLine(L["Saved Raid(s)"])
-				oneraid = true
-			end
-			if extended then
-				lockoutColor = lockoutColorExtended
-			else
-				lockoutColor = lockoutColorNormal
-			end
-
-			local _, _, isHeroic, _ = GetDifficultyInfo(difficultyId)
-			if (numEncounters and numEncounters > 0) and (encounterProgress and encounterProgress > 0) then
-				DT.tooltip:AddDoubleLine(format(lockoutInfoFormat, maxPlayers, (isHeroic and "H" or "N"), name, encounterProgress, numEncounters), SecondsToTime(reset, false, nil, 3), 1, 1, 1, lockoutColor.r, lockoutColor.g, lockoutColor.b)
-			else
-				DT.tooltip:AddDoubleLine(format(lockoutInfoFormatNoEnc, maxPlayers, (isHeroic and "H" or "N"), name), SecondsToTime(reset, false, nil, 3), 1, 1, 1, lockoutColor.r, lockoutColor.g, lockoutColor.b)
-			end
-		end
-	end
-
-	local addedLine = false
-	for i = 1, GetNumSavedWorldBosses() do
-		name, instanceID, reset = GetSavedWorldBossInfo(i)
-		if(reset) then
-			if(not addedLine) then
-				DT.tooltip:AddLine(' ')
-				DT.tooltip:AddLine(RAID_INFO_WORLD_BOSS.."(s)")
-				addedLine = true
-			end
-			DT.tooltip:AddDoubleLine(name, SecondsToTime(reset, true, nil, 3), 1, 1, 1, 0.8, 0.8, 0.8)
-		end
-	end
-
-	local LeiShenKey = IsQuestFlaggedCompleted(32626)
-	local Trove = IsQuestFlaggedCompleted(32609)
-
-	if level == 90 and E.db.sle.lfrshow.leishen then
-		DT.tooltip:AddDoubleLine(L["Key to the Palace of Lei Shen:"], LeiShenKey and "\124cffff0000"..L["Looted"].."\124r" or "\124cff00ff00"..L["Not looted"].."\124r", 1, 1, 1, 0.8, 0.8, 0.8)
-		DT.tooltip:AddDoubleLine(L["Trove of the Thunder King:"], Trove and "\124cffff0000"..L["Looted"].."\124r" or "\124cff00ff00"..L["Not looted"].."\124r", 1, 1, 1, 0.8, 0.8, 0.8)
-	end
-
-	local timeText
-	local Hr, Min, AmPm = CalculateTimeValues(true)
-
-	DT.tooltip:AddLine(" ")
-	if AmPm == -1 then
-		DT.tooltip:AddDoubleLine(E.db.datatexts.localtime and TIMEMANAGER_TOOLTIP_REALMTIME or TIMEMANAGER_TOOLTIP_LOCALTIME,
-			format(europeDisplayFormat_nocolor, Hr, Min), 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b)
-	else
-		DT.tooltip:AddDoubleLine(E.db.datatexts.localtime and TIMEMANAGER_TOOLTIP_REALMTIME or TIMEMANAGER_TOOLTIP_LOCALTIME,
-			format(ukDisplayFormat_nocolor, Hr, Min, APM[AmPm]), 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b)
-	end
-
-	DT.tooltip:Show()
-end
-
-local int = 3
-function Update(self, t)
-	int = int - t
-
-	if int > 0 then return end
-
-	if GameTimeFrame.flashInvite then
-		E:Flash(self, 0.53)
-	else
-		E:StopFlash(self)
-	end
-
-	if enteredFrame then
-		OnEnter(self)
-	end
-
-	local Hr, Min, AmPm = CalculateTimeValues(false)
-
-	-- no update quick exit
-	if (Hr == curHr and Min == curMin and AmPm == curAmPm) and not (int < -15000) then
-		int = 5
-		return
-	end
-
-	curHr = Hr
-	curMin = Min
-	curAmPm = AmPm
-
-	if AmPm == -1 then
-		self.text:SetFormattedText(europeDisplayFormat, Hr, Min)
-	else
-		self.text:SetFormattedText(ukDisplayFormat, Hr, Min, APM[AmPm])
-	end
-	lastPanel = self
-	int = 5
-end
-
-DT:RegisterDatatext('Time', {"UPDATE_INSTANCE_INFO"}, OnEvent, Update, Click, OnEnter, OnLeave)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/datatexts/version.lua b/ElvUI_SLE/modules/datatexts/version.lua
deleted file mode 100755
index c9ed4ff..0000000
--- a/ElvUI_SLE/modules/datatexts/version.lua
+++ /dev/null
@@ -1,46 +0,0 @@
---Version datatext. Only in Russian for now.
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local DT = E:GetModule('DataTexts')
-local SLE = E:GetModule('SLE')
-local ACD = LibStub("AceConfigDialog-3.0")
-
-local displayString = '';
-local lastPanel;
-local self = lastPanel
-local join = string.join
-local AddLine = AddLine
-local AddDoubleLine =AddDoubleLine
-local Eversion = E.version
-local format = format
-
-local function OnEvent(self, event, ...)
-	self.text:SetFormattedText(displayString, 'ElvUI v', Eversion, SLE.version);
-end
-
-local function Click()
-	ElvConfigToggle:Click();
-	ACD:SelectGroup("ElvUI", "sle")
-end
-
-local function OnEnter(self)
-	DT:SetupTooltip(self)
-
-	DT.tooltip:AddDoubleLine("ElvUI "..GAME_VERSION_LABEL..format(": |cff99ff33%s|r", Eversion))
-	DT.tooltip:AddLine(L["SLE_AUTHOR_INFO"]..". "..GAME_VERSION_LABEL..format(": |cff99ff33%s|r", SLE.version))
-	DT.tooltip:AddLine(" ")
-	DT.tooltip:AddLine(L['SLE_CONTACTS'])
-
-	DT.tooltip:Show()
-end
-
-local function ValueColorUpdate(hex, r, g, b)
-	displayString = join("", "%s", hex, "%s|r", " : Shadow & Light Edit v", hex, "%s|r")
-
-	if lastPanel ~= nil then
-		OnEvent(lastPanel)
-	end
-end
-E['valueColorUpdateFuncs'][ValueColorUpdate] = true
-
-DT:RegisterDatatext("Version", {'PLAYER_ENTERING_WORLD'}, OnEvent, Update, Click, OnEnter)
-
diff --git a/ElvUI_SLE/modules/equipmanager.lua b/ElvUI_SLE/modules/equipmanager.lua
new file mode 100644
index 0000000..fc81376
--- /dev/null
+++ b/ElvUI_SLE/modules/equipmanager.lua
@@ -0,0 +1,79 @@
+local E, L, V, P, G = unpack(ElvUI);
+local EM = E:GetModule('SLE_EquipManager')
+
+local GetEquipmentSetInfo, GetSpecialization, GetActiveSpecGroup, UseEquipmentSet = GetEquipmentSetInfo, GetSpecialization, GetActiveSpecGroup, UseEquipmentSet
+local IsInInstance, GetNumWorldPVPAreas, GetWorldPVPAreaInfo = IsInInstance, GetNumWorldPVPAreas, GetWorldPVPAreaInfo
+local gsub, strfind = string.gsub, string.find, string.sub
+
+local function Equip(event)
+	local primary = GetSpecialization()
+
+	if primary ~= nil then
+		local inInstance, instanceType = IsInInstance()
+
+		if (event == "ACTIVE_TALENT_GROUP_CHANGED") then
+			if GetActiveSpecGroup() == 1 then
+				UseEquipmentSet(E.private.sle.equip.primary)
+			else
+				UseEquipmentSet(E.private.sle.equip.secondary)
+			end
+		end
+
+		if (instanceType == "party" or instanceType == "raid") then
+			UseEquipmentSet(E.private.sle.equip.instance)
+		end
+
+		if (instanceType == "pvp" or instanceType == "arena") then
+			UseEquipmentSet(E.private.sle.equip.pvp)
+		end
+
+		if E.private.sle.equip.pvp ~= "NONE" then
+			for i = 1, GetNumWorldPVPAreas() do
+				local _, localizedName, isActive = GetWorldPVPAreaInfo(i)
+
+				if (GetRealZoneText() == localizedName and isActive) then
+					UseEquipmentSet(E.private.sle.equip.pvp)
+				end
+			end
+		end
+	end
+end
+
+function EM:EquipSpamFilter(event, msg, ...)
+	if strfind(msg, string.gsub(ERR_LEARN_ABILITY_S:gsub('%.', '%.'), '%%s', '(.*)')) then
+		return true
+	elseif strfind(msg, string.gsub(ERR_LEARN_SPELL_S:gsub('%.', '%.'), '%%s', '(.*)')) then
+		return true
+	elseif strfind(msg, string.gsub(ERR_SPELL_UNLEARNED_S:gsub('%.', '%.'), '%%s', '(.*)')) then
+		return true
+	elseif strfind(msg, string.gsub(ERR_LEARN_PASSIVE_S:gsub('%.', '%.'), '%%s', '(.*)')) then
+		return true
+	end
+
+	return false, msg, ...
+end
+
+local function EnableSpamFilter()
+	ChatFrame_AddMessageEventFilter("CHAT_MSG_SYSTEM", EM.EquipSpamFilter)
+end
+
+local function DisableSpamFilter()
+	ChatFrame_RemoveMessageEventFilter("CHAT_MSG_SYSTEM", EM.EquipSpamFilter)
+end
+
+function EM:SpamThrottle()
+	if E.private.sle.equip.spam then
+		EnableSpamFilter()
+	else
+		DisableSpamFilter()
+	end
+end
+
+function EM:Initialize()
+	EM:SpamThrottle()
+	if not E.private.sle.equip.enable then return end
+	self:RegisterEvent("PLAYER_ENTERING_WORLD", Equip)
+	self:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED", Equip)
+	self:RegisterEvent("PLAYER_TALENT_UPDATE", Equip)
+	self:RegisterEvent("ZONE_CHANGED", Equip)
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/equipmanager/equipmanager.lua b/ElvUI_SLE/modules/equipmanager/equipmanager.lua
deleted file mode 100755
index df5430d..0000000
--- a/ElvUI_SLE/modules/equipmanager/equipmanager.lua
+++ /dev/null
@@ -1,82 +0,0 @@
---Raid mark bar. Similar to quickmark which just semms to be impossible to skin
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local EM = E:NewModule('EquipManager', 'AceHook-3.0', 'AceEvent-3.0');
-
-local GetEquipmentSetInfo = GetEquipmentSetInfo
-local GetSpecialization = GetSpecialization
-local IsInInstance = IsInInstance
-local GetActiveSpecGroup = GetActiveSpecGroup
-local UseEquipmentSet = UseEquipmentSet
-local GetNumWorldPVPAreas = GetNumWorldPVPAreas
-local GetWorldPVPAreaInfo = GetWorldPVPAreaInfo
-local gsub, strfind = string.gsub, string.find, string.sub
-
-function EM:Equip(event)
-	local primary = GetSpecialization()
-	if primary ~= nil then
-		local inInstance, instanceType = IsInInstance()
-		if (event == "ACTIVE_TALENT_GROUP_CHANGED") then
-			if GetActiveSpecGroup() == 1 then
-				UseEquipmentSet(E.private.sle.equip.primary)
-			else
-				UseEquipmentSet(E.private.sle.equip.secondary)
-			end
-		end
-		if (instanceType == "party" or instanceType == "raid") then
-			UseEquipmentSet(E.private.sle.equip.instance)
-		end
-		if (instanceType == "pvp" or instanceType == "arena") then
-			UseEquipmentSet(E.private.sle.equip.pvp)
-		end
-		if E.private.sle.equip.pvp ~= "NONE" then
-			for i = 1, GetNumWorldPVPAreas() do
-				local _, localizedName, isActive = GetWorldPVPAreaInfo(i)
-
-				if (GetRealZoneText() == localizedName and isActive) then
-					UseEquipmentSet(E.private.sle.equip.pvp)
-				end
-			end
-		end
-	end
-end
-
-function EM:EquipSpamFilter(event, msg, ...)
-	if strfind(msg, string.gsub(ERR_LEARN_ABILITY_S:gsub('%.', '%.'), '%%s', '(.*)')) then
-		return true
-	elseif strfind(msg, string.gsub(ERR_LEARN_SPELL_S:gsub('%.', '%.'), '%%s', '(.*)')) then
-		return true
-	elseif strfind(msg, string.gsub(ERR_SPELL_UNLEARNED_S:gsub('%.', '%.'), '%%s', '(.*)')) then
-		return true
-	elseif strfind(msg, string.gsub(ERR_LEARN_PASSIVE_S:gsub('%.', '%.'), '%%s', '(.*)')) then
-		return true
-	end
-
-	return false, msg, ...
-end
-
-function EM:EnableSpamFilter()
-	ChatFrame_AddMessageEventFilter("CHAT_MSG_SYSTEM", EM.EquipSpamFilter)
-end
-
-function EM:DisableSpamFilter()
-	ChatFrame_RemoveMessageEventFilter("CHAT_MSG_SYSTEM", EM.EquipSpamFilter)
-end
-
-function EM:SpamThrottle()
-	if E.private.sle.equip.spam then
-		EM:EnableSpamFilter()
-	else
-		EM:DisableSpamFilter()
-	end
-end
-
-function EM:Initialize()
-	EM:SpamThrottle()
-	if not E.private.sle.equip.enable then return end
-	self:RegisterEvent("PLAYER_ENTERING_WORLD", "Equip")
-	self:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED", "Equip")
-	self:RegisterEvent("PLAYER_TALENT_UPDATE", "Equip")
-	self:RegisterEvent("ZONE_CHANGED", "Equip")
-end
-
-E:RegisterModule(EM:GetName())
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/equipmanager/load_equipmanager.xml b/ElvUI_SLE/modules/equipmanager/load_equipmanager.xml
deleted file mode 100755
index 1db7e2f..0000000
--- a/ElvUI_SLE/modules/equipmanager/load_equipmanager.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='equipmanager.lua'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/equipmanager/options.lua b/ElvUI_SLE/modules/equipmanager/options.lua
deleted file mode 100755
index 6f261fb..0000000
--- a/ElvUI_SLE/modules/equipmanager/options.lua
+++ /dev/null
@@ -1,130 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local EM = E:GetModule('EquipManager')
-local BI = E:GetModule('BagInfo')
-
-local sets = {}
-
-local function FillTable()
-	sets = {}
-	sets["NONE"] = NONE
-	for i = 1, GetNumEquipmentSets() do
-		local name, icon, lessIndex = GetEquipmentSetInfo(i)
-		if name then
-			sets[name] = name
-		end
-	end
-	return sets
-end
-
-local function configTable()
-
-E.Options.args.sle.args.options.args.equipmanager = {
-	type = 'group',
-	order = 7,
-	name = L['Equipment Manager'],
-	args = {
-		header = {
-			order = 1,
-			type = "header",
-			name = L["Equipment Manager"],
-		},
-		intro = {
-			order = 2,
-			type = 'description',
-			name = L["EM_DESC"],
-		},
-		enable = {
-			type = "toggle",
-			order = 3,
-			name = L['Enable'],
-			get = function(info) return E.private.sle.equip.enable end,
-			set = function(info, value) E.private.sle.equip.enable = value; E:StaticPopup_Show("PRIVATE_RL") end
-		},
-		spam = {
-			type = "toggle",
-			order = 4,
-			name = L['Spam Throttling'],
-			desc = L["Removes the spam from chat stating what talents were learned or unlearned during spec change."],
-			get = function(info) return E.private.sle.equip.spam end,
-			set = function(info, value) E.private.sle.equip.spam = value; EM:SpamThrottle() end
-		},
-		setoverlay = {
-			type = "toggle",
-			order = 5,
-			name = L['Equipment Set Overlay'],
-			desc = L['Show the associated equipment sets for the items in your bags (or bank).'],
-			get = function(info) return E.private.sle.equip.setoverlay end,
-			set = function(info, value) E.private.sle.equip.setoverlay = value; BI:ToggleSettings(); end,
-		},
-		equipsets = {
-			type = "group",
-			name = PAPERDOLL_EQUIPMENTMANAGER,
-			order = 6,
-			disabled = function() return not E.private.sle.equip.enable end,
-			guiInline = true,
-			args = {
-				intro = {
-					order = 1,
-					type = 'description',
-					name = L["Here you can choose what equipment sets to use in different situations."],
-				},
-				primary = {
-					order = 2,
-					type = "select",
-					name = SPECIALIZATION_PRIMARY,
-					desc = L["Equip this set when switching to primary talents."],
-					get = function(info) return E.private.sle.equip.primary end,
-					set = function(info, value) E.private.sle.equip.primary = value; end,
-					values = function()
-						FillTable()
-						return sets
-					end,
-				},
-				secondary = {
-					order = 3,
-					type = "select",
-					name = SPECIALIZATION_SECONDARY,
-					desc = L["Equip this set when switching to secondary talents."],
-					get = function(info) return E.private.sle.equip.secondary end,
-					set = function(info, value) E.private.sle.equip.secondary = value end,
-					values = function()
-						FillTable()
-						return sets
-					end,
-				},
-				spacer = {
-					type = "description",
-					order = 4,
-					name = "",
-				},
-				instance = {
-					order = 5,
-					type = "select",
-					name = DUNGEONS,
-					desc = L["Equip this set after entering dungeons or raids."],
-					get = function(info) return E.private.sle.equip.instance end,
-					set = function(info, value) E.private.sle.equip.instance = value end,
-					values = function()
-						FillTable()
-						return sets
-					end,
-				},
-				pvp = {
-					order = 6,
-					type = "select",
-					name = PVP,
-					desc = L["Equip this set after entering battlegrounds or arens."],
-					get = function(info) return E.private.sle.equip.pvp end,
-					set = function(info, value) E.private.sle.equip.pvp = value end,
-					values = function()
-						FillTable()
-						return sets
-					end,
-				},
-			},
-		},
-	},
-}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/exprepbar.lua b/ElvUI_SLE/modules/exprepbar.lua
new file mode 100644
index 0000000..00e3065
--- /dev/null
+++ b/ElvUI_SLE/modules/exprepbar.lua
@@ -0,0 +1,266 @@
+local E, L, V, P, G = unpack(ElvUI);
+local M = E:GetModule('Misc');
+
+local strMatchCombat = {}
+local tinsert, gsub, format = tinsert, string.gsub, format
+local GetXPExhaustion = GetXPExhaustion
+local SetMinMaxValues = SetMinMaxValues
+local GetFactionInfo = GetFactionInfo
+local GetGuildInfo = GetGuildInfo
+
+tinsert(strMatchCombat, (gsub(FACTION_STANDING_INCREASED,"%%%d?%$?s", "(.+)")))
+tinsert(strMatchCombat, (gsub(FACTION_STANDING_INCREASED_GENERIC,"%%%d?%$?s", "(.+)")))
+tinsert(strMatchCombat, (gsub(FACTION_STANDING_INCREASED_BONUS,"%%%d?%$?s", "(.+)")))
+tinsert(strMatchCombat, (gsub(FACTION_STANDING_INCREASED_DOUBLE_BONUS,"%%%d?%$?s", "(.+)")))
+tinsert(strMatchCombat, (gsub(FACTION_STANDING_INCREASED_ACH_BONUS,"%%%d?%$?s", "(.+)")))
+local strChangeMatch = (gsub(FACTION_STANDING_CHANGED,"%%%d?%$?s", "(.+)"))
+local strGuildChangeMatch = {}
+tinsert(strGuildChangeMatch, (gsub(FACTION_STANDING_CHANGED_GUILD,"%%%d?%$?s", "(.+)")))
+tinsert(strGuildChangeMatch, (gsub(FACTION_STANDING_CHANGED_GUILDNAME,"%%%d?%$?s", "(.+)")))
+
+local collapsed = {}
+local guildName
+
+function M:UpdateExperience(event)
+	local bar = self.expBar
+
+	if(UnitLevel('player') == MAX_PLAYER_LEVEL) or IsXPUserDisabled() then
+		bar:Hide()
+	else
+		bar:Show()
+
+		local cur, max = self:GetXP('player')
+		bar.statusBar:SetMinMaxValues(0, max)
+		bar.statusBar:SetValue(cur - 1 >= 0 and cur - 1 or 0)
+		bar.statusBar:SetValue(cur)
+
+		local rested = GetXPExhaustion()
+		local text = ''
+		local textFormat = E.db.general.experience.textFormat
+
+		if rested and rested > 0 then
+			bar.rested:SetMinMaxValues(0, max)
+			bar.rested:SetValue(math.min(cur + rested, max))
+
+			if E.db.sle.exprep.explong then
+				if textFormat == 'PERCENT' then
+					text = format('%d%%  '..L['Rested:']..' %d%%', cur / max * 100, rested / max * 100)
+				elseif textFormat == 'CURMAX' then
+					text = format('%s - %s  '..L['Rested:']..' %s', cur, max, rested)
+				elseif textFormat == 'CURPERC' then
+					text = format('%s - %d%%  '..L['Rested:']..' %s [%d%%]', cur, cur / max * 100, rested, rested / max * 100)
+				end
+			else
+				if textFormat == 'PERCENT' then
+					text = format('%d%% R:%d%%', cur / max * 100, rested / max * 100)
+				elseif textFormat == 'CURMAX' then
+					text = format('%s - %s R:%s', E:ShortValue(cur), E:ShortValue(max), E:ShortValue(rested))
+				elseif textFormat == 'CURPERC' then
+					text = format('%s - %d%% R:%s [%d%%]', E:ShortValue(cur), cur / max * 100, E:ShortValue(rested), rested / max * 100)
+				end
+			end
+		else
+			bar.rested:SetMinMaxValues(0, 1)
+			bar.rested:SetValue(0)
+
+			if E.db.sle.exprep.explong then
+				if textFormat == 'PERCENT' then
+					text = format('%d%%', cur / max * 100)
+				elseif textFormat == 'CURMAX' then
+					text = format('%s - %s', cur, max)
+				elseif textFormat == 'CURPERC' then
+					text = format('%s - %d%%', cur, cur / max * 100)
+				end
+			else
+				if textFormat == 'PERCENT' then
+					text = format('%d%%', cur / max * 100)
+				elseif textFormat == 'CURMAX' then
+					text = format('%s - %s', E:ShortValue(cur), E:ShortValue(max))
+				elseif textFormat == 'CURPERC' then
+					text = format('%s - %d%%', E:ShortValue(cur), cur / max * 100)
+				end
+			end
+		end
+
+		bar.text:SetText(text)
+	end
+end
+
+function M:UpdateReputation(event)
+	local bar = self.repBar
+	local ID = 100
+	local name, reaction, min, max, value = GetWatchedFactionInfo()
+	local numFactions = GetNumFactions();
+
+	if not name then
+		bar:Hide()
+	else
+		bar:Show()
+
+		local text = ''
+		local textFormat = E.db.general.reputation.textFormat
+		local color = FACTION_BAR_COLORS[reaction]
+		bar.statusBar:SetStatusBarColor(color.r, color.g, color.b)
+
+		bar.statusBar:SetMinMaxValues(0, max - min)
+		bar.statusBar:SetValue(value - min)
+
+		for i=1, numFactions do
+			local factionName, _, standingID,_,_,_,_,_,_,_,_,_,_, factionID = GetFactionInfo(i);
+			local friendID, friendRep, friendMaxRep, _, _, _, friendTextLevel = GetFriendshipReputation(factionID);
+			if factionName == name then
+				if friendID ~= nil then
+					isFriend = true
+					friendText = friendTextLevel
+				else
+					ID = standingID
+				end
+			end
+		end
+
+		if E.db.sle.exprep.replong then
+			if textFormat == 'PERCENT' then
+				text = format('%d%% [%s]', ((value - min) / (max - min) * 100), isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
+			elseif textFormat == 'CURMAX' then
+				text = format('%s - %s [%s]', value - min, max - min, isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
+			elseif textFormat == 'CURPERC' then
+				text = format('%s - %d%% [%s]', value - min, ((value - min) / (max - min) * 100), isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
+			end
+		else
+			if textFormat == 'PERCENT' then
+				text = format('%s: %d%% [%s]', name, ((value - min) / (max - min) * 100), isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
+			elseif textFormat == 'CURMAX' then
+				text = format('%s: %s - %s [%s]', name, E:ShortValue(value - min), E:ShortValue(max - min), isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
+			elseif textFormat == 'CURPERC' then
+				text = format('%s: %s - %d%% [%s]', name, E:ShortValue(value - min), ((value - min) / (max - min) * 100), isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
+			end
+		end
+		bar.text:SetText(text)
+	end
+end
+
+function M:ChatMsgCombat(event, ...)
+	if not E.private.sle.exprep.autotrack then return end
+
+	local messg = ...
+	local found
+	for i, v in ipairs(strMatchCombat) do
+		found = (string.match(messg,strMatchCombat[i]))
+		if found then
+			if GUILD and guildName and (found == GUILD) then
+				found = guildName
+			end
+			break
+		end
+	end
+	if found then
+		M:setWatchedFaction(found)
+	end
+end
+
+function M:CombatTextUpdate(event, ...)
+	if not E.private.sle.exprep.autotrack then return end
+
+	local messagetype, faction, amount = ...
+	if messagetype ~= "FACTION" then return end
+	if (not amount) or (amount < 0) then return end
+	if GUILD and faction and guildName and (faction == GUILD) then
+		faction = guildName
+	end
+	if faction then
+		M:setWatchedFaction(faction)
+	end
+end
+
+function M:ChatMsgSys(event, ...)
+	if not E.private.sle.exprep.autotrack then return end
+
+	local messg = ...
+	local found
+	local newfaction = (string.match(messg,strChangeMatch)) and select(2,string.match(messg,strChangeMatch))
+	if newfaction then
+		if guildName and (newfaction == GUILD) then
+			found = guildName
+		else
+			found = newfaction
+		end
+	else
+		local guildfaction
+		for i, v in ipairs(strGuildChangeMatch) do
+			guildfaction = (string.match(messg,strGuildChangeMatch[i]))
+			if guildfaction then
+				break
+			end
+		end
+		if guildfaction and guildName then
+			found = guildName
+		end
+	end
+	if found then
+		M:setWatchedFaction(found)
+	end
+end
+
+function M:PlayerRepLogin()
+	if IsInGuild() then
+		guildName = (GetGuildInfo("player"))
+		if not guildName then
+			M:RegisterEvent("GUILD_ROSTER_UPDATE", 'PlayerGuildRosterUpdate')
+		end
+	end
+end
+
+function M:PlayerGuildRosterUpdate()
+	if IsInGuild() then
+		guildName = (GetGuildInfo("player"))
+	end
+	if guildName then
+		M:UnregisterEvent("GUILD_ROSTER_UPDATE")
+	end
+end
+
+function M:PlayerGuildRepUdate()
+	if IsInGuild() then
+		guildName = (GetGuildInfo("player"))
+		if not guildName then
+			M:RegisterEvent("GUILD_ROSTER_UPDATE", 'PlayerGuildRosterUpdate')
+		end
+	else
+		guildName = nil
+	end
+end
+
+function M:setWatchedFaction(faction)
+	wipe(collapsed)
+	local i,j = 1, GetNumFactions()
+	while i <= j do
+		local name,_,_,_,_,_,_,_,isHeader,isCollapsed,_,isWatched = GetFactionInfo(i)
+		if name == faction then
+			if not (isWatched or IsFactionInactive(i)) then
+				SetWatchedFactionIndex(i)
+			end
+			break
+		end
+		if isHeader and isCollapsed then
+			ExpandFactionHeader(i)
+			collapsed[i] = true
+			j = GetNumFactions()
+		end
+		i = i+1
+	end
+	if next(collapsed) then
+		for k=i,1,-1 do
+			if collapsed[k] then
+				CollapseFactionHeader(k)
+			end
+		end
+	end
+end
+
+hooksecurefunc(M, "Initialize", function(self,...)
+	M:RegisterEvent("CHAT_MSG_COMBAT_FACTION_CHANGE", 'ChatMsgCombat')
+	M:RegisterEvent("COMBAT_TEXT_UPDATE", 'CombatTextUpdate')
+	M:RegisterEvent("CHAT_MSG_SYSTEM", 'ChatMsgSys')
+	M:RegisterEvent("PLAYER_LOGIN", 'PlayerRepLogin')
+	M:RegisterEvent("PLAYER_GUILD_UPDATE", 'PlayerGuildRepUdate')
+end)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/exprepbar/exprepbar.lua b/ElvUI_SLE/modules/exprepbar/exprepbar.lua
deleted file mode 100755
index 58c2d5e..0000000
--- a/ElvUI_SLE/modules/exprepbar/exprepbar.lua
+++ /dev/null
@@ -1,272 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local M = E:GetModule('Misc');
-
-local strMatchCombat = {}
-local tinsert, gsub, format = tinsert, string.gsub, format
-local GetXPExhaustion = GetXPExhaustion
-local SetMinMaxValues = SetMinMaxValues
-local GetFactionInfo = GetFactionInfo
-local GetGuildInfo = GetGuildInfo
-
-tinsert(strMatchCombat, (gsub(FACTION_STANDING_INCREASED,"%%%d?%$?s", "(.+)")))
-tinsert(strMatchCombat, (gsub(FACTION_STANDING_INCREASED_GENERIC,"%%%d?%$?s", "(.+)")))
-tinsert(strMatchCombat, (gsub(FACTION_STANDING_INCREASED_BONUS,"%%%d?%$?s", "(.+)")))
-tinsert(strMatchCombat, (gsub(FACTION_STANDING_INCREASED_DOUBLE_BONUS,"%%%d?%$?s", "(.+)")))
-tinsert(strMatchCombat, (gsub(FACTION_STANDING_INCREASED_ACH_BONUS,"%%%d?%$?s", "(.+)")))
-local strChangeMatch = (gsub(FACTION_STANDING_CHANGED,"%%%d?%$?s", "(.+)"))
-local strGuildChangeMatch = {}
-tinsert(strGuildChangeMatch, (gsub(FACTION_STANDING_CHANGED_GUILD,"%%%d?%$?s", "(.+)")))
-tinsert(strGuildChangeMatch, (gsub(FACTION_STANDING_CHANGED_GUILDNAME,"%%%d?%$?s", "(.+)")))
-
-local collapsed = {}
-local guildName
-
-function M:UpdateExperience(event)
-	local bar = self.expBar
-
-	if(UnitLevel('player') == MAX_PLAYER_LEVEL) or IsXPUserDisabled() then
-		bar:Hide()
-	else
-		bar:Show()
-
-		local cur, max = self:GetXP('player')
-		bar.statusBar:SetMinMaxValues(0, max)
-		bar.statusBar:SetValue(cur - 1 >= 0 and cur - 1 or 0)
-		bar.statusBar:SetValue(cur)
-
-		local rested = GetXPExhaustion()
-		local text = ''
-		local textFormat = E.db.general.experience.textFormat
-
-		if rested and rested > 0 then
-			bar.rested:SetMinMaxValues(0, max)
-			bar.rested:SetValue(math.min(cur + rested, max))
-
-			if E.db.sle.exprep.explong then
-				if textFormat == 'PERCENT' then
-					text = format('%d%%  '..L['Rested:']..' %d%%', cur / max * 100, rested / max * 100)
-				elseif textFormat == 'CURMAX' then
-					text = format('%s - %s  '..L['Rested:']..' %s', cur, max, rested)
-				elseif textFormat == 'CURPERC' then
-					text = format('%s - %d%%  '..L['Rested:']..' %s [%d%%]', cur, cur / max * 100, rested, rested / max * 100)
-				end
-			else
-				if textFormat == 'PERCENT' then
-					text = format('%d%% R:%d%%', cur / max * 100, rested / max * 100)
-				elseif textFormat == 'CURMAX' then
-					text = format('%s - %s R:%s', E:ShortValue(cur), E:ShortValue(max), E:ShortValue(rested))
-				elseif textFormat == 'CURPERC' then
-					text = format('%s - %d%% R:%s [%d%%]', E:ShortValue(cur), cur / max * 100, E:ShortValue(rested), rested / max * 100)
-				end
-			end
-		else
-			bar.rested:SetMinMaxValues(0, 1)
-			bar.rested:SetValue(0)
-
-			if E.db.sle.exprep.explong then
-				if textFormat == 'PERCENT' then
-					text = format('%d%%', cur / max * 100)
-				elseif textFormat == 'CURMAX' then
-					text = format('%s - %s', cur, max)
-				elseif textFormat == 'CURPERC' then
-					text = format('%s - %d%%', cur, cur / max * 100)
-				end
-			else
-				if textFormat == 'PERCENT' then
-					text = format('%d%%', cur / max * 100)
-				elseif textFormat == 'CURMAX' then
-					text = format('%s - %s', E:ShortValue(cur), E:ShortValue(max))
-				elseif textFormat == 'CURPERC' then
-					text = format('%s - %d%%', E:ShortValue(cur), cur / max * 100)
-				end
-			end
-		end
-
-		bar.text:SetText(text)
-	end
-
-	self:UpdateExpRepAnchors()
-end
-
-function M:UpdateReputation(event)
-	local bar = self.repBar
-
-	local ID = 100
-	local name, reaction, min, max, value = GetWatchedFactionInfo()
-	local numFactions = GetNumFactions();
-
-	if not name then
-		bar:Hide()
-	else
-		bar:Show()
-
-		local text = ''
-		local textFormat = E.db.general.reputation.textFormat
-		local color = FACTION_BAR_COLORS[reaction]
-		bar.statusBar:SetStatusBarColor(color.r, color.g, color.b)
-
-		bar.statusBar:SetMinMaxValues(0, max - min)
-		bar.statusBar:SetValue(value - min)
-
-		for i=1, numFactions do
-			local factionName, _, standingID,_,_,_,_,_,_,_,_,_,_, factionID = GetFactionInfo(i);
-			local friendID, friendRep, friendMaxRep, _, _, _, friendTextLevel = GetFriendshipReputation(factionID);
-			if factionName == name then
-				if friendID ~= nil then
-					isFriend = true
-					friendText = friendTextLevel
-				else
-					ID = standingID
-				end
-			end
-		end
-
-
-		if E.db.sle.exprep.replong then
-			if textFormat == 'PERCENT' then
-				text = format('%d%% [%s]', ((value - min) / (max - min) * 100), isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
-			elseif textFormat == 'CURMAX' then
-				text = format('%s - %s [%s]', value - min, max - min, isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
-			elseif textFormat == 'CURPERC' then
-				text = format('%s - %d%% [%s]', value - min, ((value - min) / (max - min) * 100), isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
-			end
-		else
-			if textFormat == 'PERCENT' then
-				text = format('%s: %d%% [%s]', name, ((value - min) / (max - min) * 100), isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
-			elseif textFormat == 'CURMAX' then
-				text = format('%s: %s - %s [%s]', name, E:ShortValue(value - min), E:ShortValue(max - min), isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
-			elseif textFormat == 'CURPERC' then
-				text = format('%s: %s - %d%% [%s]', name, E:ShortValue(value - min), ((value - min) / (max - min) * 100), isFriend and friendText or _G['FACTION_STANDING_LABEL'..ID])
-			end
-		end
-
-		bar.text:SetText(text)
-	end
-
-	self:UpdateExpRepAnchors()
-end
-
-function M:ChatMsgCombat(event, ...)
-	if not E.private.sle.exprep.autotrack then return end
-
-	local messg = ...
-	local found
-	for i, v in ipairs(strMatchCombat) do
-		found = (string.match(messg,strMatchCombat[i]))
-		if found then
-			if GUILD and guildName and (found == GUILD) then
-				found = guildName
-			end
-			break
-		end
-	end
-	if found then
-		M:setWatchedFaction(found)
-	end
-end
-
-function M:CombatTextUpdate(event, ...)
-	if not E.private.sle.exprep.autotrack then return end
-
-	local messagetype, faction, amount = ...
-	if messagetype ~= "FACTION" then return end
-	if (not amount) or (amount < 0) then return end
-	if GUILD and faction and guildName and (faction == GUILD) then
-		faction = guildName
-	end
-	if faction then
-		M:setWatchedFaction(faction)
-	end
-end
-
-function M:ChatMsgSys(event, ...)
-	if not E.private.sle.exprep.autotrack then return end
-
-	local messg = ...
-	local found
-	local newfaction = (string.match(messg,strChangeMatch)) and select(2,string.match(messg,strChangeMatch))
-	if newfaction then
-		if guildName and (newfaction == GUILD) then
-			found = guildName
-		else
-			found = newfaction
-		end
-	else
-		local guildfaction
-		for i, v in ipairs(strGuildChangeMatch) do
-			guildfaction = (string.match(messg,strGuildChangeMatch[i]))
-			if guildfaction then
-				break
-			end
-		end
-		if guildfaction and guildName then
-			found = guildName
-		end
-	end
-	if found then
-		M:setWatchedFaction(found)
-	end
-end
-
-function M:PlayerRepLogin()
-	if IsInGuild() then
-		guildName = (GetGuildInfo("player"))
-		if not guildName then
-			M:RegisterEvent("GUILD_ROSTER_UPDATE", 'PlayerGuildRosterUpdate')
-		end
-	end
-end
-function M:PlayerGuildRosterUpdate()
-	if IsInGuild() then
-		guildName = (GetGuildInfo("player"))
-	end
-	if guildName then
-		M:UnregisterEvent("GUILD_ROSTER_UPDATE")
-	end
-end
-
-function M:PlayerGuildRepUdate()
-	if IsInGuild() then
-		guildName = (GetGuildInfo("player"))
-		if not guildName then
-			M:RegisterEvent("GUILD_ROSTER_UPDATE", 'PlayerGuildRosterUpdate')
-		end
-	else
-		guildName = nil
-	end
-end
-
-function M:setWatchedFaction(faction)
-	wipe(collapsed)
-	local i,j = 1, GetNumFactions()
-	while i <= j do
-		local name,_,_,_,_,_,_,_,isHeader,isCollapsed,_,isWatched = GetFactionInfo(i)
-		if name == faction then
-			if not (isWatched or IsFactionInactive(i)) then
-				SetWatchedFactionIndex(i)
-			end
-			break
-		end
-		if isHeader and isCollapsed then
-			ExpandFactionHeader(i)
-			collapsed[i] = true
-			j = GetNumFactions()
-		end
-		i = i+1
-	end
-	if next(collapsed) then
-		for k=i,1,-1 do
-			if collapsed[k] then
-				CollapseFactionHeader(k)
-			end
-		end
-	end
-end
-
-hooksecurefunc(M, "Initialize", function(self,...)
-	M:RegisterEvent("CHAT_MSG_COMBAT_FACTION_CHANGE", 'ChatMsgCombat')
-	M:RegisterEvent("COMBAT_TEXT_UPDATE", 'CombatTextUpdate')
-	M:RegisterEvent("CHAT_MSG_SYSTEM", 'ChatMsgSys')
-	M:RegisterEvent("PLAYER_LOGIN", 'PlayerRepLogin')
-	M:RegisterEvent("PLAYER_GUILD_UPDATE", 'PlayerGuildRepUdate')
-end)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/exprepbar/load_exprepbar.xml b/ElvUI_SLE/modules/exprepbar/load_exprepbar.xml
deleted file mode 100755
index bc69133..0000000
--- a/ElvUI_SLE/modules/exprepbar/load_exprepbar.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='exprepbar.lua'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/exprepbar/options.lua b/ElvUI_SLE/modules/exprepbar/options.lua
deleted file mode 100755
index c4181bb..0000000
--- a/ElvUI_SLE/modules/exprepbar/options.lua
+++ /dev/null
@@ -1,44 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local M = E:GetModule('Misc')
-local function configTable()
-
---Options for Exp/Rep text
-E.Options.args.sle.args.options.args.general.args.exprep = {
-	type = "group",
-    name = L["Xp-Rep Text"],
-    order = 6,
-   	args = {
-		header = {
-			order = 1,
-			type = "header",
-			name = L["Xp-Rep Text"],
-		},
-		explong = {
-			order = 2,
-			type = "toggle",
-			name = L["Full value on Exp Bar"],
-			desc = L["Changes the way text is shown on exp bar."],
-			get = function(info) return E.db.sle.exprep.explong end,
-			set = function(info, value) E.db.sle.exprep.explong = value; M:UpdateExperience() end
-		},
-		replong = {
-			order = 3,
-			type = "toggle",
-			name = L["Full value on Rep Bar"],
-			desc = L["Changes the way text is shown on rep bar."],
-			get = function(info) return E.db.sle.exprep.replong end,
-			set = function(info, value) E.db.sle.exprep.replong = value; M:UpdateReputation() end
-		},
-		autotrackrep = {
-			order = 4,
-			type = "toggle",
-			name = L["Auto Track Reputation"],
-			desc = L["Automatically sets reputation tracking to the most recent reputation change."],
-			get = function(info) return E.private.sle.exprep.autotrack end,
-			set = function(info, value) E.private.sle.exprep.autotrack = value; end
-		},
-	},
-}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/farm.lua b/ElvUI_SLE/modules/farm.lua
new file mode 100644
index 0000000..2bf1e58
--- /dev/null
+++ b/ElvUI_SLE/modules/farm.lua
@@ -0,0 +1,606 @@
+local E, L, V, P, G = unpack(ElvUI);
+local B = LibStub("LibBabble-SubZone-3.0")
+local BL = B:GetLookupTable()
+local F = E:GetModule('SLE_Farm')
+local SLE = E:GetModule('SLE');
+local S = E:GetModule("Skins")
+
+local SeedAnchor, ToolAnchor, PortalAnchor
+local tsort, format = table.sort, format
+local farmzones = { BL["Sunsong Ranch"], BL["The Halfhill Market"] }
+local size
+local Zcheck = false
+local GetSubZoneText = GetSubZoneText
+local InCombatLockdown = InCombatLockdown
+local GetItemCount, GetItemInfo = GetItemCount, GetItemInfo
+local Point = Point
+
+
+FseedButtons = {}
+FtoolButtons = {}
+FportalButtons = {}
+
+local seeds = {
+	--Seeds general
+	[79102] = { 1 }, -- Green Cabbage
+	[89328] = { 1 }, -- Jade Squash
+	[80590] = { 1 }, -- Juicycrunch Carrot
+	[80592] = { 1 }, -- Mogu Pumpkin
+	[80594] = { 1 }, -- Pink Turnip
+	[80593] = { 1 }, -- Red Blossom Leek
+	[80591] = { 1 }, -- Scallion
+	[89329] = { 1 }, -- Striped Melon
+	[80595] = { 1 }, -- White Turnip
+	[89326] = { 1 }, -- Witchberry
+	--Bags general
+	[80809] = { 2 }, -- Green Cabbage
+	[89848] = { 2 }, -- Jade Squash
+	[84782] = { 2 }, -- Juicycrunch Carrot
+	[85153] = { 2 }, -- Mogu Pumpkin
+	[85162] = { 2 }, -- Pink Turnip
+	[85158] = { 2 }, -- Red Blossom Leek
+	[84783] = { 2 }, -- Scallion
+	[89849] = { 2 }, -- Striped Melon
+	[85163] = { 2 }, -- White Turnip
+	[89847] = { 2 }, -- Witchberry
+	--Seeds special
+	[85216] = { 3 }, -- Enigma
+	[85217] = { 3 }, -- Magebulb
+	[85219] = { 3 }, -- Ominous
+	[89202] = { 3 }, -- Raptorleaf
+	[85215] = { 3 }, -- Snakeroot
+	[89233] = { 3 }, -- Songbell
+	[91806] = { 3 }, -- Unstable Portal
+	[89197] = { 3 }, -- Windshear Cactus
+	--Bags special
+	[95449] = { 4 }, -- Enigma
+	[95451] = { 4 }, -- Magebulb
+	[95457] = { 4 }, -- Raptorleaf
+	[95447] = { 4 }, -- Snakeroot
+	[95445] = { 4 }, -- Songbell
+	[95454] = { 4 }, -- Windshear Cactus
+	--Trees lol
+	[85267] = { 5 }, -- Autumn Blossom Sapling
+	[85268] = { 5 }, -- Spring Blossom Sapling
+	[85269] = { 5 }, -- Winter Blossom Sapling
+}
+
+local addseeds = {
+	[95434] = { 80809 }, -- Green Cabbage
+	[95437] = { 89848 }, -- Jade Squash
+	[95436] = { 84782 }, -- Juicycrunch Carrot
+	[95438] = { 85153 }, -- Mogu Pumpkin
+	[95439] = { 85162 }, -- Pink Turnip
+	[95440] = { 85158 }, -- Red Blossom Leek
+	[95441] = { 84783 }, -- Scallion
+	[95442] = { 89849 }, -- Striped Melon
+	[95443] = { 85163 }, -- White Turnip
+	[95444] = { 89847 }, -- Witchberry
+
+	[95450] = { 95449 }, -- Enigma
+	[95452] = { 95451 }, -- Magebulb
+	[95458] = { 95457 }, -- Raptorleaf
+	[95448] = { 95447 }, -- Snakeroot
+	[95446] = { 95445 }, -- Songbell
+	[95456] = { 95454 }, -- Windshear Cactus
+}
+
+local tools = {
+	[79104]	= { 1 }, -- Rusy Watering Can
+	[80513] = { 1 }, -- Vintage Bug Sprayer
+	[89880] = { 1 }, -- Dented Shovel
+	[89815] = { 1 }, -- Master Plow
+}
+
+local portals = {
+	[91850] = { "Horde" }, -- Orgrimmar Portal Shard
+	[91861] = { "Horde" }, -- Thunder Bluff Portal Shard
+	[91862] = { "Horde" }, -- Undercity Portal Shard
+	[91863] = { "Horde" }, -- Silvermoon Portal Shard
+
+	[91860] = { "Alliance" }, -- Stormwind Portal Shard
+	[91864] = { "Alliance" }, -- Ironforge Portal Shard
+	[91865] = { "Alliance" }, -- Darnassus Portal Shard
+	[91866] = { "Alliance" }, -- Exodar Portal Shard
+}
+
+local quests = {
+--Tillers counsil
+	[31945] = {80591, 84783}, -- Gina, Scallion
+	[31946] = {80590, 84782}, -- Mung-Mung, Juicycrunch Carrot
+	[31947] = {79102, 80809}, -- Farmer Fung, Green Cabbage
+	[31949] = {89326, 89847}, -- Nana, Witchberry
+	[30527] = {89329, 89849}, -- Haohan, Striped Melon
+	--Farmer Yoon
+	[31943] = {89326, 89847}, -- Witchberry
+	[31942] = {89329, 89849}, -- Striped Melon
+	[31941] = {89328, 89848}, -- Jade Squash
+	[31669] = {79102, 80809}, -- Green Cabbage
+	[31670] = {80590, 84782}, -- Juicycrunch Carrot
+	[31672] = {80592, 85153}, -- Mogu Pumpkin
+	[31673] = {80593, 85158}, -- Red Blossom Leek
+	[31674] = {80594, 85162}, -- Pink Turnip
+	[31675] = {80595, 85163}, -- White Turnip
+	[31671] = {80591, 84783}, -- Scallion
+	--Work Orders
+	[32645] = {89326, 89847}, -- Witchberry (Alliance Only)
+	[32653] = {89329, 89849}, -- Striped Melon
+	--[31941] = {89328, 89848}, -- Jade Squash
+	[32649] = {79102, 80809}, -- Green Cabbage
+	--[31670] = {80590, 84782}, -- Juicycrunch Carrot
+	[32658] = {80592, 85153}, -- Mogu Pumpkin
+	[32642] = {80593, 85158}, -- Red Blossom Leek (Horde Only)
+	--[31674] = {80594, 85162}, -- Pink Turnip
+	[32647] = {80595, 85163}, -- White Turnip
+	--[31671] = {80591, 84783}, -- Scallion
+}
+
+local buttoncounts = {}
+
+local function CanSeed()
+	local subzone = GetSubZoneText()
+	for _, zone in ipairs(farmzones) do
+		if (zone == subzone) then
+			return true
+		end
+	end
+	return false
+end
+
+local function OnFarm()
+	return GetSubZoneText() == farmzones[1]
+end
+
+local function InventoryUpdate(event)
+	if InCombatLockdown() then
+		F:RegisterEvent("PLAYER_REGEN_ENABLED", InventoryUpdate)
+		return
+	else
+		F:UnregisterEvent("PLAYER_REGEN_ENABLED")
+ 	end
+
+ 	local SeedChange = false
+	for i = 1, 5 do
+		for _, button in ipairs(FseedButtons[i]) do
+			button.items = GetItemCount(button.itemId, nil, true)
+			if i == 2 or i == 4 then
+				for id, v in pairs(addseeds) do
+					if button.itemId == addseeds[id][1] then
+						local nCount = GetItemCount(id, nil, true)
+						button.items = button.items + nCount
+					end
+				end
+			end
+			if not buttoncounts[button.itemId] then
+				buttoncounts[button.itemId] = button.items
+			end
+			if button.items ~= buttoncounts[button.itemId] then
+				SeedChange = true
+				buttoncounts[button.itemId] = button.items
+			end
+			button.text:SetText(button.items)
+			button.icon:SetDesaturated(button.items == 0)
+			button.icon:SetAlpha(button.items == 0 and .25 or 1)
+		end
+	end
+
+	for _, button in ipairs(FtoolButtons) do
+		button.items = GetItemCount(button.itemId)
+		if not buttoncounts[button.itemId] then
+			buttoncounts[button.itemId] = button.items
+		end
+		if button.items ~= buttoncounts[button.itemId] then
+			SeedChange = true
+			buttoncounts[button.itemId] = button.items
+		end
+		button.icon:SetDesaturated(button.items == 0)
+		button.icon:SetAlpha(button.items == 0 and .25 or 1)
+	end
+
+	for _, button in ipairs(FportalButtons) do
+		button.items = GetItemCount(button.itemId)
+		if not buttoncounts[button.itemId] then
+			buttoncounts[button.itemId] = button.items
+		end
+		if button.items ~= buttoncounts[button.itemId] then
+			SeedChange = true
+			buttoncounts[button.itemId] = button.items
+		end
+		button.text:SetText(button.items)
+		button.icon:SetDesaturated(button.items == 0)
+		button.icon:SetAlpha(button.items == 0 and .25 or 1)
+	end
+
+	if event and event ~= "BAG_UPDATE_COOLDOWN" and SeedChange == true then
+		F:UpdateLayout()
+	end
+end
+
+local function UpdateBarLayout(bar, anchor, buttons)
+	local count = 0
+	size = E.db.sle.farm.size
+	bar:ClearAllPoints()
+	bar:Point("LEFT", anchor, "LEFT", 0, 0)
+
+	for i, button in ipairs(buttons) do
+		button:ClearAllPoints()
+		if not button.items then InventoryUpdate() end
+		if not E.db.sle.farm.active or button.items > 0 then
+			button:Point("TOPLEFT", bar, "TOPLEFT", (count * (size+(E.PixelMode and 2 or 1)))+(E.PixelMode and 1 or 0), -1)
+			button:Show()
+			button:Size(size, size)
+			count = count + 1
+		else
+			button:Hide()
+		end
+	end
+
+	bar:Width(1)
+	bar:Height(size+2)
+
+	return count
+end
+
+local function QuestItems(itemID)
+	for i = 1, GetNumQuestLogEntries() do
+		for qid, sid in pairs(quests) do
+			if qid == select(9,GetQuestLogTitle(i)) then
+				if itemID == sid[1] or itemID == sid[2] then
+					return true
+				end
+			end
+		end
+	end
+
+	return false
+end
+
+local function UpdateButtonCooldown(button)
+	if button.cooldown then
+		button.cooldown:SetCooldown(GetItemCooldown(button.itemId))
+	end
+end
+
+local function UpdateCooldown()
+	if not CanSeed() then return end
+
+	for i = 1, 5 do
+		for _, button in ipairs(FseedButtons[i]) do
+			UpdateButtonCooldown(button)
+		end
+	end
+	for _, button in ipairs(FtoolButtons) do
+		UpdateButtonCooldown(button)
+	end
+	for _, button in ipairs(FportalButtons) do
+		UpdateButtonCooldown(button)
+	end
+end
+
+local function UpdateSeedBarLayout(seedBar, anchor, buttons, category)
+	local count = 0
+	local db = E.db.sle.farm
+	size = db.size
+	local seedor = db.seedor
+	local id
+	seedBar:ClearAllPoints()
+	if category == 1 then
+		if seedor == "TOP" or seedor == "BOTTOM" then
+			seedBar:Point(seedor.."LEFT", anchor, (E.PixelMode and 0 or -2), seedor == "TOP" and 0 or (E.PixelMode and 2 or 0))
+		elseif seedor == "LEFT" or seedor ==  "RIGHT" then
+			seedBar:Point("TOP"..seedor, anchor, E.PixelMode and 2 or (seedor == "LEFT" and 0 or 2), (E.PixelMode and -2 or -2))
+		end
+
+	else
+		if _G[("FarmSeedBar%d"):format(category-1)]:IsShown() then
+			if seedor == "TOP" or seedor == "BOTTOM" then
+				seedBar:Point("TOPLEFT", _G[("FarmSeedBar%d"):format(category-1)], "TOPRIGHT", (E.PixelMode and 0 or -1), 0)
+			elseif seedor == "LEFT" or seedor ==  "RIGHT" then
+				seedBar:Point("TOPLEFT", _G[("FarmSeedBar%d"):format(category-1)], "BOTTOMLEFT", 0, (E.PixelMode and 0 or 1))
+			end
+		else
+			UpdateSeedBarLayout(seedBar, anchor, buttons, category-1)
+		end
+	end
+
+
+	for i, button in ipairs(buttons) do
+		id = button:GetName():gsub("FarmButton", "")
+		id = tonumber(id)
+		button:ClearAllPoints()
+		if not E.db.sle.farm.active or button.items > 0 then
+			if seedor == "TOP" or seedor == "BOTTOM" then
+				local mult = seedor == "TOP" and -1 or 1
+				button:Point(seedor.."LEFT", seedBar, E.PixelMode and 1 or 2, mult*(count * (size+(E.PixelMode and 2 or 1)))-(E.PixelMode and 1 or 0))
+			elseif seedor == "LEFT" or seedor == "RIGHT" then
+				local mult = seedor == "RIGHT" and -1 or 1
+				button:Point("TOPLEFT", seedBar, "TOPLEFT", mult*(count * (size+(E.PixelMode and 2 or 1)))-(E.PixelMode and 1 or 0), E.PixelMode and 1 or 2)
+			end
+			button:Show()
+			button:Size(size, size)
+			count = count + 1
+		else
+			button:Hide()
+		end
+		if E.db.sle.farm.quest then
+			if not CanSeed() then
+				seedBar:Width(size+2)
+				seedBar:Height(size+2)
+				return count
+			end
+			if QuestItems(id) then
+				ActionButton_ShowOverlayGlow(button)
+			else
+				ActionButton_HideOverlayGlow(button)
+			end
+		else
+			ActionButton_HideOverlayGlow(button)
+		end
+	end
+
+	seedBar:Width(size+2)
+	seedBar:Height(size+2)
+
+	return count
+end
+
+local function UpdateBar(bar, layoutfunc, zonecheck, anchor, buttons, category)
+	bar:Show()
+
+	local count = layoutfunc(bar, anchor, buttons, category)
+	if (E.private.sle.farm.enable and count > 0 and zonecheck() and not InCombatLockdown()) then
+		bar:Show()
+	else
+		bar:Hide()
+	end
+end
+
+function F:BAG_UPDATE_COOLDOWN()
+	InventoryUpdate()
+	UpdateCooldown()
+end
+
+local function Zone(event)
+	if CanSeed() then
+		F:RegisterEvent("BAG_UPDATE", InventoryUpdate)
+		F:RegisterEvent("BAG_UPDATE_COOLDOWN")
+		F:RegisterEvent("UNIT_QUEST_LOG_CHANGED", "UpdateLayout")
+		F:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", InventoryUpdate)
+
+		InventoryUpdate(event)
+		F:UpdateLayout()
+		Zcheck = true
+	else
+		F:UnregisterEvent("BAG_UPDATE")
+		F:UnregisterEvent("BAG_UPDATE_COOLDOWN")
+		F:UnregisterEvent("UNIT_QUEST_LOG_CHANGED")
+		F:UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED")
+		if Zcheck then
+			F:UpdateLayout()
+			Zcheck = false
+		end
+	end
+end
+
+local function ResizeFrames()
+	local seedor = E.db.sle.farm.seedor
+	if seedor == "TOP" or seedor == "BOTTOM" then
+		SeedAnchor:Size((size+(E.PixelMode and 2 or 1))*5-(E.PixelMode and 0 or 1), (size+(E.PixelMode and 2 or 1))*10-(E.PixelMode and 0 or 1))
+	elseif seedor == "LEFT" or seedor == "RIGHT" then
+		SeedAnchor:Size((size+(E.PixelMode and 2 or 1))*10-(E.PixelMode and 0 or 1), (size+(E.PixelMode and 2 or 1))*5-(E.PixelMode and 0 or 1))
+	end
+	ToolAnchor:Size((size+(E.PixelMode and 2 or 1))*5-(E.PixelMode and 0 or 1), size+(E.PixelMode and 2 or 1)-(E.PixelMode and 0 or 1))
+	PortalAnchor:Size((size+(E.PixelMode and 2 or 1))*5-(E.PixelMode and 0 or 1), size+(E.PixelMode and 2 or 1)-(E.PixelMode and 0 or 1))
+end
+
+function F:UpdateLayout(event, unit) --don't touch
+	if not SeedAnchor then return end
+	--For updating borders after quest was complited. for some reason events fires before quest disappeares from log
+	if event == "UNIT_QUEST_LOG_CHANGED" then
+		if unit == "player" then
+			E:Delay(1, F.UpdateLayout)
+		else
+			return
+		end
+	end
+	if InCombatLockdown() then
+		F:RegisterEvent("PLAYER_REGEN_ENABLED", "UpdateLayout")
+		return
+	else
+		F:UnregisterEvent("PLAYER_REGEN_ENABLED")
+ 	end
+	UpdateBar(_G["FarmToolBar"], UpdateBarLayout, OnFarm, ToolAnchor, FtoolButtons)
+	UpdateBar(_G["FarmPortalBar"], UpdateBarLayout, OnFarm, PortalAnchor, FportalButtons)
+	for i=1, 5 do
+		UpdateBar(_G[("FarmSeedBar%d"):format(i)], UpdateSeedBarLayout, CanSeed, SeedAnchor, FseedButtons[i], i)
+	end
+	ResizeFrames()
+end
+
+local function AutoTarget(button)
+	local container, slot = SLE:BagSearch(button.itemId)
+	if container and slot then
+		button:SetAttribute("type", "macro")
+		button:SetAttribute("macrotext", format("/targetexact %s \n/use %s %s", L["Tilled Soil"], container, slot))
+	end
+end
+
+local function onClick(self, mousebutton)
+	if mousebutton == "LeftButton" then
+		if InCombatLockdown() and not self.macro then
+			SLE:Print(L["We are sorry, but you can't do this now. Try again after the end of this combat."])
+			return
+		end
+		self:SetAttribute("type", self.buttonType)
+		self:SetAttribute(self.buttonType, self.sortname)
+		if self.id and self.id ~= 2 and self.id ~= 4 and E.db.sle.farm.autotarget and UnitName("target") ~= L["Tilled Soil"] then
+			AutoTarget(self)
+		end
+		if self.cooldown then
+			self.cooldown:SetCooldown(GetItemCooldown(self.itemId))
+		end
+		if not self.macro then self.macro = true end
+	elseif mousebutton == "RightButton" and self.allowDrop then
+		self:SetAttribute("type", "click")
+		local container, slot = SLE:BagSearch(self.itemId)
+		if container and slot then
+			PickupContainerItem(container, slot)
+			DeleteCursorItem()
+		end
+	end
+	InventoryUpdate()
+end
+
+local function onEnter(self)
+	GameTooltip:SetOwner(self, 'ANCHOR_TOPLEFT', 2, 4)
+	GameTooltip:ClearLines()
+	GameTooltip:AddLine("|cffFFFFFF"..self.sortname.."|r")
+	if self.allowDrop then
+		GameTooltip:AddLine(L['Right-click to drop the item.'])
+	end
+	GameTooltip:Show()
+end
+
+local function onLeave()
+	GameTooltip:Hide()
+end
+
+
+
+local function CreateFarmButton(index, owner, buttonType, name, texture, allowDrop, id)
+	size = E.db.sle.farm.size
+	local button = CreateFrame("Button", ("FarmButton%d"):format(index), owner, "SecureActionButtonTemplate")
+	button:Size(size, size)
+	S:HandleButton(button)
+
+	button.sortname = name
+	button.itemId = index
+	button.allowDrop = allowDrop
+	button.buttonType = buttonType
+	button.id = id
+	button.macro = false
+
+	button.icon = button:CreateTexture(nil, "OVERLAY")
+	button.icon:SetTexture(texture)
+	button.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
+	button.icon:SetInside()
+
+	button.text = button:CreateFontString(nil, "OVERLAY")
+	button.text:SetFont(E.media.normFont, 12, "OUTLINE")
+	button.text:SetPoint("BOTTOMRIGHT", button, 1, 2)
+
+	if select(3, GetItemCooldown(button.itemId)) == 1 then
+		button.cooldown = CreateFrame("Cooldown", ("FarmButton%dCooldown"):format(index), button)
+		button.cooldown:SetAllPoints(button)
+	end
+
+	button:HookScript("OnEnter", onEnter)
+	button:HookScript("OnLeave", onLeave)
+	button:SetScript("OnMouseDown", onClick)
+
+	return button
+end
+
+local function FramesPosition()
+	SeedAnchor:Point("LEFT", E.UIParent, "LEFT", 24, -160)
+	ToolAnchor:Point("BOTTOMLEFT", SeedAnchor, "TOPLEFT", 0, E.PixelMode and 1 or 5)
+	PortalAnchor:Point("BOTTOMLEFT", ToolAnchor, "TOPLEFT", 0, E.PixelMode and 1 or 5)
+end
+
+local function CreateFrames()
+	size = E.db.sle.farm.size
+	SeedAnchor = CreateFrame("Frame", "SeedAnchor", E.UIParent)
+	SeedAnchor:SetFrameStrata("BACKGROUND")
+
+	ToolAnchor = CreateFrame("Frame", "ToolAnchor", E.UIParent)
+	ToolAnchor:SetFrameStrata("BACKGROUND")
+
+	PortalAnchor = CreateFrame("Frame", "PortalAnchor", E.UIParent)
+	PortalAnchor:SetFrameStrata("BACKGROUND")
+
+	ResizeFrames()
+	FramesPosition()
+
+	E:CreateMover(SeedAnchor, "FarmSeedMover", L["Farm Seed Bars"], nil, nil, nil, "ALL,S&L,S&L MISC")
+	E:CreateMover(ToolAnchor, "FarmToolMover", L["Farm Tool Bar"], nil, nil, nil, "ALL,S&L,S&L MISC")
+	E:CreateMover(PortalAnchor, "FarmPortalMover", L["Farm Portal Bar"], nil, nil, nil, "ALL,S&L,S&L MISC")
+
+	for id, v in pairs(seeds) do
+		seeds[id] = { v[1], GetItemInfo(id) }
+	end
+
+	for id, v in pairs(tools) do
+		tools[id] = { GetItemInfo(id) }
+	end
+
+	for id, v in pairs(portals) do
+		portals[id] = { v[1], GetItemInfo(id) }
+	end
+
+	for i = 1, 5 do
+		local seedBar = CreateFrame("Frame", ("FarmSeedBar%d"):format(i), UIParent)
+		seedBar:SetFrameStrata("BACKGROUND")
+
+		seedBar:SetPoint("CENTER", SeedAnchor, "CENTER", 0, 0)
+
+		FseedButtons[i] = FseedButtons[i] or {}
+
+		for id, v in pairs(seeds) do
+			if v[1] == i then
+				tinsert(FseedButtons[i], CreateFarmButton(id, seedBar, "item", v[2], v[11], E.private.sle.farm.seedtrash, i))
+			end
+			tsort(FseedButtons[i], function(a, b) return a.sortname < b.sortname end)
+		end
+	end
+
+	local toolBar = CreateFrame("Frame", "FarmToolBar", UIParent)
+	toolBar:SetFrameStrata("BACKGROUND")
+	toolBar:SetPoint("CENTER", ToolAnchor, "CENTER", 0, 0)
+	for id, v in pairs(tools) do
+		tinsert(FtoolButtons, CreateFarmButton(id, toolBar, "item", v[1], v[10], true, nil))
+	end
+
+	local portalBar = CreateFrame("Frame", "FarmPortalBar", UIParent)
+	portalBar:SetFrameStrata("BACKGROUND")
+	portalBar:SetPoint("CENTER", PortalAnchor, "CENTER", 0, 0)
+	local playerFaction = UnitFactionGroup('player')
+	for id, v in pairs(portals) do
+		if v[1] == playerFaction then
+			tinsert(FportalButtons, CreateFarmButton(id, portalBar, "item", v[2], v[11], false, nil))
+		end
+	end
+
+	F:RegisterEvent("ZONE_CHANGED", Zone)
+	F:RegisterEvent("ZONE_CHANGED_NEW_AREA", Zone)
+	F:RegisterEvent("ZONE_CHANGED_INDOORS", Zone)
+	F:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", InventoryUpdate)
+
+	E:Delay(10, Zone)
+end
+
+local function StartFarmBarLoader()
+	F:UnregisterEvent("PLAYER_ENTERING_WORLD")
+
+	local noItem = false
+	-- preload item links to prevent errors
+	for id, _ in pairs(seeds) do
+		if select(2, GetItemInfo(id)) == nil then noItem = true end
+	end
+	for id, _ in pairs(tools) do
+		if select(2, GetItemInfo(id)) == nil then noItem = true end
+	end
+	for id, _ in pairs(portals) do
+		if select(2, GetItemInfo(id)) == nil then noItem = true end
+	end
+	if noItem then
+		E:Delay(5, StartFarmBarLoader)
+	else
+		CreateFrames()
+	end
+end
+
+function F:Initialize()
+	if not E.private.sle.farm.enable then return end
+
+	self:RegisterEvent("PLAYER_ENTERING_WORLD", StartFarmBarLoader)
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/farm/farm.lua b/ElvUI_SLE/modules/farm/farm.lua
deleted file mode 100755
index 001f32c..0000000
--- a/ElvUI_SLE/modules/farm/farm.lua
+++ /dev/null
@@ -1,606 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-local B = LibStub("LibBabble-SubZone-3.0")
-local BL = B:GetLookupTable()
-local F = E:NewModule('Farm', 'AceHook-3.0', 'AceEvent-3.0');
-local SLE = E:GetModule('SLE');
-
-local SeedAnchor, ToolAnchor, PortalAnchor
-local tsort, format = table.sort, format
-local farmzones = { BL["Sunsong Ranch"], BL["The Halfhill Market"] }
-local size
-local Zcheck = false
-local GetSubZoneText = GetSubZoneText
-local InCombatLockdown = InCombatLockdown
-local GetItemCount = GetItemCount
-local Point = Point
-local GetItemInfo = GetItemInfo
-
-
-FseedButtons = {}
-FtoolButtons = {}
-FportalButtons = {}
-
-local seeds = {
-	--Seeds general
-	[79102] = { 1 }, -- Green Cabbage
-	[89328] = { 1 }, -- Jade Squash
-	[80590] = { 1 }, -- Juicycrunch Carrot
-	[80592] = { 1 }, -- Mogu Pumpkin
-	[80594] = { 1 }, -- Pink Turnip
-	[80593] = { 1 }, -- Red Blossom Leek
-	[80591] = { 1 }, -- Scallion
-	[89329] = { 1 }, -- Striped Melon
-	[80595] = { 1 }, -- White Turnip
-	[89326] = { 1 }, -- Witchberry
-	--Bags general
-	[80809] = { 2 }, -- Green Cabbage
-	[89848] = { 2 }, -- Jade Squash
-	[84782] = { 2 }, -- Juicycrunch Carrot
-	[85153] = { 2 }, -- Mogu Pumpkin
-	[85162] = { 2 }, -- Pink Turnip
-	[85158] = { 2 }, -- Red Blossom Leek
-	[84783] = { 2 }, -- Scallion
-	[89849] = { 2 }, -- Striped Melon
-	[85163] = { 2 }, -- White Turnip
-	[89847] = { 2 }, -- Witchberry
-	--Seeds special
-	[85216] = { 3 }, -- Enigma
-	[85217] = { 3 }, -- Magebulb
-	[85219] = { 3 }, -- Ominous
-	[89202] = { 3 }, -- Raptorleaf
-	[85215] = { 3 }, -- Snakeroot
-	[89233] = { 3 }, -- Songbell
-	[91806] = { 3 }, -- Unstable Portal
-	[89197] = { 3 }, -- Windshear Cactus
-	--Bags special
-	[95449] = { 4 }, -- Enigma
-	[95451] = { 4 }, -- Magebulb
-	[95457] = { 4 }, -- Raptorleaf
-	[95447] = { 4 }, -- Snakeroot
-	[95445] = { 4 }, -- Songbell
-	[95454] = { 4 }, -- Windshear Cactus
-	--Trees lol
-	[85267] = { 5 }, -- Autumn Blossom Sapling
-	[85268] = { 5 }, -- Spring Blossom Sapling
-	[85269] = { 5 }, -- Winter Blossom Sapling
-}
-
-local addseeds = {
-	[95434] = { 80809 }, -- Green Cabbage
-	[95437] = { 89848 }, -- Jade Squash
-	[95436] = { 84782 }, -- Juicycrunch Carrot
-	[95438] = { 85153 }, -- Mogu Pumpkin
-	[95439] = { 85162 }, -- Pink Turnip
-	[95440] = { 85158 }, -- Red Blossom Leek
-	[95441] = { 84783 }, -- Scallion
-	[95442] = { 89849 }, -- Striped Melon
-	[95443] = { 85163 }, -- White Turnip
-	[95444] = { 89847 }, -- Witchberry
-
-	[95450] = { 95449 }, -- Enigma
-	[95452] = { 95451 }, -- Magebulb
-	[95458] = { 95457 }, -- Raptorleaf
-	[95448] = { 95447 }, -- Snakeroot
-	[95446] = { 95445 }, -- Songbell
-	[95456] = { 95454 }, -- Windshear Cactus
-}
-
-local tools = {
-	[79104]	= { 1 }, -- Rusy Watering Can
-	[80513] = { 1 }, -- Vintage Bug Sprayer
-	[89880] = { 1 }, -- Dented Shovel
-	[89815] = { 1 }, -- Master Plow
-}
-
-local portals = {
-	[91850] = { "Horde" }, -- Orgrimmar Portal Shard
-	[91861] = { "Horde" }, -- Thunder Bluff Portal Shard
-	[91862] = { "Horde" }, -- Undercity Portal Shard
-	[91863] = { "Horde" }, -- Silvermoon Portal Shard
-
-	[91860] = { "Alliance" }, -- Stormwind Portal Shard
-	[91864] = { "Alliance" }, -- Ironforge Portal Shard
-	[91865] = { "Alliance" }, -- Darnassus Portal Shard
-	[91866] = { "Alliance" }, -- Exodar Portal Shard
-}
-
-local quests = {
---Tillers counsil
-	[31945] = {80591, 84783}, -- Gina, Scallion
-	[31946] = {80590, 84782}, -- Mung-Mung, Juicycrunch Carrot
-	[31947] = {79102, 80809}, -- Farmer Fung, Green Cabbage
-	[31949] = {89326, 89847}, -- Nana, Witchberry
-	[30527] = {89329, 89849}, -- Haohan, Striped Melon
-	--Farmer Yoon
-	[31943] = {89326, 89847}, -- Witchberry
-	[31942] = {89329, 89849}, -- Striped Melon
-	[31941] = {89328, 89848}, -- Jade Squash
-	[31669] = {79102, 80809}, -- Green Cabbage
-	[31670] = {80590, 84782}, -- Juicycrunch Carrot
-	[31672] = {80592, 85153}, -- Mogu Pumpkin
-	[31673] = {80593, 85158}, -- Red Blossom Leek
-	[31674] = {80594, 85162}, -- Pink Turnip
-	[31675] = {80595, 85163}, -- White Turnip
-	[31671] = {80591, 84783}, -- Scallion
-	--Work Orders
-	[32645] = {89326, 89847}, -- Witchberry (Alliance Only)
-	[32653] = {89329, 89849}, -- Striped Melon
-	--[31941] = {89328, 89848}, -- Jade Squash
-	[32649] = {79102, 80809}, -- Green Cabbage
-	--[31670] = {80590, 84782}, -- Juicycrunch Carrot
-	[32658] = {80592, 85153}, -- Mogu Pumpkin
-	[32642] = {80593, 85158}, -- Red Blossom Leek (Horde Only)
-	--[31674] = {80594, 85162}, -- Pink Turnip
-	[32647] = {80595, 85163}, -- White Turnip
-	--[31671] = {80591, 84783}, -- Scallion
-}
-
-local buttoncounts = {}
-
-function F:CanSeed()
-	local subzone = GetSubZoneText()
-	for _, zone in ipairs(farmzones) do
-		if (zone == subzone) then
-			return true
-		end
-	end
-	return false
-end
-
-function F:OnFarm()
-	return GetSubZoneText() == farmzones[1]
-end
-
-function F:InventoryUpdate(event)
-	if InCombatLockdown() then
-		F:RegisterEvent("PLAYER_REGEN_ENABLED", "InventoryUpdate")
-		return
-	else
-		F:UnregisterEvent("PLAYER_REGEN_ENABLED")
- 	end
-
- 	local SeedChange = false
-	for i = 1, 5 do
-		for _, button in ipairs(FseedButtons[i]) do
-			button.items = GetItemCount(button.itemId, nil, true)
-			if i == 2 or i == 4 then
-				for id, v in pairs(addseeds) do
-					if button.itemId == addseeds[id][1] then
-						local nCount = GetItemCount(id, nil, true)
-						button.items = button.items + nCount
-					end
-				end
-			end
-			if not buttoncounts[button.itemId] then
-				buttoncounts[button.itemId] = button.items
-			end
-			if button.items ~= buttoncounts[button.itemId] then
-				SeedChange = true
-				buttoncounts[button.itemId] = button.items
-			end
-			button.text:SetText(button.items)
-			button.icon:SetDesaturated(button.items == 0)
-			button.icon:SetAlpha(button.items == 0 and .25 or 1)
-		end
-	end
-
-	for _, button in ipairs(FtoolButtons) do
-		button.items = GetItemCount(button.itemId)
-		if not buttoncounts[button.itemId] then
-			buttoncounts[button.itemId] = button.items
-		end
-		if button.items ~= buttoncounts[button.itemId] then
-			SeedChange = true
-			buttoncounts[button.itemId] = button.items
-		end
-		button.icon:SetDesaturated(button.items == 0)
-		button.icon:SetAlpha(button.items == 0 and .25 or 1)
-	end
-
-	for _, button in ipairs(FportalButtons) do
-		button.items = GetItemCount(button.itemId)
-		if not buttoncounts[button.itemId] then
-			buttoncounts[button.itemId] = button.items
-		end
-		if button.items ~= buttoncounts[button.itemId] then
-			SeedChange = true
-			buttoncounts[button.itemId] = button.items
-		end
-		button.text:SetText(button.items)
-		button.icon:SetDesaturated(button.items == 0)
-		button.icon:SetAlpha(button.items == 0 and .25 or 1)
-	end
-
-	if event and event ~= "BAG_UPDATE_COOLDOWN" and SeedChange == true then
-		F:UpdateLayout()
-	end
-end
-
-function F:UpdateBarLayout(bar, anchor, buttons)
-	local count = 0
-	size = E.db.sle.farm.size
-	bar:ClearAllPoints()
-	bar:Point("LEFT", anchor, "LEFT", 0, 0)
-
-	for i, button in ipairs(buttons) do
-		button:ClearAllPoints()
-		if not button.items then F:InventoryUpdate() end
-		if not E.db.sle.farm.active or button.items > 0 then
-			button:Point("TOPLEFT", bar, "TOPLEFT", (count * (size+(E.PixelMode and 2 or 1)))+(E.PixelMode and 1 or 0), -1)
-			button:Show()
-			button:Size(size, size)
-			count = count + 1
-		else
-			button:Hide()
-		end
-	end
-
-	bar:Width(1)
-	bar:Height(size+2)
-
-	return count
-end
-
-function F:QuestItems(itemID)
-	for i = 1, GetNumQuestLogEntries() do
-		for qid, sid in pairs(quests) do
-			if qid == select(9,GetQuestLogTitle(i)) then
-				if itemID == sid[1] or itemID == sid[2] then
-					return true
-				end
-			end
-		end
-	end
-
-	return false
-end
-
-function F:UpdateButtonCooldown(button)
-	if button.cooldown then
-		button.cooldown:SetCooldown(GetItemCooldown(button.itemId))
-	end
-end
-
-function F:UpdateCooldown()
-	if not F:CanSeed() then return end
-
-	for i = 1, 5 do
-		for _, button in ipairs(FseedButtons[i]) do
-			F:UpdateButtonCooldown(button)
-		end
-	end
-	for _, button in ipairs(FtoolButtons) do
-		F:UpdateButtonCooldown(button)
-	end
-	for _, button in ipairs(FportalButtons) do
-		F:UpdateButtonCooldown(button)
-	end
-end
-
-function F:UpdateSeedBarLayout(seedBar, anchor, buttons, category)
-	local count = 0
-	local db = E.db.sle.farm
-	size = db.size
-	local seedor = db.seedor
-	local id
-	seedBar:ClearAllPoints()
-	if category == 1 then
-		if seedor == "TOP" or seedor == "BOTTOM" then
-			seedBar:Point(seedor.."LEFT", anchor, (E.PixelMode and 0 or -2), seedor == "TOP" and 0 or (E.PixelMode and 2 or 0))
-		elseif seedor == "LEFT" or seedor ==  "RIGHT" then
-			seedBar:Point("TOP"..seedor, anchor, E.PixelMode and 2 or (seedor == "LEFT" and 0 or 2), (E.PixelMode and -2 or -2))
-		end
-
-	else
-		if _G[("FarmSeedBar%d"):format(category-1)]:IsShown() then
-			if seedor == "TOP" or seedor == "BOTTOM" then
-				seedBar:Point("TOPLEFT", _G[("FarmSeedBar%d"):format(category-1)], "TOPRIGHT", (E.PixelMode and 0 or -1), 0)
-			elseif seedor == "LEFT" or seedor ==  "RIGHT" then
-				seedBar:Point("TOPLEFT", _G[("FarmSeedBar%d"):format(category-1)], "BOTTOMLEFT", 0, (E.PixelMode and 0 or 1))
-			end
-		else
-			F:UpdateSeedBarLayout(seedBar, anchor, buttons, category-1)
-		end
-	end
-
-
-	for i, button in ipairs(buttons) do
-		id = button:GetName():gsub("FarmButton", "")
-		id = tonumber(id)
-		button:ClearAllPoints()
-		if not E.db.sle.farm.active or button.items > 0 then
-			if seedor == "TOP" or seedor == "BOTTOM" then
-				local mult = seedor == "TOP" and -1 or 1
-				button:Point(seedor.."LEFT", seedBar, E.PixelMode and 1 or 2, mult*(count * (size+(E.PixelMode and 2 or 1)))-(E.PixelMode and 1 or 0))
-			elseif seedor == "LEFT" or seedor == "RIGHT" then
-				local mult = seedor == "RIGHT" and -1 or 1
-				button:Point("TOPLEFT", seedBar, "TOPLEFT", mult*(count * (size+(E.PixelMode and 2 or 1)))-(E.PixelMode and 1 or 0), E.PixelMode and 1 or 2)
-			end
-			button:Show()
-			button:Size(size, size)
-			count = count + 1
-		else
-			button:Hide()
-		end
-		if E.db.sle.farm.quest then
-			if not F:CanSeed() then
-				seedBar:Width(size+2)
-				seedBar:Height(size+2)
-				return count
-			end
-			if F:QuestItems(id) then
-				ActionButton_ShowOverlayGlow(button)
-			else
-				ActionButton_HideOverlayGlow(button)
-			end
-		else
-			ActionButton_HideOverlayGlow(button)
-		end
-	end
-
-	seedBar:Width(size+2)
-	seedBar:Height(size+2)
-
-	return count
-end
-
-function F:UpdateBar(bar, layoutfunc, zonecheck, anchor, buttons, category)
-	bar:Show()
-
-	local count = layoutfunc(self, bar, anchor, buttons, category)
-	if (E.private.sle.farm.enable and count > 0 and zonecheck(self) and not InCombatLockdown()) then
-		bar:Show()
-	else
-		bar:Hide()
-	end
-end
-
-function F:BAG_UPDATE_COOLDOWN()
-	F:InventoryUpdate()
-	F:UpdateCooldown()
-end
-
-function F:Zone(event)
-	if F:CanSeed() then
-		F:RegisterEvent("BAG_UPDATE", "InventoryUpdate")
-		F:RegisterEvent("BAG_UPDATE_COOLDOWN")
-		F:RegisterEvent("UNIT_QUEST_LOG_CHANGED", "UpdateLayout")
-		F:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", "InventoryUpdate")
-
-		F:InventoryUpdate(event)
-		F:UpdateLayout()
-		Zcheck = true
-	else
-		F:UnregisterEvent("BAG_UPDATE")
-		F:UnregisterEvent("BAG_UPDATE_COOLDOWN")
-		F:UnregisterEvent("UNIT_QUEST_LOG_CHANGED")
-		F:UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED")
-		if Zcheck then
-			F:UpdateLayout()
-			Zcheck = false
-		end
-	end
-end
-
-function F:UpdateLayout(event, unit)
-	if not SeedAnchor then return end
-	--For updating borders after quest was complited. for some reason events fires before quest disappeares from log
-	if event == "UNIT_QUEST_LOG_CHANGED" then
-		if unit == "player" then
-			E:Delay(1, F.UpdateLayout)
-		else
-			return
-		end
-	end
-	if InCombatLockdown() then
-		F:RegisterEvent("PLAYER_REGEN_ENABLED", "UpdateLayout")
-		return
-	else
-		F:UnregisterEvent("PLAYER_REGEN_ENABLED")
- 	end
-	F:UpdateBar(_G["FarmToolBar"], F.UpdateBarLayout, F.OnFarm, ToolAnchor, FtoolButtons)
-	F:UpdateBar(_G["FarmPortalBar"], F.UpdateBarLayout, F.OnFarm, PortalAnchor, FportalButtons)
-	for i=1, 5 do
-		F:UpdateBar(_G[("FarmSeedBar%d"):format(i)], F.UpdateSeedBarLayout, F.CanSeed, SeedAnchor, FseedButtons[i], i)
-	end
-	F:ResizeFrames()
-end
-
-local function onClick(self, mousebutton)
-	if mousebutton == "LeftButton" then
-		if InCombatLockdown() and not self.macro then
-			SLE:Print(L["We are sorry, but you can't do this now. Try again after the end of this combat."])
-			return
-		end
-		self:SetAttribute("type", self.buttonType)
-		self:SetAttribute(self.buttonType, self.sortname)
-		if self.id and self.id ~= 2 and self.id ~= 4 and E.db.sle.farm.autotarget and UnitName("target") ~= L["Tilled Soil"] then
-			F:AutoTarget(self)
-		end
-		if self.cooldown then
-			self.cooldown:SetCooldown(GetItemCooldown(self.itemId))
-		end
-		if not self.macro then self.macro = true end
-	elseif mousebutton == "RightButton" and self.allowDrop then
-		self:SetAttribute("type", "click")
-		local container, slot = SLE:BagSearch(self.itemId)
-		if container and slot then
-			PickupContainerItem(container, slot)
-			DeleteCursorItem()
-		end
-	end
-	F:InventoryUpdate()
-end
-
-local function onEnter(self)
-	GameTooltip:SetOwner(self, 'ANCHOR_TOPLEFT', 2, 4)
-	GameTooltip:ClearLines()
-	GameTooltip:AddDoubleLine(self.sortname)
-	if self.allowDrop then
-		GameTooltip:AddLine(L['Right-click to drop the item.'])
-	end
-	GameTooltip:Show()
-end
-
-local function onLeave()
-	GameTooltip:Hide()
-end
-
-function F:AutoTarget(button)
-	local container, slot = SLE:BagSearch(button.itemId)
-	if container and slot then
-		button:SetAttribute("type", "macro")
-		button:SetAttribute("macrotext", format("/targetexact %s \n/use %s %s", L["Tilled Soil"], container, slot))
-	end
-end
-
-function F:CreateFarmButton(index, owner, buttonType, name, texture, allowDrop, id)
-	size = E.db.sle.farm.size
-	local button = CreateFrame("Button", ("FarmButton%d"):format(index), owner, "SecureActionButtonTemplate")
-	button:Size(size, size)
-	button:SetTemplate('Default', true)
-
-	button.sortname = name
-	button.itemId = index
-	button.allowDrop = allowDrop
-	button.buttonType = buttonType
-	button.id = id
-	button.macro = false
-
-	button.icon = button:CreateTexture(nil, "OVERLAY")
-	button.icon:SetTexture(texture)
-	button.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
-	button.icon:SetInside()
-
-	button.text = button:CreateFontString(nil, "OVERLAY")
-	button.text:SetFont(E.media.normFont, 12, "OUTLINE")
-	button.text:SetPoint("BOTTOMRIGHT", button, 1, 2)
-
-	if select(3, GetItemCooldown(button.itemId)) == 1 then
-		button.cooldown = CreateFrame("Cooldown", ("FarmButton%dCooldown"):format(index), button)
-		button.cooldown:SetAllPoints(button)
-	end
-
-	button:SetScript("OnEnter", onEnter)
-	button:SetScript("OnLeave", onLeave)
-	button:SetScript("OnMouseDown", onClick)
-
-	return button
-end
-
-function F:ResizeFrames()
-	local seedor = E.db.sle.farm.seedor
-	if seedor == "TOP" or seedor == "BOTTOM" then
-		SeedAnchor:Size((size+(E.PixelMode and 2 or 1))*5-(E.PixelMode and 0 or 1), (size+(E.PixelMode and 2 or 1))*10-(E.PixelMode and 0 or 1))
-	elseif seedor == "LEFT" or seedor == "RIGHT" then
-		SeedAnchor:Size((size+(E.PixelMode and 2 or 1))*10-(E.PixelMode and 0 or 1), (size+(E.PixelMode and 2 or 1))*5-(E.PixelMode and 0 or 1))
-	end
-	ToolAnchor:Size((size+(E.PixelMode and 2 or 1))*5-(E.PixelMode and 0 or 1), size+(E.PixelMode and 2 or 1)-(E.PixelMode and 0 or 1))
-	PortalAnchor:Size((size+(E.PixelMode and 2 or 1))*5-(E.PixelMode and 0 or 1), size+(E.PixelMode and 2 or 1)-(E.PixelMode and 0 or 1))
-end
-
-function F:FramesPosition()
-	SeedAnchor:Point("LEFT", E.UIParent, "LEFT", 24, -160)
-	ToolAnchor:Point("BOTTOMLEFT", SeedAnchor, "TOPLEFT", 0, E.PixelMode and 1 or 5)
-	PortalAnchor:Point("BOTTOMLEFT", ToolAnchor, "TOPLEFT", 0, E.PixelMode and 1 or 5)
-end
-
-function F:CreateFrames()
-	size = E.db.sle.farm.size
-	SeedAnchor = CreateFrame("Frame", "SeedAnchor", E.UIParent)
-	SeedAnchor:SetFrameStrata("BACKGROUND")
-
-	ToolAnchor = CreateFrame("Frame", "ToolAnchor", E.UIParent)
-	ToolAnchor:SetFrameStrata("BACKGROUND")
-
-	PortalAnchor = CreateFrame("Frame", "PortalAnchor", E.UIParent)
-	PortalAnchor:SetFrameStrata("BACKGROUND")
-
-	F:ResizeFrames()
-	F:FramesPosition()
-
-	E:CreateMover(SeedAnchor, "FarmSeedMover", L["Farm Seed Bars"], nil, nil, nil, "ALL,S&L,S&L MISC")
-	E:CreateMover(ToolAnchor, "FarmToolMover", L["Farm Tool Bar"], nil, nil, nil, "ALL,S&L,S&L MISC")
-	E:CreateMover(PortalAnchor, "FarmPortalMover", L["Farm Portal Bar"], nil, nil, nil, "ALL,S&L,S&L MISC")
-
-	for id, v in pairs(seeds) do
-		seeds[id] = { v[1], GetItemInfo(id) }
-	end
-
-	for id, v in pairs(tools) do
-		tools[id] = { GetItemInfo(id) }
-	end
-
-	for id, v in pairs(portals) do
-		portals[id] = { v[1], GetItemInfo(id) }
-	end
-
-	for i = 1, 5 do
-		local seedBar = CreateFrame("Frame", ("FarmSeedBar%d"):format(i), UIParent)
-		seedBar:SetFrameStrata("BACKGROUND")
-
-		seedBar:SetPoint("CENTER", SeedAnchor, "CENTER", 0, 0)
-
-		FseedButtons[i] = FseedButtons[i] or {}
-
-		for id, v in pairs(seeds) do
-			if v[1] == i then
-				tinsert(FseedButtons[i], F:CreateFarmButton(id, seedBar, "item", v[2], v[11], E.private.sle.farm.seedtrash, i))
-			end
-			tsort(FseedButtons[i], function(a, b) return a.sortname < b.sortname end)
-		end
-	end
-
-	local toolBar = CreateFrame("Frame", "FarmToolBar", UIParent)
-	toolBar:SetFrameStrata("BACKGROUND")
-	toolBar:SetPoint("CENTER", ToolAnchor, "CENTER", 0, 0)
-	for id, v in pairs(tools) do
-		tinsert(FtoolButtons, F:CreateFarmButton(id, toolBar, "item", v[1], v[10], true, nil))
-	end
-
-	local portalBar = CreateFrame("Frame", "FarmPortalBar", UIParent)
-	portalBar:SetFrameStrata("BACKGROUND")
-	portalBar:SetPoint("CENTER", PortalAnchor, "CENTER", 0, 0)
-	local playerFaction = UnitFactionGroup('player')
-	for id, v in pairs(portals) do
-		if v[1] == playerFaction then
-			tinsert(FportalButtons, F:CreateFarmButton(id, portalBar, "item", v[2], v[11], false, nil))
-		end
-	end
-
-	F:RegisterEvent("ZONE_CHANGED", "Zone")
-	F:RegisterEvent("ZONE_CHANGED_NEW_AREA", "Zone")
-	F:RegisterEvent("ZONE_CHANGED_INDOORS", "Zone")
-	F:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", "InventoryUpdate")
-
-	E:Delay(10, F.Zone)
-end
-
-function F:StartFarmBarLoader()
-	F:UnregisterEvent("PLAYER_ENTERING_WORLD")
-
-	local noItem = false
-	-- preload item links to prevent errors
-	for id, _ in pairs(seeds) do
-		if select(2, GetItemInfo(id)) == nil then noItem = true end
-	end
-	for id, _ in pairs(tools) do
-		if select(2, GetItemInfo(id)) == nil then noItem = true end
-	end
-	for id, _ in pairs(portals) do
-		if select(2, GetItemInfo(id)) == nil then noItem = true end
-	end
-	if noItem then
-		E:Delay(5, F.StartFarmBarLoader)
-	else
-		F.CreateFrames()
-	end
-end
-
-function F:Initialize()
-	if not E.private.sle.farm.enable then return end
-
-	self:RegisterEvent("PLAYER_ENTERING_WORLD", "StartFarmBarLoader")
-end
-
-E:RegisterModule(F:GetName())
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/farm/load_farm.xml b/ElvUI_SLE/modules/farm/load_farm.xml
deleted file mode 100755
index b0c4441..0000000
--- a/ElvUI_SLE/modules/farm/load_farm.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='farm.lua'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/farm/options.lua b/ElvUI_SLE/modules/farm/options.lua
deleted file mode 100755
index deaddb8..0000000
--- a/ElvUI_SLE/modules/farm/options.lua
+++ /dev/null
@@ -1,97 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-local F = E:GetModule('Farm')
-local function configTable()
-
-E.Options.args.sle.args.options.args.farm = {
-	type = 'group',
-	order = 8,
-	name = L['Farm'],
-	args = {
-		header = {
-			order = 1,
-			type = "header",
-			name = L["Farm Options"],
-		},
-		intro = {
-			order = 2,
-			type = 'description',
-			name = L["FARM_DESC"],
-		},
-		enable = {
-			type = "toggle",
-			order = 3,
-			name = L['Enable'],
-			get = function(info) return E.private.sle.farm.enable end,
-			set = function(info, value) E.private.sle.farm.enable = value; E:StaticPopup_Show("PRIVATE_RL") end
-		},
-		active = {
-			order = 4,
-			type = 'toggle',
-			name = L['Only active buttons'],
-			desc = L['Only show the buttons for the seeds, portals, tools you have in your bags.'],
-			disabled = function() return not E.private.sle.farm.enable end,
-			get = function(info) return E.db.sle.farm.active end,
-			set = function(info, value) E.db.sle.farm.active = value; if SeedAnchor then F:UpdateLayout() end end,
-		},
-		size = {
-			order = 5,
-			type = "range",
-			name = L["Button Size"],
-			disabled = function() return not E.private.sle.farm.enable end,
-			min = 15, max = 60, step = 1,
-			get = function(info) return E.db.sle.farm.size end,
-			set = function(info, value) E.db.sle.farm.size = value; F:UpdateLayout() end,
-		},
-		seedbar = {
-			type = "group",
-			order = 6,
-			name = L["Seed Bars"],
-			disabled = function() return not E.private.sle.farm.enable end,
-			guiInline = true,
-			args = {
-				autotarget = {
-					type = "toggle",
-					order = 1,
-					name = L["Auto Planting"],
-					desc = L["Automatically plant seeds to the nearest tilled soil if one is not already selected."],
-					get = function(info) return E.db.sle.farm.autotarget end,
-					set = function(info, value) E.db.sle.farm.autotarget = value; end
-				},
-				trash = {
-					type = "toggle",
-					order = 2,
-					name = L["Drop Seeds"],
-					desc = L["Allow seeds to be destroyed from seed bars."],
-					get = function(info) return E.private.sle.farm.seedtrash end,
-					set = function(info, value) E.private.sle.farm.seedtrash = value; E:StaticPopup_Show("PRIVATE_RL") end
-				},
-				quest = {
-					type = "toggle",
-					order = 3,
-					name = L["Quest Glow"],
-					desc = L["Show glowing border on seeds needed for any quest in your log."],
-					get = function(info) return E.db.sle.farm.quest end,
-					set = function(info, value) E.db.sle.farm.quest = value; if SeedAnchor then F:UpdateLayout() end end
-				},
-				growth = {
-					order = 8,
-					type = "select",
-					name = L["Dock Buttons To"],
-					desc = L["Change the position from where seed bars will grow."],
-					disabled = function() return not E.private.sle.farm end,
-					get = function(info) return E.db.sle.farm.seedor end,
-					set = function(info, value) E.db.sle.farm.seedor = value; if SeedAnchor then F:UpdateLayout() end end,
-					values = {
-						['RIGHT'] = L["Right"],
-						['LEFT'] = L["Left"],
-						['BOTTOM'] = L["Bottom"],
-						['TOP'] = L["Top"],
-					},
-				},
-			},
-		},
-	},
-}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/imports/load_imports.xml b/ElvUI_SLE/modules/imports/load_imports.xml
deleted file mode 100755
index f743ebb..0000000
--- a/ElvUI_SLE/modules/imports/load_imports.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/imports/options.lua b/ElvUI_SLE/modules/imports/options.lua
deleted file mode 100755
index 33ba351..0000000
--- a/ElvUI_SLE/modules/imports/options.lua
+++ /dev/null
@@ -1,539 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local AI = E:GetModule('AddonInstaller');
-
-local selectedAuthor
-local selectedClass
-local selectedOption
-local authors
-local options = {
-	Filters = "Filters",
-	Addons = "Addons",
-}
-local classes = {
-	AllClasses = "All Classes",
-	Priest = "Priest",
-	Druid = "Druid",
-	Paladin = "Paladin",
-	Shaman = "Shaman",
-	Monk = "Monk",
-	Rogue = "Rogue",
-	Mage = "Mage",
-	Warrior = "Warrior",
-	Deathknight = "Deathknight",
-}
-local function buffWatch(filter)
-	if filter == "AllClasses" and selectedAuthor == "Affinitii" then
-		E.global.unitframe.buffwatch["PRIEST"] = {
-			{["point"] = "LEFT",["displayText"] = true,["yOffset"] = 2,["style"] = "NONE",["textColor"] = {["g"] = 0,["b"] = 0,},},
-			{["point"] = "TOPRIGHT",["style"] = "texturedIcon",},
-			{["enabled"] = false,},{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},nil,
-			{["enabled"] = false,},{["enabled"] = false,},{["enabled"] = false,},
-			{["enabled"] = true,["anyUnit"] = false,["point"] = "BOTTOMLEFT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["textThreshold"] = -1,["yOffset"] = 8,["style"] = "NONE",["id"] = 47753,},
-			{["enabled"] = true,["anyUnit"] = false,["point"] = "BOTTOMRIGHT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["textThreshold"] = -1,["yOffset"] = 8,["style"] = "NONE",["id"] = 114908,},
-		}
-		E.global.unitframe.buffwatch["DRUID"] = {
-			{["point"] = "TOPLEFT",["displayText"] = true,["style"] = "NONE",}, -- [1]
-			{["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",
-			},{["point"] = "BOTTOMRIGHT",["displayText"] = true,["textThreshold"] = 5,["yOffset"] = 12,["style"] = "texturedIcon",},
-			{["point"] = "TOPRIGHT",["displayText"] = true,["textThreshold"] = 3,["style"] = "texturedIcon",},
-		}
-		E.global.unitframe.buffwatch["MONK"] = {
-			{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},{["enabled"] = false,},
-			{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",},
-			{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",},
-			{["enabled"] = true,["anyUnit"] = false,["point"] = "TOPRIGHT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,
-			},["id"] = 115175,["displayText"] = false,["style"] = "texturedIcon",["yOffset"] = 0,},
-		}
-		E.global.unitframe.buffwatch["SHAMAN"] = {
-			{["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["style"] = "NONE",},
-			{["point"] = "BOTTOMRIGHT",["yOffset"] = 10,["style"] = "texturedIcon",},
-			{["point"] = "TOPLEFT",["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},
-		}
-		ReloadUI();
-	elseif selectedAuthor == "Affintii" then
-		if filter == "Priest" then
-			E.global.unitframe.buffwatch["PRIEST"] = {
-				{["point"] = "LEFT",["displayText"] = true,["yOffset"] = 2,["style"] = "NONE",["textColor"] = {["g"] = 0,["b"] = 0,},},
-				{["point"] = "TOPRIGHT",["style"] = "texturedIcon",},
-				{["enabled"] = false,},{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},nil,
-				{["enabled"] = false,},{["enabled"] = false,},{["enabled"] = false,},
-				{["enabled"] = true,["anyUnit"] = false,["point"] = "BOTTOMLEFT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["textThreshold"] = -1,["yOffset"] = 8,["style"] = "NONE",["id"] = 47753,},
-				{["enabled"] = true,["anyUnit"] = false,["point"] = "BOTTOMRIGHT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["textThreshold"] = -1,["yOffset"] = 8,["style"] = "NONE",["id"] = 114908,},
-			}
-			ReloadUI();
-		elseif filter == "Druid" then
-			E.global.unitframe.buffwatch["DRUID"] = {
-				{["point"] = "TOPLEFT",["displayText"] = true,["style"] = "NONE",}, -- [1]
-				{["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",
-				},{["point"] = "BOTTOMRIGHT",["displayText"] = true,["textThreshold"] = 5,["yOffset"] = 12,["style"] = "texturedIcon",},
-				{["point"] = "TOPRIGHT",["displayText"] = true,["textThreshold"] = 3,["style"] = "texturedIcon",},
-			}
-			ReloadUI();
-		elseif filter == "Monk" then
-			E.global.unitframe.buffwatch["MONK"] = {
-				{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},{["enabled"] = false,},
-				{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",},
-				{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",},
-				{["enabled"] = true,["anyUnit"] = false,["point"] = "TOPRIGHT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,
-				},["id"] = 115175,["displayText"] = false,["style"] = "texturedIcon",["yOffset"] = 0,},
-			}
-			ReloadUI();
-		elseif filter == "Shaman" then
-			E.global.unitframe.buffwatch["SHAMAN"] = {
-				{["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["style"] = "NONE",},
-				{["point"] = "BOTTOMRIGHT",["yOffset"] = 10,["style"] = "texturedIcon",},
-				{["point"] = "TOPLEFT",["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},
-			}
-			ReloadUI();
-		else
-			print("There is no filter for the class specified.")
-		end
-	elseif filter == "1Filter" then
-		E.global.unitframe.aurafilters["Blacklist"] = {
-			["spells"] = {
-				["Bright Light"] = {["enable"] = true,["priority"] = 0,},
-				["Insanity"] = {["enable"] = true,["priority"] = 0,},
-				["Infrared Light"] = {["enable"] = true,["priority"] = 0,},
-				["Blue Rays"] = {["enable"] = true,["priority"] = 0,},
-				["Demonic Rebirth: Cooldown"] = {["enable"] = true,["priority"] = 0,},
-				["Unleashed Anima"] = {["enable"] = true,["priority"] = 0,},
-				["Recently Bandaged"] = {["enable"] = true,["priority"] = 0,},
-				["Fully Mutated"] = {["enable"] = true,["priority"] = 0,},
-				["Keen Eyesight"] = {["enable"] = true,["priority"] = 0,},
-				["Thick Bones"] = {["enable"] = true,["priority"] = 0,},
-				["Clear Mind"] = {["enable"] = true,["priority"] = 0,},
-				["Improved Synapses"] = {["enable"] = true,["priority"] = 0,},
-				["Perdition"] = {["enable"] = true,["priority"] = 0,},
-				["Void-Touched"] = {["enable"] = true,["priority"] = 0,},
-			},
-		}
-		ReloadUI();
-	else
-		print("This author doesn't have a filter import for that option.")
-	end
-end
-
-local function UpdateAuthor()
-	if selectedAuthor == 'Affinitii' then
-		if not selectedAuthor then
-			E.Options.args.sle.args.importing.args.authorGroup = nil
-			E.Options.args.sle.args.importing.args.optionGroup = nil
-			return
-		end
-
-		E.Options.args.sle.args.importing.args.authorGroup = {
-			type = 'group',
-			name = selectedAuthor,
-			guiInline = true,
-			order = 10,
-			args = {
-				importOptions = {
-					name = L["Import Options"],
-					type = 'select',
-					order = 1,
-					guiInline = true,
-					get = function(info) return selectedOption end,
-					set = function(info, value) selectedOption = value; UpdateAuthor(); end,
-					values = function()
-						local option = {}
-						option[''] = NONE
-						for k in pairs(options) do
-							option[k] = k
-						end
-
-						return option
-					end,
-				},
-			},
-		}
-		if not selectedOption or selectedOption == '' then
-			E.Options.args.sle.args.importing.args.optionGroup = nil
-			selectedClass = nil
-			return
-		end
-
-		if selectedOption == 'Filters' then
-			E.Options.args.sle.args.importing.args.optionGroup = {
-				type = "group",
-				name = selectedOption,
-				order = 15,
-				guiInline = true,
-				args = {
-					description = {
-						order = 2,
-						type = "description",
-						name = L["Please be aware that importing any of the filters will require a reload of the UI for the settings to take effect.\nOnce you click a filter button, your screen will reload automatically."],
-					},
-					selectClass = {
-						name = L["Select Filter"],
-						type = 'select',
-						order = 4,
-						guiInline = true,
-						get = function(info) return selectedClass end,
-						set = function(info, value) selectedClass = value; UpdateAuthor(); end,
-						values = function()
-							local class = {}
-							class[''] = NONE
-							class['1Filter'] = "General Filters"
-							for k, v in pairs(classes) do
-								class[k] = v
-							end
-
-							return class
-						end,
-					},
-					spacer = {
-						order = 6,
-						type = 'description',
-						name = '',
-					},
-				},
-			}
-			if not selectedClass or selectedClass == '' then
-				E.Options.args.sle.args.importing.args.optionGroup.args.class = nil
-				return
-			end
-			E.Options.args.sle.args.importing.args.optionGroup.args.class = {
-				type = 'execute',
-				order = 5,
-				name = L["Import"],
-				func = function(info, value) buffWatch(selectedClass) end,
-			}
-			if selectedClass == '1Filter' then
-				E.Options.args.sle.args.importing.args.optionGroup.args.filterInfo = {
-					type = "description",
-					order = 7,
-					name = L["This will import non class specific filters from this author."],
-				}
-			elseif selectedClass == 'AllClasses' then
-				E.Options.args.sle.args.importing.args.optionGroup.args.filterInfo = {
-					type = "description",
-					order = 7,
-					name = L["This will import All Class specific filters from this author."],
-				}
-			end
-		elseif selectedOption == 'Addons' then
-			selectedClass = nil
-			E.Options.args.sle.args.importing.args.optionGroup = {
-				type = "group",
-				name = selectedOption,
-				order = 15,
-				guiInline = true,
-				args = {
-					AllAddons = {
-						type = 'execute',
-						order = 2,
-						name = L['Import All'],
-						func = function(info, value) AI:LoadAddons("Affinitii, All"); ReloadUI(); end,
-					},
-					--BigWigs = {
-					--	type = 'execute',
-					--	order = 3,
-					--	name = "Big Wigs",
-					--	func = function(info, value) AI:LoadAddons("Affinitii, BigWigs"); ReloadUI(); end,
-					--},
-					--Hermes = {
-					--	type = 'execute',
-					--	order = 4,
-					--	name = "Hermes",
-					--	func = function(info, value) AI:LoadAddons("Affinitii, Hermes"); ReloadUI(); end,
-					--},
-					--xCT = {
-					--	type = 'execute',
-					--	order = 5,
-					--	name = "xCT+",
-					--	func = function(info, value) AI:LoadAddons("Affinitii, xCT+,"); ReloadUI(); end,
-					--},
-				},
-			}
-		end
-	elseif selectedAuthor == 'Repooc' then
-		if not selectedAuthor then
-			E.Options.args.sle.args.importing.args.authorGroup = nil
-			E.Options.args.sle.args.importing.args.optionGroup = nil
-			return
-		end
-
-		E.Options.args.sle.args.importing.args.authorGroup = {
-			type = 'group',
-			name = selectedAuthor,
-			guiInline = true,
-			order = 10,
-			args = {
-				importOptions = {
-					name = L["Import Options"],
-					type = 'select',
-					order = 1,
-					guiInline = true,
-					get = function(info) return selectedOption end,
-					set = function(info, value) selectedOption = value; UpdateAuthor(); end,
-					values = function()
-						local option = {}
-						option[''] = NONE
-						for k in pairs(options) do
-							option[k] = k
-						end
-
-						return option
-					end,
-				},
-			},
-		}
-		if not selectedOption or selectedOption == '' then
-			E.Options.args.sle.args.importing.args.optionGroup = nil
-			return
-		end
-
-		if selectedOption == 'Filters' then
-			E.Options.args.sle.args.importing.args.optionGroup = {
-				type = "group",
-				name = selectedOption,
-				order = 15,
-				guiInline = true,
-				args = {
-					description = {
-						order = 2,
-						type = "description",
-						name = L["Please be aware that importing any of the filters will require a reload of the UI for the settings to take effect.\nOnce you click a filter button, your screen will reload automatically."],
-					},
-					selectClass = {
-						name = L["Select Filter"],
-						type = 'select',
-						order = 4,
-						guiInline = true,
-						get = function(info) return selectedClass end,
-						set = function(info, value) selectedClass = value; UpdateAuthor(); end,
-						values = function()
-							local class = {}
-							class[''] = NONE
-							class['1Filter'] = "General Filters"
-							for k, v in pairs(classes) do
-								class[k] = v
-							end
-
-							return class
-						end,
-					},
-					spacer = {
-						order = 6,
-						type = 'description',
-						name = '',
-					},
-				},
-			}
-			if not selectedClass or selectedClass == '' then
-				E.Options.args.sle.args.importing.args.optionGroup.args.class = nil
-				return
-			end
-			E.Options.args.sle.args.importing.args.optionGroup.args.class = {
-				type = 'execute',
-				order = 5,
-				name = L["Import"],
-				func = function(info, value) buffWatch(selectedClass) end,
-			}
-			if selectedClass == '1Filter' then
-				E.Options.args.sle.args.importing.args.optionGroup.args.filterInfo = {
-					type = "description",
-					order = 7,
-					name = L["This will import non class specific filters from this author."],
-				}
-			elseif selectedClass == 'AllClasses' then
-				E.Options.args.sle.args.importing.args.optionGroup.args.filterInfo = {
-					type = "description",
-					order = 7,
-					name = L["This will import All Class specific filters from this author."],
-				}
-			end
-		elseif selectedOption == 'Addons' then
-			E.Options.args.sle.args.importing.args.optionGroup = {
-				type = "group",
-				name = selectedOption,
-				order = 15,
-				guiInline = true,
-				args = {
-					repoocinfo = {
-						type = "description",
-						order = 2,
-						name = selectedAuthor..' '..L["has no data for this selected option."],
-					},
-				--[[
-					BigWigs = {
-						type = 'execute',
-						order = 2,
-						name = "Big Wigs",
-						func = function(info, value) AI:LoadAddons("Affinitii, BigWigs"); end,
-					},
-					Hermes = {
-						type = 'execute',
-						order = 2,
-						name = "Hermes",
-						func = function(info, value) AI:LoadAddons("Affinitii, Hermes"); end,
-					},
-					xCT = {
-						type = 'execute',
-						order = 2,
-						name = "xCT+",
-						func = function(info, value) AI:LoadAddons("Affinitii, xCT+"); end,
-					},]]
-				},
-			}
-		end
-	elseif selectedAuthor == 'Darth' then
-		if not selectedAuthor then
-			E.Options.args.sle.args.importing.args.authorGroup = nil
-			E.Options.args.sle.args.importing.args.optionGroup = nil
-			return
-		end
-
-		E.Options.args.sle.args.importing.args.authorGroup = {
-			type = 'group',
-			name = selectedAuthor,
-			guiInline = true,
-			order = 10,
-			args = {
-				importOptions = {
-					name = L["Import Options"],
-					type = 'select',
-					order = 1,
-					guiInline = true,
-					get = function(info) return selectedOption end,
-					set = function(info, value) selectedOption = value; UpdateAuthor(); end,
-					values = function()
-						local option = {}
-						option[''] = NONE
-						for k in pairs(options) do
-							option[k] = k
-						end
-
-						return option
-					end,
-				},
-			},
-		}
-		if not selectedOption or selectedOption == '' then
-			E.Options.args.sle.args.importing.args.optionGroup = nil
-			return
-		end
-
-		if selectedOption == 'Filters' then
-			E.Options.args.sle.args.importing.args.optionGroup = {
-				type = "group",
-				name = selectedOption,
-				order = 15,
-				guiInline = true,
-				args = {
-					description = {
-						order = 2,
-						type = "description",
-						name = L["Please be aware that importing any of the filters will require a reload of the UI for the settings to take effect.\nOnce you click a filter button, your screen will reload automatically."],
-					},
-					selectClass = {
-						name = L["Select Filter"],
-						type = 'select',
-						order = 4,
-						guiInline = true,
-						get = function(info) return selectedClass end,
-						set = function(info, value) selectedClass = value; UpdateAuthor(); end,
-						values = function()
-							local class = {}
-							class[''] = NONE
-							class['1Filter'] = "General Filters"
-							for k, v in pairs(classes) do
-								class[k] = v
-							end
-
-							return class
-						end,
-					},
-					spacer = {
-						order = 6,
-						type = 'description',
-						name = '',
-					},
-				},
-			}
-			if not selectedClass or selectedClass == '' then
-				E.Options.args.sle.args.importing.args.optionGroup.args.class = nil
-				return
-			end
-			E.Options.args.sle.args.importing.args.optionGroup.args.class = {
-				type = 'execute',
-				order = 5,
-				name = L["Import"],
-				func = function(info, value) buffWatch(selectedClass) end,
-			}
-			if selectedClass == '1Filter' then
-				E.Options.args.sle.args.importing.args.optionGroup.args.filterInfo = {
-					type = "description",
-					order = 7,
-					name = L["This will import non class specific filters from this author."],
-				}
-			elseif selectedClass == 'AllClasses' then
-				E.Options.args.sle.args.importing.args.optionGroup.args.filterInfo = {
-					type = "description",
-					order = 7,
-					name = L["This will import All Class specific filters from this author."],
-				}
-			end
-		elseif selectedOption == 'Addons' then
-			E.Options.args.sle.args.importing.args.optionGroup = {
-				type = "group",
-				name = selectedOption,
-				order = 15,
-				guiInline = true,
-				args = {
-					xCT = {
-						type = 'execute',
-						order = 2,
-						name = "xCT+",
-						func = function(info, value) AI:LoadAddons("Darth, All"); end,
-					},
-				},
-			}
-		end
-	else
-		if not selectedAuthor or selectedAuthor == "" then
-			E.Options.args.sle.args.importing.args.authorGroup = nil
-			E.Options.args.sle.args.importing.args.optionGroup = nil
-			return
-		end
-	end
-end
-
-local function configTable()
-	E.Options.args.sle.args.importing = {
-		type = 'group',
-		name = L['Import Options'],
-		order = 300,
-		args = {
-			header = {
-				order = 1,
-				type = "header",
-				name = L["Author Specific Imports"],
-			},
-			description = {
-				order = 2,
-				type = "description",
-				name = L["SLE_IMPORTS"],
-			},
-			selectAuthor = {
-				order = 3,
-				type = 'select',
-				name = L['Select Author'],
-				get = function(info) if selectedAuthor == nil then return 'None' else return selectedAuthor end end,
-				set = function(info, value) if value == '' then selectedAuthor = nil; selectedClass = nil; selectedOption = nil; else selectedAuthor = value; selectedOption = nil; selectedClass = nil; end; UpdateAuthor() end,
-				values = function()
-					local authors = {}
-					authors[''] = NONE
-
-					authors['Affinitii'] = 'Affinitii'
-					authors['Repooc'] = 'Repooc'
-					authors['Darth'] = 'Darth'
-					return authors
-				end,
-			},
-		},
-	}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/install/BigWigs.lua b/ElvUI_SLE/modules/install/BigWigs.lua
deleted file mode 100755
index bdf7b67..0000000
--- a/ElvUI_SLE/modules/install/BigWigs.lua
+++ /dev/null
@@ -1,35 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local AI = E:GetModule('AddonInstaller')
-
-local ace3   = true               -- whether or not this database is a Ace3 profile
-local name   = 'BigWigs'          -- the name of the addon
-local dbname = 'BigWigs3DB'       -- name of the addon database
-
-local function OnDemand(profile)  -- function that creates the "load on demand" database
-	local database
-	if profile == "Affinitii" then
-		database = {
-			["showBlizzardWarnings"] = true,
-			["showBossmodChat"] = true,
-			["seenmovies"] = {
-				[73] = true,
-				[74] = true,
-				[75] = true,
-				[76] = true,
-			},
-		}
-	end
-
-	if profile == "Repooc" then
-		-- No Settings
-	end
-
-	if profile == "Darth" then
-		-- No Settings
-	end
-
-	return database
-end
-
--- register the profile with the engine
-AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/install/BigWigsFights.lua b/ElvUI_SLE/modules/install/BigWigsFights.lua
deleted file mode 100755
index a0bb3f7..0000000
--- a/ElvUI_SLE/modules/install/BigWigsFights.lua
+++ /dev/null
@@ -1,91 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local AI = E:GetModule('AddonInstaller')
-
-local ace3   = false              -- whether or not this database is a Ace3 profile
-local name   = 'BigWigs'          -- the name of the addon
-local dbname = 'BigWigs3DB'       -- name of the addon database
-
-local function OnDemand(profile)  -- function that creates the "load on demand" database
-	local database
-	if profile == "Affinitii" then
-		database = {
-			["namespaces"] = {
-				["BigWigs_Bosses_Madness of Deathwing"] = {
-					["profiles"] = {
-						["Shadow and Light (Affinitii)"] = {
-							["Elementium Bolt"] = 643,
-						},
-					},
-				},
-				["BigWigs_Plugins_Proximity"] = {
-					["profiles"] = {
-						["Shadow and Light (Affinitii)"] = {
-							["fontSize"] = 20.00000079528718,
-							["posy"] = 265.5998002156482,
-							["lock"] = true,
-							["posx"] = 244.6221205041632,
-							["sound"] = false,
-							["font"] = "ElvUI Font",
-						},
-					},
-				},
-				["BigWigs_Plugins_Sounds"] = {
-					["profiles"] = {
-						["Shadow and Light (Affinitii)"] = {
-							["Long"] = {
-							},
-							["Info"] = {
-							},
-							["Alarm"] = {
-							},
-							["Alert"] = {
-							},
-						},
-					},
-				},
-				["BigWigs_Plugins_Messages"] = {
-					["profiles"] = {
-						["Shadow and Light (Affinitii)"] = {
-							["fontSize"] = 20.00000079528718,
-							["monochrome"] = false,
-							["font"] = "ElvUI Font",
-							["BWEmphasizeMessageAnchor_y"] = 465.0667085654549,
-							["BWMessageAnchor_y"] = 440.8888495721501,
-							["BWEmphasizeMessageAnchor_x"] = 610.8445805698311,
-							["BWMessageAnchor_x"] = 610.8445307717618,
-						},
-					},
-				},
-				["BigWigs_Plugins_Bars"] = {
-					["profiles"] = {
-						["Shadow and Light (Affinitii)"] = {
-							["BigWigsEmphasizeAnchor_y"] = 303.2888646270365,
-							["BigWigsAnchor_y"] = 116.8001243424387,
-							["emphasizeGrowup"] = false,
-							["BigWigsAnchor_x"] = 19.73342363118923,
-							["fill"] = false,
-							["BigWigsAnchor_width"] = 381.8331333576473,
-							["BigWigsEmphasizeAnchor_width"] = 216.1665623191371,
-							["BigWigsEmphasizeAnchor_x"] = 272.8889300172694,
-							["font"] = "ElvUI Font",
-							["emphasizeScale"] = 1,
-						},
-					},
-				},
-			},
-		}
-	end
-
-	if profile == "Repooc" then
-		-- No Settings
-	end
-
-	if profile == "Darth" then
-		-- No Settings
-	end
-
-	return database
-end
-
--- register the profile with the engine
-AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/install/BigWigsIcon.lua b/ElvUI_SLE/modules/install/BigWigsIcon.lua
deleted file mode 100755
index be3a2e8..0000000
--- a/ElvUI_SLE/modules/install/BigWigsIcon.lua
+++ /dev/null
@@ -1,29 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local AI = E:GetModule('AddonInstaller')
-
-local ace3   = false              -- whether or not this database is a Ace3 profile
-local name   = 'BigWigs'          -- the name of the addon
-local dbname = 'BigWigs3IconDB'   -- name of the addon database
-
-local function OnDemand(profile)  -- function that creates the "load on demand" database
-	local database
-	if profile == "Affinitii" then
-		database = {
-			["minimapPos"] = 158.126507574158,
-			["hide"] = true,
-		}
-	end
-
-	if profile == "Repooc" then
-		-- No Settings
-	end
-
-	if profile == "Darth" then
-		-- No Settings
-	end
-
-	return database
-end
-
--- register the profile with the engine
-AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/install/Clique.lua b/ElvUI_SLE/modules/install/Clique.lua
deleted file mode 100755
index 652e78f..0000000
--- a/ElvUI_SLE/modules/install/Clique.lua
+++ /dev/null
@@ -1,27 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local AI = E:GetModule('AddonInstaller')
-
-local ace3   = false              -- whether or not this database is a Ace3 profile
-local name   = 'Clique'          -- the name of the addon
-local dbname = 'CliqueDB3'       -- name of the addon database
-
-local function OnDemand(profile)  -- function that creates the "load on demand" database
-	local database
-	if profile == "Affinitii" then
-		-- No Settings
-	end
-
-	if profile == "Repooc" then
-		--database = {
-		--}
-	end
-
-	if profile == "Darth" then
-		-- No Settings
-	end
-
-	return database
-end
-
--- register the profile with the engine
-AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/install/Hermes.lua b/ElvUI_SLE/modules/install/Hermes.lua
deleted file mode 100755
index d1c3658..0000000
--- a/ElvUI_SLE/modules/install/Hermes.lua
+++ /dev/null
@@ -1,1046 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local AI = E:GetModule('AddonInstaller')
-
-local ace3   = true               -- whether or not this database is a Ace3 profile
-local name   = 'Hermes'           -- the name of the addon
-local dbname = 'HermesDB2'        -- name of the addon database
-
-local function OnDemand(profile)  -- function that creates the "load on demand" database
-	local database
-	if profile == "Affinitii" then
-		database = {
-			["configMode"] = false,
-			["pluginState"] = {
-				["UI"] = true,
-			},
-			["spells"] = {
-				{
-					["enabled"] = false,
-					["name"] = "Ancestral Guidance",
-					["id"] = 108281,
-					["class"] = "SHAMAN",
-					["icon"] = "Interface\\Icons\\ability_shaman_ancestralguidance",
-				}, -- [1]
-				{
-					["enabled"] = false,
-					["name"] = "Anti-Magic Shell",
-					["id"] = 48707,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_AntiMagicShell",
-				}, -- [2]
-				{
-					["enabled"] = false,
-					["name"] = "Anti-Magic Zone",
-					["id"] = 51052,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_DeathKnight_AntiMagicZone",
-				}, -- [3]
-				{
-					["enabled"] = false,
-					["name"] = "Ardent Defender",
-					["id"] = 31850,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_ArdentDefender",
-				}, -- [4]
-				{
-					["enabled"] = false,
-					["name"] = "Army of the Dead",
-					["id"] = 42650,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_DeathKnight_ArmyOfTheDead",
-				}, -- [5]
-				{
-					["enabled"] = false,
-					["name"] = "Barkskin",
-					["id"] = 22812,
-					["class"] = "DRUID",
-					["icon"] = "Interface\\Icons\\Spell_Nature_StoneClawTotem",
-				}, -- [6]
-				{
-					["enabled"] = false,
-					["name"] = "Blind",
-					["id"] = 2094,
-					["class"] = "ROGUE",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_MindSteal",
-				}, -- [7]
-				{
-					["enabled"] = false,
-					["name"] = "Bloodlust",
-					["id"] = 2825,
-					["class"] = "SHAMAN",
-					["icon"] = "Interface\\Icons\\Spell_Nature_BloodLust",
-				}, -- [8]
-				{
-					["enabled"] = false,
-					["name"] = "Bone Shield",
-					["id"] = 49222,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "INTERFACE\\ICONS\\ability_deathknight_boneshield",
-				}, -- [9]
-				{
-					["enabled"] = false,
-					["name"] = "Cenarion Ward",
-					["id"] = 102351,
-					["class"] = "DRUID",
-					["icon"] = "Interface\\Icons\\Ability_Druid_NaturalPerfection",
-				}, -- [10]
-				{
-					["enabled"] = false,
-					["name"] = "Cloak of Shadows",
-					["id"] = 31224,
-					["class"] = "ROGUE",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_NetherCloak",
-				}, -- [11]
-				{
-					["enabled"] = false,
-					["name"] = "Counterspell",
-					["id"] = 2139,
-					["class"] = "MAGE",
-					["icon"] = "Interface\\Icons\\Spell_Frost_IceShock",
-				}, -- [12]
-				{
-					["enabled"] = false,
-					["name"] = "Create Soulwell",
-					["id"] = 29893,
-					["class"] = "WARLOCK",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_Shadesofdarkness",
-				}, -- [13]
-				{
-					["enabled"] = false,
-					["name"] = "Dancing Rune Weapon",
-					["id"] = 49028,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\INV_Sword_07",
-				}, -- [14]
-				{
-					["enabled"] = false,
-					["name"] = "Death Grip",
-					["id"] = 49576,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_DeathKnight_Strangulate",
-				}, -- [15]
-				{
-					["enabled"] = false,
-					["name"] = "Death Pact",
-					["id"] = 48743,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_DeathPact",
-				}, -- [16]
-				{
-					["enabled"] = false,
-					["name"] = "Demoralizing Banner",
-					["id"] = 114203,
-					["class"] = "WARRIOR",
-					["icon"] = "Interface\\Icons\\demoralizing_banner",
-				}, -- [17]
-				{
-					["enabled"] = true,
-					["name"] = "Devotion Aura",
-					["id"] = 31821,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_AuraMastery",
-				}, -- [18]
-				{
-					["enabled"] = false,
-					["name"] = "Disrupting Shout",
-					["id"] = 102060,
-					["class"] = "WARRIOR",
-					["icon"] = "Interface\\Icons\\warrior_disruptingshout",
-				}, -- [19]
-				{
-					["enabled"] = true,
-					["name"] = "Divine Hymn",
-					["id"] = 64843,
-					["class"] = "PRIEST",
-					["icon"] = "Interface\\Icons\\Spell_Holy_DivineHymn",
-				}, -- [20]
-				{
-					["enabled"] = false,
-					["name"] = "Divine Protection",
-					["id"] = 498,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\spell_holy_divineprotection",
-				}, -- [21]
-				{
-					["enabled"] = false,
-					["name"] = "Divine Shield",
-					["id"] = 642,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\spell_holy_divineshield",
-				}, -- [22]
-				{
-					["enabled"] = false,
-					["name"] = "Every Man for Himself",
-					["id"] = 59752,
-					["class"] = "ANY",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_Charm",
-				}, -- [23]
-				{
-					["enabled"] = false,
-					["name"] = "Fist of Justice",
-					["id"] = 105593,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_FistOfJustice",
-				}, -- [24]
-				{
-					["enabled"] = false,
-					["name"] = "Frenzied Regeneration",
-					["id"] = 22842,
-					["class"] = "DRUID",
-					["icon"] = "Interface\\Icons\\Ability_BullRush",
-				}, -- [25]
-				{
-					["enabled"] = false,
-					["name"] = "Guardian Spirit",
-					["id"] = 47788,
-					["class"] = "PRIEST",
-					["icon"] = "Interface\\Icons\\Spell_Holy_GuardianSpirit",
-				}, -- [26]
-				{
-					["enabled"] = false,
-					["name"] = "Guardian of Ancient Kings",
-					["id"] = 86659,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_Heroism",
-				}, -- [27]
-				{
-					["enabled"] = false,
-					["name"] = "Hammer of Justice",
-					["id"] = 853,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfMight",
-				}, -- [28]
-				{
-					["enabled"] = false,
-					["name"] = "Hand of Freedom",
-					["id"] = 1044,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfValor",
-				}, -- [29]
-				{
-					["enabled"] = false,
-					["name"] = "Hand of Protection",
-					["id"] = 1022,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfProtection",
-				}, -- [30]
-				{
-					["enabled"] = false,
-					["name"] = "Hand of Purity",
-					["id"] = 114039,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfWisdom",
-				}, -- [31]
-				{
-					["enabled"] = false,
-					["name"] = "Hand of Sacrifice",
-					["id"] = 6940,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfSacrifice",
-				}, -- [32]
-				{
-					["enabled"] = false,
-					["name"] = "Hand of Salvation",
-					["id"] = 1038,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_SealOfSalvation",
-				}, -- [33]
-				{
-					["enabled"] = false,
-					["name"] = "Healing Stream Totem",
-					["id"] = 5394,
-					["class"] = "SHAMAN",
-					["icon"] = "Interface\\Icons\\INV_Spear_04",
-				}, -- [34]
-				{
-					["enabled"] = false,
-					["name"] = "Healing Tide Totem",
-					["id"] = 108280,
-					["class"] = "SHAMAN",
-					["icon"] = "Interface\\Icons\\ability_shaman_healingtide",
-				}, -- [35]
-				{
-					["enabled"] = true,
-					["name"] = "Hymn of Hope",
-					["id"] = 64901,
-					["class"] = "PRIEST",
-					["icon"] = "Interface\\Icons\\Spell_Holy_SymbolOfHope",
-				}, -- [36]
-				{
-					["enabled"] = false,
-					["name"] = "Ice Block",
-					["id"] = 45438,
-					["class"] = "MAGE",
-					["icon"] = "Interface\\Icons\\Spell_Frost_Frost",
-				}, -- [37]
-				{
-					["enabled"] = false,
-					["name"] = "Icebound Fortitude",
-					["id"] = 48792,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_DeathKnight_IceBoundFortitude",
-				}, -- [38]
-				{
-					["enabled"] = false,
-					["name"] = "Incarnation: Tree of Life",
-					["id"] = 33891,
-					["class"] = "DRUID",
-					["icon"] = "Interface\\Icons\\Ability_Druid_ImprovedTreeForm",
-				}, -- [39]
-				{
-					["enabled"] = false,
-					["name"] = "Innervate",
-					["id"] = 29166,
-					["class"] = "DRUID",
-					["icon"] = "Interface\\Icons\\Spell_Nature_Lightning",
-				}, -- [40]
-				{
-					["enabled"] = false,
-					["name"] = "Ironbark",
-					["id"] = 102342,
-					["class"] = "DRUID",
-					["icon"] = "Interface\\Icons\\spell_druid_ironbark",
-				}, -- [41]
-				{
-					["enabled"] = false,
-					["name"] = "Kick",
-					["id"] = 1766,
-					["class"] = "ROGUE",
-					["icon"] = "Interface\\Icons\\Ability_Kick",
-				}, -- [42]
-				{
-					["enabled"] = false,
-					["name"] = "Last Stand",
-					["id"] = 12975,
-					["class"] = "WARRIOR",
-					["icon"] = "Interface\\Icons\\Spell_Holy_AshesToAshes",
-				}, -- [43]
-				{
-					["enabled"] = false,
-					["name"] = "Lay on Hands",
-					["id"] = 633,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_LayOnHands",
-				}, -- [44]
-				{
-					["enabled"] = false,
-					["name"] = "Leap of Faith",
-					["id"] = 73325,
-					["class"] = "PRIEST",
-					["icon"] = "INTERFACE\\ICONS\\priest_spell_leapoffaith_a",
-				}, -- [45]
-				{
-					["enabled"] = false,
-					["name"] = "Lichborne",
-					["id"] = 49039,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_RaiseDead",
-				}, -- [46]
-				{
-					["enabled"] = false,
-					["name"] = "Life Cocoon",
-					["id"] = 116849,
-					["class"] = "MONK",
-					["icon"] = "Interface\\Icons\\ability_monk_chicocoon",
-				}, -- [47]
-				{
-					["enabled"] = true,
-					["name"] = "Mana Tide Totem",
-					["id"] = 16190,
-					["class"] = "SHAMAN",
-					["icon"] = "Interface\\Icons\\Spell_Frost_SummonWaterElemental",
-				}, -- [48]
-				{
-					["enabled"] = false,
-					["name"] = "Mass Spell Reflection",
-					["id"] = 114028,
-					["class"] = "WARRIOR",
-					["icon"] = "Interface\\Icons\\Ability_Warrior_ShieldBreak",
-				}, -- [49]
-				{
-					["enabled"] = false,
-					["name"] = "Mighty Bash",
-					["id"] = 5211,
-					["class"] = "DRUID",
-					["icon"] = "Interface\\Icons\\Ability_Druid_Bash",
-				}, -- [50]
-				{
-					["enabled"] = false,
-					["name"] = "Mind Freeze",
-					["id"] = 47528,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_DeathKnight_MindFreeze",
-				}, -- [51]
-				{
-					["enabled"] = false,
-					["name"] = "Misdirection",
-					["id"] = 34477,
-					["class"] = "HUNTER",
-					["icon"] = "Interface\\Icons\\Ability_Hunter_Misdirection",
-				}, -- [52]
-				{
-					["enabled"] = false,
-					["name"] = "Nature's Vigil",
-					["id"] = 124974,
-					["class"] = "DRUID",
-					["icon"] = "Interface\\Icons\\Achievement_Zone_Feralas",
-				}, -- [53]
-				{
-					["enabled"] = false,
-					["name"] = "Pain Suppression",
-					["id"] = 33206,
-					["class"] = "PRIEST",
-					["icon"] = "Interface\\Icons\\Spell_Holy_PainSupression",
-				}, -- [54]
-				{
-					["enabled"] = true,
-					["name"] = "Power Word: Barrier",
-					["id"] = 62618,
-					["class"] = "PRIEST",
-					["icon"] = "Interface\\Icons\\spell_holy_powerwordbarrier",
-				}, -- [55]
-				{
-					["enabled"] = false,
-					["name"] = "Pummel",
-					["id"] = 6552,
-					["class"] = "WARRIOR",
-					["icon"] = "Interface\\Icons\\INV_Gauntlets_04",
-				}, -- [56]
-				{
-					["enabled"] = true,
-					["name"] = "Raise Ally",
-					["id"] = 61999,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_DeadofNight",
-				}, -- [57]
-				{
-					["enabled"] = false,
-					["name"] = "Raise Dead",
-					["id"] = 46584,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_AnimateDead",
-				}, -- [58]
-				{
-					["enabled"] = true,
-					["name"] = "Rallying Cry",
-					["id"] = 97462,
-					["class"] = "WARRIOR",
-					["icon"] = "INTERFACE\\ICONS\\ability_toughness",
-				}, -- [59]
-				{
-					["enabled"] = true,
-					["name"] = "Rebirth",
-					["id"] = 20484,
-					["class"] = "DRUID",
-					["icon"] = "Interface\\Icons\\Spell_Nature_Reincarnation",
-				}, -- [60]
-				{
-					["enabled"] = false,
-					["name"] = "Rebuke",
-					["id"] = 96231,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\spell_holy_rebuke",
-				}, -- [61]
-				{
-					["enabled"] = false,
-					["name"] = "Reincarnation",
-					["id"] = 20608,
-					["class"] = "SHAMAN",
-					["icon"] = "INTERFACE\\ICONS\\spell_shaman_improvedreincarnation",
-				}, -- [62]
-				{
-					["enabled"] = false,
-					["name"] = "Repentance",
-					["id"] = 20066,
-					["class"] = "PALADIN",
-					["icon"] = "Interface\\Icons\\Spell_Holy_PrayerOfHealing",
-				}, -- [63]
-				{
-					["enabled"] = true,
-					["name"] = "Revival",
-					["id"] = 115310,
-					["class"] = "MONK",
-					["icon"] = "Interface\\Icons\\Spell_Shaman_BlessingOfEternals",
-				}, -- [64]
-				{
-					["enabled"] = false,
-					["name"] = "Ritual of Summoning",
-					["id"] = 698,
-					["class"] = "WARLOCK",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_Twilight",
-				}, -- [65]
-				{
-					["enabled"] = false,
-					["name"] = "Shattering Throw",
-					["id"] = 64382,
-					["class"] = "WARRIOR",
-					["icon"] = "Interface\\Icons\\Ability_Warrior_ShatteringThrow",
-				}, -- [66]
-				{
-					["enabled"] = false,
-					["name"] = "Shield Wall",
-					["id"] = 871,
-					["class"] = "WARRIOR",
-					["icon"] = "Interface\\Icons\\Ability_Warrior_ShieldWall",
-				}, -- [67]
-				{
-					["enabled"] = false,
-					["name"] = "Shroud of Concealment",
-					["id"] = 114018,
-					["class"] = "ROGUE",
-					["icon"] = "Interface\\Icons\\ability_rogue_shroudofconcealment",
-				}, -- [68]
-				{
-					["enabled"] = false,
-					["name"] = "Skull Banner",
-					["id"] = 114207,
-					["class"] = "WARRIOR",
-					["icon"] = "Interface\\Icons\\warrior_skullbanner",
-				}, -- [69]
-				{
-					["enabled"] = true,
-					["name"] = "Soulstone",
-					["id"] = 20707,
-					["class"] = "WARLOCK",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_SoulGem",
-				}, -- [70]
-				{
-					["enabled"] = true,
-					["name"] = "Spirit Link Totem",
-					["id"] = 98008,
-					["class"] = "SHAMAN",
-					["icon"] = "Interface\\Icons\\Spell_Shaman_SpiritLink",
-				}, -- [71]
-				{
-					["enabled"] = false,
-					["name"] = "Spirit Shell",
-					["id"] = 109964,
-					["class"] = "PRIEST",
-					["icon"] = "Interface\\Icons\\ability_shaman_astralshift",
-				}, -- [72]
-				{
-					["enabled"] = false,
-					["name"] = "Stoneform",
-					["id"] = 20594,
-					["class"] = "ANY",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_UnholyStrength",
-				}, -- [73]
-				{
-					["enabled"] = false,
-					["name"] = "Strangulate",
-					["id"] = 47476,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_SoulLeech_3",
-				}, -- [74]
-				{
-					["enabled"] = false,
-					["name"] = "Summon Water Elemental",
-					["id"] = 31687,
-					["class"] = "MAGE",
-					["icon"] = "Interface\\Icons\\Spell_Frost_SummonWaterElemental_2",
-				}, -- [75]
-				{
-					["enabled"] = false,
-					["name"] = "Survival Instincts",
-					["id"] = 61336,
-					["class"] = "DRUID",
-					["icon"] = "Interface\\Icons\\Ability_Druid_TigersRoar",
-				}, -- [76]
-				{
-					["enabled"] = false,
-					["name"] = "Time Warp",
-					["id"] = 80353,
-					["class"] = "MAGE",
-					["icon"] = "INTERFACE\\ICONS\\ability_mage_timewarp",
-				}, -- [77]
-				{
-					["enabled"] = true,
-					["name"] = "Tranquility",
-					["id"] = 113277,
-					["class"] = "PRIEST",
-					["icon"] = "Interface\\Icons\\Spell_Nature_Tranquility",
-				}, -- [78]
-				{
-					["enabled"] = true,
-					["name"] = "Tranquility",
-					["id"] = 740,
-					["class"] = "DRUID",
-					["icon"] = "Interface\\Icons\\Spell_Nature_Tranquility",
-				}, -- [79]
-				{
-					["enabled"] = false,
-					["name"] = "Tricks of the Trade",
-					["id"] = 57934,
-					["class"] = "ROGUE",
-					["icon"] = "Interface\\Icons\\Ability_Rogue_TricksOftheTrade",
-				}, -- [80]
-				{
-					["enabled"] = false,
-					["name"] = "Vampiric Blood",
-					["id"] = 55233,
-					["class"] = "DEATHKNIGHT",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_LifeDrain",
-				}, -- [81]
-				{
-					["enabled"] = false,
-					["name"] = "Vampiric Embrace",
-					["id"] = 15286,
-					["class"] = "PRIEST",
-					["icon"] = "Interface\\Icons\\Spell_Shadow_UnsummonBuilding",
-				}, -- [82]
-				{
-					["enabled"] = false,
-					["name"] = "Void Shift",
-					["id"] = 108968,
-					["class"] = "PRIEST",
-					["icon"] = "Interface\\Icons\\spell_priest_voidshift",
-				}, -- [83]
-				{
-					["enabled"] = false,
-					["name"] = "Void Tendrils",
-					["id"] = 108920,
-					["class"] = "PRIEST",
-					["icon"] = "Interface\\Icons\\spell_priest_voidtendrils",
-				}, -- [84]
-				{
-					["enabled"] = false,
-					["name"] = "Wind Shear",
-					["id"] = 57994,
-					["class"] = "SHAMAN",
-					["icon"] = "Interface\\Icons\\Spell_Nature_Cyclone",
-				}, -- [85]
-				{
-					["enabled"] = false,
-					["name"] = "Zen Meditation",
-					["id"] = 115176,
-					["class"] = "MONK",
-					["icon"] = "Interface\\Icons\\ability_monk_zenmeditation",
-				}, -- [86]
-			},
-			["items"] = {
-				{
-					["enabled"] = false,
-					["name"] = "Mirror of Broken Images",
-					["id"] = -62466,
-					["class"] = "ANY",
-					["icon"] = "Interface\\Icons\\INV_Misc_Platnumdisks",
-				}, -- [1]
-			},
-			["welcome"] = true,
-			["plugins"] = {
-				["Hermes-UI"] = {
-					["views"] = {
-						{
-							["module"] = "GridButtons",
-							["filterrange"] = false,
-							["filter10man"] = true,
-							["filterself"] = false,
-							["enabled"] = true,
-							["profiles"] = {
-								["GridBars"] = {
-									["barShowTime"] = true,
-									["npCCFont"] = true,
-									["barShowPlayerName"] = true,
-									["h"] = 838.6666870117188,
-									["hideNoAvailSender"] = false,
-									["barColorC"] = {
-										["a"] = 0.74,
-										["r"] = 0.55,
-										["g"] = 0.55,
-										["b"] = 0.55,
-									},
-									["locked"] = false,
-									["barFont"] = "Friz Quadrata TT",
-									["barBGColorU"] = {
-										["a"] = 0.16,
-										["r"] = 0,
-										["g"] = 0,
-										["b"] = 0,
-									},
-									["hideNoSender"] = true,
-									["barTexture"] = "Blizzard",
-									["osCooldownStyle"] = "empty",
-									["barColorU"] = {
-										["a"] = 0.23,
-										["r"] = 0,
-										["g"] = 0,
-										["b"] = 0,
-									},
-									["y"] = 1175.333374023438,
-									["x"] = 7.833518028259277,
-									["barPadding"] = 1,
-									["scale"] = 1,
-									["npTexture"] = "Blizzard",
-									["barCooldownDirection"] = "right",
-									["barThickFont"] = false,
-									["barBGCCU"] = false,
-									["barColorCFont"] = {
-										["a"] = 1,
-										["r"] = 1,
-										["g"] = 1,
-										["b"] = 1,
-									},
-									["barCCAFont"] = false,
-									["barTextRatio"] = 65,
-									["cellAnchor"] = "TOPLEFT",
-									["padding"] = 0,
-									["barW"] = 150,
-									["barIcon"] = "left",
-									["npShowLabel"] = true,
-									["barCCA"] = true,
-									["barIconMerged"] = "left",
-									["osFGColor"] = {
-										["a"] = 1,
-										["r"] = 0,
-										["g"] = 1,
-										["b"] = 0,
-									},
-									["barColorUFont"] = {
-										["a"] = 0.3,
-										["r"] = 1,
-										["g"] = 1,
-										["b"] = 1,
-									},
-									["barCooldownStyle"] = "empty",
-									["barBGColorC"] = {
-										["a"] = 0.16,
-										["r"] = 0,
-										["g"] = 0,
-										["b"] = 0,
-									},
-									["osCooldownDirection"] = "right",
-									["npThickFont"] = false,
-									["barColorA"] = {
-										["a"] = 1,
-										["r"] = 0.94,
-										["g"] = 0.94,
-										["b"] = 0.94,
-									},
-									["npFontColor"] = {
-										["a"] = 0.76,
-										["r"] = 0.92,
-										["g"] = 0.92,
-										["b"] = 0.92,
-									},
-									["barCCU"] = false,
-									["barCCC"] = true,
-									["npUseNameplate"] = true,
-									["barCCCFont"] = true,
-									["cellSide"] = false,
-									["npFont"] = "Friz Quadrata TT",
-									["w"] = 158.6666564941406,
-									["barTextSide"] = "left",
-									["barCCUFont"] = false,
-									["npOutlineFont"] = true,
-									["osEnabled"] = false,
-									["cellDir"] = false,
-									["barShowSpellName"] = false,
-									["barFontSize"] = 12,
-									["barH"] = 14,
-									["enableTooltip"] = true,
-									["barGap"] = 2,
-									["npCCBar"] = false,
-									["npW"] = 120,
-									["merged"] = false,
-									["npUseIcon"] = true,
-									["barColorAFont"] = {
-										["a"] = 1,
-										["r"] = 0.94,
-										["g"] = 0.94,
-										["b"] = 0.94,
-									},
-									["barBGCCC"] = true,
-									["npIcon"] = "right",
-									["cellMax"] = 3,
-									["npFontSize"] = 12,
-									["npTexColor"] = {
-										["a"] = 0.5,
-										["r"] = 0,
-										["g"] = 0,
-										["b"] = 0,
-									},
-									["npH"] = 15,
-									["cellBGColor"] = {
-										["a"] = 0,
-										["r"] = 0,
-										["g"] = 0,
-										["b"] = 0,
-									},
-									["npTextSide"] = "right",
-									["barOutlineFont"] = true,
-								},
-								["GridButtons"] = {
-								["scale"] = 1,
-								["hideNoSender"] = true,
-								["merged"] = false,
-								["coloredBorders"] = true,
-								["w"] = 78.49994614504892,
-								["mergedicon"] = "Interface\\ICONS\\INV_Misc_QuestionMark",
-								["y"] = 1040.833318755454,
-								["h"] = 621.6666788167995,
-								["locked"] = true,
-								["cellAnchor"] = "TOPLEFT",
-								["colorNS"] = {
-									["a"] = 0.75,
-									["r"] = 0.5,
-									["g"] = 0.5,
-									["b"] = 0.5,
-								},
-								["padding"] = 5,
-								["x"] = 3.333442160227062,
-								["colorU"] = {
-									["a"] = 1,
-									["r"] = 0.5,
-									["g"] = 0.5,
-									["b"] = 0.5,
-								},
-							},
-							["CooldownBars"] = {
-								["barheight"] = 14,
-								["scale"] = 1,
-								["barTextSide"] = "left",
-								["fontsize"] = 12,
-								["locked"] = false,
-								["barCooldownDirection"] = "right",
-								["hideSelf"] = false,
-								["textratio"] = 60,
-								["osFGColor"] = {
-									["a"] = 1,
-									["r"] = 0,
-									["g"] = 1,
-									["b"] = 0,
-								},
-								["barwidth"] = 180,
-								["bartexture"] = "Blizzard",
-								["growup"] = false,
-								["osCooldownDirection"] = "right",
-								["alpha"] = 1,
-								["barIcon"] = "left",
-								["y"] = 1022.333312988281,
-								["font"] = "Friz Quadrata TT",
-								["barCooldownStyle"] = "full",
-								["osEnabled"] = false,
-								["osCooldownStyle"] = "full",
-								["barShowSpellName"] = false,
-								["x"] = 71.66675567626953,
-								["barGap"] = 1,
-							},
-							["Bars"] = {
-								["barIcon"] = "none",
-								["npCCFont"] = true,
-								["barW"] = 150,
-								["barTextSide"] = "left",
-								["barShowPlayerName"] = true,
-								["barBGColorC"] = {
-									["a"] = 0.16,
-									["r"] = 0,
-									["g"] = 0,
-									["b"] = 0,
-								},
-								["barFontSize"] = 12,
-								["locked"] = false,
-								["barCCCFont"] = true,
-								["barColorC"] = {
-									["a"] = 0.74,
-									["r"] = 0.55,
-									["g"] = 0.55,
-									["b"] = 0.55,
-								},
-								["barCCA"] = true,
-								["barTextRatio"] = 65,
-								["barLocation"] = "BOTTOM",
-								["barCCC"] = true,
-								["barColorAFont"] = {
-									["a"] = 1,
-									["r"] = 0.94,
-									["g"] = 0.94,
-									["b"] = 0.94,
-								},
-								["osFGColor"] = {
-									["a"] = 1,
-									["r"] = 0,
-									["g"] = 1,
-									["b"] = 0,
-								},
-								["barBGColorU"] = {
-									["a"] = 0.16,
-									["r"] = 0,
-									["g"] = 0,
-									["b"] = 0,
-								},
-								["hideNoSender"] = true,
-								["barColorCFont"] = {
-									["a"] = 1,
-									["r"] = 1,
-									["g"] = 1,
-									["b"] = 1,
-								},
-								["barColorUFont"] = {
-									["a"] = 0.3,
-									["r"] = 1,
-									["g"] = 1,
-									["b"] = 1,
-								},
-								["osCooldownStyle"] = "empty",
-								["barColorU"] = {
-									["a"] = 0.23,
-									["r"] = 0,
-									["g"] = 0,
-									["b"] = 0,
-								},
-								["y"] = 609,
-								["x"] = 1016.666687011719,
-								["barCooldownStyle"] = "empty",
-								["npShowLabel"] = true,
-								["scale"] = 1,
-								["barPadding"] = 10,
-								["npThickFont"] = false,
-								["npUseNameplate"] = true,
-								["npFontColor"] = {
-									["a"] = 0.76,
-									["r"] = 0.92,
-									["g"] = 0.92,
-									["b"] = 0.92,
-								},
-								["barCCU"] = false,
-								["npOutlineFont"] = true,
-								["barBGCCU"] = false,
-								["npFontSize"] = 12,
-								["barShowTime"] = true,
-								["npFont"] = "Friz Quadrata TT",
-								["osCooldownDirection"] = "right",
-								["npTextSide"] = "right",
-								["barCCUFont"] = false,
-								["barH"] = 14,
-								["barThickFont"] = false,
-								["npTexture"] = "Blizzard",
-								["barIconMerged"] = "left",
-								["barCooldownDirection"] = "right",
-								["npIcon"] = "right",
-								["barShowSpellName"] = false,
-								["barGap"] = 1,
-								["npCCBar"] = false,
-								["npH"] = 15,
-								["merged"] = false,
-								["npUseIcon"] = true,
-								["barColorA"] = {
-									["a"] = 1,
-									["r"] = 0.94,
-									["g"] = 0.94,
-									["b"] = 0.94,
-								},
-								["barBGCCC"] = true,
-								["barCCAFont"] = false,
-								["growUp"] = false,
-								["osEnabled"] = false,
-								["barFont"] = "Friz Quadrata TT",
-								["npW"] = 120,
-								["npTexColor"] = {
-									["a"] = 0.5,
-									["r"] = 0,
-									["g"] = 0,
-									["b"] = 0,
-								},
-								["barTexture"] = "Blizzard",
-								["barOutlineFont"] = true,
-							},
-						},
-						["includeAll"] = true,
-						["filterdead"] = true,
-						["name"] = "Default",
-						["filterconnection"] = true,
-						["filterplayertype"] = "disabled",
-						["playerfilters"] = {
-						},
-						["filter25man"] = true,
-						["abilities"] = {
-							{
-								["id"] = 61999,
-								["enabled"] = false,
-							}, -- [1]
-							{
-								["id"] = 46584,
-								["enabled"] = false,
-							}, -- [2]
-							{
-								["id"] = 20484,
-								["enabled"] = false,
-							}, -- [3]
-							{
-								["id"] = 740,
-								["enabled"] = false,
-							}, -- [4]
-							{
-								["id"] = 115310,
-								["enabled"] = false,
-							}, -- [5]
-							{
-								["id"] = 31821,
-								["enabled"] = false,
-							}, -- [6]
-							{
-								["id"] = 64843,
-								["enabled"] = false,
-							}, -- [7]
-							{
-								["id"] = 64901,
-								["enabled"] = false,
-							}, -- [8]
-							{
-								["id"] = 62618,
-								["enabled"] = false,
-							}, -- [9]
-							{
-								["id"] = 113277,
-								["enabled"] = false,
-							}, -- [10]
-							{
-								["id"] = 16190,
-								["enabled"] = false,
-							}, -- [11]
-							{
-								["id"] = 108280,
-								["enabled"] = false,
-							}, -- [12]
-							{
-								["id"] = 98008,
-								["enabled"] = false,
-							}, -- [13]
-							{
-								["id"] = 20707,
-								["enabled"] = false,
-							}, -- [14]
-							{
-								["id"] = 97462,
-								["enabled"] = false,
-							}, -- [15]
-							{
-								["id"] = 115176,
-								["enabled"] = false,
-							}, -- [16]
-							{
-								["id"] = 116849,
-								["enabled"] = false,
-							}, -- [17]
-						},
-					}, -- [1]
-				},
-			},
-		},
-		["enableparty"] = true,
-	}
-end
-
-	if profile == "Repooc" then
-		-- No Settings
-	end
-
-	if profile == "Darth" then
-		-- No Settings
-	end
-
-	return database
-end
-
--- register the profile with the engine
-AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/install/Skada.lua b/ElvUI_SLE/modules/install/Skada.lua
deleted file mode 100755
index c466245..0000000
--- a/ElvUI_SLE/modules/install/Skada.lua
+++ /dev/null
@@ -1,160 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local AI = E:GetModule('AddonInstaller')
-
-local ace3   = true               -- whether or not this database is a Ace3 profile
-local name   = 'Skada'             -- the name of the addon
-local dbname = 'SkadaDB'       -- name of the addon database
-
-local function OnDemand(profile)  -- function that creates the "load on demand" database
-	local database
-	if profile == "Affinitii" then
-		database = {
-			["windows"] = {
-				{
-					["barheight"] = 17,
-					["barslocked"] = true,
-					["background"] = {
-						["height"] = 133.6666717529297,
-						["color"] = {
-							["a"] = 0.2000000476837158,
-							["b"] = 0,
-						},
-					},
-					["hidden"] = true,
-					["y"] = 39.89817468303028,
-					["x"] = -7.334928625263729,
-					["title"] = {
-						["color"] = {
-							["a"] = 1,
-							["b"] = 0,
-							["g"] = 0,
-							["r"] = 0,
-						},
-						["font"] = "ElvUI Font",
-						["fontsize"] = 15,
-					},
-					["point"] = "BOTTOMRIGHT",
-					["barbgcolor"] = {
-						["a"] = 1,
-						["b"] = 0.3019607843137255,
-						["g"] = 0.3019607843137255,
-						["r"] = 0.3019607843137255,
-					},
-					["barcolor"] = {
-						["g"] = 0.3019607843137255,
-						["r"] = 0.3019607843137255,
-					},
-					["name"] = "HPS",
-					["spark"] = false,
-					["bartexture"] = "Polished Wood",
-					["barwidth"] = 199.0832316080729,
-					["barfontsize"] = 12,
-					["mode"] = "Damage",
-					["barfont"] = "ElvUI Font",
-				}, -- [1]
-				{
-					["barheight"] = 17,
-					["classicons"] = true,
-					["barslocked"] = true,
-					["clickthrough"] = false,
-					["wipemode"] = "",
-					["set"] = "current",
-					["hidden"] = true,
-					["y"] = 39.89824908834681,
-					["barfont"] = "ElvUI Font",
-					["name"] = "DPS",
-					["display"] = "bar",
-					["barfontflags"] = "",
-					["classcolortext"] = false,
-					["scale"] = 1,
-					["reversegrowth"] = false,
-					["barfontsize"] = 12,
-					["barorientation"] = 1,
-					["snapto"] = true,
-					["point"] = "BOTTOMRIGHT",
-					["x"] = -214.2783479639852,
-					["spark"] = false,
-					["bartexture"] = "Polished Wood",
-					["barwidth"] = 199.0832316080729,
-					["barspacing"] = 0,
-					["barbgcolor"] = {
-						["a"] = 1,
-						["b"] = 0.3019607843137255,
-						["g"] = 0.3019607843137255,
-						["r"] = 0.3019607843137255,
-					},
-					["returnaftercombat"] = false,
-					["barcolor"] = {
-						["a"] = 1,
-						["b"] = 0.8,
-						["g"] = 0.3019607843137255,
-						["r"] = 0.3019607843137255,
-					},
-					["mode"] = "Healing",
-					["enabletitle"] = true,
-					["classcolorbars"] = true,
-					["modeincombat"] = "",
-					["title"] = {
-						["borderthickness"] = 2,
-						["font"] = "ElvUI Font",
-						["fontsize"] = 15,
-						["fontflags"] = "",
-						["color"] = {
-							["a"] = 1,
-							["b"] = 0,
-							["g"] = 0,
-							["r"] = 0,
-						},
-						["bordertexture"] = "None",
-						["margin"] = 0,
-						["texture"] = "Aluminium",
-					},
-					["buttons"] = {
-						["segment"] = true,
-						["menu"] = true,
-						["mode"] = true,
-						["report"] = true,
-						["reset"] = true,
-					},
-					["background"] = {
-						["borderthickness"] = 0,
-						["height"] = 133.6666717529297,
-						["color"] = {
-							["a"] = 0.2000000476837158,
-							["b"] = 0,
-							["g"] = 0,
-							["r"] = 0,
-						},
-						["bordertexture"] = "None",
-						["margin"] = 0,
-						["texture"] = "Solid",
-					},
-				}, -- [2]
-			},
-			["report"] = {
-				["number"] = 12,
-				["chantype"] = "whisper",
-				["channel"] = "whisper",
-				["target"] = "Affinitii",
-				["mode"] = "Riggimon's Death",
-			},
-			["icon"] = {
-				["minimapPos"] = 160.4361246854299,
-				["hide"] = true,
-			},
-		}
-	end
-
-	if profile == "Repooc" then
-		-- No Settings
-	end
-
-	if profile == "Darth" then
-
-	end
-
-	return database
-end
-
--- register the profile with the engine
-AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/install/install.lua b/ElvUI_SLE/modules/install/install.lua
deleted file mode 100755
index 17831b3..0000000
--- a/ElvUI_SLE/modules/install/install.lua
+++ /dev/null
@@ -1,2980 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-local UF = E:GetModule('UnitFrames');
-local AI = E:GetModule('AddonInstaller');
-local SLE = E:GetModule('SLE');
-
-local CURRENT_PAGE = 0
-local MAX_PAGE
-
-local function MaxPages()
-	if IsAddOnLoaded("ElvUI_Hud") then
-		MAX_PAGE = 11
-	else
-		MAX_PAGE = 10
-	end
-end
-
-local function SetupChat()
-	InstallStepComplete.message = L["Chat Set"]
-	InstallStepComplete:Show()
-	FCF_ResetChatWindows()
-	FCF_SetLocked(ChatFrame1, 1)
-	FCF_DockFrame(ChatFrame2)
-	FCF_SetLocked(ChatFrame2, 1)
-
-	FCF_OpenNewWindow(LOOT)
-	FCF_UnDockFrame(ChatFrame3)
-	FCF_SetLocked(ChatFrame3, 1)
-	ChatFrame3:Show()
-
-	for i = 1, NUM_CHAT_WINDOWS do
-		local frame = _G[format("ChatFrame%s", i)]
-		local chatFrameId = frame:GetID()
-		local chatName = FCF_GetChatWindowInfo(chatFrameId)
-
-		-- move general bottom left
-		if i == 1 then
-			frame:ClearAllPoints()
-			frame:Point("BOTTOMLEFT", LeftChatToggleButton, "TOPLEFT", 1, 3)
-		elseif i == 3 then
-			frame:ClearAllPoints()
-			frame:Point("BOTTOMLEFT", RightChatDataPanel, "TOPLEFT", 1, 3)
-		end
-
-		FCF_SavePositionAndDimensions(frame)
-		FCF_StopDragging(frame)
-
-		-- set default Elvui font size
-		FCF_SetChatWindowFontSize(nil, frame, 12)
-
-		-- rename windows general because moved to chat #3
-		if i == 1 then
-			FCF_SetWindowName(frame, GENERAL)
-		elseif i == 2 then
-			FCF_SetWindowName(frame, GUILD_EVENT_LOG)
-		elseif i == 3 then
-			FCF_SetWindowName(frame, LOOT.." / "..TRADE)
-		end
-	end
-
-	ChatFrame_RemoveAllMessageGroups(ChatFrame1)
-	ChatFrame_AddMessageGroup(ChatFrame1, "SAY")
-	ChatFrame_AddMessageGroup(ChatFrame1, "EMOTE")
-	ChatFrame_AddMessageGroup(ChatFrame1, "YELL")
-	ChatFrame_AddMessageGroup(ChatFrame1, "GUILD")
-	ChatFrame_AddMessageGroup(ChatFrame1, "OFFICER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "GUILD_ACHIEVEMENT")
-	ChatFrame_AddMessageGroup(ChatFrame1, "WHISPER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_SAY")
-	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_EMOTE")
-	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_YELL")
-	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_BOSS_EMOTE")
-	ChatFrame_AddMessageGroup(ChatFrame1, "PARTY")
-	ChatFrame_AddMessageGroup(ChatFrame1, "PARTY_LEADER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "RAID")
-	ChatFrame_AddMessageGroup(ChatFrame1, "RAID_LEADER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "RAID_WARNING")
-	ChatFrame_AddMessageGroup(ChatFrame1, "INSTANCE_CHAT")
-	ChatFrame_AddMessageGroup(ChatFrame1, "INSTANCE_CHAT_LEADER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BATTLEGROUND")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BATTLEGROUND_LEADER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BG_HORDE")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BG_ALLIANCE")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BG_NEUTRAL")
-	ChatFrame_AddMessageGroup(ChatFrame1, "SYSTEM")
-	ChatFrame_AddMessageGroup(ChatFrame1, "ERRORS")
-	ChatFrame_AddMessageGroup(ChatFrame1, "AFK")
-	ChatFrame_AddMessageGroup(ChatFrame1, "DND")
-	ChatFrame_AddMessageGroup(ChatFrame1, "IGNORED")
-	ChatFrame_AddMessageGroup(ChatFrame1, "ACHIEVEMENT")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BN_WHISPER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BN_CONVERSATION")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BN_INLINE_TOAST_ALERT")
-
-
-	ChatFrame_RemoveAllMessageGroups(ChatFrame3)
-	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_FACTION_CHANGE")
-	ChatFrame_AddMessageGroup(ChatFrame3, "SKILL")
-	ChatFrame_AddMessageGroup(ChatFrame3, "LOOT")
-	ChatFrame_AddMessageGroup(ChatFrame3, "MONEY")
-	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_XP_GAIN")
-	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_HONOR_GAIN")
-	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_GUILD_XP_GAIN")
-	ChatFrame_AddChannel(ChatFrame1, GENERAL)
-	ChatFrame_RemoveChannel(ChatFrame1, L['Trade'])
-	ChatFrame_AddChannel(ChatFrame3, L['Trade'])
-
-
-	if E.myname == "Elvz" then
-		SetCVar("scriptErrors", 1)
-	end
-
-	-- enable classcolor automatically on login and on each character without doing /configure each time.
-	ToggleChatColorNamesByClassGroup(true, "SAY")
-	ToggleChatColorNamesByClassGroup(true, "EMOTE")
-	ToggleChatColorNamesByClassGroup(true, "YELL")
-	ToggleChatColorNamesByClassGroup(true, "GUILD")
-	ToggleChatColorNamesByClassGroup(true, "OFFICER")
-	ToggleChatColorNamesByClassGroup(true, "GUILD_ACHIEVEMENT")
-	ToggleChatColorNamesByClassGroup(true, "ACHIEVEMENT")
-	ToggleChatColorNamesByClassGroup(true, "WHISPER")
-	ToggleChatColorNamesByClassGroup(true, "PARTY")
-	ToggleChatColorNamesByClassGroup(true, "PARTY_LEADER")
-	ToggleChatColorNamesByClassGroup(true, "RAID")
-	ToggleChatColorNamesByClassGroup(true, "RAID_LEADER")
-	ToggleChatColorNamesByClassGroup(true, "RAID_WARNING")
-	ToggleChatColorNamesByClassGroup(true, "BATTLEGROUND")
-	ToggleChatColorNamesByClassGroup(true, "BATTLEGROUND_LEADER")
-	ToggleChatColorNamesByClassGroup(true, "INSTANCE_CHAT")
-	ToggleChatColorNamesByClassGroup(true, "INSTANCE_CHAT_LEADER")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL1")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL2")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL3")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL4")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL5")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL6")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL7")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL8")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL9")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL10")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL11")
-
-	--Adjust Chat Colors
-	--General
-	ChangeChatColor("CHANNEL1", 195/255, 230/255, 232/255)
-	--Trade
-	ChangeChatColor("CHANNEL2", 232/255, 158/255, 121/255)
-	--Local Defense
-	ChangeChatColor("CHANNEL3", 232/255, 228/255, 121/255)
-
-	if E.Chat then
-		E.Chat:PositionChat(true)
-		if E.db['RightChatPanelFaded'] then
-			RightChatToggleButton:Click()
-		end
-
-		if E.db['LeftChatPanelFaded'] then
-			LeftChatToggleButton:Click()
-		end
-	end
-end
-
-local function SetupCVars()
-	SetCVar("alternateResourceText", 1)
-	SetCVar("statusTextDisplay", "BOTH")
-	SetCVar("mapQuestDifficulty", 1)
-	SetCVar("ShowClassColorInNameplate", 1)
-	SetCVar("screenshotQuality", 10)
-	SetCVar("chatMouseScroll", 1)
-	SetCVar("chatStyle", "classic")
-	SetCVar("WholeChatWindowClickable", 0)
-	SetCVar("ConversationMode", "inline")
-	SetCVar("showTutorials", 0)
-	SetCVar("UberTooltips", 1)
-	SetCVar("threatWarning", 3)
-	SetCVar('alwaysShowActionBars', 1)
-	SetCVar('lockActionBars', 1)
-	SetCVar('SpamFilter', 0) --Blocks mmo-champion.com, dumb... ElvUI one is more effeciant anyways.
-	InterfaceOptionsActionBarsPanelPickupActionKeyDropDown:SetValue('SHIFT')
-	InterfaceOptionsActionBarsPanelPickupActionKeyDropDown:RefreshValue()
-
-	InstallStepComplete.message = L["CVars Set"]
-	InstallStepComplete:Show()
-end
-
-function E:GetColor(r, b, g, a)
-	return { r = r, b = b, g = g, a = a }
-end
-
-function E:SetupPixelPerfect(enabled, noMsg)
-	E.private.general.pixelPerfect = enabled;
-
-	if (E.PixelMode ~= enabled) then
-		E:StaticPopup_Show('PIXELPERFECT_CHANGED')
-	end
-
-	if not noMsg then
-		E.db.general.bottomPanel = enabled
-		E:GetModule('Layout'):BottomPanelVisibility()
-	end
-
-	if noMsg then
-		if enabled then
-			if not E.db.movers then E.db.movers = {}; end
-
-			E.db.actionbar.bar1.backdrop = false;
-			E.db.actionbar.bar3.backdrop = false;
-			E.db.actionbar.bar5.backdrop = false;
-			E.db.actionbar.bar1.buttonspacing = 2;
-			E.db.actionbar.bar2.buttonspacing = 2;
-			E.db.actionbar.bar3.buttonspacing = 2;
-			E.db.actionbar.bar4.buttonspacing = 2;
-			E.db.actionbar.bar5.buttonspacing = 2;
-			E.db.actionbar.barPet.buttonspacing = 2;
-			E.db.actionbar.stanceBar.buttonspacing = 2;
-		else
-			E.db.actionbar.bar1.backdrop = true;
-			E.db.actionbar.bar3.backdrop = true;
-			E.db.actionbar.bar5.backdrop = true;
-			E.db.actionbar.bar1.buttonspacing = 4;
-			E.db.actionbar.bar2.buttonspacing = 4;
-			E.db.actionbar.bar3.buttonspacing = 4;
-			E.db.actionbar.bar4.buttonspacing = 4;
-			E.db.actionbar.bar5.buttonspacing = 4;
-			E.db.actionbar.barPet.buttonspacing = 4;
-			E.db.actionbar.stanceBar.buttonspacing = 4;
-		end
-	end
-
-	if InstallStepComplete and not noMsg then
-		InstallStepComplete.message = L["Pixel Perfect Set"]
-		InstallStepComplete:Show()
-		E:UpdateAll(true)
-	end
-
-
-	E.PixelMode = enabled
-end
-
-function E:SetupTheme(theme, noDisplayMsg)
-	local classColor = E.myclass == 'PRIEST' and E.PriestColors or RAID_CLASS_COLORS[E.myclass]
-	E.private.theme = theme
-
-
-	--Set colors
-	if theme == "classic" then
-		E.db.general.bordercolor = E:GetColor(.31, .31, .31)
-		E.db.general.backdropcolor = E:GetColor(.1, .1, .1)
-		E.db.general.backdropfadecolor = E:GetColor(.06, .06, .06, .8)
-
-		E.db.unitframe.colors.healthclass = false
-		E.db.unitframe.colors.health = E:GetColor(.31, .31, .31)
-		E.db.unitframe.colors.auraBarBuff = E:GetColor(.31, .31, .31)
-		E.db.unitframe.colors.castColor = E:GetColor(.31, .31, .31)
-		E.db.unitframe.colors.castClassColor = false
-
-	elseif theme == "class" then
-		E.db.general.bordercolor = E:GetColor(.31, .31, .31)
-		E.db.general.backdropcolor = E:GetColor(.1, .1, .1)
-		E.db.general.backdropfadecolor = E:GetColor(.06, .06, .06, .8)
-		E.db.unitframe.colors.auraBarBuff = E:GetColor(classColor.r, classColor.b, classColor.g)
-		E.db.unitframe.colors.healthclass = true
-		E.db.unitframe.colors.castClassColor = true
-	else
-		E.db.general.bordercolor = E:GetColor(.1, .1, .1)
-		E.db.general.backdropcolor = E:GetColor(.1, .1, .1)
-		E.db.general.backdropfadecolor = E:GetColor(.054, .054, .054, .8)
-		E.db.unitframe.colors.auraBarBuff = E:GetColor(.1, .1, .1)
-		E.db.unitframe.colors.healthclass = false
-		E.db.unitframe.colors.health = E:GetColor(.1, .1, .1)
-		E.db.unitframe.colors.castColor = E:GetColor(.1, .1, .1)
-		E.db.unitframe.colors.castClassColor = false
-	end
-
-	--Value Color
-	if theme == "class" then
-		E.db.general.valuecolor = E:GetColor(classColor.r, classColor.b, classColor.g)
-	else
-		E.db.general.valuecolor = E:GetColor(.09, .819, .513)
-	end
-
-	if not noDisplayMsg then
-		E:UpdateAll(true)
-	end
-
-	if InstallStatus then
-		InstallStatus:SetStatusBarColor(unpack(E['media'].rgbvaluecolor))
-
-		if InstallStepComplete and not noDisplayMsg then
-			InstallStepComplete.message = L["Theme Set"]
-			InstallStepComplete:Show()
-		end
-	end
-end
-
-function E:SetupResolution(noDataReset)
-	if not noDataReset then
-		E:ResetMovers('')
-	end
-
-	if self == 'low' then
-		if not E.db.movers then E.db.movers = {}; end
-		if not noDataReset then
-			E.db.chat.panelWidth = 400
-			E.db.chat.panelHeight = 180
-
-			E:CopyTable(E.db.actionbar, P.actionbar)
-
-			E.db.actionbar.bar1.heightMult = 2;
-			E.db.actionbar.bar2.enabled = true;
-			E.db.actionbar.bar3.enabled = false;
-			E.db.actionbar.bar5.enabled = false;
-		end
-
-		if not noDataReset then
-			E.db.auras.wrapAfter = 10;
-		end
-		E.db.general.reputation.width = 400
-		E.db.general.experience.width = 400
-		E.db.movers.ElvAB_2 = "CENTERElvUIParentBOTTOM056.18"
-
-		if not noDataReset then
-			E:CopyTable(E.db.unitframe.units, P.unitframe.units)
-
-			E.db.unitframe.fontSize = 10
-
-			E.db.unitframe.units.player.width = 200;
-			E.db.unitframe.units.player.castbar.width = 200;
-			E.db.unitframe.units.player.classbar.fill = 'fill';
-			E.db.unitframe.units.player.health.text_format = "[healthcolor][health:current]"
-
-			E.db.unitframe.units.target.width = 200;
-			E.db.unitframe.units.target.castbar.width = 200;
-			E.db.unitframe.units.target.health.text_format = '[healthcolor][health:current]'
-
-			E.db.unitframe.units.pet.power.enable = false;
-			E.db.unitframe.units.pet.width = 200;
-			E.db.unitframe.units.pet.height = 26;
-
-			E.db.unitframe.units.targettarget.debuffs.enable = false;
-			E.db.unitframe.units.targettarget.power.enable = false;
-			E.db.unitframe.units.targettarget.width = 200;
-			E.db.unitframe.units.targettarget.height = 26;
-
-			E.db.unitframe.units.boss.width = 200;
-			E.db.unitframe.units.boss.castbar.width = 200;
-			E.db.unitframe.units.arena.width = 200;
-			E.db.unitframe.units.arena.castbar.width = 200;
-		end
-
-		local isPixel = E.private.general.pixelPerfect
-		local xOffset = isPixel and 103 or 106;
-		local yOffset = isPixel and 125 or 135;
-		local yOffsetSmall = isPixel and 76 or 80;
-
-		E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM"..-xOffset..""..yOffset
-		E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM"..xOffset..""..yOffsetSmall
-		E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM"..xOffset..""..yOffset
-		E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM"..-xOffset..""..yOffsetSmall
-		E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310332"
-
-		E.db.lowresolutionset = true;
-	elseif not noDataReset then
-		E.db.chat.panelWidth = P.chat.panelWidth
-		E.db.chat.panelHeight = P.chat.panelHeight
-
-		E:CopyTable(E.db.actionbar, P.actionbar)
-		E:CopyTable(E.db.unitframe.units, P.unitframe.units)
-		E:SetupPixelPerfect(E.PixelMode, true)
-		E.db.auras.wrapAfter = P.auras.wrapAfter;
-		E.db.general.reputation.width = P.general.reputation.width
-		E.db.general.experience.width = P.general.experience.width
-
-		E.db.lowresolutionset = nil;
-	end
-
-	if not noDataReset and E.private.theme then
-		E:SetupTheme(E.private.theme, true)
-	end
-
-	E:UpdateAll(true)
-
-	if InstallStepComplete and not noDataReset then
-		InstallStepComplete.message = L["Resolution Style Set"]
-		InstallStepComplete:Show()
-	end
-end
-
-function E:SetupLayout(layout, noDataReset)
-	--Unitframes
-	if not noDataReset then
-		E:CopyTable(E.db.unitframe.units, P.unitframe.units)
-		E:CopyTable(E.db.sle.combatico, P.sle.combatico)
-		E.db.sle.powtext = false
-	end
-
-	if not noDataReset then
-		E:ResetMovers('')
-		E:SetupPixelPerfect(E.PixelMode, true)
-		if not E.db.movers then E.db.movers = {} end
-
-		E.db.actionbar.bar2.enabled = E.db.lowresolutionset
-		if E.PixelMode then
-			E.db.movers.ElvAB_2 = "BOTTOMElvUIParentBOTTOM038"
-		else
-			E.db.movers.ElvAB_2 = "BOTTOMElvUIParentBOTTOM040"
-		end
-		if not E.db.lowresolutionset then
-			E.db.actionbar.bar3.buttons = 6
-			E.db.actionbar.bar5.buttons = 6
-			E.db.actionbar.bar4.enabled = true
-		end
-	end
-
-	if layout == 'healer' then
-		if not IsAddOnLoaded('Clique') then
-			E:StaticPopup_Show("CLIQUE_ADVERT")
-		end
-
-		if not noDataReset then
-			E.db.unitframe.units.raid10.horizontalSpacing = 9;
-			E.db.unitframe.units.raid10.rdebuffs.enable = false;
-			E.db.unitframe.units.raid10.verticalSpacing = 9;
-			E.db.unitframe.units.raid10.debuffs.sizeOverride = 16;
-			E.db.unitframe.units.raid10.debuffs.enable = true
-			E.db.unitframe.units.raid10.debuffs.anchorPoint = "TOPRIGHT";
-			E.db.unitframe.units.raid10.debuffs.xOffset = -4;
-			E.db.unitframe.units.raid10.debuffs.yOffset = -7;
-			E.db.unitframe.units.raid10.positionOverride = "BOTTOMRIGHT";
-			E.db.unitframe.units.raid10.height = 45;
-			E.db.unitframe.units.raid10.buffs.noConsolidated = false
-			E.db.unitframe.units.raid10.buffs.xOffset = 50;
-			E.db.unitframe.units.raid10.buffs.yOffset = -6;
-			E.db.unitframe.units.raid10.buffs.clickThrough = true
-			E.db.unitframe.units.raid10.buffs.noDuration = false
-			E.db.unitframe.units.raid10.buffs.playerOnly = false;
-			E.db.unitframe.units.raid10.buffs.perrow = 1
-			E.db.unitframe.units.raid10.buffs.useFilter = "TurtleBuffs"
-			E.db.unitframe.units.raid10.buffs.sizeOverride = 22
-			E.db.unitframe.units.raid10.buffs.useBlacklist = false
-			E.db.unitframe.units.raid10.buffs.enable = true
-			E.db.unitframe.units.raid10.growthDirection = "LEFT_UP"
-
-			E.db.unitframe.units.raid25.horizontalSpacing = 9;
-			E.db.unitframe.units.raid25.rdebuffs.enable = false;
-			E.db.unitframe.units.raid25.verticalSpacing = 9;
-			E.db.unitframe.units.raid25.debuffs.sizeOverride = 16;
-			E.db.unitframe.units.raid25.debuffs.enable = true
-			E.db.unitframe.units.raid25.debuffs.anchorPoint = "TOPRIGHT";
-			E.db.unitframe.units.raid25.debuffs.xOffset = -4;
-			E.db.unitframe.units.raid25.debuffs.yOffset = -7;
-			E.db.unitframe.units.raid25.height = 45;
-			E.db.unitframe.units.raid25.buffs.noConsolidated = false
-			E.db.unitframe.units.raid25.buffs.xOffset = 50;
-			E.db.unitframe.units.raid25.buffs.yOffset = -6;
-			E.db.unitframe.units.raid25.buffs.clickThrough = true
-			E.db.unitframe.units.raid25.buffs.noDuration = false
-			E.db.unitframe.units.raid25.buffs.playerOnly = false;
-			E.db.unitframe.units.raid25.buffs.perrow = 1
-			E.db.unitframe.units.raid25.buffs.useFilter = "TurtleBuffs"
-			E.db.unitframe.units.raid25.buffs.sizeOverride = 22
-			E.db.unitframe.units.raid25.buffs.useBlacklist = false
-			E.db.unitframe.units.raid25.buffs.enable = true
-			E.db.unitframe.units.raid25.growthDirection = "LEFT_UP"
-
-			E.db.unitframe.units.party.growthDirection = "LEFT_UP"
-			E.db.unitframe.units.party.horizontalSpacing = 9;
-			E.db.unitframe.units.party.verticalSpacing = 9;
-			E.db.unitframe.units.party.debuffs.sizeOverride = 16;
-			E.db.unitframe.units.party.debuffs.enable = true
-			E.db.unitframe.units.party.debuffs.anchorPoint = "TOPRIGHT";
-			E.db.unitframe.units.party.debuffs.xOffset = -4;
-			E.db.unitframe.units.party.debuffs.yOffset = -7;
-			E.db.unitframe.units.party.height = 45;
-			E.db.unitframe.units.party.buffs.noConsolidated = false
-			E.db.unitframe.units.party.buffs.xOffset = 50;
-			E.db.unitframe.units.party.buffs.yOffset = -6;
-			E.db.unitframe.units.party.buffs.clickThrough = true
-			E.db.unitframe.units.party.buffs.noDuration = false
-			E.db.unitframe.units.party.buffs.playerOnly = false;
-			E.db.unitframe.units.party.buffs.perrow = 1
-			E.db.unitframe.units.party.buffs.useFilter = "TurtleBuffs"
-			E.db.unitframe.units.party.buffs.sizeOverride = 22
-			E.db.unitframe.units.party.buffs.useBlacklist = false
-			E.db.unitframe.units.party.buffs.enable = true
-			E.db.unitframe.units.party.roleIcon.position = "BOTTOMRIGHT"
-			E.db.unitframe.units.party.health.text_format = "[healthcolor][health:deficit]"
-			E.db.unitframe.units.party.health.position = "BOTTOM"
-			E.db.unitframe.units.party.GPSArrow.size = 40
-			E.db.unitframe.units.party.width = 80
-			E.db.unitframe.units.party.height = 45
-			E.db.unitframe.units.party.name.text_format = "[namecolor][name:short]"
-			E.db.unitframe.units.party.name.position = "TOP"
-			E.db.unitframe.units.party.power.text_format = ""
-
-			E.db.unitframe.units.raid40.height = 30
-			E.db.unitframe.units.raid40.growthDirection = "LEFT_UP"
-
-			E.db.unitframe.units.party.health.frequentUpdates = true
-			E.db.unitframe.units.raid10.health.frequentUpdates = true
-			E.db.unitframe.units.raid25.health.frequentUpdates = true
-			E.db.unitframe.units.raid40.health.frequentUpdates = true
-
-			E.db.unitframe.units.party.healPrediction = true;
-			E.db.unitframe.units.raid10.healPrediction = true;
-			E.db.unitframe.units.raid25.healPrediction = true;
-			E.db.unitframe.units.raid40.healPrediction = true;
-
-			E.db.actionbar.bar2.enabled = true
-			if not E.db.lowresolutionset then
-				E.db.actionbar.bar3.buttons = 12
-				E.db.actionbar.bar5.buttons = 12
-				E.db.actionbar.bar4.enabled = false
-				if not E.PixelMode then
-					E.db.actionbar.bar1.heightMult = 2
-				end
-			end
-		end
-
-		if not E.db.movers then E.db.movers = {}; end
-		local xOffset = GetScreenWidth() * 0.34375
-
-		if E.PixelMode then
-			E.db.movers.ElvAB_3 = "BOTTOMElvUIParentBOTTOM3124"
-			E.db.movers.ElvAB_5 = "BOTTOMElvUIParentBOTTOM-3124"
-			E.db.movers.ElvUF_PartyMover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT"..xOffset.."450"
-			E.db.movers.ElvUF_Raid10Mover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT"..xOffset.."450"
-			E.db.movers.ElvUF_Raid25Mover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT"..xOffset.."450"
-			E.db.movers.ElvUF_Raid40Mover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT"..xOffset.."450"
-
-			if not E.db.lowresolutionset then
-				E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM278132"
-				E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-278132"
-				E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM0176"
-				E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM0132"
-				E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310432"
-				E.db.movers["BossButton"] = "BOTTOMElvUIParentBOTTOM0275"
-			else
-				E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-102182"
-				E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM102182"
-				E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM102120"
-				E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM-102120"
-				E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310332"
-				E.db.movers["BossButton"] = "TOPElvUIParentTOP0-138"
-			end
-		else
-			E.db.movers.ElvAB_3 = "BOTTOMElvUIParentBOTTOM3324"
-			E.db.movers.ElvAB_5 = "BOTTOMElvUIParentBOTTOM-3324"
-			E.db.movers.ElvUF_PartyMover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT"..xOffset.."450"
-			E.db.movers.ElvUF_Raid10Mover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT"..xOffset.."450"
-			E.db.movers.ElvUF_Raid25Mover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT"..xOffset.."450"
-			E.db.movers.ElvUF_Raid40Mover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT"..xOffset.."450"
-
-			if not E.db.lowresolutionset then
-				E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM307145"
-				E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-307145"
-				E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM0186"
-				E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM0145"
-				E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310432"
-				E.db.movers["BossButton"] = "BOTTOMElvUIParentBOTTOM0275"
-			else
-				E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-118182"
-				E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM118182"
-				E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM118120"
-				E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM-118120"
-				E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310332"
-				E.db.movers["BossButton"] = "TOPElvUIParentTOP0-138"
-			end
-		end
-	elseif E.db.lowresolutionset then
-		if not E.db.movers then E.db.movers = {}; end
-		if E.PixelMode then
-			E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-102135"
-			E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM102135"
-			E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM10280"
-			E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM-10280"
-			E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310332"
-		else
-			E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-118142"
-			E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM118142"
-			E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM11884"
-			E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM-11884"
-			E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310332"
-		end
-
-		E.db.movers["BossButton"] = "TOPElvUIParentTOP0-138"
-	end
-
-	if layout ~= 'healer' and not E.db.lowresolutionset then
-		E.db.actionbar.bar1.heightMult = 1
-	end
-
-	if E.db.lowresolutionset and not noDataReset then
-		E.db.unitframe.units.player.width = 200;
-		if layout ~= 'healer' then
-			E.db.unitframe.units.player.castbar.width = 200;
-		end
-		E.db.unitframe.units.player.classbar.fill = 'fill';
-
-		E.db.unitframe.units.target.width = 200;
-		E.db.unitframe.units.target.castbar.width = 200;
-
-		E.db.unitframe.units.pet.power.enable = false;
-		E.db.unitframe.units.pet.width = 200;
-		E.db.unitframe.units.pet.height = 26;
-
-		E.db.unitframe.units.targettarget.debuffs.enable = false;
-		E.db.unitframe.units.targettarget.power.enable = false;
-		E.db.unitframe.units.targettarget.width = 200;
-		E.db.unitframe.units.targettarget.height = 26;
-
-		E.db.unitframe.units.boss.width = 200;
-		E.db.unitframe.units.boss.castbar.width = 200;
-		E.db.unitframe.units.arena.width = 200;
-		E.db.unitframe.units.arena.castbar.width = 200;
-	end
-
-	if(layout == 'dpsCaster' or layout == 'healer' or (layout == 'dpsMelee' and E.myclass == 'HUNTER')) then
-		if not E.db.movers then E.db.movers = {}; end
-		E.db.unitframe.units.player.castbar.width = E.PixelMode and 406 or 436
-		E.db.unitframe.units.player.castbar.height = 28
-		local yOffset = 80
-		if not E.db.lowresolutionset then
-			if layout ~= 'healer' then
-				yOffset = 42
-
-				if E.PixelMode then
-					E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-278110"
-					E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM278110"
-					E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM0110"
-					E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM0150"
-					E.db.movers["BossButton"] = "BOTTOMElvUIParentBOTTOM0195"
-				else
-					E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-307110"
-					E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM307110"
-					E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM0110"
-					E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM0150"
-					E.db.movers["BossButton"] = "BOTTOMElvUIParentBOTTOM0195"
-				end
-			else
-				yOffset = 76
-			end
-		elseif E.db.lowresolutionset then
-			if E.PixelMode then
-				E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-102182"
-				E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM102182"
-				E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM102120"
-				E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM-102120"
-				E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310332"
-			else
-				E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-118182"
-				E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM118182"
-				E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM118120"
-				E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM-118120"
-				E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310332"
-			end
-
-			E.db.movers["BossButton"] = "TOPElvUIParentTOP0-138"
-		end
-
-		if E.PixelMode then
-			E.db.movers.ElvUF_PlayerCastbarMover = "BOTTOMElvUIParentBOTTOM0"..yOffset
-		else
-			E.db.movers.ElvUF_PlayerCastbarMover = "BOTTOMElvUIParentBOTTOM-2"..(yOffset + 5)
-		end
-	elseif (layout == 'dpsMelee' or layout == 'tank') and not E.db.lowresolutionset and not E.PixelMode then
-		E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-30776"
-		E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM30776"
-		E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM076"
-		E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM0115"
-		E.db.movers["BossButton"] = "BOTTOMElvUIParentBOTTOM0158"
-
-	end
-
-	--Datatexts
-	if not noDataReset then
-		E:CopyTable(E.db.datatexts.panels, P.datatexts.panels)
-		if layout == 'tank' then
-			E.db.datatexts.panels.LeftChatDataPanel.left = 'Avoidance';
-			E.db.datatexts.panels.LeftChatDataPanel.right = 'Vengeance';
-		elseif layout == 'healer' or layout == 'dpsCaster' then
-			E.db.datatexts.panels.LeftChatDataPanel.left = 'Spell/Heal Power';
-			E.db.datatexts.panels.LeftChatDataPanel.right = 'Haste';
-		else
-			E.db.datatexts.panels.LeftChatDataPanel.left = 'Attack Power';
-			E.db.datatexts.panels.LeftChatDataPanel.right = 'Haste';
-		end
-
-		if InstallStepComplete then
-			InstallStepComplete.message = L["Layout Set"]
-			InstallStepComplete:Show()
-		end
-	end
-
-	E.db.layoutSet = layout
-
-	if not noDataReset and E.private.theme then
-		E:SetupTheme(E.private.theme, true)
-	end
-
-	if not noDataReset then
-		E:CopyTable(E.db.sle.marks, P.sle.marks)
-		E:CopyTable(E.db.sle.backgrounds, P.sle.backgrounds)
-		E:CopyTable(E.db.sle.uibuttons, P.sle.uibuttons)
-	end
-
-	E:UpdateAll(true)
-	local DT = E:GetModule('DataTexts')
-	DT:LoadDataTexts()
-end
-
-
-local function SetupAuras(style)
-	E:CopyTable(E.db.unitframe.units.player.buffs, P.unitframe.units.player.buffs)
-	E:CopyTable(E.db.unitframe.units.player.debuffs, P.unitframe.units.player.debuffs)
-	E:CopyTable(E.db.unitframe.units.player.aurabar, P.unitframe.units.player.aurabar)
-
-	E:CopyTable(E.db.unitframe.units.target.buffs, P.unitframe.units.target.buffs)
-	E:CopyTable(E.db.unitframe.units.target.debuffs, P.unitframe.units.target.debuffs)
-	E:CopyTable(E.db.unitframe.units.target.aurabar, P.unitframe.units.target.aurabar)
-	E.db.unitframe.units.target.smartAuraDisplay = P.unitframe.units.target.smartAuraDisplay
-
-	E:CopyTable(E.db.unitframe.units.focus.buffs, P.unitframe.units.focus.buffs)
-	E:CopyTable(E.db.unitframe.units.focus.debuffs, P.unitframe.units.focus.debuffs)
-	E:CopyTable(E.db.unitframe.units.focus.aurabar, P.unitframe.units.focus.aurabar)
-	E.db.unitframe.units.focus.smartAuraDisplay = P.unitframe.units.focus.smartAuraDisplay
-
-	if not style then
-		--PLAYER
-		E.db.unitframe.units.player.buffs.enable = true;
-		E.db.unitframe.units.player.buffs.attachTo = 'FRAME';
-		E.db.unitframe.units.player.buffs.noDuration = false;
-
-		E.db.unitframe.units.player.debuffs.attachTo = 'BUFFS';
-
-		E.db.unitframe.units.player.aurabar.enable = false;
-
-		--TARGET
-		E.db.unitframe.units.target.smartAuraDisplay = 'DISABLED';
-		E.db.unitframe.units.target.debuffs.enable = true;
-		E.db.unitframe.units.target.aurabar.enable = false;
-	elseif style == 'integrated' then
-		--seriosly is this fucking hard??
-		E.db.unitframe.units.target.smartAuraDisplay = 'SHOW_DEBUFFS_ON_FRIENDLIES';
-		E.db.unitframe.units.target.buffs.playerOnly = {friendly = true, enemy = false};
-		E.db.unitframe.units.target.debuffs.enable = false;
-		E.db.unitframe.units.target.aurabar.attachTo = 'BUFFS';
-	end
-
-	E:GetModule('UnitFrames'):Update_AllFrames()
-	if InstallStepComplete then
-		InstallStepComplete.message = L["Auras Set"]
-		InstallStepComplete:Show()
-	end
-end
-
-
-function E:DarthSetup() --The function to switch from classic ElvUI settings to Darth's
-	InstallStepComplete.message = L["Darth's Defaults Set"]
-	InstallStepComplete:Show()
-	if not E.db.movers then E.db.movers = {}; end
-	if not E.db.loclite then E.db.loclite = {} end
-
-	local layout = E.db.layoutSet --To know if some sort of layout was choosed before
-
-	if SLE:Auth() then
-		E.db.hideTutorial = 1
-		E.db.general.loginmessage = false
-	end
-
-	--General options--
-	E.db.general.stickyFrames = false
-	E.db.general.autoRepair = "PLAYER"
-	E.db.general.vendorGrays = true
-	E.db.general.fontsize = 10
-	E.db.general.bottomPanel = false
-	E.db.general.topPanel = false --double check later
-	E.db.general.hideErrorFrame = false
-
-	E.db.general.minimap.locationText = 'HIDE'
-
-	E.db.general.experience.orientation = "VERTICAL"
-	E.db.general.experience.width = 10
-	E.db.general.experience.height = 185
-
-	E.db.general.reputation.orientation = "VERTICAL"
-	E.db.general.reputation.width = 10
-	E.db.general.reputation.height = 185
-
-	E.db.general.threat.enable = false
-
-	if layout == "healer" then
-		E.db.general.totems.growthDirection = 'HORIZONTAL'
-		E.db.general.totems.size = 24
-	else
-		E.db.general.totems.size = 25
-	end
-
-	E.db.general.totems.spacing = 2
-
-	--Bags--
-	E.db.bags.bagSize = 26
-	E.db.bags.bankSize = 26
-	E.db.bags.sortInverted = false
-	E.db.bags.alignToChat = false
-	E.db.bags.bagWidth = 425
-	E.db.bags.bankWidth = 425
-	E.db.bags.yOffset = 178
-	E.db.bags.currencyFormat = "ICON"
-
-	--NamePlate--
-	E.db.nameplate.font = "ElvUI Font"
-	E.db.nameplate.fontOutline = "OUTLINE"
-	E.db.nameplate.nonTargetAlpha = 0.35
-
-	E.db.nameplate.buffs.font = "ElvUI Font"
-	E.db.nameplate.buffs.fontOutline = "OUTLINE"
-	E.db.nameplate.buffs.numAuras = 6
-	E.db.nameplate.buffs.stretchTexture = false
-	E.db.nameplate.debuffs.font = "ElvUI Font"
-	E.db.nameplate.debuffs.fontOutline = "OUTLINE"
-	E.db.nameplate.debuffs.numAuras = 6
-	E.db.nameplate.debuffs.stretchTexture = false
-
-	E.db.nameplate.raidHealIcon.attachTo = "TOP"
-	E.db.nameplate.raidHealIcon.size = 24
-
-	E.db.nameplate.healthBar.text.enable = true
-	E.db.nameplate.healthBar.text.format = "CURRENT_PERCENT"
-	E.db.nameplate.healthBar.lowThreshold = 0
-
-	E.db.nameplate.targetIndicator.height = 35
-	E.db.nameplate.targetIndicator.width = 35
-	E.db.nameplate.targetIndicator.style = "arrow"
-
-	--Auras--
-	E.db.auras.font = "ElvUI Font"
-	E.db.auras.fontOutline = "OUTLINE"
-	E.db.sle.castername = true
-	E.db.auras.fadeThreshold = 5
-
-	E.db.auras.buffs.wrapAfter = 15
-	E.db.auras.buffs.size = 26
-
-	E.db.auras.debuffs.wrapAfter = 15
-	E.db.auras.buffs.size = 26
-
-	E.db.auras.consolidatedBuffs.fontSize = 9
-	E.db.auras.consolidatedBuffs.fontOutline = "OUTLINE"
-	E.db.auras.consolidatedBuffs.font = "ElvUI Font"
-	E.db.auras.consolidatedBuffs.filter = false
-
-	--Tooltip--
-	E.db.tooltip.healthBar.font = "ElvUI Font"
-	E.db.tooltip.talentInfo = true
-	E.db.sle.tooltipicon = true
-
-	--Chat--
-	E.db.chat.editboxhistory = 10
-	E.db.chat.emotionIcons = false
-	E.db.chat.panelHeight = 185
-	E.db.chat.panelWidth = 425
-	E.db.chat.panelTabBackdrop = false
-	E.db.chat.timeStampFormat = "%H:%M:%S "
-	E.db.chat.whisperSound = "Whisper Alert"
-	E.db.chat.fontOutline = "OUTLINE"
-	E.db.chat.tabFont = "ElvUI Font"
-	E.db.chat.tabFontOutline = "OUTLINE"
-
-	--Datatexts--
-	do
-		E.db.datatexts.font = "ElvUI Font"
-		E.db.datatexts.fontSize = 10
-		E.db.datatexts.time24 = true
-		E.db.sle.lfrshow.enabled = true
-		E.db.datatexts.minimapPanels = false
-		E.db.datatexts.panelTransparency = true
-		E.db.datatexts.fontOutline = "OUTLINE"
-		E.db.sle.datatext.top.enabled = true
-		E.db.sle.datatext.top.transparent = true
-		E.db.sle.datatext.bottom.enabled = true
-		E.db.sle.datatext.bottom.width = 190
-		E.db.sle.datatext.bottom.transparent = true
-		E.db.sle.datatext.dp1.enabled = true
-		E.db.sle.datatext.dp1.width = 386
-		E.db.sle.datatext.dp1.transparent = true
-		E.db.sle.datatext.dp2.enabled = true
-		E.db.sle.datatext.dp2.width = 386
-		E.db.sle.datatext.dp2.transparent = true
-		E.db.sle.datatext.dp3.enabled = true
-		E.db.sle.datatext.dp3.width = 386
-		E.db.sle.datatext.dp3.transparent = true
-		E.db.sle.datatext.dp4.enabled = true
-		E.db.sle.datatext.dp4.width = 386
-		E.db.sle.datatext.dp4.transparent = true
-		E.db.sle.datatext.dp5.enabled = true
-		E.db.sle.datatext.dp5.width = 455
-		E.db.sle.datatext.dp5.transparent = true
-		E.db.sle.datatext.dp6.enabled = true
-		E.db.sle.datatext.dp6.width = 455
-		E.db.sle.datatext.dp6.transparent = true
-
-		E.db.sle.dt.friends.totals = true
-		E.db.sle.dt.friends.expandBNBroadcast = true
-		E.db.sle.dt.friends.combat = true
-		E.db.sle.dt.guild.totals = true
-		E.db.sle.dt.guild.hide_guildname = true
-		E.db.sle.dt.guild.combat = true
-
-		E.db.datatexts.panels.Top_Center = 'Version';
-		E.db.datatexts.panels.Bottom_Panel = 'System';
-		E.db.datatexts.panels.LeftChatDataPanel.right = 'S&L Friends';
-		E.db.datatexts.panels.LeftChatDataPanel.left = 'Call to Arms';
-		E.db.datatexts.panels.LeftChatDataPanel.middle = 'Durability';
-		E.db.datatexts.panels.LeftMiniPanel = '';
-		E.db.datatexts.panels.RightMiniPanel = '';
-		E.db.datatexts.panels.DP_1.right = 'AtlasLoot';
-		E.db.datatexts.panels.DP_1.middle = 'MrtWoo';
-		E.db.datatexts.panels.DP_1.left = 'Swatter';
-		E.db.datatexts.panels.DP_2.right = 'S&L Guild';
-		E.db.datatexts.panels.DP_2.middle = 'Skada';
-		E.db.datatexts.panels.DP_2.left = 'Altoholic';
-		E.db.datatexts.panels.DP_3.right = 'Notes';
-		E.db.datatexts.panels.DP_3.middle = 'DBM-LDB';
-		E.db.datatexts.panels.DP_3.left = 'Time';
-		E.db.datatexts.panels.DP_4.right = '';
-		E.db.datatexts.panels.DP_4.middle = '';
-		E.db.datatexts.panels.DP_4.left = 'Combat/Arena Time';
-		E.db.datatexts.panels.DP_5.middle = 'Gold';
-		E.db.datatexts.panels.DP_5.left = 'Bags';
-
-		if layout == 'tank' then
-			E.db.datatexts.panels.DP_6.left = 'Avoidance';
-			E.db.datatexts.panels.DP_6.middle = 'Vengeance';
-			E.db.datatexts.panels.DP_6.right = 'Expertise';
-			E.db.datatexts.panels.RightChatDataPanel.left = 'Hit Rating';
-			E.db.datatexts.panels.RightChatDataPanel.middle = 'Mastery';
-			E.db.datatexts.panels.RightChatDataPanel.right = 'Talent/Loot Specialization';
-			E.db.datatexts.panels.DP_5.right = 'Armor';
-		elseif layout == 'healer' then
-			E.db.datatexts.panels.DP_6.left = 'Spell/Heal Power';
-			E.db.datatexts.panels.DP_6.middle = 'Haste';
-			E.db.datatexts.panels.DP_6.right = 'Crit Chance';
-			E.db.datatexts.panels.RightChatDataPanel.left = 'MP5';
-			E.db.datatexts.panels.RightChatDataPanel.middle = 'Mastery';
-			E.db.datatexts.panels.RightChatDataPanel.right = 'Talent/Loot Specialization';
-			E.db.datatexts.panels.DP_5.right = '';
-		elseif layout == 'dpsCaster' then
-			E.db.datatexts.panels.DP_6.left = 'Spell/Heal Power';
-			E.db.datatexts.panels.DP_6.middle = 'Haste';
-			E.db.datatexts.panels.DP_6.right = 'Crit Chance';
-			E.db.datatexts.panels.RightChatDataPanel.left = 'Hit Rating';
-			E.db.datatexts.panels.RightChatDataPanel.middle = 'Mastery';
-			E.db.datatexts.panels.RightChatDataPanel.right = 'Talent/Loot Specialization';
-			E.db.datatexts.panels.DP_5.right = '';
-		else
-			E.db.datatexts.panels.DP_6.left = 'Attack Power';
-			E.db.datatexts.panels.DP_6.middle = 'Haste';
-			E.db.datatexts.panels.DP_6.right = 'Crit Chance';
-			E.db.datatexts.panels.RightChatDataPanel.left = 'Hit Rating';
-			E.db.datatexts.panels.RightChatDataPanel.middle = 'Mastery';
-			E.db.datatexts.panels.RightChatDataPanel.right = 'Talent/Loot Specialization';
-			E.db.datatexts.panels.DP_5.right = 'Expertise';
-		end
-	end
-
-	--Unitframes--
-	do
-		E.db.unitframe.smoothbars = false
-		E.db.unitframe.font = "ElvUI Font"
-		E.db.unitframe.fontsize = 9
-		E.db.unitframe.fontOutline = 'OUTLINE'
-		E.db.unitframe.statusbar = "Polished Wood"
-		E.db.unitframe.colors.castColor = {
-									["b"] = 0.396078431372549,
-									["g"] = 0.7333333333333333,
-									["r"] = 0.796078431372549,
-								}
-		E.db.unitframe.colors.healPrediction.absorbs = {
-									["r"] = 0.3294117647058824,
-									["g"] = 0.6039215686274509,
-									["b"] = 1,
-								}
-		UF:Update_AllFrames()
-		if layout == "healer" then
-			E.db.unitframe.debuffHighlighting = true
-		else
-			E.db.unitframe.debuffHighlighting = false
-		end
-		E.db.unitframe.smartRaidFilter = false
-		E.db.unitframe.colors.healthclass = true
-		E.db.unitframe.colors.colorhealthbyvalue = false
-			--Setting player frame
-			E.db.unitframe.units.player.width = 210
-			E.db.unitframe.units.player.height = 50
-			if layout == "healer" then
-				E.db.unitframe.units.player.lowmana = 30;
-			else
-				E.db.unitframe.units.player.lowmana = 0;
-			end
-			E.db.unitframe.units.player.health.position = 'RIGHT'
-			E.db.unitframe.units.player.health.yOffset = 2
-			E.db.unitframe.units.player.health.text_format = "[healthcolor][health:current-percent:sl]"
-			E.db.unitframe.units.player.power.text_format = "[powercolor][power:current:sl]"
-			E.db.unitframe.units.player.power.height = 8
-			E.db.unitframe.units.player.power.position = "BOTTOMRIGHT"
-			E.db.unitframe.units.player.power.yOffset = 8
-			E.db.unitframe.units.player.power.width = "inset"
-			E.db.unitframe.units.player.name.text_format = "[name] [level]"
-			E.db.unitframe.units.player.name.position = 'TOPLEFT'
-			E.db.unitframe.units.player.name.yOffset = -3
-			E.db.unitframe.units.player.pvp.text_format = "||cFFB04F4F[pvptimer]||r"
-			E.db.unitframe.units.player.pvp.position = "LEFT"
-			E.db.unitframe.units.player.portrait.enable = true
-			E.db.unitframe.units.player.portrait.camDistanceScale = 3
-			E.db.unitframe.units.player.portrait.overlay = true
-			E.db.unitframe.units.player.portrait.rotation = 345
-			E.db.unitframe.units.player.debuffs.enable = false
-			E.db.unitframe.units.player.castbar.format = 'CURRENTMAX'
-			E.db.unitframe.units.player.castbar.height = 18
-			if layout == "healer" then
-				E.db.unitframe.units.player.castbar.width = 200
-			else
-				E.db.unitframe.units.player.castbar.width = 210
-			end
-			E.db.unitframe.units.player.classbar.fill = "spaced"
-			E.db.unitframe.units.player.classbar.height = 8
-			E.db.unitframe.units.player.aurabar.enable = false
-			E.db.unitframe.units.player.raidicon.enable = false
-
-			--Setting target frame
-			E.db.unitframe.units.target.width = 210
-			E.db.unitframe.units.target.height = 50
-			E.db.unitframe.units.target.health.position = 'RIGHT'
-			if layout == "healer" then
-				E.db.unitframe.units.target.health.text_format = "[healthcolor][health:deficit]      [health:current-percent]"
-				E.db.unitframe.units.target.customTexts = {}
-				E.db.unitframe.units.target.customTexts.Absorb = {}
-				E.db.unitframe.units.target.customTexts.Absorb.font = "ElvUI Font"
-				E.db.unitframe.units.target.customTexts.Absorb.justifyH = "CENTER"
-				E.db.unitframe.units.target.customTexts.Absorb.fontOutline = "OUTLINE"
-				E.db.unitframe.units.target.customTexts.Absorb.xOffset = 40
-				E.db.unitframe.units.target.customTexts.Absorb.yOffset = -9
-				E.db.unitframe.units.target.customTexts.Absorb.text_format = "[absorbs]"
-				E.db.unitframe.units.target.customTexts.Absorb.size = 10
-			else
-				E.db.unitframe.units.target.health.text_format = "[healthcolor][health:current-percent]"
-			end
-			E.db.unitframe.units.target.power.position = 'RIGHT';
-			E.db.unitframe.units.target.power.hideonnpc = false;
-			E.db.unitframe.units.target.power.text_format = "[powercolor][power:current:sl]"
-			E.db.unitframe.units.target.power.height = 8
-			E.db.unitframe.units.target.power.position = "BOTTOMRIGHT"
-			E.db.unitframe.units.target.power.yOffset = 8
-			E.db.unitframe.units.target.power.width = "inset"
-			E.db.unitframe.units.target.name.text_format = "[name:medium] [level] [shortclassification]";
-			E.db.unitframe.units.target.name.position = 'TOPLEFT'
-			E.db.unitframe.units.target.name.yOffset = -3
-			E.db.unitframe.units.target.portrait.enable = true
-			E.db.unitframe.units.target.portrait.overlay = true
-			E.db.unitframe.units.target.portrait.camDistanceScale = 3
-			E.db.unitframe.units.target.portrait.rotation = 345
-			E.db.unitframe.units.target.buffs.perrow = 10
-			E.db.unitframe.units.target.buffs.numrows = 2
-			E.db.unitframe.units.target.buffs.yOffset = 6
-			E.db.unitframe.units.target.buffs.anchorPoint = 'TOPLEFT';
-			E.db.unitframe.units.target.buffs.useBlacklist.friendly = false
-			E.db.unitframe.units.target.buffs.useBlacklist.enemy = false
-			E.db.unitframe.units.target.debuffs.perrow = 10;
-			E.db.unitframe.units.target.debuffs.playerOnly.enemy = false
-			E.db.unitframe.units.target.debuffs.useBlacklist.friendly = false
-			E.db.unitframe.units.target.debuffs.useBlacklist.enemy = false
-			E.db.unitframe.units.target.castbar.format = 'CURRENTMAX';
-			if layout == "healer" then
-				E.db.unitframe.units.target.castbar.width = 200
-			else
-				E.db.unitframe.units.target.castbar.width = 210
-			end
-			E.db.unitframe.units.target.aurabar.enable = false
-			E.db.unitframe.units.target.combobar.height = 8
-			E.db.unitframe.units.target.combobar.fill = "spaced"
-
-			--Target of Target
-			if layout == "healer" then
-				E.db.unitframe.units.targettarget.width = 100
-			else
-				E.db.unitframe.units.targettarget.width = 130
-			end
-			E.db.unitframe.units.targettarget.name.text_format = "[name:medium]"
-			E.db.unitframe.units.targettarget.debuffs.enable = false
-			E.db.unitframe.units.targettarget.power.width = "inset"
-
-			--Focus
-			if layout == "healer" then
-				E.db.unitframe.units.focus.height = 34
-				E.db.unitframe.units.focus.width = 170
-				E.db.unitframe.units.focus.castbar.width = 170
-			else
-				E.db.unitframe.units.focus.height = 50
-				E.db.unitframe.units.focus.width = 190
-				E.db.unitframe.units.focus.castbar.width = 190
-			end
-			E.db.unitframe.units.focus.health.position = 'BOTTOMRIGHT'
-			E.db.unitframe.units.focus.power.width = "inset"
-			E.db.unitframe.units.focus.debuffs.sizeOverride = 22
-			E.db.unitframe.units.focus.debuffs.anchorPoint = "TOPLEFT"
-			E.db.unitframe.units.focus.castbar.format = 'CURRENTMAX'
-
-			--Focus Target
-			E.db.unitframe.units.focustarget.enable = true
-			if layout == "healer" then
-				E.db.unitframe.units.focustarget.width = 122
-			else
-				E.db.unitframe.units.focustarget.width = 190
-			end
-
-			--Pet
-			E.db.unitframe.units.pet.height = 30
-			E.db.unitframe.units.pet.width = 105
-			E.db.unitframe.units.pet.power.width = "inset"
-			E.db.unitframe.units.pet.name.position = 'TOP'
-
-			--Pet Target
-			E.db.unitframe.units.pettarget.name.text_format = "[name:short]"
-			E.db.unitframe.units.pettarget.enable = true
-			E.db.unitframe.units.pettarget.height = 30
-			E.db.unitframe.units.pettarget.width = 105
-
-			--Party
-			if layout == "healer" then
-				E.db.unitframe.units.party.visibility = "[@raid6,exists] hide;show"
-				E.db.unitframe.units.party.healPrediction = true
-				E.db.unitframe.units.party.health.text_format = "[healthcolor][health:deficit]"
-				E.db.unitframe.units.party.health.frequentUpdates = true
-				E.db.unitframe.units.party.debuffs.enable = true
-				E.db.unitframe.units.party.debuffs.anchorPoint = "BOTTOMLEFT"
-				E.db.unitframe.units.party.GPSArrow.onMouseOver = false
-				E.db.unitframe.units.party.GPSArrow.outOfRange = true
-
-				E.db.unitframe.units.party.customTexts = {}
-				E.db.unitframe.units.party.customTexts.Absorb = {}
-				E.db.unitframe.units.party.customTexts.Absorb.font = "ElvUI Font"
-				E.db.unitframe.units.party.customTexts.Absorb.justifyH = "CENTER"
-				E.db.unitframe.units.party.customTexts.Absorb.fontOutline = "OUTLINE"
-				E.db.unitframe.units.party.customTexts.Absorb.xOffset = 0
-				E.db.unitframe.units.party.customTexts.Absorb.yOffset = 3
-				E.db.unitframe.units.party.customTexts.Absorb.text_format = "[absorbs]"
-				E.db.unitframe.units.party.customTexts.Absorb.size = 10
-
-			else
-				E.db.unitframe.units.party.healPrediction = false
-				E.db.unitframe.units.party.health.text_format = "[healthcolor][health:current]"
-				E.db.unitframe.units.party.health.frequentUpdates = false
-				E.db.unitframe.units.party.debuffs.enable = false
-				E.db.unitframe.units.party.GPSArrow.onMouseOver = true
-				E.db.unitframe.units.party.GPSArrow.outOfRange = false
-			end
-			E.db.unitframe.units.party.health.orientation = "HORIZONTAL"
-			E.db.unitframe.units.party.growthDirection = "RIGHT_DOWN"
-			E.db.unitframe.units.party.width = 80
-			E.db.unitframe.units.party.horizontalSpacing = 1
-			E.db.unitframe.units.party.health.position = "BOTTOM"
-			E.db.unitframe.units.party.health.yOffset = 8
-			E.db.unitframe.units.party.power.width = "inset"
-			E.db.unitframe.units.party.power.text_format = ""
-			E.db.unitframe.units.party.roleIcon.position = "RIGHT"
-			E.db.unitframe.units.party.debuffs.sizeOverride = 0
-			E.db.unitframe.units.party.name.position = "TOP"
-			E.db.unitframe.units.party.GPSArrow.size = 30
-
-			--Raid 10
-			if layout == "healer" then
-				E.db.unitframe.units.raid10.height = 36
-				E.db.unitframe.units.raid10.healPrediction = true
-				E.db.unitframe.units.raid10.health.frequentUpdates = true
-				E.db.unitframe.units.raid10.health.text_format = "[healthcolor][health:deficit]"
-				E.db.unitframe.units.raid10.GPSArrow.onMouseOver = false
-				E.db.unitframe.units.raid10.GPSArrow.outOfRange = true
-
-				E.db.unitframe.units.raid10.customTexts = {}
-				E.db.unitframe.units.raid10.customTexts.Absorb = {}
-				E.db.unitframe.units.raid10.customTexts.Absorb.font = "ElvUI Font"
-				E.db.unitframe.units.raid10.customTexts.Absorb.justifyH = "CENTER"
-				E.db.unitframe.units.raid10.customTexts.Absorb.fontOutline = "OUTLINE"
-				E.db.unitframe.units.raid10.customTexts.Absorb.xOffset = 0
-				E.db.unitframe.units.raid10.customTexts.Absorb.yOffset = 3
-				E.db.unitframe.units.raid10.customTexts.Absorb.text_format = "[absorbs]"
-				E.db.unitframe.units.raid10.customTexts.Absorb.size = 10
-			else
-				E.db.unitframe.units.raid10.height = 44
-				E.db.unitframe.units.raid10.healPrediction = false
-				E.db.unitframe.units.raid10.health.frequentUpdates = false
-				E.db.unitframe.units.raid10.health.text_format = "[healthcolor][health:current]"
-				E.db.unitframe.units.raid10.GPSArrow.onMouseOver = true
-				E.db.unitframe.units.raid10.GPSArrow.outOfRange = false
-			end
-			E.db.unitframe.units.raid10.health.orientation = "HORIZONTAL"
-			E.db.unitframe.units.raid10.horizontalSpacing = 1
-			E.db.unitframe.units.raid10.verticalSpacing = 1
-			E.db.unitframe.units.raid10.name.text_format = "[name:medium]"
-			E.db.unitframe.units.raid10.health.yOffset = 8
-			E.db.unitframe.units.raid10.power.width = "inset"
-			E.db.unitframe.units.raid10.debuffs.enable = false
-			E.db.unitframe.units.raid10.rdebuffs.size = 18
-			E.db.unitframe.units.raid10.roleIcon.position = "RIGHT"
-			E.db.unitframe.units.raid10.groupBy = "GROUP"
-			E.db.unitframe.units.raid10.GPSArrow.size = 30
-
-			--Raid 25
-			if layout == "healer" then
-				E.db.unitframe.units.raid25.healPrediction = true
-				E.db.unitframe.units.raid25.health.text_format = "[healthcolor][health:deficit]"
-				E.db.unitframe.units.raid25.health.frequentUpdates = true
-				E.db.unitframe.units.raid25.height = 36
-				E.db.unitframe.units.raid25.GPSArrow.onMouseOver = false
-				E.db.unitframe.units.raid25.GPSArrow.outOfRange = true
-
-				E.db.unitframe.units.raid25.customTexts = {}
-				E.db.unitframe.units.raid25.customTexts.Absorb = {}
-				E.db.unitframe.units.raid25.customTexts.Absorb.font = "ElvUI Font"
-				E.db.unitframe.units.raid25.customTexts.Absorb.justifyH = "CENTER"
-				E.db.unitframe.units.raid25.customTexts.Absorb.fontOutline = "OUTLINE"
-				E.db.unitframe.units.raid25.customTexts.Absorb.xOffset = 0
-				E.db.unitframe.units.raid25.customTexts.Absorb.yOffset = 3
-				E.db.unitframe.units.raid25.customTexts.Absorb.text_format = "[absorbs]"
-				E.db.unitframe.units.raid25.customTexts.Absorb.size = 10
-			else
-				E.db.unitframe.units.raid25.healPrediction = false
-				E.db.unitframe.units.raid25.health.text_format = "[healthcolor][health:current]"
-				E.db.unitframe.units.raid25.health.frequentUpdates = false
-				E.db.unitframe.units.raid25.height = 44
-				E.db.unitframe.units.raid25.GPSArrow.onMouseOver = true
-				E.db.unitframe.units.raid25.GPSArrow.outOfRange = false
-			end
-			E.db.unitframe.units.raid25.health.orientation = "HORIZONTAL"
-			E.db.unitframe.units.raid25.horizontalSpacing = 1
-			E.db.unitframe.units.raid25.verticalSpacing = 1
-			E.db.unitframe.units.raid25.name.text_format = "[name:medium]"
-			E.db.unitframe.units.raid25.health.yOffset = 8
-			E.db.unitframe.units.raid25.power.width = "inset"
-			E.db.unitframe.units.raid25.debuffs.enable = false
-			E.db.unitframe.units.raid25.rdebuffs.size = 18
-			E.db.unitframe.units.raid25.roleIcon.position = "RIGHT"
-			E.db.unitframe.units.raid25.groupBy = "GROUP"
-			E.db.unitframe.units.raid25.GPSArrow.size = 30
-
-			--Raid 40
-			if layout == "healer" then
-				E.db.unitframe.units.raid40.healPrediction = true
-				E.db.unitframe.units.raid40.health.frequentUpdates = true
-				E.db.unitframe.units.raid40.health.text_format = "[healthcolor][health:deficit]"
-				E.db.unitframe.units.raid40.health.orientation = "VERTICAL"
-			else
-				E.db.unitframe.units.raid40.healPrediction = false
-				E.db.unitframe.units.raid40.health.frequentUpdates = false
-				E.db.unitframe.units.raid40.health.text_format = ""
-				E.db.unitframe.units.raid40.health.orientation = "HORIZONTAL"
-			end
-			E.db.unitframe.units.raid40.horizontalSpacing = 1
-			E.db.unitframe.units.raid40.verticalSpacing = 1
-			E.db.unitframe.units.raid40.name.text_format = "[name:medium]"
-			E.db.unitframe.units.raid40.name.position = "TOP"
-			E.db.unitframe.units.raid40.roleIcon.enable = true
-			E.db.unitframe.units.raid40.roleIcon.position = "RIGHT"
-			E.db.unitframe.units.raid40.groupBy = "GROUP"
-
-			--Tank
-			if layout == "healer" then
-				E.db.unitframe.units.tank.enable = true
-				E.db.unitframe.units.tank.targetsGroup.enable = false
-				E.db.unitframe.units.tank.height = 24
-			else
-				E.db.unitframe.units.tank.enable = false
-			end
-
-			--Assist
-			E.db.unitframe.units.assist.enable = false
-
-			--Arena
-			E.db.unitframe.units.arena.width = 200
-			E.db.unitframe.units.arena.height = 46
-			E.db.unitframe.units.arena.growthDirection = 'DOWN'
-			E.db.unitframe.units.arena.health.position = "RIGHT"
-			E.db.unitframe.units.arena.health.text_format = "[healthcolor][health:current-percent]"
-			E.db.unitframe.units.arena.power.yOffset = 7
-			E.db.unitframe.units.arena.power.width = "inset"
-			E.db.unitframe.units.arena.castbar.format = 'CURRENTMAX'
-			E.db.unitframe.units.arena.castbar.width = 200
-			E.db.unitframe.units.arena.pvpTrinket.xOffset = 0
-			E.db.unitframe.units.arena.name.position = "TOPLEFT"
-
-			--Boss
-			E.db.unitframe.units.boss.width = 200
-			E.db.unitframe.units.boss.growthDirection = 'DOWN'
-			E.db.unitframe.units.boss.portrait.rotation = 345
-			E.db.unitframe.units.boss.portrait.overlay = true
-			E.db.unitframe.units.boss.portrait.camDistanceScale = 4
-			E.db.unitframe.units.boss.portrait.enable = true
-			E.db.unitframe.units.boss.health.position = "RIGHT"
-			E.db.unitframe.units.boss.health.text_format = "[healthcolor][health:current-percent]"
-			E.db.unitframe.units.boss.power.width = "inset"
-			E.db.unitframe.units.boss.power.yOffset = 7
-			E.db.unitframe.units.boss.castbar.format = 'CURRENTMAX'
-			E.db.unitframe.units.boss.castbar.width = 200
-			E.db.unitframe.units.boss.name.position = "TOPLEFT"
-
-			--Power text
-			E.db.sle.powtext = true
-
-	end
-
-	--Actionbars
-	do
-		E.db.actionbar.font = "ElvUI Font"
-		E.db.actionbar.fontOutline = 'OUTLINE'
-		E.db.actionbar.hotkeytext = false
-		E.db.actionbar.keyDown = false
-
-		E.db.actionbar.bar1.point = "TOPLEFT"
-		E.db.actionbar.bar1.buttonsPerRow = 3
-		E.db.actionbar.bar1.buttonspacing = 1
-		E.db.actionbar.bar1.buttonsize = 23
-
-		E.db.actionbar.bar2.enabled = true
-		E.db.actionbar.bar2.point = "TOPLEFT"
-		E.db.actionbar.bar2.buttonsPerRow = 3
-		E.db.actionbar.bar2.buttonspacing = 1
-		E.db.actionbar.bar2.buttonsize = 23
-		E.db.actionbar.bar2.visibility = "[petbattle] hide; show"
-
-		E.db.actionbar.bar3.point = "TOPLEFT"
-		E.db.actionbar.bar3.buttons = 12
-		E.db.actionbar.bar3.buttonsPerRow = 3
-		E.db.actionbar.bar3.buttonspacing = 1
-		E.db.actionbar.bar3.buttonsize = 23
-		E.db.actionbar.bar3.visibility = "[petbattle] hide; show"
-
-		E.db.actionbar.bar4.enabled = true
-		E.db.actionbar.bar4.point = "TOPLEFT"
-		E.db.actionbar.bar4.buttonsPerRow = 6
-		E.db.actionbar.bar4.buttonspacing = 1
-		E.db.actionbar.bar4.buttonsize = 23
-		E.db.actionbar.bar4.visibility = "[petbattle] hide; show"
-		E.db.actionbar.bar4.backdrop = false
-
-		E.db.actionbar.bar5.point = "TOPLEFT"
-		E.db.actionbar.bar5.buttons = 12
-		E.db.actionbar.bar5.buttonspacing = 1
-		E.db.actionbar.bar5.buttonsize = 23
-		E.db.actionbar.bar5.visibility = "[petbattle] hide; show"
-
-		E.db.actionbar.bar6.enabled = true
-		E.db.actionbar.bar6.point = "TOPLEFT"
-		E.db.actionbar.bar6.buttonspacing = 1
-		E.db.actionbar.bar6.mouseover = true
-		E.db.actionbar.bar6.buttonsize = 20
-		E.db.actionbar.bar6.visibility = "show"
-
-		E.db.actionbar.microbar.enabled = true
-		E.db.actionbar.microbar.buttonsPerRow = 2
-
-		E.db.actionbar.stanceBar.buttonspacing = 1
-		E.db.actionbar.stanceBar.buttonsize = 16
-
-		E.db.actionbar.barPet.point = "TOPLEFT"
-		E.db.actionbar.barPet.buttonspacing = 1
-		E.db.actionbar.barPet.backdrop = false
-		E.db.actionbar.barPet.buttonsPerRow = 5
-		E.db.actionbar.barPet.buttonsize = 20
-	end
-
-	--Raid marks--
-	E.db.sle.marks.enabled = true
-	E.db.sle.marks.growth = "LEFT"
-	E.db.sle.marks.backdrop = false
-	E.db.sle.marks.size = 16
-
-	--Combat icon--
-	E.db.sle.combatico.pos = 'TOPRIGHT'
-
-	--Loot History--
-	E.db.sle.lootwin = true
-	E.db.sle.lootalpha = 0.9
-
-	--UI Buttons--
-	E.db.sle.uibuttons.enable = true
-	E.db.sle.uibuttons.size = 15
-
-	--Farm--
-	E.db.sle.farm.size = 23
-	E.db.sle.farm.autotarget = true
-	E.db.sle.farm.quest = true
-	E.db.sle.farm.seedor = "BOTTOM"
-
-	--LocationLite--
-	E.db.loclite.lpfontsize = 10
-	E.db.loclite.lpfontflags = "OUTLINE"
-	E.db.loclite.lpwidth = 300
-	E.db.loclite.dig = false
-	E.db.loclite.lpauto = false
-	E.db.loclite.trans = true
-
-	--Loading private settings--
-	E.private.general.dmgfont = "ElvUI Font"
-
-	E.private.sle.farm.enable = true
-	E.private.sle.farm.seedtrash = true
-
-	E.private.sle.equip.spam = true
-
-	E.private.sle.characterframeoptions.enable = true
-
-	if IsAddOnLoaded("ElvUI_AddOnSkins") then
-		E.private.addonskins.EmbedSkada = true
-		E.private.addonskins.EmbedBelowTop = true
-		E.private.addonskins.EmbedalDamageMeter = false
-		E.private.addonskins.DBMFontSize = 10
-		E.private.addonskins.DBMSkinHalf = true
-		E.private.addonskins.DBMFont = "ElvUI Font"
-		E.private.addonskins.EmbedSystemDual = true
-	end
-
-	E.private.general.normTex = "Polished Wood"
-	E.private.general.glossTex = "Polished Wood"
-
-	--Moving stuff--
-	do
-		if layout == "healer" then
-			E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-308176"
-			E.db.movers.ElvUF_PlayerCastbarMover = "BOTTOMElvUIParentBOTTOM-102135"
-			E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM308176"
-			E.db.movers.ElvUF_TargetCastbarMover = "BOTTOMElvUIParentBOTTOM102135"
-			E.db.movers.ElvUF_TargetTargetMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-446190"
-			E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM308118"
-			E.db.movers.ElvUF_FocusTargetMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-445126"
-			E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM-297147"
-			E.db.movers.ElvUF_PetTargetMover = "BOTTOMElvUIParentBOTTOM-29773"
-			E.db.movers.PetAB = "BOTTOMElvUIParentBOTTOM-298104"
-			E.db.movers.TotemBarMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT442203"
-			E.db.movers.TempEnchantMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT488176"
-			E.db.movers.ElvUF_PartyMover = "BOTTOMElvUIParentBOTTOM0182"
-			E.db.movers.ElvUF_Raid10Mover = "BOTTOMElvUIParentBOTTOM0156"
-			E.db.movers.ElvUF_Raid25Mover = "BOTTOMElvUIParentBOTTOM0156"
-			E.db.movers.ElvUF_Raid40Mover = "BOTTOMElvUIParentBOTTOM0156"
-			E.db.movers.ElvUF_TankMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT428231"
-			E.db.movers.BossButton = "BOTTOMElvUIParentBOTTOM2389"
-			E.db.movers.BNETMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-42743"
-		else
-			E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-214158"
-			E.db.movers.ElvUF_PlayerCastbarMover = "BOTTOMElvUIParentBOTTOM0135"
-			E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM214158"
-			E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM17497"
-			E.db.movers.ElvUF_FocusMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-448158"
-			E.db.movers.ElvUF_FocusTargetMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-450106"
-			E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM-266129"
-			E.db.movers.ElvUF_PetTargetMover = "BOTTOMElvUIParentBOTTOM-161129"
-			E.db.movers.PetAB = "BOTTOMElvUIParentBOTTOM-26685"
-			E.db.movers.TotemBarMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT613100"
-			E.db.movers.TempEnchantMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT557174"
-			E.db.movers.ElvUF_PartyMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT0203"
-			E.db.movers.ElvUF_Raid10Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT0203"
-			E.db.movers.ElvUF_Raid25Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT0203"
-			E.db.movers.ElvUF_Raid40Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT0203"
-			E.db.movers.BossButton = "BOTTOMElvUIParentBOTTOM0195"
-			E.db.movers.BNETMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-42753"
-		end
-		E.db.movers.ElvAB_1 = "BOTTOMElvUIParentBOTTOM020"
-		E.db.movers.ElvAB_2 = "BOTTOMElvUIParentBOTTOM7320"
-		E.db.movers.ElvAB_3 = "BOTTOMElvUIParentBOTTOM-7320"
-		E.db.movers.ElvAB_4 = "BOTTOMElvUIParentBOTTOM-18220"
-		E.db.movers.ElvAB_5 = "BOTTOMElvUIParentBOTTOM18220"
-		E.db.movers.ElvAB_6 = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT0180"
-		E.db.movers.MinimapMover = "TOPRIGHTElvUIParentTOPRIGHT2-19"
-		E.db.movers.UIBFrameMover = "TOPRIGHTElvUIParentTOPRIGHT-1-199"
-		E.db.movers.WatchFrameMover = "TOPRIGHTElvUIParentTOPRIGHT-47-198"
-		E.db.movers.BossHeaderMover = "TOPLEFTElvUIParentTOPLEFT0-280"
-		E.db.movers.ArenaHeaderMover = "TOPLEFTElvUIParentTOPLEFT0-280"
-		E.db.movers.PetBattleABMover = "BOTTOMElvUIParentBOTTOM019"
-		E.db.movers.ShiftAB = "BOTTOMElvUIParentBOTTOM-16168"
-		E.db.movers.ExperienceBarMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-42419"
-		E.db.movers.ReputationBarMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT47319"
-		E.db.movers.PvPMover = "TOPElvUIParentTOP0-39"
-		E.db.movers.LocationMover = "TOPElvUIParentTOP0-28"
-		E.db.movers.LocationLiteMover = "TOPElvUIParentTOP0-19"
-		E.db.movers.MarkMover = "BOTTOMElvUIParentBOTTOM0115"
-		E.db.movers.MicrobarMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT42418"
-		E.db.movers.LootFrameMover = "BOTTOMElvUIParentBOTTOM-287461"
-		E.db.movers.AurasMover = "TOPRIGHTElvUIParentTOPRIGHT-201-18"
-		E.db.movers.GMMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-43319"
-		E.db.movers.VehicleSeatMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT48219"
-		E.db.movers.DP_1_Mover = "TOPLEFTElvUIParentTOPLEFT00"
-		E.db.movers.DP_2_Mover = "TOPLEFTElvUIParentTOPLEFT3850"
-		E.db.movers.DP_3_Mover = "TOPRIGHTElvUIParentTOPRIGHT-3850"
-		E.db.movers.DP_4_Mover = "TOPRIGHTElvUIParentTOPRIGHT00"
-		E.db.movers.DP_5_Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT4110"
-		E.db.movers.DP_6_Mover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-4110"
-		E.db.movers.Bottom_Panel_Mover = "BOTTOMElvUIParentBOTTOM00"
-		E.db.movers.RightChatMover = "BOTTOMRIGHTUIParentBOTTOMRIGHT019"
-		E.db.movers.LeftChatMover = "BOTTOMLEFTUIParentBOTTOMLEFT019"
-		E.db.movers.RaidUtility_Mover = "TOPElvUIParentTOP-305-19"
-		E.db.movers.AltPowerBarMover = "TOPElvUIParentTOP0-39"
-		E.db.movers.FarmSeedMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-300211"
-		E.db.movers.FarmToolMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-175211"
-		E.db.movers.AlertFrameMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT303416"
-	end
-
-	E:UpdateAll(true)
-end
-
-function E:RepoocSetup() --The function to switch from classic ElvUI settings to Repooc's
-	InstallStepComplete.message = L["Repooc's Defaults Set"]
-	InstallStepComplete:Show()
-	if not E.db.movers then E.db.movers = {}; end
-
-	local layout = E.db.layoutSet  --Pull which layout was selected if any.
-	pixel = E.PixelMode  --Pull PixelMode
-
-	E.db.hideTutorial = 1 --5.4
-
-	E.db.general.autoAcceptInvite = true --5.4
---	E.db.general.autoRepair = "GUILD"
-	E.db.general.autoRoll = false --5.4
---	E.db.general.backdropfadecolor = {["r"] = 0.054,["g"] = 0.054,["b"] = 0.054,}
-	E.db.general.bordercolor = {["r"] = 0.31,["g"] = 0.31,["b"] = 0.31,} --5.4
-	E.db.general.bottomPanel = true --5.4
-	E.db.general.experience.orientation = "VERTICAL"
-	E.db.general.experience.height = 180 --5.4
-	E.db.general.experience.width = 10 --5.4
-	E.db.general.interruptAnnounce = "RAID" --5.4
-	E.db.general.minimap.locationText = "SHOW" --5.4
---	E.db.general.health = {}
---	E.db.general.BUFFS = {}
-	E.db.general.reputation.orientation = "VERTICAL"
-	E.db.general.reputation.height = 180 --5.4
-	E.db.general.reputation.orientation = "VERTICAL" --5.4
-	E.db.general.reputation.width = 10 --5.4
---	E.db.general.threat.position = "LEFTCHAT"
-	E.db.general.topPanel = true --5.4
-	E.db.general.valuecolor = {["r"] = 0.09,["g"] = 0.513,["b"] = 0.819,} --5.4
-	E.db.general.vendorGrays = true --5.4
-
-	--SLE Configs
-	E.private.sle.characterframeoptions.enable = true --5.4
-	E.private.sle.exprep.autotrack = true --5.4
-	E.private.sle.farm.enable = true --5.4
-	E.db.sle.characterframeoptions.itemdurability.font = "ElvUI Font" --5.4
-	E.db.sle.characterframeoptions.itemdurability.fontSize = 12 --5.4
-	E.db.sle.characterframeoptions.itemdurability.fontOutline = "OUTLINE" --5.4
-	E.db.sle.characterframeoptions.itemlevel.font = "ElvUI Alt-Font" --5.4
-	E.db.sle.characterframeoptions.itemlevel.fontOutline = "THICKOUTLINE" --5.4
-	E.db.sle.characterframeoptions.itemlevel.fontSize = 12 --5.4
-	E.db.sle.datatext.bottom.enabled = false --5.4
-	E.db.sle.datatext.chatleft.width = 396 --5.4
-	E.db.sle.datatext.chatright.width = 396 --5.4
-	E.db.sle.datatext.dp1.enabled = false --5.4
-	E.db.sle.datatext.dp2.enabled = false --5.4
-	E.db.sle.datatext.dp3.enabled = false --5.4
-	E.db.sle.datatext.dp4.enabled = false --5.4
-	E.db.sle.datatext.dp5.enabled = false --5.4
-	E.db.sle.datatext.dp6.enabled = false --5.4
-	E.db.sle.datatext.top.enabled = false --5.4
-	E.db.sle.dt.friends.hide_hintline = true --5.4
-	E.db.sle.dt.friends.sortBN = "REALID" --5.4
-	E.db.sle.dt.guild.hide_hintline = true --5.4
-	E.db.sle.dt.guild.sortGuild = "revRANKINDEX" --5.4
-	E.db.sle.farm.autotarget = true --5.4
-	E.db.sle.minimap.enable = true --5.4
-	E.db.sle.minimap.buttons.anchor = "HORIZONTAL" --5.4
-	E.db.sle.minimap.coords.middle = "CENTER" --5.4
-	E.db.sle.uibuttons.enable = true --5.4
-	E.db.sle.uibuttons.position = "uib_hor" --5.4
-	E.db.sle.uibuttons.size = 17 --5.4
-
-	E.private.general.pixelPerfect = true --5.4
-	E.private.general.normTex = "Minimalist" --5.4
-	E.private.general.glossTex = "Minimalist" --5.4
-
-	--Addon Skins
-	if IsAddOnLoaded("ElvUI_AddOnSkins") then
-		E.private.addonskins.EmbedSkada = true --5.4
-		E.private.addonskins.EmbedalDamageMeter = false --5.4
-		E.private.addonskins.EmbedSystemDual = true --5.4
-	end
-
-
---	E.db.gridSize = 110
---	E.db.tooltip.style = "inset"
-
-	--Chat
-	E.db.chat.editBoxPosition = "ABOVE_CHAT" --5.4
-	E.db.chat.hyperlinkHover = false --5.4
-	E.db.chat.panelTabTransparency = true --5.4
-	if GetScreenWidth() < 1920 then --5.4
-		E.db.chat.panelWidth = 380
-	else
-		E.db.chat.panelWidth = 412
-	end
-	E.db.chat.timeStampFormat = "%I:%M %p " --5.4
-
-	--Unitframes
-	E.db.unitframe.smartRaidFilter = true
-	E.db.unitframe.font = "KGSmallTownSouthernGirl"
-	E.db.unitframe.fontOutline = "OUTLINE"
-	E.db.unitframe.fontSize = 12
-	E.db.unitframe.statusbar = "Polished Wood"
-	E.db.unitframe.colors.healthclass = false
-	E.db.unitframe.colors.castColor = {["r"] = 0.1,["g"] = 0.1,["b"] = 0.1,}
-	E.db.unitframe.colors.health = {["r"] = 0.2352941176470588,["g"] = 0.2352941176470588,["b"] = 0.2352941176470588,}
-	E.db.unitframe.colors.auraBarBuff = {["b"] = 0.09411764705882353,["g"] = 0.07843137254901961,["r"] = 0.3098039215686275,}
-	E.db.unitframe.colors.transparentPower = true
-	E.db.unitframe.colors.transparentHealth = true
-	E.db.unitframe.colors.colorhealthbyvalue = false
-	E.db.unitframe.colors.customhealthbackdrop = true
-	E.db.unitframe.colors.health_backdrop = {["r"] = 0.7333333333333333,["g"] = 0,["b"] = 0.01176470588235294,}
-
-	E.db.unitframe.units.tank.enable = false
-
-	E.db.unitframe.units.assist.enable = false
-	E.db.unitframe.units.assist.targetsGroup.enable = false
-
-	E.db.unitframe.units.arena.power.width = "inset"
-	E.db.unitframe.units.arena.power.offset = 0
-
-	E.db.unitframe.units.targettarget.power.width = "inset"
-	E.db.unitframe.units.targettarget.power.offset = 0
-	E.db.unitframe.units.targettarget.width = 190
-	E.db.unitframe.units.targettarget.health.xOffset = 5
-	E.db.unitframe.units.targettarget.health.text_format = "[healthcolor][health:current]"
-	E.db.unitframe.units.targettarget.health.position = "TOPRIGHT"
-
-	E.db.unitframe.units.pet.power.width = "inset"
-	E.db.unitframe.units.pet.power.offset = 0
-
-	E.db.unitframe.units.pettarget.power.width = "inset"
-	E.db.unitframe.units.pettarget.power.offset = 0
-
-	E.db.unitframe.units.boss.portrait.enable = true
-	E.db.unitframe.units.boss.portrait.overlay = true
-	E.db.unitframe.units.boss.power.width = "inset"
-	E.db.unitframe.units.boss.power.offset = 0
-
-	E.db.unitframe.units.focus.power.width = "inset"
-	E.db.unitframe.units.focus.power.offset = 0
-	E.db.unitframe.units.focus.health.text_format = "[healthcolor][health:current]"
-
-	E.db.unitframe.units.player.debuffs.attachTo = "FRAME"
-	E.db.unitframe.units.player.debuffs.sizeOverride = 25
-	E.db.unitframe.units.player.debuffs.yOffset = 2
-	E.db.unitframe.units.player.portrait.overlay = true
-	E.db.unitframe.units.player.portrait.enable = true
-	E.db.unitframe.units.player.classbar.enable = false
-	E.db.unitframe.units.player.classbar.height = 7
-	E.db.unitframe.units.player.classbar.fill = "spaced"
-	E.db.unitframe.units.player.aurabar.enable = false
-	E.db.unitframe.units.player.power.width = "inset"
-	E.db.unitframe.units.player.power.offset = 0
-	E.db.unitframe.units.player.power.position = "LEFT"
-	E.db.unitframe.units.player.width = 404
-	E.db.unitframe.units.player.name.text_format = "[namecolor][name]"
-	E.db.unitframe.units.player.buffs.enable = true
-	E.db.unitframe.units.player.buffs.attachTo = "FRAME"
-	E.db.unitframe.units.player.buffs.noDuration = false
-	E.db.unitframe.units.player.buffs.yOffset = 4
-	E.db.unitframe.units.player.buffs.xOffset = -2
-	E.db.unitframe.units.player.buffs.anchorPoint = "LEFT"
-	E.db.unitframe.units.player.buffs.numrows = 3
-	E.db.unitframe.units.player.buffs.perrow = 3
-	E.db.unitframe.units.player.buffs.sizeOverride = 25
-	E.db.unitframe.units.player.castbar.width = 404
-	E.db.unitframe.units.player.castbar.height = 20
-	E.db.unitframe.units.player.castbar.latency = false
-	E.db.unitframe.units.player.height = 36
-	E.db.unitframe.units.player.health.position = "RIGHT"
-
-	E.db.unitframe.units.target.portrait.enable = true
-	E.db.unitframe.units.target.portrait.overlay = true
-	E.db.unitframe.units.target.aurabar.enable = false
-	E.db.unitframe.units.target.power.width = "inset"
-	E.db.unitframe.units.target.power.offset = 0
-	E.db.unitframe.units.target.power.position = "RIGHT"
-	E.db.unitframe.units.target.debuffs.sizeOverride = 25
-	E.db.unitframe.units.target.debuffs.attachTo = "FRAME"
-	E.db.unitframe.units.target.debuffs.yOffset = 2
-	E.db.unitframe.units.target.castbar.height = 20
-	E.db.unitframe.units.target.castbar.width = 404
-	E.db.unitframe.units.target.width = 404
-	E.db.unitframe.units.target.height = 36
-	E.db.unitframe.units.target.health.position = "LEFT"
-	E.db.unitframe.units.target.buffs.sizeOverride = 25
-	E.db.unitframe.units.target.buffs.anchorPoint = "RIGHT"
-	E.db.unitframe.units.target.buffs.numrows = 3
-	E.db.unitframe.units.target.buffs.perrow = 3
-	E.db.unitframe.units.target.buffs.yOffset = 4
-	E.db.unitframe.units.target.buffs.xOffset = 2
-
-	E.db.unitframe.units.focustarget.power.width = "inset"
-	E.db.unitframe.units.focustarget.power.offset = 0
-
-	if not E.db.unitframe.units.party.customTexts then
-		E.db.unitframe.units.party.customTexts = {};
-		if not E.db.unitframe.units.party.customTexts["Health Text"] then
-			E.db.unitframe.units.party.customTexts["Health Text"] = {};
-		end
-	end
-	E.db.unitframe.units.party.customTexts["Health Text"] = {
-		["font"] = "Doris PP",
-		["justifyH"] = "CENTER",
-		["fontOutline"] = "OUTLINE",
-		["xOffset"] = 0,
-		["size"] = 10,
-		["text_format"] = "[healthcolor][health:deficit]",
-		["yOffset"] = -7,
-	}
-	E.db.unitframe.units.party.debuffs.xOffset = -4
-	E.db.unitframe.units.party.debuffs.yOffset = -7
-	E.db.unitframe.units.party.debuffs.anchorPoint = "TOPRIGHT"
-	E.db.unitframe.units.party.debuffs.sizeOverride = 21
-	E.db.unitframe.units.party.columnAnchorPoint = "BOTTOM"
-	E.db.unitframe.units.party.point = "RIGHT"
-	E.db.unitframe.units.party.xOffset = -1
-	E.db.unitframe.units.party.yOffset = 1
-	E.db.unitframe.units.party.power.width = "inset"
-	E.db.unitframe.units.party.power.offset = 0
-	E.db.unitframe.units.party.power.text_format = ""
-	E.db.unitframe.units.party.buffIndicator.size = 10
-	E.db.unitframe.units.party.roleIcon.enable = false
-	E.db.unitframe.units.party.roleIcon.position = "BOTTOMRIGHT"
-	E.db.unitframe.units.party.GPSArrow.size = 40
-	E.db.unitframe.units.party.growthDirection = "RIGHT_DOWN"
-	E.db.unitframe.units.party.startOutFromCenter = true
-	E.db.unitframe.units.party.healPrediction = true
-	E.db.unitframe.units.party.health.frequentUpdates = true
-	E.db.unitframe.units.party.health.text_format = ""
-	E.db.unitframe.units.party.health.position = "BOTTOM"
-	E.db.unitframe.units.party.health.orientation = "VERTICAL"
-	E.db.unitframe.units.party.name.text_format = "[namecolor][name:short] [difficultycolor][smartlevel]"
-	E.db.unitframe.units.party.name.position = "TOP"
-	E.db.unitframe.units.party.buffs.noConsolidated = false
-	E.db.unitframe.units.party.buffs.enable = true
-	E.db.unitframe.units.party.buffs.anchorPoint = "BOTTOMLEFT"
-	E.db.unitframe.units.party.buffs.clickThrough = true
-	E.db.unitframe.units.party.buffs.useBlacklist = false
-	E.db.unitframe.units.party.buffs.noDuration = false
-	E.db.unitframe.units.party.buffs.playerOnly = false
-	E.db.unitframe.units.party.buffs.perrow = 1
-	E.db.unitframe.units.party.buffs.useFilter = "TurtleBuffs"
-	E.db.unitframe.units.party.buffs.yOffset = 28
-	E.db.unitframe.units.party.buffs.xOffset = 30
-	E.db.unitframe.units.party.buffs.sizeOverride = 22
-	E.db.unitframe.units.party.petsGroup.anchorPoint = "TOP"
-	E.db.unitframe.units.party.raidicon.attachTo = "LEFT"
-	E.db.unitframe.units.party.raidicon.xOffset = 9
-	E.db.unitframe.units.party.raidicon.size = 13
-	E.db.unitframe.units.party.raidicon.yOffset = 0
-	E.db.unitframe.units.party.targetsGroup.anchorPoint = "TOP"
-	E.db.unitframe.units.party.width = 80
-	E.db.unitframe.units.party.height = 45
-	E.db.unitframe.units.party.groupBy = "GROUP"
-	E.db.unitframe.units.party.visibility = "[@raid6,exists] hide;show"
-
-	if not E.db.unitframe.units.raid10.customTexts then
-		E.db.unitframe.units.raid10.customTexts = {};
-		if not E.db.unitframe.units.raid10.customTexts["Health Text"] then
-			E.db.unitframe.units.raid10.customTexts["Health Text"] = {};
-		end
-	end
-	E.db.unitframe.units.raid10.customTexts["Health Text"] = {
-		["font"] = "Doris PP",
-		["justifyH"] = "CENTER",
-		["fontOutline"] = "OUTLINE",
-		["xOffset"] = 0,
-		["size"] = 10,
-		["text_format"] = "[healthcolor][health:deficit]",
-		["yOffset"] = -7,
-	}
-	E.db.unitframe.units.raid10.columnAnchorPoint = "BOTTOM"
-	E.db.unitframe.units.raid10.point = "RIGHT"
-	E.db.unitframe.units.raid10.rdebuffs.enable = false
-	E.db.unitframe.units.raid10.yOffset = 4
-	E.db.unitframe.units.raid10.xOffset = -1
-	E.db.unitframe.units.raid10.roleIcon.enable = false
-	E.db.unitframe.units.raid10.power.width = "inset"
-	E.db.unitframe.units.raid10.power.offset = 0
-	E.db.unitframe.units.raid10.growthDirection = "RIGHT_DOWN"
-	E.db.unitframe.units.raid10.startOutFromCenter = true
-	E.db.unitframe.units.raid10.healPrediction = true
-	E.db.unitframe.units.raid10.health.frequentUpdates = true
-	E.db.unitframe.units.raid10.health.text_format = ""
-	E.db.unitframe.units.raid10.health.orientation = "VERTICAL"
-	E.db.unitframe.units.raid10.debuffs.enable = true
-	E.db.unitframe.units.raid10.debuffs.anchorPoint = "TOPRIGHT"
-	E.db.unitframe.units.raid10.buffs.enable = true
-	E.db.unitframe.units.raid10.buffs.noConsolidated = false
-	E.db.unitframe.units.raid10.buffs.anchorPoint = "BOTTOMLEFT"
-	E.db.unitframe.units.raid10.buffs.clickThrough = true
-	E.db.unitframe.units.raid10.buffs.useBlacklist = false
-	E.db.unitframe.units.raid10.buffs.noDuration = false
-	E.db.unitframe.units.raid10.buffs.playerOnly = false
-	E.db.unitframe.units.raid10.buffs.perrow = 1
-	E.db.unitframe.units.raid10.buffs.useFilter = "TurtleBuffs"
-	E.db.unitframe.units.raid10.raidicon.attachTo = "LEFT"
-	E.db.unitframe.units.raid10.raidicon.xOffset = 9
-	E.db.unitframe.units.raid10.raidicon.size = 13
-	E.db.unitframe.units.raid10.raidicon.yOffset = 0
-	E.db.unitframe.units.raid10.name.text_format = "[namecolor][name:short]"
-	E.db.unitframe.units.raid10.debuffs.sizeOverride = 21
-	E.db.unitframe.units.raid10.debuffs.xOffset = -4
-	E.db.unitframe.units.raid10.debuffs.yOffset = -7
-	E.db.unitframe.units.raid10.height = 45
-	E.db.unitframe.units.raid10.width = 80
-	E.db.unitframe.units.raid10.buffs.yOffset = 28
-	E.db.unitframe.units.raid10.buffs.xOffset = 30
-	E.db.unitframe.units.raid10.buffs.sizeOverride = 22
-	E.db.unitframe.units.raid10.groupBy = "GROUP"
-
-	if not E.db.unitframe.units.raid25.customTexts then
-		E.db.unitframe.units.raid25.customTexts = {};
-		if not E.db.unitframe.units.raid25.customTexts["Health Text"] then
-			E.db.unitframe.units.raid25.customTexts["Health Text"] = {};
-		end
-	end
-	E.db.unitframe.units.raid25.customTexts["Health Text"] = {
-		["font"] = "Doris PP",
-		["justifyH"] = "CENTER",
-		["fontOutline"] = "OUTLINE",
-		["xOffset"] = 0,
-		["size"] = 10,
-		["text_format"] = "[healthcolor][health:deficit]",
-		["yOffset"] = -7,
-	}
-	E.db.unitframe.units.raid25.columnAnchorPoint = "RIGHT"
-	E.db.unitframe.units.raid25.point = "BOTTOM"
-	E.db.unitframe.units.raid25.rdebuffs.enable = false
-	E.db.unitframe.units.raid25.xOffset = 1
-	E.db.unitframe.units.raid25.roleIcon.enable = false
-	E.db.unitframe.units.raid25.power.offset = 0
-	E.db.unitframe.units.raid25.power.width = "inset"
-	E.db.unitframe.units.raid25.power.position = "CENTER"
-	E.db.unitframe.units.raid25.growthDirection = "RIGHT_DOWN"
-	E.db.unitframe.units.raid25.startOutFromCenter = true
-	E.db.unitframe.units.raid25.healPrediction = true
-	E.db.unitframe.units.raid25.health.frequentUpdates = true
-	E.db.unitframe.units.raid25.health.text_format = ""
-	E.db.unitframe.units.raid25.health.orientation = "VERTICAL"
-	E.db.unitframe.units.raid25.debuffs.anchorPoint = "TOPRIGHT"
-	E.db.unitframe.units.raid25.debuffs.enable = true
-	E.db.unitframe.units.raid25.debuffs.xOffset = -4
-	E.db.unitframe.units.raid25.debuffs.yOffset = -7
-	E.db.unitframe.units.raid25.debuffs.sizeOverride = 21
-	E.db.unitframe.units.raid25.debuffs.countFontSize = 12
-	E.db.unitframe.units.raid25.debuffs.fontSize = 9
-	E.db.unitframe.units.raid25.raidicon.attachTo = "LEFT"
-	E.db.unitframe.units.raid25.raidicon.xOffset = 9
-	E.db.unitframe.units.raid25.raidicon.yOffset = 0
-	E.db.unitframe.units.raid25.raidicon.size = 13
-	E.db.unitframe.units.raid25.buffs.noConsolidated = false
-	E.db.unitframe.units.raid25.buffs.enable = true
-	E.db.unitframe.units.raid25.buffs.anchorPoint = "BOTTOMLEFT"
-	E.db.unitframe.units.raid25.buffs.clickThrough = true
-	E.db.unitframe.units.raid25.buffs.useBlacklist = false
-	E.db.unitframe.units.raid25.buffs.noDuration = false
-	E.db.unitframe.units.raid25.buffs.playerOnly = false
-	E.db.unitframe.units.raid25.buffs.perrow = 1
-	E.db.unitframe.units.raid25.buffs.useFilter = "TurtleBuffs"
-	E.db.unitframe.units.raid25.name.text_format = "[namecolor][name:short]"
-	E.db.unitframe.units.raid25.yOffset = 4
-	E.db.unitframe.units.raid25.width = 80
-	E.db.unitframe.units.raid25.height = 40
-	E.db.unitframe.units.raid25.buffs.yOffset = 28
-	E.db.unitframe.units.raid25.buffs.xOffset = 30
-	E.db.unitframe.units.raid25.buffs.sizeOverride = 22
-	E.db.unitframe.units.raid25.groupBy = "GROUP"
-
-	if not E.db.unitframe.units.raid40.customTexts then
-		E.db.unitframe.units.raid40.customTexts = {};
-		if not E.db.unitframe.units.raid40.customTexts["Health Text"] then
-			E.db.unitframe.units.raid40.customTexts["Health Text"] = {};
-		end
-	end
-	E.db.unitframe.units.raid40.customTexts["Health Text"] = {
-		["font"] = "Doris PP",
-		["justifyH"] = "CENTER",
-		["fontOutline"] = "OUTLINE",
-		["xOffset"] = 0,
-		["size"] = 10,
-		["text_format"] = "[healthcolor][health:deficit]",
-		["yOffset"] = -7,
-	}
-	E.db.unitframe.units.raid40.columnAnchorPoint = "RIGHT"
-	E.db.unitframe.units.raid40.point = "BOTTOM"
-	E.db.unitframe.units.raid40.xOffset = 1
-	E.db.unitframe.units.raid40.yOffset = 1
-	E.db.unitframe.units.raid40.growthDirection = "RIGHT_DOWN"
-	E.db.unitframe.units.raid40.startOutFromCenter = true
-	E.db.unitframe.units.raid40.healPrediction = true
-	E.db.unitframe.units.raid40.width = 48
-	E.db.unitframe.units.raid40.height = 43
-	E.db.unitframe.units.raid40.raidicon.xOffset = 9
-	E.db.unitframe.units.raid40.raidicon.yOffset = 0
-	E.db.unitframe.units.raid40.raidicon.size = 13
-	E.db.unitframe.units.raid40.raidicon.attachTo = "LEFT"
-	E.db.unitframe.units.raid40.rdebuffs.size = 26
-	E.db.unitframe.units.raid40.name.position = "TOP"
-	E.db.unitframe.units.raid40.name.text_position = "[namecolor][name:short]"
-	E.db.unitframe.units.raid40.power.enable = true
-	E.db.unitframe.units.raid40.power.offset = 0
-	E.db.unitframe.units.raid40.power.width = "inset"
-	E.db.unitframe.units.raid40.power.position = "CENTER"
-	E.db.unitframe.units.raid40.health.frequentUpdates = true
-	E.db.unitframe.units.raid40.health.orientation = "VERTICAL"
-	E.db.unitframe.units.raid40.debuffs.sizeOverride = 21
-	E.db.unitframe.units.raid40.debuffs.enable = true
-	E.db.unitframe.units.raid40.debuffs.perrow = 2
-	E.db.unitframe.units.raid40.debuffs.anchorPoint = "TOPRIGHT"
-	E.db.unitframe.units.raid40.debuffs.clickThrough = true
-	E.db.unitframe.units.raid40.debuffs.xOffset = -4
-	E.db.unitframe.units.raid40.debuffs.yOffset = -9
-	E.db.unitframe.units.raid40.debuffs.useBlacklist = false
-	E.db.unitframe.units.raid40.debuffs.useFilter = "Blacklist"
-	E.db.unitframe.units.raid40.buffs.xOffset = 21
-	E.db.unitframe.units.raid40.buffs.yOffset = 25
-	E.db.unitframe.units.raid40.buffs.anchorPoint = "BOTTOMLEFT"
-	E.db.unitframe.units.raid40.buffs.clickThrough = true
-	E.db.unitframe.units.raid40.buffs.noConsolidated = false
-	E.db.unitframe.units.raid40.buffs.noDuration = false
-	E.db.unitframe.units.raid40.buffs.playerOnly = false
-	E.db.unitframe.units.raid40.buffs.perrow = 1
-	E.db.unitframe.units.raid40.buffs.useFilter = "TurtleBuffs"
-	E.db.unitframe.units.raid40.buffs.sizeOverride = 17
-	E.db.unitframe.units.raid40.buffs.useBlacklist = false
-	E.db.unitframe.units.raid40.buffs.enable = true
-	E.db.unitframe.units.raid40.groupBy = "GROUP"
-
-	--Actionbars
-	--Bar 1
-	E.db.actionbar.bar1.enabled = true
-	E.db.actionbar.bar1.backdrop = true
-	E.db.actionbar.bar1.buttons = 12
-	E.db.actionbar.bar1.buttonsize = 32
-	E.db.actionbar.bar1.buttonspacing = 2
-	--Bar 2
-	E.db.actionbar.bar2.enabled = true
-	E.db.actionbar.bar2.backdrop = false
-	E.db.actionbar.bar2.buttons = 6
-	E.db.actionbar.bar2.buttonsize = 32
-	E.db.actionbar.bar2.buttonspacing = 2
-	E.db.actionbar.bar2.buttonsPerRow = 6
-	E.db.actionbar.bar2.heightMult = 1
-	--Bar 3
-	E.db.actionbar.bar3.enabled = true
-	E.db.actionbar.bar3.backdrop = false
-	E.db.actionbar.bar3.buttons = 6
-	E.db.actionbar.bar3.buttonsize = 32
-	E.db.actionbar.bar3.buttonspacing = 2
-	E.db.actionbar.bar3.buttonsPerRow = 6
-	--Bar 4
-	E.db.actionbar.bar4.enabled = true
-	E.db.actionbar.bar4.backdrop = false
-	E.db.actionbar.bar4.buttons = 12
-	E.db.actionbar.bar4.buttonsize = 32
-	E.db.actionbar.bar4.buttonspacing = 2
-	E.db.actionbar.bar4.buttonsPerRow = 6
-	E.db.actionbar.bar4.mouseover = true
-	E.db.actionbar.bar4.point = "BOTTOMLEFT"
-	--Bar 5
-	E.db.actionbar.bar5.enabled = true
-	E.db.actionbar.bar5.backdrop = true
-	E.db.actionbar.bar5.buttons = 6
-	E.db.actionbar.bar5.buttonsize = 32
-	E.db.actionbar.bar5.buttonspacing = 2
-	E.db.actionbar.bar5.buttonsPerRow = 3
-	E.db.actionbar.bar5.mouseover = true
-	--Stance Bar
-	E.db.actionbar.stanceBar.buttonsPerRow = 1
-	--Pet Bar
-	E.db.actionbar.barPet.point = "TOPRIGHT"
-	E.db.actionbar.barPet.buttonsPerRow = 1
-
-	--Datatext
-	do
-		E.db.datatexts.panelTransparency = false --5.4
-		E.db.datatexts.minimapPanels = true --5.4
-		E.db.datatexts.fontOutline = "None" --5.4
-		E.db.datatexts.panels['LeftChatDataPanel']['left'] = "" --5.4
-		E.db.datatexts.panels['LeftChatDataPanel']['middle'] = "Durability" --5.4
-		E.db.datatexts.panels['LeftChatDataPanel']['right'] = "" --5.4
-		E.db.datatexts.panels['RightChatDataPanel']['left'] = "Gold" --5.4
-		E.db.datatexts.panels['RightChatDataPanel']['middle'] = "System" --5.4
-		E.db.datatexts.panels['RightChatDataPanel']['right'] = "Time" --5.4
-		E.db.datatexts.panels['Top_Center'] = "Version" --5.4
-		E.db.datatexts.panels['LeftMiniPanel'] = "S&L Friends" --5.4
-		E.db.datatexts.panels['RightMiniPanel'] = "S&L Guild" --5.4
-
-		--Datatext Panels Spec Specific
-		if layout == 'tank' then
-			E.db.datatexts.panels['LeftChatDataPanel']['left'] = "Avoidance" --5.4
-			E.db.datatexts.panels['LeftChatDataPanel']['right'] = "Vengeance" --5.4
-		elseif layout == 'healer' then
-			E.db.datatexts.panels['LeftChatDataPanel']['left'] = "Spell/Heal Power" --5.4
-			E.db.datatexts.panels['LeftChatDataPanel']['right'] = "Haste" --5.4
-		elseif layout == 'dpsCaster' then
-			E.db.datatexts.panels['LeftChatDataPanel']['left'] = "Spell/Heal Power" --5.4
-			E.db.datatexts.panels['LeftChatDataPanel']['right'] = "Haste" --5.4
-		end
-	end
-
-	do
-		E.db.movers.ArenaHeaderMover = "TOPRIGHTElvUIParentTOPRIGHT-210-410"
-		E.db.movers.BossButton = "BOTTOMElvUIParentBOTTOM-315300"
-		E.db.movers.BossHeaderMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-210435"
-		E.db.movers.Bottom_Panel_Mover = "BOTTOMElvUIParentBOTTOM00"
-		E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-20782"
-		E.db.movers.ElvUF_PlayerCastbarMover = "BOTTOMElvUIParentBOTTOM-20758"
-		E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM20782"
-		E.db.movers.ElvUF_TargetCastbarMover = "BOTTOMElvUIParentBOTTOM20758"
-		E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM314223"
-		--E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310432"
-		E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM-314223"
-		E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM0230"
-		E.db.movers.ElvAB_1 = "BOTTOMElvUIParentBOTTOM021"
-		E.db.movers.ElvAB_2 = "BOTTOMElvUIParentBOTTOM-30821"
-		E.db.movers.ElvAB_3 = "BOTTOMElvUIParentBOTTOM30821"
-		--E.db.movers.ElvAB_4 = "BOTTOMLEFTElvUIParentBOTTOMRIGHT-380200"
-		E.db.movers.ElvAB_4 = "BOTTOMLEFTElvUIParentBOTTOMRIGHT-413200"
-		--E.db.movers.ElvAB_5 = "BOTTOMElvUIParentBOTTOM-26027"
-		E.db.movers.ElvAB_5 = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-4298"
-		E.db.movers.ElvUF_PetMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-551312"
-		E.db.movers.Top_Center_Mover = "TOPElvUIParentTOP00"
-		E.db.movers.PetAB = "RIGHTElvUIParentRIGHT00"
-		E.db.movers.MinimapMover = "TOPRIGHTElvUIParentTOPRIGHT00"
-		E.db.movers.LossControlMover = "TOPElvUIParentTOP0-379"
-		E.db.movers.ShiftAB = "BOTTOMLEFTElvUIParentBOTTOMLEFT41220"
-		E.db.movers.LeftChatMover = "BOTTOMLEFTUIParentBOTTOMLEFT019"
-		E.db.movers.RightChatMover = "BOTTOMRIGHTUIParentBOTTOMRIGHT019"
-		E.db.movers.TotemBarMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT41219"
-		E.db.movers.UIBFrameMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT315178"
-		E.db.movers.WatchFrameMover = "TOPLEFTElvUIParentTOPLEFT75-239"
-		E.db.movers.ExperienceBarMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-42619"
-		E.db.movers.ReputationBarMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-41419"
-		if layout == 'dpsCaster' or layout == 'dpsMelee' or layout == 'tank' then
-			E.db.movers.ElvUF_PartyMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT7200"
-			E.db.movers.ElvUF_Raid10Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT7200"
-			E.db.movers.ElvUF_Raid25Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT7200"
-			--E.db.movers.ElvUF_Raid25Mover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT1162121"
-			E.db.movers.ElvUF_Raid40Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT7200"
-		else
-			E.db.movers.ElvUF_PartyMover = "BOTTOMElvUIParentBOTTOM0121"
-			E.db.movers.ElvUF_Raid10Mover = "BOTTOMElvUIParentBOTTOM0121"
-			E.db.movers.ElvUF_Raid25Mover = "BOTTOMElvUIParentBOTTOM0121"
-			--E.db.movers.ElvUF_Raid25Mover = "BOTTOMRIGHTElvUIParentBOTTOMLEFT1162121"
-			E.db.movers.ElvUF_Raid40Mover = "BOTTOMElvUIParentBOTTOM0121"
-		end
-	end
-
-	E:UpdateAll(true)
-end
-
-function E:AffinitiiSetup() --The function to switch from class ElvUI settings to Affinitii's
-	InstallStepComplete.message = L["Affinitii's Defaults Set"]
-	InstallStepComplete:Show()
-	if not E.db.movers then E.db.movers = {}; end
-	layout = E.db.layoutSet  --Pull which layout was selected if any.
-	pixel = E.PixelMode  --Pull PixelMode
-	E.private.general.pixelPerfect = true
-	E.db.general.autoAcceptInvite = true
-	E.db.general.autoRepair = "GUILD"
-	E.db.general.bottomPanel = false
-	E.db.general.topPanel = false
-	E.db.general.backdropfadecolor = {
-		["r"] = 0.054,
-		["g"] = 0.054,
-		["b"] = 0.054,
-	}
-	E.db.general.valuecolor = {
-		["r"] = 0.09,
-		["g"] = 0.513,
-		["b"] = 0.819,
-	}
-	E.db.general.health = {
-	}
-	E.db.general.BUFFS = {
-	}
-	E.db.general.vendorGrays = true
-	E.db.general.autoRoll = true
-	E.db.general.threat.position = "LEFTCHAT"
-
-	E.private.general.normTex = "Polished Wood"
-	E.private.general.glossTex = "Polished Wood"
-	E.private.skins.addons.EmbedSkada = true
-	E.private.skins.addons.AlwaysTrue = true
-
-	E.db.gridSize = 110
-	E.db.hideTutorial = 1
-
-	E.db.tooltip.style = "inset"
-
-	--Chat
-	E.db.chat.editBoxPosition = "ABOVE_CHAT"
-	E.db.chat.emotionIcons = false
-	if GetScreenWidth() < 1920 then
-		E.db.chat.panelWidth = 380
-	else
-		E.db.chat.panelWidth = 412
-	end
-
-	--Unitframes
-	E.db.unitframe.font = "ElvUI Pixel"
-	E.db.unitframe.fontOutline = "MONOCHROMEOUTLINE"
-	E.db.unitframe.statusbar = "Polished Wood"
-	E.db.unitframe.smartRaidFilter = true
-	E.db.unitframe.colors.healthclass = false
-	E.db.unitframe.colors.castColor = {
-		["r"] = 0.1,
-		["g"] = 0.1,
-		["b"] = 0.1,
-	}
-	E.db.unitframe.colors.health = {--
-		["r"] = 0.2352941176470588,
-		["g"] = 0.2352941176470588,
-		["b"] = 0.2352941176470588,
-	}
-	E.db.unitframe.colors.auraBarBuff = {
-		["b"] = 0.09411764705882353,
-		["g"] = 0.07843137254901961,
-		["r"] = 0.3098039215686275,
-	}
-	E.db.unitframe.colors.transparentPower = true
-	E.db.unitframe.colors.transparentHealth = true
-
-	E.db.unitframe.units.tank.enable = false
-
-	E.db.unitframe.units.assist.enable = false
-	E.db.unitframe.units.assist.targetsGroup.enable = false
-
-	E.db.unitframe.units.arena.power.width = "inset"
-	E.db.unitframe.units.arena.power.offset = 0
-
-	E.db.unitframe.units.targettarget.power.width = "inset"
-	E.db.unitframe.units.targettarget.power.offset = 0
-
-	E.db.unitframe.units.pet.power.width = "inset"
-	E.db.unitframe.units.pet.power.offset = 0
-
-	E.db.unitframe.units.pettarget.power.width = "inset"
-
-	E.db.unitframe.units.boss.portrait.enable = true
-	E.db.unitframe.units.boss.portrait.overlay = true
-	E.db.unitframe.units.boss.power.width = "inset"
-	E.db.unitframe.units.boss.power.offset = 0
-
-	E.db.unitframe.units.focus.power.width = "inset"
-	E.db.unitframe.units.focus.power.offset = 0
-
-	E.db.unitframe.units.player.debuffs.attachTo = "BUFFS"
-	E.db.unitframe.units.player.portrait.overlay = true
-	E.db.unitframe.units.player.portrait.enable = true
-	E.db.unitframe.units.player.classbar.enable = false
-	E.db.unitframe.units.player.aurabar.enable = false
-	E.db.unitframe.units.player.power.width = "inset"
-	E.db.unitframe.units.player.power.offset = 0
-	E.db.unitframe.units.player.buffs.enable = true
-	E.db.unitframe.units.player.buffs.attachTo = "FRAME"
-	E.db.unitframe.units.player.buffs.noDuration = false
-	E.db.unitframe.units.player.castbar.width = 410
-	E.db.unitframe.units.player.castbar.height = 25
-
-	E.db.unitframe.units.target.portrait.enable = true
-	E.db.unitframe.units.target.portrait.overlay = true
-	E.db.unitframe.units.target.aurabar.enable = false
-	E.db.unitframe.units.target.power.width = "inset"
-	E.db.unitframe.units.target.power.offset = 0
-
-	E.db.unitframe.units.focustarget.power.width = "inset"
-
-	if not E.db.unitframe.units.party.customTexts then
-		E.db.unitframe.units.party.customTexts = {};
-		if not E.db.unitframe.units.party.customTexts["Health Text"] then
-			E.db.unitframe.units.party.customTexts["Health Text"] = {};
-		end
-	end
-	E.db.unitframe.units.party.customTexts["Health Text"] = {
-		["font"] = "ElvUI Pixel",
-		["justifyH"] = "CENTER",
-		["fontOutline"] = "MONOCHROMEOUTLINE",
-		["xOffset"] = 0,
-		["size"] = 10,
-		["text_format"] = "[healthcolor][health:deficit]",
-		["yOffset"] = -7,
-	}
-	E.db.unitframe.units.party.debuffs.xOffset = -4
-	E.db.unitframe.units.party.debuffs.yOffset = -7
-	E.db.unitframe.units.party.debuffs.anchorPoint = "TOPRIGHT"
-	E.db.unitframe.units.party.debuffs.sizeOverride = 21
-	E.db.unitframe.units.party.columnAnchorPoint = "BOTTOM"
-	E.db.unitframe.units.party.buffIndicator.size = 10
-	E.db.unitframe.units.party.point = "RIGHT"
-	E.db.unitframe.units.party.xOffset = -1
-	E.db.unitframe.units.party.yOffset = 1
-	E.db.unitframe.units.party.power.width = "inset"
-	E.db.unitframe.units.party.power.offset = 0
-	E.db.unitframe.units.party.power.text_format = ""
-	E.db.unitframe.units.party.buffIndicator.size = 10
-	E.db.unitframe.units.party.roleIcon.enable = false
-	E.db.unitframe.units.party.GPSArrow.size = 40
-	E.db.unitframe.units.party.growthDirection = "LEFT_UP"
-	E.db.unitframe.units.party.healPrediction = true
-	E.db.unitframe.units.party.health.frequentUpdates = true
-	E.db.unitframe.units.party.health.text_format = ""
-	E.db.unitframe.units.party.health.position = "BOTTOM"
-	E.db.unitframe.units.party.name.text_format = "[namecolor][name:veryshort] [difficultycolor][smartlevel]"
-	E.db.unitframe.units.party.name.position = "TOP"
-	E.db.unitframe.units.party.buffs.noConsolidated = false
-	E.db.unitframe.units.party.buffs.enable = true
-	E.db.unitframe.units.party.buffs.anchorPoint = "BOTTOMLEFT"
-	E.db.unitframe.units.party.buffs.clickThrough = true
-	E.db.unitframe.units.party.buffs.useBlacklist = false
-	E.db.unitframe.units.party.buffs.noDuration = false
-	E.db.unitframe.units.party.buffs.playerOnly = false
-	E.db.unitframe.units.party.buffs.perrow = 1
-	E.db.unitframe.units.party.buffs.useFilter = "TurtleBuffs"
-	E.db.unitframe.units.party.buffs.yOffset = 28
-	E.db.unitframe.units.party.buffs.xOffset = 30
-	E.db.unitframe.units.party.buffs.sizeOverride = 22
-	E.db.unitframe.units.party.petsGroup.anchorPoint = "BOTTOM"
-	E.db.unitframe.units.party.raidicon.attachTo = "LEFT"
-	E.db.unitframe.units.party.raidicon.xOffset = 9
-	E.db.unitframe.units.party.raidicon.size = 13
-	E.db.unitframe.units.party.raidicon.yOffset = 0
-	E.db.unitframe.units.party.targetsGroup.anchorPoint = "BOTTOM"
-	E.db.unitframe.units.party.width = 80
-	E.db.unitframe.units.party.height = 45
-	E.db.unitframe.units.party.groupBy = "GROUP"
-
-	if not E.db.unitframe.units.raid10.customTexts then
-		E.db.unitframe.units.raid10.customTexts = {};
-		if not E.db.unitframe.units.raid10.customTexts["Health Text"] then
-			E.db.unitframe.units.raid10.customTexts["Health Text"] = {};
-		end
-	end
-	E.db.unitframe.units.raid10.customTexts["Health Text"] = {
-		["font"] = "ElvUI Pixel",
-		["justifyH"] = "CENTER",
-		["fontOutline"] = "MONOCHROMEOUTLINE",
-		["xOffset"] = 0,
-		["size"] = 10,
-		["text_format"] = "[healthcolor][health:deficit]",
-		["yOffset"] = -7,
-	}
-	E.db.unitframe.units.raid10.columnAnchorPoint = "BOTTOM"
-	E.db.unitframe.units.raid10.buffIndicator.fontSize = 10
-	E.db.unitframe.units.raid10.point = "RIGHT"
-	E.db.unitframe.units.raid10.rdebuffs.enable = false
-	E.db.unitframe.units.raid10.yOffset = 4
-	E.db.unitframe.units.raid10.xOffset = -1
-	E.db.unitframe.units.raid10.roleIcon.enable = false
-	E.db.unitframe.units.raid10.power.width = "inset"
-	E.db.unitframe.units.raid10.power.offset = 0
-	E.db.unitframe.units.raid10.positionOverride = "BOTTOMRIGHT"
-	E.db.unitframe.units.raid10.healPrediction = true
-	E.db.unitframe.units.raid10.health.frequentUpdates = true
-	E.db.unitframe.units.raid10.health.text_format = ""
-	E.db.unitframe.units.raid10.debuffs.enable = true
-	E.db.unitframe.units.raid10.debuffs.anchorPoint = "TOPRIGHT"
-	E.db.unitframe.units.raid10.buffs.enable = true
-	E.db.unitframe.units.raid10.buffs.noConsolidated = false
-	E.db.unitframe.units.raid10.buffs.anchorPoint = "BOTTOMLEFT"
-	E.db.unitframe.units.raid10.buffs.clickThrough = true
-	E.db.unitframe.units.raid10.buffs.useBlacklist = false
-	E.db.unitframe.units.raid10.buffs.noDuration = false
-	E.db.unitframe.units.raid10.buffs.playerOnly = false
-	E.db.unitframe.units.raid10.buffs.perrow = 1
-	E.db.unitframe.units.raid10.buffs.useFilter = "TurtleBuffs"
-	E.db.unitframe.units.raid10.raidicon.attachTo = "LEFT"
-	E.db.unitframe.units.raid10.raidicon.xOffset = 9
-	E.db.unitframe.units.raid10.raidicon.size = 13
-	E.db.unitframe.units.raid10.raidicon.yOffset = 0
-	E.db.unitframe.units.raid10.name.text_format = "[namecolor][name:veryshort]"
-	E.db.unitframe.units.raid10.debuffs.sizeOverride = 21
-	E.db.unitframe.units.raid10.debuffs.xOffset = -4
-	E.db.unitframe.units.raid10.debuffs.yOffset = -7
-	E.db.unitframe.units.raid10.height = 45
-	E.db.unitframe.units.raid10.width = 80
-	E.db.unitframe.units.raid10.buffs.yOffset = 28
-	E.db.unitframe.units.raid10.buffs.xOffset = 30
-	E.db.unitframe.units.raid10.buffs.sizeOverride = 22
-	E.db.unitframe.units.raid10.groupBy = "GROUP"
-
-	if not E.db.unitframe.units.raid25.customTexts then
-		E.db.unitframe.units.raid25.customTexts = {};
-		if not E.db.unitframe.units.raid25.customTexts["Health Text"] then
-			E.db.unitframe.units.raid25.customTexts["Health Text"] = {};
-		end
-	end
-	E.db.unitframe.units.raid25.customTexts["Health Text"] = {
-		["font"] = "ElvUI Pixel",
-		["justifyH"] = "CENTER",
-		["fontOutline"] = "MONOCHROMEOUTLINE",
-		["xOffset"] = 0,
-		["size"] = 10,
-		["text_format"] = "[healthcolor][health:deficit]",
-		["yOffset"] = -7,
-	}
-	E.db.unitframe.units.raid25.columnAnchorPoint = "RIGHT"
-	E.db.unitframe.units.raid25.buffIndicator.fontSize = 10
-	E.db.unitframe.units.raid25.point = "BOTTOM"
-	E.db.unitframe.units.raid25.rdebuffs.enable = false
-	E.db.unitframe.units.raid25.xOffset = 1
-	E.db.unitframe.units.raid25.roleIcon.enable = false
-	E.db.unitframe.units.raid25.power.offset = 0
-	E.db.unitframe.units.raid25.power.width = "inset"
-	E.db.unitframe.units.raid25.power.position = "CENTER"
-	E.db.unitframe.units.raid25.growthDirection = "UP_LEFT"
-	E.db.unitframe.units.raid25.healPrediction = true
-	E.db.unitframe.units.raid25.health.frequentUpdates = true
-	E.db.unitframe.units.raid25.health.text_format = ""
-	E.db.unitframe.units.raid25.debuffs.anchorPoint = "TOPRIGHT"
-	E.db.unitframe.units.raid25.debuffs.enable = true
-	E.db.unitframe.units.raid25.debuffs.xOffset = -4
-	E.db.unitframe.units.raid25.debuffs.yOffset = -7
-	E.db.unitframe.units.raid25.debuffs.sizeOverride = 21
-	E.db.unitframe.units.raid25.debuffs.countFontSize = 12
-	E.db.unitframe.units.raid25.debuffs.fontSize = 9
-	E.db.unitframe.units.raid25.raidicon.attachTo = "LEFT"
-	E.db.unitframe.units.raid25.raidicon.xOffset = 9
-	E.db.unitframe.units.raid25.raidicon.yOffset = 0
-	E.db.unitframe.units.raid25.raidicon.size = 13
-	E.db.unitframe.units.raid25.buffs.noConsolidated = false
-	E.db.unitframe.units.raid25.buffs.enable = true
-	E.db.unitframe.units.raid25.buffs.anchorPoint = "BOTTOMLEFT"
-	E.db.unitframe.units.raid25.buffs.clickThrough = true
-	E.db.unitframe.units.raid25.buffs.useBlacklist = false
-	E.db.unitframe.units.raid25.buffs.noDuration = false
-	E.db.unitframe.units.raid25.buffs.playerOnly = false
-	E.db.unitframe.units.raid25.buffs.perrow = 1
-	E.db.unitframe.units.raid25.buffs.useFilter = "TurtleBuffs"
-	E.db.unitframe.units.raid25.name.text_format = "[namecolor][name:veryshort]"
-	E.db.unitframe.units.raid25.yOffset = 4
-	E.db.unitframe.units.raid25.width = 80
-	E.db.unitframe.units.raid25.height = 45
-	E.db.unitframe.units.raid25.buffs.yOffset = 28
-	E.db.unitframe.units.raid25.buffs.xOffset = 30
-	E.db.unitframe.units.raid25.buffs.sizeOverride = 22
-	E.db.unitframe.units.raid25.groupBy = "GROUP"
-
-	if not E.db.unitframe.units.raid40.customTexts then
-		E.db.unitframe.units.raid40.customTexts = {};
-		if not E.db.unitframe.units.raid40.customTexts["Health Text"] then
-			E.db.unitframe.units.raid40.customTexts["Health Text"] = {};
-		end
-	end
-	E.db.unitframe.units.raid40.customTexts["Health Text"] = {
-		["font"] = "ElvUI Pixel",
-		["justifyH"] = "CENTER",
-		["fontOutline"] = "MONOCHROMEOUTLINE",
-		["xOffset"] = 0,
-		["size"] = 10,
-		["text_format"] = "[healthcolor][health:deficit]",
-		["yOffset"] = -7,
-	}
-	E.db.unitframe.units.raid40.columnAnchorPoint = "RIGHT"
-	E.db.unitframe.units.raid40.point = "BOTTOM"
-	E.db.unitframe.units.raid40.xOffset = 1
-	E.db.unitframe.units.raid40.yOffset = 1
-	E.db.unitframe.units.raid40.growthDirection = "UP_LEFT"
-	E.db.unitframe.units.raid40.healPrediction = true
-	E.db.unitframe.units.raid40.width = 50
-	E.db.unitframe.units.raid40.height = 43
-	E.db.unitframe.units.raid40.raidicon.xOffset = 9
-	E.db.unitframe.units.raid40.raidicon.yOffset = 0
-	E.db.unitframe.units.raid40.raidicon.size = 13
-	E.db.unitframe.units.raid40.raidicon.attachTo = "LEFT"
-	E.db.unitframe.units.raid40.rdebuffs.size = 26
-	E.db.unitframe.units.raid40.name.position = "TOP"
-	E.db.unitframe.units.raid40.buffIndicator.fontSize = 10
-	E.db.unitframe.units.raid40.power.enable = true
-	E.db.unitframe.units.raid40.power.offset = 0
-	E.db.unitframe.units.raid40.power.width = "inset"
-	E.db.unitframe.units.raid40.power.position = "CENTER"
-	E.db.unitframe.units.raid40.health.frequentUpdates = true
-	E.db.unitframe.units.raid40.debuffs.sizeOverride = 21
-	E.db.unitframe.units.raid40.debuffs.enable = true
-	E.db.unitframe.units.raid40.debuffs.perrow = 2
-	E.db.unitframe.units.raid40.debuffs.anchorPoint = "TOPRIGHT"
-	E.db.unitframe.units.raid40.debuffs.clickThrough = true
-	E.db.unitframe.units.raid40.debuffs.xOffset = -4
-	E.db.unitframe.units.raid40.debuffs.yOffset = -9
-	E.db.unitframe.units.raid40.debuffs.useBlacklist = false
-	E.db.unitframe.units.raid40.debuffs.useFilter = "Blacklist"
-	E.db.unitframe.units.raid40.buffs.xOffset = 21
-	E.db.unitframe.units.raid40.buffs.yOffset = 25
-	E.db.unitframe.units.raid40.buffs.anchorPoint = "BOTTOMLEFT"
-	E.db.unitframe.units.raid40.buffs.clickThrough = true
-	E.db.unitframe.units.raid40.buffs.noConsolidated = false
-	E.db.unitframe.units.raid40.buffs.noDuration = false
-	E.db.unitframe.units.raid40.buffs.playerOnly = false
-	E.db.unitframe.units.raid40.buffs.perrow = 1
-	E.db.unitframe.units.raid40.buffs.useFilter = "TurtleBuffs"
-	E.db.unitframe.units.raid40.buffs.sizeOverride = 17
-	E.db.unitframe.units.raid40.buffs.useBlacklist = false
-	E.db.unitframe.units.raid40.buffs.enable = true
-	E.db.unitframe.units.raid40.name.text_format = "[namecolor][name:veryshort]"
-	E.db.unitframe.units.raid40.groupBy = "GROUP"
-
-	--Actionbars
-	--Bar 1
-	E.db.actionbar.bar1.enabled = true
-	E.db.actionbar.bar1.backdrop = false
-	E.db.actionbar.bar1.buttons = 12
-	E.db.actionbar.bar1.buttonsize = 32
-	E.db.actionbar.bar1.buttonspacing = 2
-	--Bar 2
-	E.db.actionbar.bar2.enabled = true
-	E.db.actionbar.bar2.backdrop = true
-	E.db.actionbar.bar2.buttons = 12
-	E.db.actionbar.bar2.buttonsize = 32
-	E.db.actionbar.bar2.buttonspacing = 2
-	E.db.actionbar.bar2.heightMult = 2
-	--Bar 3
-	E.db.actionbar.bar3.enabled = true
-	E.db.actionbar.bar3.backdrop = true
-	E.db.actionbar.bar3.buttons = 6
-	E.db.actionbar.bar3.buttonsize = 32
-	E.db.actionbar.bar3.buttonspacing = 2
-	E.db.actionbar.bar3.buttonsPerRow = 3
-	--Bar 4
-	E.db.actionbar.bar4.enabled = true
-	E.db.actionbar.bar4.backdrop = false
-	E.db.actionbar.bar4.buttons = 12
-	E.db.actionbar.bar4.buttonsize = 32
-	E.db.actionbar.bar4.buttonspacing = 2
-	E.db.actionbar.bar4.buttonsPerRow = 6
-	E.db.actionbar.bar4.mouseover = true
-	E.db.actionbar.bar4.point = "BOTTOMLEFT"
-	--Bar 5
-	E.db.actionbar.bar5.enabled = true
-	E.db.actionbar.bar5.backdrop = true
-	E.db.actionbar.bar5.buttons = 6
-	E.db.actionbar.bar5.buttonsize = 32
-	E.db.actionbar.bar5.buttonspacing = 2
-	E.db.actionbar.bar5.buttonsPerRow = 3
-	--Stance Bar
-	E.db.actionbar.stanceBar.buttonsPerRow = 1
-	--Pet Bar
-	E.db.actionbar.barPet.point = "TOPRIGHT"
-	E.db.actionbar.barPet.buttonsPerRow = 1
-
-	--Datatext
-	do
-		E.db.datatexts.panelTransparency = false
-		E.db.datatexts.minimapPanels = true
-		E.db.datatexts.fontOutline = "None"
-		E.db.sle.datatext.dp1.enabled = false
-		E.db.sle.datatext.dp2.enabled = false
-		E.db.sle.datatext.dp3.enabled = false
-		E.db.sle.datatext.dp4.enabled = false
-		E.db.sle.datatext.dp5.enabled = false
-		E.db.sle.datatext.dp6.enabled = true
-		E.db.sle.datatext.top.enabled = true
-		E.db.sle.datatext.bottom.enabled = true
-		if GetScreenWidth() < 1920 then
-			E.db.sle.datatext.dp6.width = 410
-			E.db.sle.datatext.bottom.width = 104
-			E.db.sle.datatext.top.width = 104
-			E.db.sle.datatext.chatleft.width = 364
-			E.db.sle.datatext.chatright.width = 364
-		elseif GetScreenWidth() > 1920 then
-			E.db.sle.datatext.dp6.width = 402
-			E.db.sle.datatext.bottom.width = 102
-			E.db.sle.datatext.top.width = 102
-			E.db.sle.datatext.chatleft.width = 396
-			E.db.sle.datatext.chatright.width = 396
-		else
-			E.db.sle.datatext.dp6.width = 410
-			E.db.sle.datatext.bottom.width = 104
-			E.db.sle.datatext.top.width = 104
-			E.db.sle.datatext.chatleft.width = 396
-			E.db.sle.datatext.chatright.width = 396
-		end
-		E.db.datatexts.panels['DP_6']['left'] = "System"
-		E.db.datatexts.panels['DP_6']['middle'] = "Time"
-		E.db.datatexts.panels['DP_6']['right'] = "Gold"
-		E.db.datatexts.panels['LeftChatDataPanel']['left'] = ""
-		E.db.datatexts.panels['LeftChatDataPanel']['middle'] = "Durability"
-		E.db.datatexts.panels['LeftChatDataPanel']['right'] = ""
-		E.db.datatexts.panels['RightChatDataPanel']['left'] = "Skada"
-		E.db.datatexts.panels['RightChatDataPanel']['middle'] = "Combat Time"
-		E.db.datatexts.panels['RightChatDataPanel']['right'] = "WeakAuras"
-		E.db.datatexts.panels['Top_Center'] = "Spec Switch"
-		E.db.datatexts.panels['Bottom_Panel'] = "Bags"
-		E.db.datatexts.panels['LeftMiniPanel'] = "Guild"
-		E.db.datatexts.panels['RightMiniPanel'] = "Friends"
-
-		--Datatext Panels Spec Specific
-		if layout == 'tank' then
-			--E.db.datatexts.panels.DP_5.middle = ""
-			--E.db.datatexts.panels.DP_5.right = ""
-			--E.db.datatexts.panels.DP_6.left = ""
-			--E.db.datatexts.panels.DP_6.middle = ""
-		elseif layout == 'healer' then
-			E.db.datatexts.panels['LeftChatDataPanel']['left'] = "Spell/Heal Power"
-			E.db.datatexts.panels['LeftChatDataPanel']['right'] = "Haste"
-		elseif layout == 'dpsCaster' then
-			E.db.datatexts.panels['LeftChatDataPanel']['left'] = "Spell/Heal Power"
-			E.db.datatexts.panels['LeftChatDataPanel']['right'] = "Haste"
-		else
-			--E.db.datatexts.panels.DP_5.middle = ""
-			--E.db.datatexts.panels.DP_5.right = ""
-			--E.db.datatexts.panels.DP_6.left = ""
-			--E.db.datatexts.panels.DP_6.middle = ""
-		end
-	end
-	do
-		if GetScreenWidth() > 1920 then
-			E.db.movers.ElvAB_3 = "BOTTOMElvUIParentBOTTOM25427"
-			E.db.movers.ElvAB_5 = "BOTTOMElvUIParentBOTTOM-25427"
-			E.db.movers.Bottom_Panel_Mover = "BOTTOMElvUIParentBOTTOM2544"
-			E.db.movers.Top_Center_Mover = "BOTTOMElvUIParentBOTTOM-2544"
-		else
-			E.db.movers.ElvAB_3 = "BOTTOMElvUIParentBOTTOM26027"
-			E.db.movers.ElvAB_5 = "BOTTOMElvUIParentBOTTOM-26027"
-			E.db.movers.Bottom_Panel_Mover = "BOTTOMElvUIParentBOTTOM2604"
-			E.db.movers.Top_Center_Mover = "BOTTOMElvUIParentBOTTOM-2604"
-		end
-		E.db.movers.ElvUF_PlayerMover = "BOTTOMElvUIParentBOTTOM-278200"
-		E.db.movers.ElvUF_PlayerCastbarMover = "BOTTOMElvUIParentBOTTOM0100"
-		E.db.movers.ElvUF_TargetMover = "BOTTOMElvUIParentBOTTOM278200"
-		E.db.movers.ElvUF_TargetTargetMover = "BOTTOMElvUIParentBOTTOM0190"
-		--E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM310432"
-		E.db.movers.ElvUF_FocusMover = "BOTTOMElvUIParentBOTTOM-63436"
-		E.db.movers.ElvUF_PetMover = "BOTTOMElvUIParentBOTTOM0230"
-		E.db.movers.ElvAB_1 = "BOTTOMElvUIParentBOTTOM060"
-		E.db.movers.ElvAB_2 = "BOTTOMElvUIParentBOTTOM027"
-		E.db.movers.DP_6_Mover = "BOTTOMElvUIParentBOTTOM04"
-		E.db.movers.LeftChatMover = "BOTTOMLEFTUIParentBOTTOMLEFT021"
-		E.db.movers.RightChatMover = "BOTTOMRIGHTUIParentBOTTOMRIGHT021"
-		E.db.movers.PetAB = "RIGHTElvUIParentRIGHT00"
-		E.db.movers.ArenaHeaderMover = "TOPRIGHTElvUIParentTOPRIGHT-210-410"
-		E.db.movers.BossHeaderMover = "BOTTOMRIGHTElvUIParentBOTTOMRIGHT-210435"
-		if layout == 'dpsCaster' or layout == 'dpsMelee' or layout == 'tank' then
-			E.db.movers.ElvUF_PartyMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT4200"
-			E.db.movers.ElvUF_Raid10Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT4200"
-			E.db.movers.ElvUF_Raid25Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT4200"
-			E.db.movers.ElvUF_Raid40Mover = "BOTTOMLEFTElvUIParentBOTTOMLEFT4200"
-			E.db.movers["BossButton"] = "CENTERElvUIParentCENTER-413188"
-		else
-			E.db.movers.ElvUF_PartyMover = "BOTTOMRIGHTElvUIParentCENTER-213-90"
-			E.db.movers.ElvUF_Raid10Mover = "BOTTOMRIGHTElvUIParentCENTER-213-90"
-			E.db.movers.ElvUF_Raid25Mover = "BOTTOMRIGHTElvUIParentCENTER-213-90"
-			E.db.movers.ElvUF_Raid40Mover = "BOTTOMRIGHTElvUIParentCENTER-213-90"
-			E.db.movers["BossButton"] = "CENTERElvUIParentCENTER-413188"
-		end
-
-		if GetScreenWidth() < 1920 then
-			E.db.movers.ElvAB_4 = "BOTTOMLEFTElvUIParentBOTTOMRIGHT-380200"
-			E.db.movers.ShiftAB = "BOTTOMLEFTElvUIParentBOTTOMLEFT38221"
-			E.db.movers.TotemBarMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT38221"
-		else
-			E.db.movers.ElvAB_4 = "BOTTOMLEFTElvUIParentBOTTOMRIGHT-413200"
-			E.db.movers.ShiftAB = "BOTTOMLEFTElvUIParentBOTTOMLEFT41421"
-			E.db.movers.TotemBarMover = "BOTTOMLEFTElvUIParentBOTTOMLEFT41421"
-		end
-	end
-
-	E:UpdateAll(true)
-end
-function E:HudSimple()
-	local H = E:GetModule('HUD')
-	InstallStepComplete.message = L["Simple Layout Set"]
-	InstallStepComplete:Show()
-	H:SimpleLayout()
-	H:UpdateAllFrames()
-end
-
-function E:HudDefault()
-	local H = E:GetModule('HUD')
-	InstallStepComplete.message = L["Default Layout"]
-	InstallStepComplete:Show()
-	E:CopyTable(E.db.hud,P.hud)
-	H:UpdateAllFrames()
-end
-
-local function InstallComplete()
-	E.private.install_complete = E.version
-
-	if GetCVarBool("Sound_EnableMusic") then
-		StopMusic()
-	end
-
-	ReloadUI()
-end
-
-local function ResetAll()
-	InstallNextButton:Disable()
-	InstallPrevButton:Disable()
-	InstallOption1Button:Hide()
-	InstallOption1Button:SetScript("OnClick", nil)
-	InstallOption1Button:SetText("")
-	InstallOption2Button:Hide()
-	InstallOption2Button:SetScript('OnClick', nil)
-	InstallOption2Button:SetText('')
-	InstallOption3Button:Hide()
-	InstallOption3Button:SetScript('OnClick', nil)
-	InstallOption3Button:SetText('')
-	InstallOption4Button:Hide()
-	InstallOption4Button:SetScript('OnClick', nil)
-	InstallOption4Button:SetText('')
-	ElvUIInstallFrame.SubTitle:SetText("")
-	ElvUIInstallFrame.Desc1:SetText("")
-	ElvUIInstallFrame.Desc2:SetText("")
-	ElvUIInstallFrame.Desc3:SetText("")
-	ElvUIInstallFrame:Size(550, 400)
-end
-
-local function SetPage(PageNum)
-	CURRENT_PAGE = PageNum
-	ResetAll()
-	InstallStatus:SetValue(PageNum)
-
-	local f = ElvUIInstallFrame
-
-	if PageNum == MAX_PAGE then
-		InstallNextButton:Disable()
-	else
-		InstallNextButton:Enable()
-	end
-
-	if PageNum == 1 then
-		InstallPrevButton:Disable()
-	else
-		InstallPrevButton:Enable()
-	end
-
-	if PageNum == 1 then
-		f.SubTitle:SetText(format(L["Welcome to ElvUI version %s!"], E.version))
-		f.Desc1:SetText(L["This install process will help you learn some of the features in ElvUI has to offer and also prepare your user interface for usage."])
-		f.Desc2:SetText(L["The in-game configuration menu can be accesses by typing the /ec command or by clicking the 'C' button on the minimap. Press the button below if you wish to skip the installation process."])
-		f.Desc3:SetText(L["Please press the continue button to go onto the next step."])
-
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript("OnClick", InstallComplete)
-		InstallOption1Button:SetText(L["Skip Process"])
-	elseif PageNum == 2 then
-		f.SubTitle:SetText(L["CVars"])
-		f.Desc1:SetText(L["This part of the installation process sets up your World of Warcraft default options it is recommended you should do this step for everything to behave properly."])
-		f.Desc2:SetText(L["Please click the button below to setup your CVars."])
-		f.Desc3:SetText(L["Importance: |cff07D400High|r"])
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript("OnClick", SetupCVars)
-		InstallOption1Button:SetText(L["Setup CVars"])
-	elseif PageNum == 3 then
-		f.SubTitle:SetText(L["Chat"])
-		f.Desc1:SetText(L["This part of the installation process sets up your chat windows names, positions and colors."])
-		f.Desc2:SetText(L["The chat windows function the same as Blizzard standard chat windows, you can right click the tabs and drag them around, rename, etc. Please click the button below to setup your chat windows."])
-		f.Desc3:SetText(L["Importance: |cffD3CF00Medium|r"])
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript("OnClick", SetupChat)
-		InstallOption1Button:SetText(L["Setup Chat"])
-	elseif PageNum == 4 then
-		f.SubTitle:SetText(L["Pixel Perfect"])
-		f.Desc1:SetText(L['The Pixel Perfect option will change the overall apperance of your UI. Using Pixel Perfect is a slight performance increase over the traditional layout.'])
-		f.Desc2:SetText(L['Using this option will cause your borders around frames to be 1 pixel wide instead of 3 pixel. You may have to finish the installation to notice a differance. By default this is enabled.'])
-		f.Desc3:SetText(L["Importance: |cffFF0000Low|r"])
-
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript('OnClick', function() E:SetupPixelPerfect(true) end)
-		InstallOption1Button:SetText(L["Enable"])
-		InstallOption2Button:Show()
-		InstallOption2Button:SetScript('OnClick', function() E:SetupPixelPerfect(false) end)
-		InstallOption2Button:SetText(L['Disable'])
-	elseif PageNum == 5 then
-		f.SubTitle:SetText(L['Theme Setup'])
-		f.Desc1:SetText(L['Choose a theme layout you wish to use for your initial setup.'])
-		f.Desc2:SetText(L['You can always change fonts and colors of any element of elvui from the in-game configuration.'])
-		f.Desc3:SetText(L["Importance: |cffFF0000Low|r"])
-
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript('OnClick', function() E:SetupTheme('classic') end)
-		InstallOption1Button:SetText(L["Classic"])
-		InstallOption2Button:Show()
-		InstallOption2Button:SetScript('OnClick', function() E:SetupTheme('default') end)
-		InstallOption2Button:SetText(L['Dark'])
-		InstallOption3Button:Show()
-		InstallOption3Button:SetScript('OnClick', function() E:SetupTheme('class') end)
-		InstallOption3Button:SetText(CLASS)
-	elseif PageNum == 6 then
-		f.SubTitle:SetText(L["Resolution"])
-		f.Desc1:SetText(format(L["Your current resolution is %s, this is considered a %s resolution."], E.resolution, E.lowversion == true and L["low"] or L["high"]))
-		if E.lowversion then
-			f.Desc2:SetText(L["This resolution requires that you change some settings to get everything to fit on your screen."].." "..L["Click the button below to resize your chat frames, unitframes, and reposition your actionbars."].." "..L["You may need to further alter these settings depending how low you resolution is."])
-			f.Desc3:SetText(L["Importance: |cff07D400High|r"])
-		else
-			f.Desc2:SetText(L["This resolution doesn't require that you change settings for the UI to fit on your screen."].." "..L["Click the button below to resize your chat frames, unitframes, and reposition your actionbars."].." "..L["This is completely optional."])
-			f.Desc3:SetText(L["Importance: |cffFF0000Low|r"])
-		end
-
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript('OnClick', function() E.SetupResolution('high') end)
-		InstallOption1Button:SetText(L["High Resolution"])
-		InstallOption2Button:Show()
-		InstallOption2Button:SetScript('OnClick', function() E.SetupResolution('low') end)
-		InstallOption2Button:SetText(L['Low Resolution'])
-	elseif PageNum == 7 then
-		f.SubTitle:SetText(L["Layout"])
-		f.Desc1:SetText(L["You can now choose what layout you wish to use based on your combat role."])
-		f.Desc2:SetText(L["This will change the layout of your unitframes, raidframes, and datatexts."])
-		f.Desc3:SetText(L["Importance: |cffD3CF00Medium|r"])
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript('OnClick', function() E.db.layoutSet = nil; E:SetupLayout('tank') end)
-		InstallOption1Button:SetText(L['Tank'])
-		InstallOption2Button:Show()
-		InstallOption2Button:SetScript('OnClick', function() E.db.layoutSet = nil; E:SetupLayout('healer') end)
-		InstallOption2Button:SetText(L['Healer'])
-		InstallOption3Button:Show()
-		InstallOption3Button:SetScript('OnClick', function() E.db.layoutSet = nil; E:SetupLayout('dpsMelee') end)
-		InstallOption3Button:SetText(L['Physical DPS'])
-		InstallOption4Button:Show()
-		InstallOption4Button:SetScript('OnClick', function() E.db.layoutSet = nil; E:SetupLayout('dpsCaster') end)
-		InstallOption4Button:SetText(L['Caster DPS'])
-	elseif PageNum == 8 then
-		f.SubTitle:SetText(L["Auras System"])
-		f.Desc1:SetText(L["Select the type of aura system you want to use with ElvUI's unitframes. The integrated system utilizes both aura-bars and aura-icons. The icons only system will display only icons and aurabars won't be used. The classic system will configure your auras to be default."])
-		f.Desc2:SetText(L["If you have an icon or aurabar that you don't want to display simply hold down shift and right click the icon for it to disapear."])
-		f.Desc3:SetText(L["Importance: |cffD3CF00Medium|r"])
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript('OnClick', function() SetupAuras('classic') end)
-		InstallOption1Button:SetText(L['Classic'])
-		InstallOption2Button:Show()
-		InstallOption2Button:SetScript('OnClick', function() SetupAuras() end)
-		InstallOption2Button:SetText(L['Icons Only'])
-		InstallOption3Button:Show()
-		InstallOption3Button:SetScript('OnClick', function() SetupAuras('integrated') end)
-		InstallOption3Button:SetText(L['Integrated'])
-	elseif PageNum == 9 then --The new page
-		f.SubTitle:SetText(L["Shadow & Light Settings"])
-		f.Desc1:SetText(L["You can now choose if you what to use one of authors' set of options. This will change not only the positioning of some elements but also change a bunch of other options."])
-		f.Desc2:SetText(L["SLE_Install_Text2"])
-		f.Desc3:SetText(L["Importance: |cffFF0000Low|r"])
-
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript('OnClick', function() E:DarthSetup() end)
-		InstallOption1Button:SetText(L["Darth's Config"])
-
-		InstallOption2Button:Show()
-		InstallOption2Button:SetScript('OnClick', function() E:AffinitiiSetup() end)
-		InstallOption2Button:SetText(L["Affinitii's Config"])
-
-		InstallOption3Button:Show()
-		InstallOption3Button:SetScript('OnClick', function() E:RepoocSetup() end)
-		InstallOption3Button:SetText(L["Repooc's Config"])
-	elseif PageNum == 10 and IsAddOnLoaded("ElvUI_Hud") then --Hud's page if enabled
-		f.SubTitle:SetText("ElvUI Hud")
-		f.Desc1:SetText(L["Thank you for using ElvUI Hud!"])
-		f.Desc2:SetText(L["Here you can choose between the simple layout (only player health and power) or the default layout for the hud"])
-		f.Desc3:SetText(L["Importance: |cffFF0000Low|r"])
-
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript('OnClick', function() E:HudSimple() end)
-		InstallOption1Button:SetText(L["Simple Layout"])
-		InstallOption2Button:Show()
-		InstallOption2Button:SetScript('OnClick', function() E:HudDefault() end)
-		InstallOption2Button:SetText(L["Default Layout"])
-	elseif PageNum == 10 and not IsAddOnLoaded("ElvUI_Hud") then --Finish install if Hud disabled
-		f.SubTitle:SetText(L["Installation Complete"])
-		f.Desc1:SetText(L["You are now finished with the installation process. If you are in need of technical support please visit us at http://www.tukui.org."])
-		f.Desc2:SetText(L["Please click the button below so you can setup variables and ReloadUI."])
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript("OnClick", InstallComplete)
-		InstallOption1Button:SetText(L["Finished"])
-		ElvUIInstallFrame:Size(550, 350)
-	elseif PageNum == 11 then --Finish install if Hud enabled
-		f.SubTitle:SetText(L["Installation Complete"])
-		f.Desc1:SetText(L["You are now finished with the installation process. If you are in need of technical support please visit us at http://www.tukui.org."])
-		f.Desc2:SetText(L["Please click the button below so you can setup variables and ReloadUI."])
-		InstallOption1Button:Show()
-		InstallOption1Button:SetScript("OnClick", InstallComplete)
-		InstallOption1Button:SetText(L["Finished"])
-		ElvUIInstallFrame:Size(550, 350)
-	end
-end
-
-local function NextPage()
-	if CURRENT_PAGE ~= MAX_PAGE then
-		CURRENT_PAGE = CURRENT_PAGE + 1
-		SetPage(CURRENT_PAGE)
-	end
-end
-
-local function PreviousPage()
-	if CURRENT_PAGE ~= 1 then
-		CURRENT_PAGE = CURRENT_PAGE - 1
-		SetPage(CURRENT_PAGE)
-	end
-end
-
---Install UI
-function E:Install()
-	MaxPages()
-	if not InstallStepComplete then
-		local imsg = CreateFrame("Frame", "InstallStepComplete", E.UIParent)
-		imsg:Size(418, 72)
-		imsg:Point("TOP", 0, -190)
-		imsg:Hide()
-		imsg:SetScript('OnShow', function(self)
-			if self.message then
-				PlaySoundFile([[Sound\Interface\LevelUp.wav]])
-				self.text:SetText(self.message)
-				UIFrameFadeOut(self, 3.5, 1, 0)
-				E:Delay(4, function() self:Hide() end)
-				self.message = nil
-
-				if imsg.firstShow == false then
-					if GetCVarBool("Sound_EnableMusic") then
-						PlayMusic([[Sound\Music\ZoneMusic\DMF_L70ETC01.mp3]])
-					end
-					imsg.firstShow = true
-				end
-			else
-				self:Hide()
-			end
-		end)
-
-		imsg.firstShow = false
-
-		imsg.bg = imsg:CreateTexture(nil, 'BACKGROUND')
-		imsg.bg:SetTexture([[Interface\LevelUp\LevelUpTex]])
-		imsg.bg:SetPoint('BOTTOM')
-		imsg.bg:Size(326, 103)
-		imsg.bg:SetTexCoord(0.00195313, 0.63867188, 0.03710938, 0.23828125)
-		imsg.bg:SetVertexColor(1, 1, 1, 0.6)
-
-		imsg.lineTop = imsg:CreateTexture(nil, 'BACKGROUND')
-		imsg.lineTop:SetDrawLayer('BACKGROUND', 2)
-		imsg.lineTop:SetTexture([[Interface\LevelUp\LevelUpTex]])
-		imsg.lineTop:SetPoint("TOP")
-		imsg.lineTop:Size(418, 7)
-		imsg.lineTop:SetTexCoord(0.00195313, 0.81835938, 0.01953125, 0.03320313)
-
-		imsg.lineBottom = imsg:CreateTexture(nil, 'BACKGROUND')
-		imsg.lineBottom:SetDrawLayer('BACKGROUND', 2)
-		imsg.lineBottom:SetTexture([[Interface\LevelUp\LevelUpTex]])
-		imsg.lineBottom:SetPoint("BOTTOM")
-		imsg.lineBottom:Size(418, 7)
-		imsg.lineBottom:SetTexCoord(0.00195313, 0.81835938, 0.01953125, 0.03320313)
-
-		imsg.text = imsg:CreateFontString(nil, 'ARTWORK', 'GameFont_Gigantic')
-		imsg.text:Point("BOTTOM", 0, 12)
-		imsg.text:SetTextColor(1, 0.82, 0)
-		imsg.text:SetJustifyH("CENTER")
-	end
-
-	--Create Frame
-	if not ElvUIInstallFrame then
-		local f = CreateFrame("Button", "ElvUIInstallFrame", E.UIParent)
-		f.SetPage = SetPage
-		f:Size(550, 400)
-		f:SetTemplate("Transparent")
-		f:SetPoint("CENTER")
-		f:SetFrameStrata('TOOLTIP')
-
-		f.Title = f:CreateFontString(nil, 'OVERLAY')
-		f.Title:FontTemplate(nil, 17, nil)
-		f.Title:Point("TOP", 0, -5)
-		f.Title:SetText(L["ElvUI Installation"])
-
-		f.Next = CreateFrame("Button", "InstallNextButton", f, "UIPanelButtonTemplate")
-		f.Next:StripTextures()
-		f.Next:SetTemplate("Default", true)
-		f.Next:Size(110, 25)
-		f.Next:Point("BOTTOMRIGHT", -5, 5)
-		f.Next:SetText(CONTINUE)
-		f.Next:Disable()
-		f.Next:SetScript("OnClick", NextPage)
-		E.Skins:HandleButton(f.Next, true)
-
-		f.Prev = CreateFrame("Button", "InstallPrevButton", f, "UIPanelButtonTemplate")
-		f.Prev:StripTextures()
-		f.Prev:SetTemplate("Default", true)
-		f.Prev:Size(110, 25)
-		f.Prev:Point("BOTTOMLEFT", 5, 5)
-		f.Prev:SetText(PREVIOUS)
-		f.Prev:Disable()
-		f.Prev:SetScript("OnClick", PreviousPage)
-		E.Skins:HandleButton(f.Prev, true)
-
-		f.Status = CreateFrame("StatusBar", "InstallStatus", f)
-		f.Status:SetFrameLevel(f.Status:GetFrameLevel() + 2)
-		f.Status:CreateBackdrop("Default")
-		f.Status:SetStatusBarTexture(E["media"].normTex)
-		f.Status:SetStatusBarColor(unpack(E["media"].rgbvaluecolor))
-		f.Status:SetMinMaxValues(0, MAX_PAGE)
-		f.Status:Point("TOPLEFT", f.Prev, "TOPRIGHT", 6, -2)
-		f.Status:Point("BOTTOMRIGHT", f.Next, "BOTTOMLEFT", -6, 2)
-		f.Status.text = f.Status:CreateFontString(nil, 'OVERLAY')
-		f.Status.text:FontTemplate()
-		f.Status.text:SetPoint("CENTER")
-		f.Status.text:SetText(CURRENT_PAGE.." / "..MAX_PAGE)
-		f.Status:SetScript("OnValueChanged", function(self)
-			self.text:SetText(self:GetValue().." / "..MAX_PAGE)
-		end)
-
-		f.Option1 = CreateFrame("Button", "InstallOption1Button", f, "UIPanelButtonTemplate")
-		f.Option1:StripTextures()
-		f.Option1:Size(160, 30)
-		f.Option1:Point("BOTTOM", 0, 45)
-		f.Option1:SetText("")
-		f.Option1:Hide()
-		E.Skins:HandleButton(f.Option1, true)
-
-		f.Option2 = CreateFrame("Button", "InstallOption2Button", f, "UIPanelButtonTemplate")
-		f.Option2:StripTextures()
-		f.Option2:Size(110, 30)
-		f.Option2:Point('BOTTOMLEFT', f, 'BOTTOM', 4, 45)
-		f.Option2:SetText("")
-		f.Option2:Hide()
-		f.Option2:SetScript('OnShow', function() f.Option1:SetWidth(110); f.Option1:ClearAllPoints(); f.Option1:Point('BOTTOMRIGHT', f, 'BOTTOM', -4, 45) end)
-		f.Option2:SetScript('OnHide', function() f.Option1:SetWidth(160); f.Option1:ClearAllPoints(); f.Option1:Point("BOTTOM", 0, 45) end)
-		E.Skins:HandleButton(f.Option2, true)
-
-		f.Option3 = CreateFrame("Button", "InstallOption3Button", f, "UIPanelButtonTemplate")
-		f.Option3:StripTextures()
-		f.Option3:Size(100, 30)
-		f.Option3:Point('LEFT', f.Option2, 'RIGHT', 4, 0)
-		f.Option3:SetText("")
-		f.Option3:Hide()
-		f.Option3:SetScript('OnShow', function() f.Option1:SetWidth(100); f.Option1:ClearAllPoints(); f.Option1:Point('RIGHT', f.Option2, 'LEFT', -4, 0); f.Option2:SetWidth(100); f.Option2:ClearAllPoints(); f.Option2:Point('BOTTOM', f, 'BOTTOM', 0, 45)  end)
-		f.Option3:SetScript('OnHide', function() f.Option1:SetWidth(160); f.Option1:ClearAllPoints(); f.Option1:Point("BOTTOM", 0, 45); f.Option2:SetWidth(110); f.Option2:ClearAllPoints(); f.Option2:Point('BOTTOMLEFT', f, 'BOTTOM', 4, 45) end)
-		E.Skins:HandleButton(f.Option3, true)
-
-		f.Option4 = CreateFrame("Button", "InstallOption4Button", f, "UIPanelButtonTemplate")
-		f.Option4:StripTextures()
-		f.Option4:Size(100, 30)
-		f.Option4:Point('LEFT', f.Option3, 'RIGHT', 4, 0)
-		f.Option4:SetText("")
-		f.Option4:Hide()
-		f.Option4:SetScript('OnShow', function()
-			f.Option1:Width(100)
-			f.Option2:Width(100)
-
-			f.Option1:ClearAllPoints();
-			f.Option1:Point('RIGHT', f.Option2, 'LEFT', -4, 0);
-			f.Option2:ClearAllPoints();
-			f.Option2:Point('BOTTOMRIGHT', f, 'BOTTOM', -4, 45)
-		end)
-		f.Option4:SetScript('OnHide', function() f.Option1:SetWidth(160); f.Option1:ClearAllPoints(); f.Option1:Point("BOTTOM", 0, 45); f.Option2:SetWidth(110); f.Option2:ClearAllPoints(); f.Option2:Point('BOTTOMLEFT', f, 'BOTTOM', 4, 45) end)
-		E.Skins:HandleButton(f.Option4, true)
-
-		f.SubTitle = f:CreateFontString(nil, 'OVERLAY')
-		f.SubTitle:FontTemplate(nil, 15, nil)
-		f.SubTitle:Point("TOP", 0, -40)
-
-		f.Desc1 = f:CreateFontString(nil, 'OVERLAY')
-		f.Desc1:FontTemplate()
-		f.Desc1:Point("TOPLEFT", 20, -75)
-		f.Desc1:Width(f:GetWidth() - 40)
-
-		f.Desc2 = f:CreateFontString(nil, 'OVERLAY')
-		f.Desc2:FontTemplate()
-		f.Desc2:Point("TOPLEFT", 20, -125)
-		f.Desc2:Width(f:GetWidth() - 40)
-
-		f.Desc3 = f:CreateFontString(nil, 'OVERLAY')
-		f.Desc3:FontTemplate()
-		f.Desc3:Point("TOPLEFT", 20, -175)
-		f.Desc3:Width(f:GetWidth() - 40)
-
-		local close = CreateFrame("Button", "InstallCloseButton", f, "UIPanelCloseButton")
-		close:SetPoint("TOPRIGHT", f, "TOPRIGHT")
-		close:SetScript("OnClick", function()
-			f:Hide()
-		end)
-		E.Skins:HandleCloseButton(close)
-
-		f.tutorialImage = f:CreateTexture('InstallTutorialImage', 'OVERLAY')
-		f.tutorialImage:Size(256, 128)
-		f.tutorialImage:SetTexture('Interface\\AddOns\\ElvUI_SLE\\media\\textures\\logo_elvui_sle')
-		f.tutorialImage:Point('BOTTOM', 0, 70)
-	end
-
-	ElvUIInstallFrame:Show()
-	NextPage()
-end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/install/installer.lua b/ElvUI_SLE/modules/install/installer.lua
deleted file mode 100755
index 929e23b..0000000
--- a/ElvUI_SLE/modules/install/installer.lua
+++ /dev/null
@@ -1,153 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local AI = E:NewModule('AddonInstaller')
-
--- Upvalue for performance
-local pairs, string, table, unpack, _G = pairs, string, table, unpack, _G
-local string_find, string_format, string_gsub, string_sub, table_insert, table_remove
-  = string.find, string.format, string.gsub, string.sub, table.insert, table.remove
-
--- A local database of addons
-AI.addons = { }
-AI.MyProfileKey = string_format('%s - %s', UnitName('player'), GetRealmName() )
-AI.MyProfileName = "Shadow and Light"
-
--- Let's put all the RegEx stuff here
-local regex_trim  = '^%s*(.-)%s*$'
-local regex_match = '([ A-Za-z0-9_+*\\-]+)%s?,'
-
---[==[
-  AddonInstaller:RegisterAddonProfile(name, ace3, dbname, onDemand)
-
-  input:  (*optional)
-
-    name        [string]
-        The name name of the addon to use in the Command Args when enabling.
-
-    ace3        [boolean]
-        Indicator whether to treat this entry as an Ace3 compatible profile,
-      or just some random entries into an addon's database.
-
-    dbname      [string]
-        The name of the addon's database (e.g. 'ElvCharacterDB')
-
-    onDemand    [function]
-        The function that will generate the "load on demand" profile.
-
-  description:
-      This function allows addon modules to register themselves so that they can get
-    loaded when the user installs this UI.
-
-  returns:
-    nil
-]==]
-function AI:RegisterAddonProfile(name, ace3, dbname, onDemand)
-	if not self.addons[name] then self.addons[name] = { } end
-	table_insert(self.addons[name], { OnDemand = onDemand, dbname = dbname, ace3 = ace3 })
-end
-
--- A private function that loads a specific addon database entry
-local function LoadAddon(entry, profileName)
-	local ADDON_DB = _G[entry.dbname]
-	local myDB = entry.OnDemand(profileName)
-
-	if ADDON_DB and myDB then
-		if entry.ace3 then
-			-- Profile will be: "Shadow and Light (Affinitii)"
-			local profile = string_format('%s (%s)', AI.MyProfileName, profileName)
-
-			-- If the addon is loaded AND the profile is Ace3, lets load it
-			ADDON_DB.profiles[profile] = myDB                    -- Insert our new profile
-
-			-- Set the profile as the default for this toon
-			ADDON_DB.profileKeys[AI.MyProfileKey] = profile
-		else
-			for key, value in pairs(myDB) do
-				ADDON_DB[key] = value
-			end
-		end
-	end
-end
-
---[==[
-  AddonInstaller:LoadAddons(args)
-
-  input: (*optional)
-    args  [string]
-        This is a comma separated list, where the first value is the profile that you
-      want to load. The second arg can be "All" for all addons or the second and
-      following args can list the addons one at a time.
-
-        examples:
-
-        1.  args = "Repooc, All"
-
-            Loads all addons with the profile name "Repooc"
-
-        2.  args = "Darth, Hermes, xCT+,"
-
-            Loads Hermes and xCT+ addons with the profile name "Darth"
-
-  description:
-      This function was create to allow the loading of external addons profiles when a
-    UI is installed.
-
-  returns:
-    nil
-]==]
-
-function AI:LoadAddons(args)
-	-- This section of code parses the args
-	local ListArgs = { }
-
-	-- Trim the text (remove spaces), placed a nil check inside
-	args = string_gsub(args or '', regex_trim, '%1')
-
-	-- Add a comma onto the end
-	if string_sub(args, #args) ~= ',' then
-		args = args .. ','
-	end
-
-	local i, j = 0, 0
-	while i do
-		i, j = string_find(args, regex_match, j)    -- find all patterns that match 'Arg_1 Test+,'
-		if i then
-			-- Get the current pattern [ sub(index, length-1 ], trim all the spaces, and add it to the list of args
-			local arg = string_gsub(string_sub(args, i, j-1), regex_trim, '%1')
-			table_insert(ListArgs, arg)
-		end
-	end
-	-- Args parsing completed!
-
-	--[==[
-	-- DEBUG: See what args I have :)
-	for i, v in pairs(ListArgs) do
-		print(i,'=',v)
-	end
-	]==]
-
-	-- Get the profile name and see if we are loading All addons
-	local profileName, LOAD_ALL = ( ListArgs[1] or 'default' ), ( ListArgs[2] == 'All' )
-	table_remove(ListArgs, 1)  -- Remove the profile name, all we have left in the list are addons to load :)
-
-	if LOAD_ALL then -- Load all the addons
-		for name, entryList in pairs(self.addons) do      -- Just load all the addons for this profile
-			for _, entry in pairs(entryList) do             -- Loop through all the entries (could be multiple, like bigwigs)
-				LoadAddon(entry, profileName)
-			end
-		end
-	else  -- Load a specific set of addons
-		for _, name in pairs(ListArgs) do                 -- we need to figure out which addons to load
-			local entryList = self.addons[name]
-			for _, entry in pairs(entryList) do
-				-- Check for addon name
-				if entry then
-					for _, entry in pairs(entryList) do           -- Loop through all the entries
-						LoadAddon(entry, profileName)
-					end
-				else
-					E:Print("  |cffFF0000ERROR:|r No Addon named '"..name.."' was found in the SLE addon configs.")
-				end
-			end
-		end
-	end
-end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/install/load_install.xml b/ElvUI_SLE/modules/install/load_install.xml
deleted file mode 100755
index 9c61b11..0000000
--- a/ElvUI_SLE/modules/install/load_install.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='installer.lua'/>
-	<Script file='install.lua'/>
-	<Script file='BigWigs.lua'/>
-	<Script file='BigWigsFights.lua'/>
-	<Script file='BigWigsIcon.lua'/>
-	<Script file='Clique.lua'/>
-	<Script file='Hermes.lua'/>
-	<Script file='Skada.lua'/>
-	<Script file='xCT+.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/install/xCT+.lua b/ElvUI_SLE/modules/install/xCT+.lua
deleted file mode 100755
index 06dced0..0000000
--- a/ElvUI_SLE/modules/install/xCT+.lua
+++ /dev/null
@@ -1,324 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local AI = E:GetModule('AddonInstaller')
-
-local ace3   = true               -- whether or not this database is a Ace3 profile
-local name   = 'xCT+'             -- the name of the addon
-local dbname = 'xCTSavedDB'       -- name of the addon database
-
-local function OnDemand(profile)  -- function that creates the "load on demand" database
-	local database
-	if profile == "Affinitii" then
-		database = {
-			["blizzardFCT"] = {
-				["font"] = "KGSmallTownSouthernGirl",
-			},
-			["spells"] = {
-				["mergeCriticalsByThemselves"] = true,
-				["mergeDontMergeCriticals"] = false,
-			},
-			["frames"] = {
-				["general"] = {
-					["showBuffs"] = false,
-					["fontOutline"] = "2OUTLINE",
-					["Width"] = 510,
-					["font"] = "KGSmallTownSouthernGirl",
-					["enabledFrame"] = false,
-					["Height"] = 127,
-				},
-				["power"] = {
-					["enabledFrame"] = false,
-					["fontOutline"] = "2OUTLINE",
-					["Width"] = 255,
-					["font"] = "KGSmallTownSouthernGirl",
-				},
-				["healing"] = {
-					["enabledFrame"] = false,
-					["Width"] = 382,
-					["Y"] = 89,
-					["font"] = "KGSmallTownSouthernGirl",
-					["Height"] = 143,
-					["fontOutline"] = "2OUTLINE",
-					["X"] = -319,
-				},
-				["outgoing"] = {
-					["fontSize"] = 17,
-					["fontOutline"] = "2OUTLINE",
-					["enableScrollable"] = true,
-					["Width"] = 149,
-					["Y"] = -61,
-					["X"] = 901,
-					["iconsSize"] = 17,
-					["font"] = "KGSmallTownSouthernGirl",
-				},
-				["critical"] = {
-					["fontSize"] = 17,
-					["iconsSize"] = 19,
-					["fontOutline"] = "2OUTLINE",
-					["Width"] = 149,
-					["Y"] = 102,
-					["font"] = "KGSmallTownSouthernGirl",
-					["Height"] = 126,
-					["X"] = 901,
-				},
-				["procs"] = {
-					["enabledFrame"] = false,
-					["enableScrollable"] = true,
-					["Y"] = 101,
-					["X"] = 1,
-					["Height"] = 127,
-					["font"] = "KGSmallTownSouthernGirl",
-					["fontOutline"] = "2OUTLINE",
-				},
-				["loot"] = {
-					["fontOutline"] = "2OUTLINE",
-					["Width"] = 510,
-					["Y"] = -223,
-					["font"] = "KGSmallTownSouthernGirl",
-					["Height"] = 126,
-				},
-				["class"] = {
-					["fontOutline"] = "2OUTLINE",
-					["font"] = "KGSmallTownSouthernGirl",
-					["enabledFrame"] = false,
-				},
-				["damage"] = {
-					["fontSize"] = 17,
-					["X"] = 201,
-					["Width"] = 133,
-					["Y"] = -32,
-					["font"] = "KGSmallTownSouthernGirl",
-					["Height"] = 170,
-					["fontOutline"] = "2OUTLINE",
-				},
-			},
-		}
-	end
-
-	if profile == "Repooc" then
-		-- No Settings
-	end
-
-	if profile == "Darth" then
-		database = {
-			["spells"] = {
-				["items"] = {
-					["Самоцветы"] = {
-						["Особые"] = false,
-						["Синие"] = false,
-						["Простые"] = false,
-						["Оранжевые"] = false,
-						["Желтые"] = false,
-						["Зеленые"] = false,
-						["Зубчатое колесо"] = false,
-						["Радужные"] = false,
-						["Красные"] = false,
-						["Фиолетовые"] = false,
-					},
-					["Сумки"] = {
-						["Сумка начертателя"] = false,
-						["Сумка для продуктов"] = false,
-						["Сумка инженера"] = false,
-						["Сумка шахтера"] = false,
-						["Сумка кожевника"] = false,
-						["Сумка зачаровывателя"] = false,
-						["Сумка ювелира"] = false,
-						["Сумка"] = false,
-						["Сумка травника"] = false,
-						["Ящик для рыболовных снастей"] = false,
-					},
-					["Доспехи"] = {
-						["Тканевые"] = false,
-						["Разное"] = false,
-						["Кожаные"] = false,
-						["Щиты"] = false,
-						["Кольчужные"] = false,
-						["Визуальный эффект"] = false,
-						["Латные"] = false,
-					},
-					["Задания"] = {
-						["Задания"] = true,
-					},
-					["Оружие"] = {
-						["Древковое"] = false,
-						["Метательное"] = false,
-						["Кистевое"] = false,
-						["Одноручное дробящее"] = false,
-						["Двуручные топоры"] = false,
-						["Огнестрельное"] = false,
-						["Двуручное дробящее"] = false,
-						["Одноручные топоры"] = false,
-						["Арбалеты"] = false,
-						["Разное"] = false,
-						["Луки"] = false,
-						["Посохи"] = false,
-						["Двуручные мечи"] = false,
-						["Удочки"] = false,
-						["Жезлы"] = false,
-						["Одноручные мечи"] = false,
-						["Кинжалы"] = false,
-					},
-					["Расходуемые"] = {
-						["Зелья"] = true,
-						["Еда и напитки"] = true,
-						["Другое"] = false,
-						["Эликсиры"] = true,
-						["Настойки"] = true,
-						["Улучшения"] = false,
-						["Бинты"] = false,
-						["Свитки"] = false,
-					},
-					["version"] = 1,
-					["Боевые питомцы"] = {
-						["Гуманоид"] = false,
-						["Нежить"] = false,
-						["Элементаль"] = false,
-						["Животное"] = false,
-						["Дракон"] = false,
-						["Зверек"] = false,
-						["Магический"] = false,
-						["Механизм"] = false,
-						["Летающий"] = false,
-						["Водный"] = false,
-					},
-					["Разное"] = {
-						["Питомцы"] = false,
-						["Праздничные предметы"] = true,
-						["Реагенты"] = false,
-						["Другое"] = false,
-						["Верховые животные"] = false,
-						["Хлам"] = false,
-					},
-					["Символы"] = {
-						["Паладин"] = false,
-						["Шаман"] = false,
-						["Друид"] = false,
-						["Жрец"] = false,
-						["Разбойник"] = false,
-						["Монах"] = false,
-						["Воин"] = false,
-						["Чернокнижник"] = false,
-						["Охотник"] = false,
-						["Маг"] = false,
-						["Рыцарь смерти"] = false,
-					},
-					["Хозяйственные товары"] = {
-						["Наложение чар"] = true,
-						["Трава"] = true,
-						["Кожа"] = true,
-						["Материалы"] = true,
-						["Металл и камень"] = true,
-						["Стихии"] = true,
-						["Ткань"] = true,
-						["Кулинария"] = true,
-						["Чары для предметов"] = true,
-						["Детали"] = true,
-						["Ювелирное дело"] = true,
-						["Другое"] = true,
-						["Устройства"] = true,
-						["Взрывчатка"] = true,
-					},
-					["Рецепты"] = {
-						["Рыбная ловля"] = false,
-						["Инженерное дело"] = false,
-						["Кожевничество"] = false,
-						["Первая помощь"] = false,
-						["Начертание"] = false,
-						["Ювелирное дело"] = false,
-						["Книга"] = false,
-						["Кузнечное дело"] = false,
-						["Наложение чар"] = false,
-						["Кулинария"] = false,
-						["Алхимия"] = false,
-						["Портняжное дело"] = false,
-					},
-				},
-			},
-			["frames"] = {
-				["general"] = {
-					["fontSize"] = 14,
-					["showBuffs"] = false,
-					["showPartyKills"] = false,
-					["showDebuffs"] = false,
-					["font"] = "ElvUI Font",
-					["fontOutline"] = "2OUTLINE",
-				},
-				["power"] = {
-					["fontSize"] = 16,
-					["fontOutline"] = "2OUTLINE",
-					["font"] = "ElvUI Font",
-					["Width"] = 116,
-					["Y"] = -92,
-					["X"] = 364,
-					["Height"] = 151,
-					["enabledFrame"] = false,
-				},
-				["healing"] = {
-					["fontSize"] = 16,
-					["showFriendlyHealers"] = false,
-					["fontOutline"] = "2OUTLINE",
-					["insertText"] = "top",
-					["Width"] = 171,
-					["Y"] = -94,
-					["X"] = 219,
-					["Height"] = 158,
-					["font"] = "ElvUI Font",
-				},
-				["outgoing"] = {
-					["fontSize"] = 16,
-					["Height"] = 242,
-					["fontOutline"] = "2OUTLINE",
-					["insertText"] = "top",
-					["Width"] = 121,
-					["Y"] = -207,
-					["font"] = "ElvUI Font",
-					["iconsSize"] = 10,
-					["X"] = 898,
-				},
-				["critical"] = {
-					["fontSize"] = 20,
-					["iconsSize"] = 14,
-					["fontOutline"] = "2OUTLINE",
-					["insertText"] = "top",
-					["Width"] = 171,
-					["Y"] = -156,
-					["X"] = 751,
-					["Height"] = 138,
-					["font"] = "ElvUI Font",
-				},
-				["procs"] = {
-					["enabledFrame"] = false,
-					["Width"] = 254,
-					["Y"] = -63,
-					["Height"] = 126,
-				},
-				["loot"] = {
-					["fontSize"] = 12,
-					["filterItemQuality"] = 2,
-					["X"] = -1,
-					["fontOutline"] = "2OUTLINE",
-					["Y"] = -94,
-					["font"] = "ElvUI Font",
-					["Height"] = 155,
-					["Width"] = 283,
-				},
-				["class"] = {
-					["enabledFrame"] = false,
-				},
-				["damage"] = {
-					["fontSize"] = 16,
-					["X"] = -204,
-					["Width"] = 161,
-					["Y"] = -96,
-					["font"] = "ElvUI Font",
-					["Height"] = 156,
-					["fontOutline"] = "2OUTLINE",
-				},
-			},
-		}
-	end
-
-	return database
-end
-
--- register the profile with the engine
-AI:RegisterAddonProfile(name, ace3, dbname, OnDemand)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/load_modules.xml b/ElvUI_SLE/modules/load_modules.xml
old mode 100755
new mode 100644
index ae3d04f..2fcebfc
--- a/ElvUI_SLE/modules/load_modules.xml
+++ b/ElvUI_SLE/modules/load_modules.xml
@@ -1,24 +1,26 @@
 <Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Include file='install\load_install.xml'/>
-	<Script file='options.lua'/>
-	<Script file='pvpmover\pvpmover.lua'/>
-	<Include file='autorelease\load_autorelease.xml'/>
-	<Include file='datatexts\load_datatexts.xml'/>
-	<Include file='backgrounds\load_backgrounds.xml'/>
+	<Script file='auras.lua'/>
+	<Script file='autorelease.lua'/>
+	<Script file='backgrounds.lua'/>
 	<Include file='characterframe\load_characterframe.xml'/>
-	<Include file='chat\load_chat.xml'/>
-	<Include file='bags\load_bags.xml'/>
-	<Include file='equipmanager\load_equipmanager.xml'/>
-	<Include file='exprepbar\load_exprepbar.xml'/>
-	<Include file='farm\load_farm.xml'/>
-	<Include file='imports\load_imports.xml'/>
-	<Include file='loot\load_loot.xml'/>
+	<Script file='datatexts.lua'/>
+	<Include file='sledatatexts\load_datatexts.xml'/>
+	<Include file='dashboard\load_dashboard.xml'/>
+	<Script file='chat.lua'/>
+	<Script file='baginfo.lua'/>
+	<Script file='equipmanager.lua'/>
+	<Script file='exprepbar.lua'/>
+	<Script file='farm.lua'/>
+	<Script file='loot.lua'/>
 	<Include file='marks\load_marks.xml'/>
 	<Include file='minimap\load_minimap.xml'/>
-	<Include file='nameplates\load_nameplates.xml'/>
-	<Include file='raidutility\load_raidutility.xml'/>
-	<Include file='tooltip\load_tooltip.xml'/>
-	<Include file='uibuttons\load_uibuttons.xml'/>
-	<Include file='unitframes\load_unitframes.xml'/>
-	<Include file='vehicle\load_vehicle.xml'/>
+	<Script file='nameplates.lua'/>
+	<Script file='raidutility.lua'/>
+	<Script file='pvpmover.lua'/>
+	<Script file='screensaver.lua'/>
+	<Script file='threat.lua'/>
+	<Script file='tooltip.lua'/>
+	<Script file='uibuttons.lua'/>
+	<Script file='unitframes.lua'/>
+	<Script file='vehicle.lua'/>
 </Ui>
diff --git a/ElvUI_SLE/modules/loot.lua b/ElvUI_SLE/modules/loot.lua
new file mode 100644
index 0000000..f341951
--- /dev/null
+++ b/ElvUI_SLE/modules/loot.lua
@@ -0,0 +1,274 @@
+local E, L, V, P, G = unpack(ElvUI);
+local LT = E:GetModule('SLE_Loot')
+local M = E:GetModule('Misc')
+
+local check = false
+local t = 0
+local n = 0
+local loot, loottemp, numbers = {}, {}, {}
+local MyName, UnitLevel = E.myname, UnitLevel
+local IsInGroup, IsInRaid, IsPartyLFG = IsInGroup, IsInRaid, IsPartyLFG
+local GetNumGroupMembers, GetRaidRosterInfo = GetNumGroupMembers, GetRaidRosterInfo
+local GetLootSlotType, GetLootSlotLink, GetLootSlotInfo, GetLootRollItemInfo = GetLootSlotType, GetLootSlotLink, GetLootSlotInfo, GetLootRollItemInfo
+local GetNumLootItems, GetItemInfo = GetNumLootItems, GetItemInfo
+local IsLeftControlKeyDown = IsLeftControlKeyDown
+local tremove = table.remove
+local PlayerLevel, MaxPlayerLevel
+
+local function Check()
+	local name, rank, isML
+	for x = 1, GetNumGroupMembers() do
+		name, rank, _, _, _, _, _, _, _, _, isML = GetRaidRosterInfo(x)
+		if name == MyName then
+			if isML then
+				return true
+			elseif rank == 1 then
+				return true
+			elseif rank == 2 then
+				return true
+			end
+		end
+	end
+	return false
+end
+
+local function ModifierCheck()
+	local heldModifier = E.db.sle.loot.announcer.override
+	local shiftDown = IsShiftKeyDown();
+	local ctrlDown = IsControlKeyDown();
+	local altDown = IsAltKeyDown();
+
+	if heldModifier == '3' and shiftDown then
+		return true
+	elseif heldModifier == '5' and ctrlDown then
+		return true
+	elseif heldModifier == '4' and altDown then
+		return true
+	elseif heldModifier == '2' then
+		return true
+	end
+
+	return false
+end
+
+local function Merge()
+	local p, k
+	for i = 1, #loot do
+		k = 1
+		while loot[i] ~= loot[k] do k = k + 1 end
+		if i ~= k then
+			numbers[i] = numbers[i] + numbers[k]
+			tremove(numbers, k)
+			tremove(loot, k)
+			n = n - 1
+		end
+	end
+end
+
+local function PopulateTable(q)
+	local p, k
+	for i = 1, GetNumLootItems() do
+		if GetLootSlotType(i) == 1 then
+			local _, item, quantity, quality = GetLootSlotInfo(i)
+			local link, ilvl
+
+			if quality >= q then
+				link = GetLootSlotLink(i)
+				ilvl = select(4, GetItemInfo(link))
+
+				n = n + 1
+				loot[n] = link
+				loot[n] = loot[n].." (ilvl: "..ilvl..")"
+				numbers[n] = quantity
+			end
+		end
+	end
+	Merge()
+end
+
+local function Channel()
+	local channel
+	if E.db.sle.loot.announcer.channel ~= "SAY" and IsPartyLFG() then
+		return "INSTANCE_CHAT"
+	end
+	if E.db.sle.loot.announcer.channel == "RAID" and not IsInRaid() then
+		return "PARTY"
+	end
+	return E.db.sle.loot.announcer.channel
+end
+
+local function List()
+	for i = 1, n do
+		if numbers[i] == 1 then
+			SendChatMessage(i..". "..loot[i], Channel())
+		elseif numbers[i] > 1 then
+			SendChatMessage(i..". "..numbers[i].."x"..loot[i], Channel())
+		end
+		if i == n then
+			loot = {}
+			numbers = {}
+			n = 0
+		end
+	end
+end
+
+local function Announce(event)
+	if not IsInGroup() then return end -- not in group, exit.
+	local m = 0
+	local q = E.db.sle.loot.announcer.quality == "EPIC" and 4 or E.db.sle.loot.announcer.quality == "RARE" and 3 or E.db.sle.loot.announcer.quality == "UNCOMMON" and 2
+	if (Check() and E.db.sle.loot.announcer.auto) or (ModifierCheck() and (IsInGroup() or IsInRaid())) then
+		for i = 1, GetNumLootItems() do
+			if GetLootSlotType(i) == 1 then
+				for j = 1, t do
+					if GetLootSlotLink(i) == loottemp[j] then
+						check = true
+					end
+				end
+			end
+		end
+
+		if check == false or ModifierCheck() then
+			PopulateTable(q)
+			if n ~= 0 then
+				SendChatMessage(L["Loot Dropped:"], Channel())
+				List()
+			end
+		end
+
+		for i = 1, GetNumLootItems() do
+			if GetLootSlotType(i) == 1 then
+				loottemp[i] = GetLootSlotLink(i)
+			end
+		end
+		t = GetNumLootItems()
+		check = false
+	end
+end
+
+local function HandleRoll(event, id)
+	if not E.db.sle.loot.autoroll.enable then return end
+	if not (E.db.sle.loot.autoroll.autogreed or E.db.sle.loot.autoroll.autode) then return end
+
+	local _, name, _, quality, _, _, _, disenchant = GetLootRollItemInfo(id)
+	local link = GetLootRollItemLink(id)
+	local itemID = tonumber(strmatch(link, 'item:(%d+)'))
+
+	if itemID == 43102 or itemID == 52078 then
+		RollOnLoot(id, LOOT_ROLL_TYPE_GREED)
+	end
+
+	if IsXPUserDisabled() then MaxPlayerLevel = PlayerLevel end
+	if (E.db.sle.loot.autoroll.bylevel and PlayerLevel < E.db.sle.loot.autoroll.level) and PlayerLevel ~= MaxPlayerLevel then return end
+
+	if E.db.sle.loot.autoroll.bylevel then
+		if IsEquippableItem(link) then
+			local _, _, _, ilvl, _, _, _, _, slot = GetItemInfo(link)
+			local itemLink = GetInventoryItemLink('player', slot)
+			local matchItemLevel = itemLink and select(4, GetItemInfo(itemLink)) or 1
+			if quality ~= 7 and matchItemLevel < ilvl then return end
+		end
+	end
+
+	if quality <= E.db.sle.loot.autoroll.autoqlty then
+		if E.db.sle.loot.autoroll.autode and disenchant then
+			RollOnLoot(id, 3)
+		else
+			RollOnLoot(id, 2)
+		end
+	end
+end
+
+local function HandleEvent(event, ...)
+	if event == "LOOT_OPENED" then
+		if E.db.sle.loot.announcer.enable then
+			Announce(event)
+		end
+	end
+
+	if not E.db.sle.loot.autoroll.autoconfirm then return end
+	if event == "CONFIRM_LOOT_ROLL" or event == "CONFIRM_DISENCHANT_ROLL" then
+		local arg1, arg2 = ...
+		ConfirmLootRoll(arg1, arg2)
+	elseif event == "LOOT_OPENED" or event == "LOOT_BIND_CONFIRM" then
+		local count = GetNumLootItems()
+		if count == 0 then CloseLoot() return end
+		for numslot = 1, count do
+			ConfirmLootSlot(numslot)
+		end
+	end
+end
+
+local function LoadConfig(event, addon)
+	if addon ~= "ElvUI_Config" then return end
+
+	LT:Update()
+	LT:UnregisterEvent("ADDON_LOADED")
+end
+
+function LT:LoadLoot()
+	MaxPlayerLevel = GetMaxPlayerLevel()
+	PlayerLevel = UnitLevel('player')
+
+	--Azil made this, blame him if something fucked up
+	UIParent:UnregisterEvent("LOOT_BIND_CONFIRM") --Solo
+	UIParent:UnregisterEvent("CONFIRM_DISENCHANT_ROLL") --Group
+	UIParent:UnregisterEvent("CONFIRM_LOOT_ROLL") --Group
+
+	if E.db.general and E.db.sle.loot.autoroll.enable then
+		E.db.general.autoRoll = false
+	end
+
+	if E.db.sle.loot.enable then
+		self:RegisterEvent("LOOT_OPENED", HandleEvent)
+		self:RegisterEvent('PLAYER_ENTERING_WORLD', 'LootShow');
+		self:RegisterEvent("ADDON_LOADED", LoadConfig)
+	else
+		self:UnregisterEvent("LOOT_OPENED")
+		self:UnregisterEvent('PLAYER_ENTERING_WORLD')
+		self:UnregisterEvent("ADDON_LOADED")
+	end
+end
+
+function LT:LootShow()
+	local instance = IsInInstance()
+
+	if (not instance and E.db.sle.loot.history.autohide) then
+		LootHistoryFrame:Hide()
+	end
+end
+
+function LT:Update()
+	if IsAddOnLoaded("ElvUI_Config") then
+		if E.db.sle.loot.autoroll.enable then
+			E.Options.args.general.args.general.args.autoRoll.disabled = function() return true end
+		else
+			E.Options.args.general.args.general.args.autoRoll.disabled = function() return false end
+		end
+	end
+
+	if E.db.sle.loot.autoroll.autoconfirm then
+		self:RegisterEvent("CONFIRM_DISENCHANT_ROLL", HandleEvent)
+		self:RegisterEvent("CONFIRM_LOOT_ROLL", HandleEvent)
+		self:RegisterEvent("LOOT_BIND_CONFIRM", HandleEvent)
+	else
+		self:UnregisterEvent("CONFIRM_DISENCHANT_ROLL")
+		self:UnregisterEvent("CONFIRM_LOOT_ROLL")
+		self:UnregisterEvent("LOOT_BIND_CONFIRM")
+	end
+
+	LootHistoryFrame:SetAlpha(E.db.sle.loot.history.alpha or 1)
+end
+
+
+function LT:PLAYER_LEVEL_UP(event, level)
+	PlayerLevel = level
+end
+
+function LT:Initialize()
+	if not E.db.sle.loot.enable then return end
+	self:RegisterEvent("START_LOOT_ROLL", HandleRoll)
+	self:RegisterEvent("PLAYER_LEVEL_UP")
+
+	LT:LoadLoot()
+	LT:Update()
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/loot/load_loot.xml b/ElvUI_SLE/modules/loot/load_loot.xml
deleted file mode 100755
index ae66547..0000000
--- a/ElvUI_SLE/modules/loot/load_loot.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='loot.lua'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/loot/loot.lua b/ElvUI_SLE/modules/loot/loot.lua
deleted file mode 100755
index 8acbc5b..0000000
--- a/ElvUI_SLE/modules/loot/loot.lua
+++ /dev/null
@@ -1,139 +0,0 @@
---Raid mark bar. Similar to quickmark which just semms to be impossible to skin
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local LT = E:NewModule('Loot', 'AceHook-3.0', 'AceEvent-3.0')
-local check = false
-local t = 0
-local loottemp = {}
-local MyName = E.myname
-local IsInGroup, IsInRaid, IsPartyLFG = IsInGroup, IsInRaid, IsPartyLFG
-local GetNumGroupMembers, GetRaidRosterInfo = GetNumGroupMembers, GetRaidRosterInfo
-local GetLootSlotType = GetLootSlotType
-local GetNumLootItems = GetNumLootItems
-local IsLeftControlKeyDown = IsLeftControlKeyDown
-local GetLootSlotLink = GetLootSlotLink
-local GetLootSlotInfo = GetLootSlotInfo
-
-function LT:Check()
-	local name, rank, isML
-	for x = 1, GetNumGroupMembers() do
-		name, rank, _, _, _, _, _, _, _, _, isML = GetRaidRosterInfo(x)
-		if name == MyName and isML then
-			return true
-		elseif name == MyName and rank == 1 then
-			return true
-		elseif name == MyName and rank == 2 then
-			return true
-		end
-	end
-	return false
-end
-
-function LT:Announce()
-	local name = {}
-	local loot = {}
-	local numbers = {}
-	local m = 0
-	local q = E.db.sle.loot.quality == "EPIC" and 4 or E.db.sle.loot.quality == "RARE" and 3 or E.db.sle.loot.quality == "UNCOMMON" and 2
-	local n = 0
-	--local inGroup, inRaid, inPartyLFG = IsInGroup(), IsInRaid(), IsPartyLFG()
-	local p, chat
-	if not IsInGroup() then return end -- not in group, exit.
-	if (LT:Check() and E.db.sle.loot.auto) or (IsLeftControlKeyDown() and (IsInGroup() or IsInRaid())) then
-		for i = 1, GetNumLootItems() do
-			if GetLootSlotType(i) == 1 then
-				for j = 1, t do
-					if GetLootSlotLink(i) == loottemp[j] then
-						check = true
-					end
-				end
-			end
-		end
-		if check == false or IsLeftControlKeyDown() then
-			for i = 1, GetNumLootItems() do
-				if GetLootSlotType(i) ~= 1 then
-					m = m + 1
-				else
-					local _, item, quantity, quality = GetLootSlotInfo(i)
-					if quality >= q then
-						name[i] = item
-
-						k = 1
-						while name[i] ~= name[k] do
-						k = k + 1
-						end
-
-						if i == k then
-							n = n + 1
-							loot[n] = GetLootSlotLink(i)
-						numbers[n] = quantity
-						else
-
-						p = 1
-						while GetLootSlotLink(k) ~= loot[p] do
-						p = p + 1
-						end
-						numbers[p] = numbers[p] + quantity
-
-					end
-				end
-			end
-		end
-		if n ~= 0 then
-			if E.db.sle.loot.chat == "PARTY" then
-				SendChatMessage(L["Loot Dropped:"], IsPartyLFG() and "INSTANCE_CHAT" or "PARTY")
-			elseif E.db.sle.loot.chat == "RAID" then
-				if IsInRaid() then
-					SendChatMessage(L["Loot Dropped:"], IsPartyLFG() and "INSTANCE_CHAT" or "RAID")
-				else
-					SendChatMessage(L["Loot Dropped:"], IsPartyLFG() and "INSTANCE_CHAT" or "PARTY")
-				end
-			elseif E.db.sle.loot.chat == "SAY" then
-				SendChatMessage(L["Loot Dropped:"], "SAY")
-			end
-		end
-		for i = 1, n do
-			if E.db.sle.loot.chat == "PARTY" then
-				if numbers[i] == 1 then
-					SendChatMessage(i..". "..loot[i], IsPartyLFG() and "INSTANCE_CHAT" or "PARTY")
-				elseif numbers[i] > 1 then
-					SendChatMessage(i..". "..loot[i].."x"..numbers[i], IsPartyLFG() and "INSTANCE_CHAT" or "PARTY")
-				end
-			elseif E.db.sle.loot.chat == "RAID" then
-				if IsInRaid() then
-					if numbers[i] == 1 then
-						SendChatMessage(i..". "..loot[i], IsPartyLFG() and "INSTANCE_CHAT" or "RAID")
-					elseif numbers[i] > 1 then
-							SendChatMessage(i..". "..loot[i].."x"..numbers[i], IsPartyLFG() and "INSTANCE_CHAT" or "RAID")
-						end
-					else
-						if numbers[i] == 1 then
-							SendChatMessage(i..". "..loot[i], IsPartyLFG() and "INSTANCE_CHAT" or "PARTY")
-						elseif numbers[i] > 1 then
-							SendChatMessage(i..". "..loot[i].."x"..numbers[i], IsPartyLFG() and "INSTANCE_CHAT" or "PARTY")
-						end
-					end
-			elseif E.db.sle.loot.chat == "SAY" then
-				if numbers[i] == 1 then
-					SendChatMessage(i..". "..loot[i], "SAY")
-				elseif numbers[i] > 1 then
-					SendChatMessage(i..". "..loot[i].."x"..numbers[i], "SAY")
-					end
-				end
-			end
-		end
-		for i = 1, GetNumLootItems() do
-			if GetLootSlotType(i) == 1 then
-				loottemp[i] = GetLootSlotLink(i)
-			end
-		end
-		t = GetNumLootItems()
-		check = false
-	end
-end
-
-function LT:Initialize()
-	if not E.private.sle.loot.enable then return end
-	self:RegisterEvent("LOOT_OPENED", "Announce")
-end
-
-E:RegisterModule(LT:GetName())
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/loot/options.lua b/ElvUI_SLE/modules/loot/options.lua
deleted file mode 100755
index d2430c3..0000000
--- a/ElvUI_SLE/modules/loot/options.lua
+++ /dev/null
@@ -1,74 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local LT = E:GetModule('Loot')
-local function configTable()
-
---Main options group
-E.Options.args.sle.args.options.args.loot = {
-	order = 9,
-	type = "group",
-	name = L['Loot Announcer'],
-	args = {
-		marksheader = {
-			order = 1,
-			type = "header",
-			name = L['Loot Announcer'],
-		},
-		info = {
-			order = 2,
-			type = "description",
-			name = L["LOOT_DESC"],
-		},
-		enabled = {
-			order = 3,
-			type = "toggle",
-			name = L["Enable"],
-			get = function(info) return E.private.sle.loot.enable end,
-			set = function(info, value) E.private.sle.loot.enable = value; E:StaticPopup_Show("PRIVATE_RL") end
-		},
-		auto = {
-			order = 4,
-			type = "toggle",
-			name = L["Auto Announce"],
-			desc = L["Automatically announce when loot window opens (Master Looter Only)."],
-			disabled = function() return not E.private.sle.loot.enable end,
-			get = function(info) return E.db.sle.loot.auto end,
-			set = function(info, value) E.db.sle.loot.auto = value; end
-		},
-		spacer = {
-			order = 5,
-			type = "description",
-			name = "",
-		},
-		quality = {
-			order = 6,
-			type = "select",
-			name = L["Loot Quality"],
-			desc = L["Set the minimum quality of an item to announce."],
-			disabled = function() return not E.private.sle.loot.enable end,
-			get = function(info) return E.db.sle.loot.quality end,
-			set = function(info, value) E.db.sle.loot.quality = value;  end,
-			values = {
-				['EPIC'] = "|cffA335EE"..ITEM_QUALITY4_DESC.."|r",
-				['RARE'] = "|cff0070DD"..ITEM_QUALITY3_DESC.."|r",
-				['UNCOMMON'] = "|cff1EFF00"..ITEM_QUALITY2_DESC.."|r",
-			},
-		},
-		chat = {
-			order = 7,
-			type = "select",
-			name = L["Chat"],
-			desc = L["Announce loot to the selected channel."],
-			disabled = function() return not E.private.sle.loot.enable end,
-			get = function(info) return E.db.sle.loot.chat end,
-			set = function(info, value) E.db.sle.loot.chat = value;  end,
-			values = {
-				['RAID'] = "|cffFF7F00"..RAID.."|r",
-				['PARTY'] = "|cffAAAAFF"..PARTY.."|r",
-				['SAY'] = "|cffFFFFFF"..SAY.."|r",
-			},
-		},
-	},
-}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/marks/flares.lua b/ElvUI_SLE/modules/marks/flares.lua
index 2191531..819daac 100644
--- a/ElvUI_SLE/modules/marks/flares.lua
+++ b/ElvUI_SLE/modules/marks/flares.lua
@@ -1,5 +1,6 @@
-local E, L, V, P, G, _ = unpack(ElvUI);
-local RF = E:NewModule('RaidFlares', 'AceHook-3.0', 'AceEvent-3.0');
+local E, L, V, P, G = unpack(ElvUI);
+local RF = E:GetModule('SLE_RaidFlares');
+local template = "SecureActionButtonTemplate"

 BINDING_HEADER_SHADOWLIGHT_WORLDMARKER = "|cff1784d1Shadow & Light|r"
 _G["BINDING_NAME_CLICK SquareFlareMarker:LeftButton"] = L["Square Flare"];
@@ -8,25 +9,28 @@ _G["BINDING_NAME_CLICK DiamondFlareMarker:LeftButton"] = L["Diamond Flare"];
 _G["BINDING_NAME_CLICK CrossFlareMarker:LeftButton"] = L["Cross Flare"];
 _G["BINDING_NAME_CLICK StarFlareMarker:LeftButton"] = L["Star Flare"];

-local mainFlares = CreateFrame("Frame", "Main_Flares", E.UIParent)
-local f1 = CreateFrame("Button", "SquareFlareMarker", Main_Flares, "SecureActionButtonTemplate")
-local f2 = CreateFrame("Button", "TriangleFlareMarker", Main_Flares, "SecureActionButtonTemplate")
-local f3 = CreateFrame("Button", "DiamondFlareMarker", Main_Flares, "SecureActionButtonTemplate")
-local f4 = CreateFrame("Button", "CrossFlareMarker", Main_Flares, "SecureActionButtonTemplate")
-local f5 = CreateFrame("Button", "StarFlareMarker", Main_Flares, "SecureActionButtonTemplate")
-local f6 = CreateFrame("Button", "ClearFlaresMarker", Main_Flares, "SecureActionButtonTemplate")
+local mainFlares, f1, f2, f3, f4, f5, f6, FlareB

-local FlareB = {f1,f2,f3,f4,f5,f6}
-
-function RF:CreateFrame()
+local function CreateFrames()
+	mainFlares = CreateFrame("Frame", "Main_Flares", E.UIParent)
 	mainFlares:Point("CENTER", E.UIParent, "CENTER", 0, 40);
 	mainFlares:SetFrameStrata('LOW');
 	mainFlares:CreateBackdrop();
 	mainFlares.backdrop:SetAllPoints();
 	mainFlares:Hide();
+
+	f1 = CreateFrame("Button", "SquareFlareMarker", Main_Flares, template)
+	f2 = CreateFrame("Button", "TriangleFlareMarker", Main_Flares, template)
+	f3 = CreateFrame("Button", "DiamondFlareMarker", Main_Flares, template)
+	f4 = CreateFrame("Button", "CrossFlareMarker", Main_Flares, template)
+	f5 = CreateFrame("Button", "StarFlareMarker", Main_Flares, template)
+	f6 = CreateFrame("Button", "ClearFlaresMarker", Main_Flares, template)
+
+	FlareB = {f1,f2,f3,f4,f5,f6}
 end

-function RF:SetupButton(button, flare)
+local function SetupButton(button, flare)
+	if not mainFlares then return end
 	button:CreateBackdrop()
 	button.backdrop:SetAllPoints()
 	button:SetAttribute("type", "macro")
@@ -63,22 +67,25 @@ function RF:SetupButton(button, flare)
 	end
 end

-function RF:CreateButtons()
-	RF:SetupButton(f1, "/clearworldmarker 1\n/worldmarker 1")
-	RF:SetupButton(f2, "/clearworldmarker 2\n/worldmarker 2")
-	RF:SetupButton(f3, "/clearworldmarker 3\n/worldmarker 3")
-	RF:SetupButton(f4, "/clearworldmarker 4\n/worldmarker 4")
-	RF:SetupButton(f5, "/clearworldmarker 5\n/worldmarker 5")
-	RF:SetupButton(f6, "/clearworldmarker all")
+local function CreateButtons()
+	if not mainFlares then return end
+	SetupButton(f1, "/clearworldmarker 1\n/worldmarker 1")
+	SetupButton(f2, "/clearworldmarker 2\n/worldmarker 2")
+	SetupButton(f3, "/clearworldmarker 3\n/worldmarker 3")
+	SetupButton(f4, "/clearworldmarker 4\n/worldmarker 4")
+	SetupButton(f5, "/clearworldmarker 5\n/worldmarker 5")
+	SetupButton(f6, "/clearworldmarker all")
 end

-function RF:FrameButtonsSize()
+local function FrameButtonsSize()
+	if not mainFlares then return end
 	for i = 1, 6 do
 		FlareB[i]:Size(E.db.sle.flares.size)
 	end
 end

-function RF:FrameButtonsGrowth()
+local function FrameButtonsGrowth()
+	if not mainFlares then return end
 	local db = E.db.sle.flares
 	local size = db.size
 	local width, height, x, y, anchor, point
@@ -109,27 +116,57 @@ function RF:FrameButtonsGrowth()
 	end
 end

-function RF:UpdateVisibility()
+local function Mouseover()
+	if not mainFlares then return end
+	local db = E.db.sle.flares
+	if db.mouseover then
+		mainFlares:SetScript("OnUpdate", function(self)
+			if MouseIsOver(self) then
+				UIFrameFadeIn(self, 0.2, self:GetAlpha(), 1)
+			else
+				UIFrameFadeOut(self, 0.2, self:GetAlpha(), 0)
+			end
+		end)
+	else
+		mainFlares:SetScript("OnUpdate", nil)
+		if mainFlares:IsShown() then
+			UIFrameFadeIn(mainFlares, 0.2, mainFlares:GetAlpha(), 1)
+		end
+	end
+end
+
+local function UpdateVisibility()
+	if not mainFlares then return end
 	local inInstance, instanceType = IsInInstance()
 	local db = E.db.sle.flares
-	if db.enabled then
-		if (inInstance and instanceType ~= "pvp") and db.showinside then
-			E.FrameLocks['Main_Flares'] = true
-			mainFlares:Show()
-		elseif not inInstance and db.showinside then
-			E.FrameLocks['Main_Flares'] = nil
-			mainFlares:Hide()
-		elseif not db.showinside then
-			E.FrameLocks['Main_Flares'] = true
-			mainFlares:Show()
+	local show = false
+
+	if (inInstance and instanceType ~= "pvp") and db.showinside then
+		show = true
+	elseif not inInstance and db.showinside then
+		show = false
+	elseif not db.showinside then
+		show = true
+	end
+
+	if show then
+		E.FrameLocks['Main_Flares'] = true
+		mainFlares:Show()
+		for i = 1, 6 do
+			FlareB[i]:Show()
 		end
 	else
-		E.FrameLocks['Main_Flares'] = true
+		E.FrameLocks['Main_Flares'] = nil
 		mainFlares:Hide()
+		for i = 1, 6 do
+			FlareB[i]:Hide()
+		end
 	end
+	Mouseover()
 end

-function RF:Backdrop()
+local function Backdrop()
+	if not mainFlares then return end
 	if E.db.sle.flares.backdrop then
 		mainFlares.backdrop:Show()
 	else
@@ -138,19 +175,19 @@ function RF:Backdrop()
 end

 function RF:Update()
-   RF:FrameButtonsSize()
-   RF:FrameButtonsGrowth()
-   RF:UpdateVisibility()
-   RF:Backdrop()
+	if not mainFlares then return end
+	FrameButtonsSize()
+	FrameButtonsGrowth()
+	UpdateVisibility()
+	Backdrop()
 end

 function RF:Initialize()
-   RF:CreateFrame()
-   RF:Update()
-   RF:CreateButtons()
-   self:RegisterEvent("PLAYER_ENTERING_WORLD", "UpdateVisibility");
+	if not E.private.sle.marks.flares then return end
+	CreateFrames()
+	RF:Update()
+	CreateButtons()
+	self:RegisterEvent("PLAYER_ENTERING_WORLD", UpdateVisibility);

-   E:CreateMover(mainFlares, "FlareMover", "RF", nil, nil, nil, "ALL,S&L,S&L MISC")
-end
-
-E:RegisterModule(RF:GetName())
\ No newline at end of file
+	E:CreateMover(mainFlares, "FlareMover", "RF", nil, nil, nil, "ALL,S&L,S&L MISC")
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/marks/load_marks.xml b/ElvUI_SLE/modules/marks/load_marks.xml
old mode 100755
new mode 100644
index 248f4e3..289c801
--- a/ElvUI_SLE/modules/marks/load_marks.xml
+++ b/ElvUI_SLE/modules/marks/load_marks.xml
@@ -1,5 +1,4 @@
 <Ui xmlns="http://www.blizzard.com/wow/ui/">
 	<Script file='flares.lua'/>
 	<Script file='marks.lua'/>
-	<Script file='options.lua'/>
 </Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/marks/marks.lua b/ElvUI_SLE/modules/marks/marks.lua
old mode 100755
new mode 100644
index 3897795..3664b2b
--- a/ElvUI_SLE/modules/marks/marks.lua
+++ b/ElvUI_SLE/modules/marks/marks.lua
@@ -1,32 +1,35 @@
---Raid mark bar. Similar to quickmark which just semms to be impossible to skin
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local RM = E:NewModule('RaidMarks', 'AceHook-3.0', 'AceEvent-3.0');
+local E, L, V, P, G = unpack(ElvUI);
+local RM = E:GetModule('SLE_RaidMarks')
 local Mtemplate = "SecureActionButtonTemplate"
-
-local mark_menu = CreateFrame("Frame", "Mark_Menu", E.UIParent)
-local m1 = CreateFrame("Button", "M1", Mark_Menu, Mtemplate)
-local m2 = CreateFrame("Button", "M2", Mark_Menu, Mtemplate)
-local m3 = CreateFrame("Button", "M3", Mark_Menu, Mtemplate)
-local m4 = CreateFrame("Button", "M4", Mark_Menu, Mtemplate)
-local m5 = CreateFrame("Button", "M5", Mark_Menu, Mtemplate)
-local m6 = CreateFrame("Button", "M6", Mark_Menu, Mtemplate)
-local m7 = CreateFrame("Button", "M7", Mark_Menu, Mtemplate)
-local m8 = CreateFrame("Button", "M8", Mark_Menu, Mtemplate)
-
-local MarkB = {m1,m2,m3,m4,m5,m6,m7,m8}
-
+local IsInInstance = IsInInstance
+local UnitExists = UnitExists
+local mark_menu, m1, m2, m3, m4, m5, m6, m7, m8, MarkB
+local UIFrameFadeIn = UIFrameFadeIn
+local UIFrameFadeOut = UIFrameFadeOut

 --Main frame
-function RM:CreateFrame()
+local function CreateFrames()
+	mark_menu = CreateFrame("Frame", "Mark_Menu", E.UIParent)
 	mark_menu:Point("BOTTOMRIGHT", RightChatTab, "TOPRIGHT", 2, 3) --Default positon
 	mark_menu:SetFrameStrata('LOW');
 	mark_menu:CreateBackdrop();
 	mark_menu.backdrop:SetAllPoints();

+	m1 = CreateFrame("Button", "M1", Mark_Menu, Mtemplate)
+	m2 = CreateFrame("Button", "M2", Mark_Menu, Mtemplate)
+	m3 = CreateFrame("Button", "M3", Mark_Menu, Mtemplate)
+	m4 = CreateFrame("Button", "M4", Mark_Menu, Mtemplate)
+	m5 = CreateFrame("Button", "M5", Mark_Menu, Mtemplate)
+	m6 = CreateFrame("Button", "M6", Mark_Menu, Mtemplate)
+	m7 = CreateFrame("Button", "M7", Mark_Menu, Mtemplate)
+	m8 = CreateFrame("Button", "M8", Mark_Menu, Mtemplate)
+
+	MarkB = {m1,m2,m3,m4,m5,m6,m7,m8}
+
 	mark_menu:Hide()
 end

-function RM:SetupButton(button, mark)
+local function SetupButton(button, mark)
 	button:CreateBackdrop()
 	button.backdrop:SetAllPoints()
 	button:SetAttribute("type", "macro")
@@ -39,21 +42,24 @@ function RM:SetupButton(button, mark)
 end

 --Buttons creation
-function RM:CreateButtons()
+local function CreateButtons()
+	if not mark_menu then return end
 	for i = 1, 8 do
-		RM:SetupButton(MarkB[i], 9 - i)
+		SetupButton(MarkB[i], 9 - i)
 	end
 end

 --Setting/updating buttons' size
-function RM:FrameButtonsSize()
+local function FrameButtonsSize()
+	if not mark_menu then return end
 	for i = 1, 8 do
 		MarkB[i]:Size(E.db.sle.marks.size)
 	end
 end

 --Setting growth direction for buttons
-function RM:FrameButtonsGrowth()
+local function FrameButtonsGrowth()
+	if not mark_menu then return end
 	local db = E.db.sle.marks
 	local size = db.size
 	local width, height, x, y, anchor, point
@@ -84,28 +90,79 @@ function RM:FrameButtonsGrowth()
 	end
 end

+local function Mouseover()
+	if not mark_menu then return end
+	local db = E.db.sle.marks
+	if db.mouseover then
+		mark_menu:SetScript("OnUpdate", function(self)
+			if MouseIsOver(self) then
+				UIFrameFadeIn(self, 0.2, self:GetAlpha(), 1)
+			else
+				UIFrameFadeOut(self, 0.2, self:GetAlpha(), 0)
+			end
+		end)
+	else
+		mark_menu:SetScript("OnUpdate", nil)
+		if mark_menu:IsShown() then
+			UIFrameFadeIn(mark_menu, 0.2, mark_menu:GetAlpha(), 1)
+		end
+	end
+end
+
 --Visibility/enable check
-function RM:UpdateVisibility()
+local function UpdateVisibility()
+	if not mark_menu then return end
 	local inInstance, instanceType = IsInInstance()
 	local db = E.db.sle.marks
-	if db.enabled then
-		if (inInstance and instanceType ~= "pvp") and db.showinside then
-			E.FrameLocks['Mark_Menu'] = true -- Because theyre thinking of adding battle pets to raids
-			mark_menu:Show()
-		elseif not inInstance and db.showinside then
-			E.FrameLocks['Mark_Menu'] = nil
-			mark_menu:Hide()
-		elseif not db.showinside then
-			E.FrameLocks['Mark_Menu'] = true
-			mark_menu:Show()
+	local show = false
+	if (inInstance and instanceType ~= "pvp") and db.showinside then
+		if db.target and UnitExists("target") then
+			show = true
+		elseif db.target and not UnitExists("target") then
+			show = false
+		else
+			show = true
 		end
-	else
+	elseif not inInstance and db.showinside then
+		show = false
+	elseif not db.showinside then
+			if db.target and UnitExists("target") then
+			show = true
+		elseif db.target and not UnitExists("target") then
+			show = false
+		else
+			show = true
+		end
+	end
+
+	if show then
 		E.FrameLocks['Mark_Menu'] = true
+		mark_menu:Show()
+		for i = 1, 8 do
+			MarkB[i]:Show()
+		end
+	else
+		E.FrameLocks['Mark_Menu'] = nil
 		mark_menu:Hide()
+		for i = 1, 8 do
+			MarkB[i]:Hide()
+		end
 	end
+	Mouseover()
 end

-function RM:Backdrop()
+local function Target()
+	if not mark_menu then return end
+	local db = E.db.sle.marks
+	if db.target then
+		RM:RegisterEvent("PLAYER_TARGET_CHANGED", UpdateVisibility);
+	else
+		RM:UnregisterEvent("PLAYER_TARGET_CHANGED");
+	end
+end
+
+local function Backdrop()
+	if not mark_menu then return end
 	if E.db.sle.marks.backdrop then
 		mark_menu.backdrop:Show()
 	else
@@ -114,19 +171,20 @@ function RM:Backdrop()
 end

 function RM:Update()
-	RM:FrameButtonsSize()
-	RM:FrameButtonsGrowth()
-	RM:UpdateVisibility()
-	RM:Backdrop()
+	if not mark_menu then return end
+	FrameButtonsSize()
+	FrameButtonsGrowth()
+	Target()
+	UpdateVisibility()
+	Backdrop()
 end

 function RM:Initialize()
-	RM:CreateFrame()
+	if not E.private.sle.marks.marks then return end
+	CreateFrames()
 	RM:Update()
-	RM:CreateButtons()
-	self:RegisterEvent("PLAYER_ENTERING_WORLD", "UpdateVisibility");
+	CreateButtons()
+	self:RegisterEvent("PLAYER_ENTERING_WORLD", UpdateVisibility);

 	E:CreateMover(mark_menu, "MarkMover", "RM", nil, nil, nil, "ALL,S&L,S&L MISC")
-end
-
-E:RegisterModule(RM:GetName())
\ No newline at end of file
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/marks/options.lua b/ElvUI_SLE/modules/marks/options.lua
deleted file mode 100755
index 9a15de0..0000000
--- a/ElvUI_SLE/modules/marks/options.lua
+++ /dev/null
@@ -1,171 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local RM = E:GetModule('RaidMarks')
-local RF = E:GetModule('RaidFlares')
-local function configTable()
-
---Main options group
-E.Options.args.sle.args.options.args.marks = {
-	order = 4,
-	type = "group",
-	name = L["Raid Marks"],
-	args = {
-		intro = {
-			order = 1,
-			type = 'description',
-			name = L['Options for panels providing fast access to raid markers and flares.'],
-		},
-		marks = {
-			order = 2,
-			type = "group",
-			name = L["Raid Marks"],
-			args = {
-				marksheader = {
-					order = 1,
-					type = "header",
-					name = L["Raid Marks"],
-				},
-				enabled = {
-					order = 2,
-					type = "toggle",
-					name = L["Enable"],
-					desc = L["Show/Hide raid marks."],
-					get = function(info) return E.db.sle.marks.enabled end,
-					set = function(info, value) E.db.sle.marks.enabled = value; RM:UpdateVisibility() end
-				},
-				backdrop = {
-					order = 3,
-					type = "toggle",
-					name = L["Backdrop"],
-					disabled = function() return not E.db.sle.marks.enabled end,
-					get = function(info) return E.db.sle.marks.backdrop end,
-					set = function(info, value) E.db.sle.marks.backdrop = value; RM:Backdrop() end
-				},
-				Reset = {
-					order = 4,
-					type = 'execute',
-					name = L['Restore Defaults'],
-					desc = L["Reset these options to defaults"],
-					disabled = function() return not E.db.sle.marks.enabled end,
-					func = function() E:GetModule('SLE'):Reset(nil, nil, nil, nil, true) end,
-				},
-				spacer = {
-					order = 5,
-					type = 'description',
-					name = "",
-				},
-				showinside = {
-					order = 6,
-					type = "toggle",
-					name = L["Show only in instances"],
-					desc = L["Selecting this option will have the Raid Markers appear only while in a raid or dungeon."],
-					disabled = function() return not E.db.sle.marks.enabled end,
-					get = function(info) return E.db.sle.marks.showinside end,
-					set = function(info, value) E.db.sle.marks.showinside = value; RM:UpdateVisibility() end
-				},
-				size = {
-					order = 7,
-					type = "range",
-					name = L['Size'],
-					desc = L["Sets size of buttons"],
-					disabled = function() return not E.db.sle.marks.enabled end,
-					min = 15, max = 30, step = 1,
-					get = function(info) return E.db.sle.marks.size end,
-					set = function(info, value) E.db.sle.marks.size = value; RM:FrameButtonsGrowth(); RM:FrameButtonsSize() end,
-				},
-				growth = {
-					order = 8,
-					type = "select",
-					name = L["Direction"],
-					desc = L["Change the direction of buttons growth from the skull marker"],
-					disabled = function() return not E.db.sle.marks.enabled end,
-					get = function(info) return E.db.sle.marks.growth end,
-					set = function(info, value) E.db.sle.marks.growth = value; RM:FrameButtonsGrowth() end,
-					values = {
-						['RIGHT'] = L["Right"],
-						['LEFT'] = L["Left"],
-						['UP'] = L["Up"],
-						['DOWN'] = L["Down"],
-					},
-				},
-			},
-		},
-		flares = {
-			order = 3,
-			type = "group",
-			name = L["Raid Flares"],
-			args = {
-				header = {
-					order = 1,
-					type = "header",
-					name = L["Raid Flares"],
-				},
-				enabled = {
-					order = 2,
-					type = "toggle",
-					name = L["Enable"],
-					desc = L["Show/Hide Raid Flares."],
-					get = function(info) return E.db.sle.flares.enabled end,
-					set = function(info, value) E.db.sle.flares.enabled = value; RF:UpdateVisibility() end
-				},
-				backdrop = {
-					order = 3,
-					type = "toggle",
-					name = L["Backdrop"],
-					disabled = function() return not E.db.sle.flares.enabled end,
-					get = function(info) return E.db.sle.flares.backdrop end,
-					set = function(info, value) E.db.sle.flares.backdrop = value; RF:Backdrop() end
-				},
-				spacer = {
-					order = 5,
-					type = 'description',
-					name = "",
-				},
-				showinside = {
-					order = 6,
-					type = "toggle",
-					name = L["Show only in instances"],
-					desc = L["Selecting this option will have the Raid Flares appear only while in a raid or dungeon."],
-					disabled = function() return not E.db.sle.flares.enabled end,
-					get = function(info) return E.db.sle.flares.showinside end,
-					set = function(info, value) E.db.sle.flares.showinside = value; RF:UpdateVisibility() end
-				},
-				tooltips = {
-					order = 7,
-					type = "toggle",
-					name = L["Show Tooltip"],
-					disabled = function() return not E.db.sle.flares.enabled end,
-					get = function(info) return E.db.sle.flares.tooltips end,
-					set = function(info, value) E.db.sle.flares.tooltips = value; end
-				},
-				size = {
-					order = 8,
-					type = "range",
-					name = L['Size'],
-					desc = L["Sets size of buttons"],
-					disabled = function() return not E.db.sle.flares.enabled end,
-					min = 15, max = 30, step = 1,
-					get = function(info) return E.db.sle.flares.size end,
-					set = function(info, value) E.db.sle.flares.size = value; RF:FrameButtonsGrowth(); RF:FrameButtonsSize() end,
-				},
-				growth = {
-					order = 9,
-					type = "select",
-					name = L["Direction"],
-					desc = L["Change the direction of buttons growth from the square marker"],
-					disabled = function() return not E.db.sle.flares.enabled end,
-					get = function(info) return E.db.sle.flares.growth end,
-					set = function(info, value) E.db.sle.flares.growth = value; RF:FrameButtonsGrowth() end,
-					values = {
-						['RIGHT'] = L["Right"],
-						['LEFT'] = L["Left"],
-						['UP'] = L["Up"],
-						['DOWN'] = L["Down"],
-					},
-				},
-			},
-		},
-	},
-}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/minimap/instance.lua b/ElvUI_SLE/modules/minimap/instance.lua
new file mode 100644
index 0000000..971ad52
--- /dev/null
+++ b/ElvUI_SLE/modules/minimap/instance.lua
@@ -0,0 +1,83 @@
+local E, L, V, P, G = unpack(ElvUI);
+local I = E:GetModule('SLE_InstDif')
+local GetInstanceInfo = GetInstanceInfo
+local sub = string.sub
+local IsInInstance, IsInGuild = IsInInstance, IsInGuild
+local f
+
+local function CreateText()
+f = CreateFrame("Frame", "MiniMapDifFrame", Minimap)
+f:Size(50, 20)
+
+-- f:Point("CENTER", UIParent)
+
+f.text = f:CreateFontString(nil, 'OVERLAY')
+f.text:SetFont(E["media"].normFont, 12)
+f.text:SetPoint("CENTER", f, "CENTER")
+end
+
+
+local function InstanceCheck()
+	local isInstance, InstanseType = IsInInstance()
+	local s = false
+	if isInstance and InstanseType ~= "pvp" then
+		if InstanseType ~= "arena" then
+			s = true
+		end
+	end
+
+	return s
+end
+
+local function GuildEmblem()
+	-- table
+	local char = {}
+	-- check if Blizzard_GuildUI is loaded
+	if GuildFrameTabardEmblem then
+		char.guildTexCoord = {GuildFrameTabardEmblem:GetTexCoord()}
+	end
+	if IsInGuild() and char.guildTexCoord then
+		return "|TInterface\\GuildFrame\\GuildEmblemsLG_01:24:24:-4:1:32:32:"..(char.guildTexCoord[1]*32)..":"..(char.guildTexCoord[7]*32)..":"..(char.guildTexCoord[2]*32)..":"..(char.guildTexCoord[8]*32).."|t"
+	else
+		return ""
+	end
+end
+
+function I:UpdateFrame()
+	local db = E.db.sle.minimap.instance
+	if IsInInstance() then
+		if db.flag then
+			MiniMapInstanceDifficulty:Show()
+		else
+			MiniMapInstanceDifficulty:Hide()
+		end
+	end
+	f:Point("TOPLEFT", MiniMapInstanceDifficulty, "TOPLEFT", db.xoffset, db.yoffset)
+	if db.enable then
+		f.text:Show()
+	else
+		f.text:Hide()
+	end
+end
+
+local function GenerateText(self, event, guild)
+	if not InstanceCheck() then
+		f.text:SetText("")
+	else
+		local _, _, _, difficultyName, _, _, _, _, instanceGroupSize = GetInstanceInfo()
+		difficultyName = sub(difficultyName, 1 , 2)
+		f.text:SetText(instanceGroupSize.." ("..difficultyName..")")
+		if guild then
+			local logo = GuildEmblem()
+			f.text:SetText(instanceGroupSize.." ("..difficultyName..")"..logo)
+		end
+	end
+end
+
+function I:Initialize()
+	CreateText()
+	MiniMapInstanceDifficulty:HookScript("OnShow", function(self) if not E.db.sle.minimap.instance.flag then self:Hide() end end)
+	self:RegisterEvent("PLAYER_ENTERING_WORLD", GenerateText)
+	self:RegisterEvent("GUILD_PARTY_STATE_UPDATED", GenerateText)
+	I:UpdateFrame()
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/minimap/load_minimap.xml b/ElvUI_SLE/modules/minimap/load_minimap.xml
old mode 100755
new mode 100644
index a1cd949..947a16d
--- a/ElvUI_SLE/modules/minimap/load_minimap.xml
+++ b/ElvUI_SLE/modules/minimap/load_minimap.xml
@@ -1,5 +1,5 @@
 <Ui xmlns="http://www.blizzard.com/wow/ui/">
 	<Script file='minimapcoords.lua'/>
 	<Script file='minimapicons.lua'/>
-	<Script file='options.lua'/>
+	<Script file='instance.lua'/>
 </Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/minimap/minimapcoords.lua b/ElvUI_SLE/modules/minimap/minimapcoords.lua
old mode 100755
new mode 100644
index fa94a4a..548ee17
--- a/ElvUI_SLE/modules/minimap/minimapcoords.lua
+++ b/ElvUI_SLE/modules/minimap/minimapcoords.lua
@@ -1,4 +1,4 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
+local E, L, V, P, G = unpack(ElvUI);
 local M = E:GetModule('Minimap')

 local GetPlayerMapPosition = GetPlayerMapPosition
@@ -6,17 +6,40 @@ local framescreated = false
 local panel, xpos, ypos
 local middle

+local cluster = _G['MinimapCluster']
+
+local function HideMinimap()
+	cluster:Hide()
+end
+
+local function ShowMinimap()
+	if not InCombatLockdown() then
+		UIFrameFadeIn(cluster, 0.2, cluster:GetAlpha(), 1)
+	end
+end
+
 local function UpdateCoords(self, elapsed)
+	local f = E.db.sle.minimap.coords.decimals and '%.2f' or '%.0f'
 	panel.elapsed = (panel.elapsed or 0) + elapsed
 	if panel.elapsed < .1 then return end

 	xpos.pos, ypos.pos = GetPlayerMapPosition('player')
-	xpos.text:SetFormattedText(E.db.sle.minimap.coords.middle == "CENTER" and '%.2f/' or '%.2f', xpos.pos * 100)
-	ypos.text:SetFormattedText('%.2f', ypos.pos * 100)
+	xpos.text:SetFormattedText(E.db.sle.minimap.coords.middle == "CENTER" and f..'/' or f, xpos.pos * 100)
+	ypos.text:SetFormattedText(f, ypos.pos * 100)

 	panel.elapsed = 0
 end

+function M:SLEHideMinimap()
+	if E.db.sle.minimap.combat then
+		M:RegisterEvent("PLAYER_REGEN_DISABLED", HideMinimap)
+		M:RegisterEvent("PLAYER_REGEN_ENABLED", ShowMinimap)
+	else
+		M:UnregisterEvent("PLAYER_REGEN_DISABLED")
+		M:UnregisterEvent("PLAYER_REGEN_ENABLED")
+	end
+end
+
 local function UpdatePosition(middle)
 	xpos:ClearAllPoints()
 	ypos:ClearAllPoints()
@@ -26,7 +49,7 @@ local function UpdatePosition(middle)
 		xpos:Point('LEFT', panel, 'LEFT', 2, 0)
 	end
 	if middle == "CENTER" then
-		ypos:Point('BOTTOMLEFT', panel, 'BOTTOM', 0, 0)
+		ypos:Point('BOTTOMLEFT', panel, 'BOTTOM', E.db.sle.minimap.coords.decimals and 0 or -15, 0)
 	else
 		ypos:Point('RIGHT', panel, 'RIGHT', 2, 0)
 	end
@@ -66,9 +89,11 @@ local function CreateCoordsFrame(middle)
 	UpdatePosition(middle)
 end

-M.UpdateSettingsSLE = M.UpdateSettings
-function M:UpdateSettings()
-	M.UpdateSettingsSLE(self)
+function M:Transparency()
+	cluster:SetAlpha(E.db.sle.minimap.alpha)
+end
+
+local function Update()
 	middle = E.db.sle.minimap.coords.middle

 	if not framescreated then
@@ -84,4 +109,9 @@ function M:UpdateSettings()
 	else
 		panel:Show()
 	end
-end
\ No newline at end of file
+
+	M:SLEHideMinimap()
+	M:Transparency()
+end
+
+hooksecurefunc(M, 'UpdateSettings', Update)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/minimap/minimapicons.lua b/ElvUI_SLE/modules/minimap/minimapicons.lua
old mode 100755
new mode 100644
index 81f90ee..b7062ac
--- a/ElvUI_SLE/modules/minimap/minimapicons.lua
+++ b/ElvUI_SLE/modules/minimap/minimapicons.lua
@@ -1,5 +1,6 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local SMB = E:NewModule('SquareMinimapButtons', 'AceHook-3.0', 'AceEvent-3.0');
+local E, L, V, P, G = unpack(ElvUI);
+local SMB = E:GetModule('SLE_SquareMinimapButtons');
+

 local AddOnName, NS = ...
 local strsub, strlen, strfind, ceil = strsub, strlen, strfind, ceil
@@ -348,6 +349,4 @@ function SMB:Initialize()
 		SkinMinimapButtons()
 		SMB:Update()
 	end)
-end
-
-E:RegisterModule(SMB:GetName())
\ No newline at end of file
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/minimap/options.lua b/ElvUI_SLE/modules/minimap/options.lua
deleted file mode 100755
index f975cf1..0000000
--- a/ElvUI_SLE/modules/minimap/options.lua
+++ /dev/null
@@ -1,146 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-
-local function configTable()
-	E.Options.args.sle.args.options.args.minimap = {
-		type = "group",
-		name = MINIMAP_LABEL,
-		order = 3,
-		args = {
-			header = {
-				order = 1,
-				type = "header",
-				name = L["Minimap Options"],
-			},
-			intro = {
-				order = 2,
-				type = 'description',
-				name = L['MINIMAP_DESC'],
-			},
-			coordsenable = {
-				type = "toggle",
-				name = L['Enable'],
-				order = 3,
-				desc = L['Enable/Disable Square Minimap Coords.'],
-				get = function(info) return E.db.sle.minimap.enable end,
-				set = function(info, value) E.db.sle.minimap.enable = value; E:GetModule('Minimap'):UpdateSettings() end,
-				disabled = function() return not E.private.general.minimap.enable end,
-			},
-			coords = {
-				type = "group",
-				name = L["Minimap Coordinates"],
-				order = 4,
-				guiInline = true,
-				disabled = function() return not E.private.general.minimap.enable or not E.db.sle.minimap.enable end,
-				args = {
-					display = {
-						order = 2,
-						type = 'select',
-						name = L['Coords Display'],
-						desc = L['Change settings for the display of the coordinates that are on the minimap.'],
-						get = function(info) return E.db.sle.minimap.coords.display end,
-						set = function(info, value) E.db.sle.minimap.coords.display = value; E:GetModule('Minimap'):UpdateSettings() end,
-						values = {
-							['MOUSEOVER'] = L['Minimap Mouseover'],
-							['SHOW'] = L['Always Display'],
-						},
-					},
-					middle = {
-						order = 3,
-						type = "select",
-						name = L["Coords Location"],
-						desc = L['This will determine where the coords are shown on the minimap.'],
-						get = function(info) return E.db.sle.minimap.coords.middle end,
-						set = function(info, value) E.db.sle.minimap.coords.middle = value; E:GetModule('Minimap'):UpdateSettings() end,
-						values = {
-							['CORNERS'] = L['Bottom Corners'],
-							['CENTER'] = L['Bottom Center'],
-						},
-					},
-					--[[middle = {
-						order = 3,
-						type = "toggle",
-						name = L["Coords in the middle"],
-						desc = L['If enabled will show coordinates in the center of minimaps lower border. Otherwise in the lower corners.'],
-						disabled = function() return not E.db.sle.minimap.enable end,
-						get = function(info) return E.db.sle.minimap.middle end,
-						set = function(info, value) E.db.sle.minimap.middle = value; E:GetModule('Minimap'):UpdateSettings() end,
-					},]]
-				},
-			},
-			mapiconsenable = {
-				type = "toggle",
-				name = L['Enable'],
-				order = 5,
-				desc = L['Enable/Disable Square Minimap Buttons.'],
-				get = function(info) return E.private.sle.minimap.mapicons.enable end,
-				set = function(info, value) E.private.sle.minimap.mapicons.enable = value; E:StaticPopup_Show("PRIVATE_RL") end,
-			},
-			mapicons = {
-				type = "group",
-				name = L["Minimap Buttons"],
-				order = 6,
-				guiInline = true,
-				disabled = function() return not E.private.sle.minimap.mapicons.enable end,
-				args = {
-					barenable = {
-						order = 2,
-						type = "toggle",
-						name = L["Bar Enable"],
-						desc = L['Enable/Disable Square Minimap Bar.'],
-						get = function(info) return E.private.sle.minimap.mapicons.barenable end,
-						set = function(info, value) E.private.sle.minimap.mapicons.barenable = value; E:StaticPopup_Show("PRIVATE_RL") end,
-					},
-					skindungeon = {
-						order = 3,
-						type = 'toggle',
-						name = L['Skin Dungeon'],
-						desc = L['Skin dungeon icon.'],
-						get = function(info) return E.db.sle.minimap.mapicons.skindungeon end,
-						set = function(info, value) E.db.sle.minimap.mapicons.skindungeon = value; E:StaticPopup_Show("PRIVATE_RL") end,
-						disabled = function() return not E.private.sle.minimap.mapicons.enable end,
-					},
-					skinmail = {
-						order = 4,
-						type = 'toggle',
-						name = L['Skin Mail'],
-						desc = L['Skin mail icon.'],
-						get = function(info) return E.db.sle.minimap.mapicons.skinmail end,
-						set = function(info, value) E.db.sle.minimap.mapicons.skinmail = value; E:StaticPopup_Show("PRIVATE_RL") end,
-						disabled = function() return not E.private.sle.minimap.mapicons.enable end,
-					},
-					iconsize = {
-						order = 5,
-						type = 'range',
-						name = L['Button Size'],
-						desc = L['The size of the minimap buttons when not anchored to the minimap.'],
-						min = 16, max = 40, step = 1,
-						get = function(info) return E.db.sle.minimap.mapicons.iconsize end,
-						set = function(info, value) E.db.sle.minimap.mapicons.iconsize = value; E:GetModule('SquareMinimapButtons'):Update(SquareMinimapButtonBar) end,
-						disabled = function() return not E.private.sle.minimap.mapicons.enable end,
-					},
-					iconperrow = {
-						order = 6,
-						type = 'range',
-						name = L['Icons Per Row'],
-						desc = L['Anchor mode for displaying the minimap buttons are skinned.'],
-						min = 1, max = 12, step = 1,
-						get = function(info) return E.db.sle.minimap.mapicons.iconperrow end,
-						set = function(info, value) E.db.sle.minimap.mapicons.iconperrow = value; E:GetModule('SquareMinimapButtons'):Update(SquareMinimapButtonBar) end,
-						disabled = function() return not E.private.sle.minimap.mapicons.enable end,
-					},
-					iconmouseover = {
-						order = 7,
-						name = L['Mouse Over'],
-						desc = L['Show minimap buttons on mouseover.'],
-						type = "toggle",
-						get = function(info) return E.db.sle.minimap.mapicons.iconmouseover end,
-						set = function(info, value) E.db.sle.minimap.mapicons.iconmouseover = value; E:GetModule('SquareMinimapButtons'):ChangeMouseOverSetting() end,
-						disabled = function() return not E.private.sle.minimap.mapicons.enable end,
-					},
-				},
-			},
-		},
-	}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/nameplates.lua b/ElvUI_SLE/modules/nameplates.lua
new file mode 100644
index 0000000..cbf0a9e
--- /dev/null
+++ b/ElvUI_SLE/modules/nameplates.lua
@@ -0,0 +1,110 @@
+local E, L, V, P, G = unpack(ElvUI);
+local NP = E:GetModule('NamePlates')
+local LSM = LibStub("LibSharedMedia-3.0")
+
+local UnitCanAttack, UnitDetailedThreatSituation, GetThreatStatusColor = UnitCanAttack, UnitDetailedThreatSituation, GetThreatStatusColor
+local GetNumGroupMembers, GetNumSubgroupMembers = GetNumGroupMembers, GetNumSubgroupMembers
+local IsInRaid, IsInGroup, UnitGUID, UnitName = IsInRaid, IsInGroup, UnitGUID, UnitName
+local format, twipe = string.format, table.wipe
+local rosterTimer
+
+local function Hex(r, g, b)
+	return format('|cFF%02x%02x%02x', r * 255, g * 255, b * 255)
+end
+
+local GroupMembers = {}
+
+hooksecurefunc(NP, 'CreatePlate', function(self, frame)
+	local myPlate = self.CreatedPlates[frame]
+	if not myPlate then return end
+
+	if not myPlate.threatInfo then
+		myPlate.threatInfo = myPlate:CreateFontString(nil, "OVERLAY")
+		myPlate.threatInfo:SetPoint("BOTTOMLEFT", myPlate.healthBar, "BOTTOMLEFT", 1, 2)
+		myPlate.threatInfo:SetJustifyH("LEFT")
+	end
+	if not frame.targetcount then
+		myPlate.targetcount = myPlate:CreateFontString(nil, "OVERLAY")
+		myPlate.targetcount:SetPoint('BOTTOMRIGHT', myPlate.healthBar, 'BOTTOMRIGHT', 1, 2)
+		myPlate.targetcount:SetJustifyH("RIGHT")
+	end
+	myPlate.threatInfo:FontTemplate(LSM:Fetch("font", NP.db.font), NP.db.fontSize, NP.db.fontOutline)
+	myPlate.targetcount:FontTemplate(LSM:Fetch("font", NP.db.font), NP.db.fontSize, NP.db.fontOutline)
+end)
+
+hooksecurefunc(NP, 'GetThreatReaction', function(self, frame)
+	local myPlate = self.CreatedPlates[frame]
+	if not myPlate then return end
+
+	if myPlate.threatInfo then
+		myPlate.threatInfo:SetText()
+
+		if E.db.sle.nameplate.showthreat then
+			local unit = frame.unit
+			if not unit then
+				for i=1, 4 do
+					if frame.guid == UnitGUID(('boss%d'):format(i)) then
+						unit = ('boss%d'):format(i)
+						break
+					end
+				end
+			end
+
+			if unit and not UnitIsPlayer(unit) and UnitCanAttack('player', unit) then
+				local status, percent = select(2, UnitDetailedThreatSituation('player', unit))
+				if (status) then
+					myPlate.threatInfo:SetFormattedText('%s%.0f%%|r', Hex(GetThreatStatusColor(status)), percent)
+				else
+					myPlate.threatInfo:SetFormattedText('|cFF808080%s|r', L["None"])
+				end
+			end
+		end
+	end
+	if E.db.sle.nameplate.targetcount and myPlate.targetcount then
+		myPlate.targetcount:SetText()
+		if frame.guid then
+			local targetCount = 0
+			local target
+			for name, unitid in pairs(GroupMembers) do
+				target = ("%starget"):format(unitid)
+				if UnitExists(target) and UnitGUID(target) == frame.guid then
+					targetCount = targetCount + 1
+				end
+			end
+			--Set the target count text
+			if not (targetCount == 0) then
+				myPlate.targetcount:SetText(('[%d]'):format(targetCount))
+			end
+		end
+	end
+end)
+
+local function AddToRoster(unitId)
+	local unitName = UnitName(unitId)
+	if unitName then
+		GroupMembers[unitName] = unitId
+	end
+end
+
+local function UpdateRoster()
+	twipe(GroupMembers)
+
+	local groupSize = IsInRaid() and GetNumGroupMembers() or IsInGroup() and GetNumSubgroupMembers() or 0
+	local groupType = IsInRaid() and "raid" or IsInGroup() and "party" or "solo"
+
+	for index = 1, groupSize do
+		AddToRoster(groupType..index)
+	end
+
+	if groupType == 'party' then
+		AddToRoster('player')
+	end
+end
+
+local function StartRosterUpdate()
+	if not rosterTimer or NP:TimeLeft(rosterTimer) == 0 then
+		rosterTimer = NP:ScheduleTimer(UpdateRoster, 1)
+	end
+end
+
+NP:RegisterEvent("GROUP_ROSTER_UPDATE", StartRosterUpdate)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/nameplates/load_nameplates.xml b/ElvUI_SLE/modules/nameplates/load_nameplates.xml
deleted file mode 100644
index 04aa61d..0000000
--- a/ElvUI_SLE/modules/nameplates/load_nameplates.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='nameplates.lua'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/nameplates/nameplates.lua b/ElvUI_SLE/modules/nameplates/nameplates.lua
deleted file mode 100644
index 3900a7c..0000000
--- a/ElvUI_SLE/modules/nameplates/nameplates.lua
+++ /dev/null
@@ -1,110 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI);
-local NP = E:GetModule('NamePlates')
-local LSM = LibStub("LibSharedMedia-3.0")
-
-local UnitCanAttack, UnitDetailedThreatSituation, GetThreatStatusColor = UnitCanAttack, UnitDetailedThreatSituation, GetThreatStatusColor
-local GetNumGroupMembers, GetNumSubgroupMembers = GetNumGroupMembers, GetNumSubgroupMembers
-local IsInRaid, IsInGroup, UnitGUID, UnitName = IsInRaid, IsInGroup, UnitGUID, UnitName
-local format, twipe = string.format, table.wipe
-local rosterTimer
-
-function Hex(r, g, b)
-	return format('|cFF%02x%02x%02x', r * 255, g * 255, b * 255)
-end
-
-NP.GroupMembers = {}
-
-hooksecurefunc(NP, 'CreatePlate', function(self, frame)
-	local myPlate = self.CreatedPlates[frame]
-	if not myPlate then return end
-
-	if not myPlate.threatInfo then
-		myPlate.threatInfo = myPlate:CreateFontString(nil, "OVERLAY")
-		myPlate.threatInfo:SetPoint("BOTTOMLEFT", myPlate.healthBar, "BOTTOMLEFT", 1, 2)
-		myPlate.threatInfo:SetJustifyH("LEFT")
-	end
-	if not frame.targetcount then
-		myPlate.targetcount = myPlate:CreateFontString(nil, "OVERLAY")
-		myPlate.targetcount:SetPoint('BOTTOMRIGHT', myPlate.healthBar, 'BOTTOMRIGHT', 1, 2)
-		myPlate.targetcount:SetJustifyH("RIGHT")
-	end
-	myPlate.threatInfo:FontTemplate(LSM:Fetch("font", NP.db.font), NP.db.fontSize, NP.db.fontOutline)
-	myPlate.targetcount:FontTemplate(LSM:Fetch("font", NP.db.font), NP.db.fontSize, NP.db.fontOutline)
-end)
-
-hooksecurefunc(NP, 'GetThreatReaction', function(self, frame)
-	local myPlate = self.CreatedPlates[frame]
-	if not myPlate then return end
-
-	if myPlate.threatInfo then
-		myPlate.threatInfo:SetText()
-
-		if E.db.sle.nameplate.showthreat then
-			local unit = frame.unit
-			if not unit then
-				for i=1, 4 do
-					if frame.guid == UnitGUID(('boss%d'):format(i)) then
-						unit = ('boss%d'):format(i)
-						break
-					end
-				end
-			end
-
-			if unit and not UnitIsPlayer(unit) and UnitCanAttack('player', unit) then
-				local status, percent = select(2, UnitDetailedThreatSituation('player', unit))
-				if (status) then
-					myPlate.threatInfo:SetFormattedText('%s%.0f%%|r', Hex(GetThreatStatusColor(status)), percent)
-				else
-					myPlate.threatInfo:SetFormattedText('|cFF808080%s|r', L["None"])
-				end
-			end
-		end
-	end
-	if E.db.sle.nameplate.targetcount and myPlate.targetcount then
-		myPlate.targetcount:SetText()
-		if frame.guid then
-			local targetCount = 0
-			local target
-			for name, unitid in pairs(NP.GroupMembers) do
-				target = ("%starget"):format(unitid)
-				if UnitExists(target) and UnitGUID(target) == frame.guid then
-					targetCount = targetCount + 1
-				end
-			end
-			--Set the target count text
-			if not (targetCount == 0) then
-				myPlate.targetcount:SetText(('[%d]'):format(targetCount))
-			end
-		end
-	end
-end)
-
-function NP:AddToRoster(unitId)
-	local unitName = UnitName(unitId)
-	if unitName then
-		self.GroupMembers[unitName] = unitId
-	end
-end
-
-function NP:UpdateRoster()
-	twipe(self.GroupMembers)
-
-	local groupSize = IsInRaid() and GetNumGroupMembers() or IsInGroup() and GetNumSubgroupMembers() or 0
-	local groupType = IsInRaid() and "raid" or IsInGroup() and "party" or "solo"
-
-	for index = 1, groupSize do
-		self:AddToRoster(groupType..index)
-	end
-
-	if groupType == 'party' then
-		self:AddToRoster('player')
-	end
-end
-
-function NP:StartRosterUpdate()
-	if not rosterTimer or NP:TimeLeft(rosterTimer) == 0 then
-		rosterTimer = NP:ScheduleTimer('UpdateRoster', 1)
-	end
-end
-
-NP:RegisterEvent("GROUP_ROSTER_UPDATE", "StartRosterUpdate")
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/nameplates/options.lua b/ElvUI_SLE/modules/nameplates/options.lua
deleted file mode 100644
index 9274326..0000000
--- a/ElvUI_SLE/modules/nameplates/options.lua
+++ /dev/null
@@ -1,33 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI);
-local NP = E:GetModule('NamePlates')
-
-local function configTable()
-	E.Options.args.sle.args.options.args.general.args.nameplate = {
-		type = "group",
-		name = L["NamePlates"],
-		order = 82,
-		get = function(info) return E.db.sle.nameplate[ info[#info] ] end,
-		set = function(info, value) E.db.sle.nameplate[ info[#info] ] = value; NP:UpdateAllPlates() end,
-		args = {
-			header = {
-				order = 1,
-				type = "header",
-				name = L["NAMEPLATE_DESC"], --L["Nameplate Options"],
-			},
-			targetcount = {
-				type = "toggle",
-				order = 2,
-				name = L["Target Count"],
-				desc = L["Display the number of party / raid members targetting the nameplate unit."],
-			},
-			showthreat = {
-				type = "toggle",
-				order = 3,
-				name = L["Threat Text"],
-				desc = L["Display threat level as text on targeted, boss or mouseover nameplate."],
-			},
-		},
-	}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/options.lua b/ElvUI_SLE/modules/options.lua
deleted file mode 100755
index e341980..0000000
--- a/ElvUI_SLE/modules/options.lua
+++ /dev/null
@@ -1,178 +0,0 @@
-local E, L, V, P, G =  unpack(ElvUI); --Inport: Engine, Locales, ProfileDB, GlobalDB
-local UF = E:GetModule('UnitFrames')
-local AB = E:GetModule('ActionBars')
-local CH = E:GetModule('Chat')
-local A = E:GetModule('Auras')
-local SLE = E:GetModule('SLE')
-local function configTable()
-
-E.Options.args.ElvUI_Header = {
-		order = 1,
-		type = "header",
-		name = "ElvUI"..format(": |cff99ff33%s|r",E.version).."  "..L["Shadow & Light"]..format(": |cff99ff33%s|r",SLE.version),
-		width = "full",
-}
-
---Main options group
-E.Options.args.sle = {
-	type = "group",
-	name = L["Shadow & Light"],
-	order = 50,
-	args = {
-		header = {
-			order = 1,
-			type = "header",
-			name = L["Shadow & Light"]..format(": |cff99ff33%s|r", SLE.version),
-		},
-		logo = {
-			type = 'description',
-			name = '',
-			order = 2,
-			image = function() return 'Interface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Title', 650, 410 end,
-		},
-		info = {
-			order = 3,
-			type = "description",
-			name = L["SLE_DESC"],
-		},
-		options = {
-			order = 1,
-			type = "group",
-			childGroups = 'tab',
-			name = SETTINGS,
-			args = {
-				intro = {
-					order = 1,
-					type = "description",
-					name = L["Below you can see option groups presented by Shadow & Light."],
-				},
-				general = {
-					order = 2,
-					type = "group",
-					name = L["General"],
-					args = {
-						intro = {
-							order = 1,
-							type = "description",
-							name = L["General options of Shadow & Light."],
-						},
-						Reset = {
-							order = 2,
-							type = 'execute',
-							name = L["Reset All"],
-							desc = L["Reset all Shadow & Light options and movers to their defaults"],
-							func = function() SLE:Reset(true) end,
-						},
-						space1 = {
-							order = 3,
-							type = 'description',
-							name = "",
-						},
-						space2 = {
-							order = 4,
-							type = 'description',
-							name = "",
-						},
-						lootwindow = {
-							order = 6,
-							type = "group",
-							name = L["Loot History"],
-							args = {
-								header = {
-									order = 1,
-									type = "header",
-									name = L["Loot History"],
-								},
-								info = {
-									order = 2,
-									type = "description",
-									name = L["Options to tweak Loot History window behaviour."],
-								},
-								window = {
-									order = 3,
-									type = "toggle",
-									name = L["Auto hide"],
-									desc = L["Automaticaly hide Blizzard loot histroy frame when leaving the instance."],
-									get = function(info) return E.db.sle.lootwin end,
-									set = function(info, value) E.db.sle.lootwin = value; SLE:LootShow() end
-								},
-								alpha = {
-									order = 4,
-									type = "range",
-									name = L['Alpha'],
-									desc = L["Sets alpha of loot histroy frame."],
-									min = 0.2, max = 1, step = 0.1,
-									get = function(info) return E.db.sle.lootalpha end,
-									set = function(info, value) E.db.sle.lootalpha = value; SLE:LootShow() end,
-								},
-							},
-						},
-					},
-				},
-			},
-		},
-		links = {
-			type = 'group',
-			name = L['About/Help'],
-			order = -2,
-			args = {
-				desc = {
-					order = 1,
-					type = 'description',
-					fontSize = 'medium',
-					name = L["LINK_DESC"],
-				},
-				tukuilink = {
-					type = 'input',
-					width = 'full',
-					name = 'TukUI.org',
-					get = function(info) return 'http://www.tukui.org/addons/index.php?act=view&id=42' end,
-					order = 2,
-				},
-				wowilink = {
-					type = 'input',
-					width = 'full',
-					name = 'WoWInterface.com',
-					get = function(info) return 'http://www.wowinterface.com/downloads/info20927-ElvUIShadowLight.html' end,
-					order = 3,
-				},
-				curselink= {
-					type = 'input',
-					width = 'full',
-					name = 'Curse.com',
-					get = function(info) return 'http://www.curse.com/addons/wow/shadow-and-light-edit' end,
-					order = 4,
-				},
-				gitlablink = {
-					type = 'input',
-					width = 'full',
-					name = L['TukUI GitLab / Report Errors'],
-					get = function(info) return 'http://git.tukui.org/repooc/elvui-shadowandlight' end,
-					order = 5,
-				},
-			},
-		},
-	},
-}
-
---Credits
-E.Options.args.sle.args.credits = {
-	order = 400,
-	type = 'group',
-	name = L["Credits"],
-	args = {
-		creditheader = {
-			order = 1,
-			type = "header",
-			name = L["Credits"],
-		},
-		credits = {
-			order = 2,
-			type = "description",
-			name = L["ELVUI_SLE_CREDITS"]..'\n\n\n'..L["Submodules and Coding:"]..'\n\n'..L["ELVUI_SLE_CODERS"]..'\n\n\n'..L["Other Support:"]..'\n\n'..L["ELVUI_SLE_MISC"],
-		},
-	},
-}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/pvpmover.lua b/ElvUI_SLE/modules/pvpmover.lua
new file mode 100644
index 0000000..51ce9a9
--- /dev/null
+++ b/ElvUI_SLE/modules/pvpmover.lua
@@ -0,0 +1,23 @@
+local E, L, V, P, G = unpack(ElvUI);
+local P = E:GetModule('SLE_PvPMover');
+local holder = CreateFrame("Frame", "SLE_PvP", E.UIParent)
+
+
+local function update()
+	if WorldStateCaptureBar1 then
+		local bar = WorldStateCaptureBar1
+		bar:HookScript("OnShow", function(self) self:SetPoint("TOP", WorldStateAlwaysUpFrame, "BOTTOM", 0, -10) end)
+		bar:Hide()
+		bar:Show()
+		P:UnregisterEvent("UPDATE_WORLD_STATES")
+	end
+end
+
+function P:Initialize()
+	holder:SetSize(10, 58)
+	holder:SetPoint("TOP", E.UIParent, "TOP", -5, -15)
+	WorldStateAlwaysUpFrame:ClearAllPoints()
+	WorldStateAlwaysUpFrame:SetPoint("CENTER", holder)
+	self:RegisterEvent("UPDATE_WORLD_STATES", update)
+	E:CreateMover(holder, "PvPMover", "PvP", nil, nil, nil, "ALL,S&L,S&L MISC")
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/pvpmover/pvpmover.lua b/ElvUI_SLE/modules/pvpmover/pvpmover.lua
deleted file mode 100755
index 87af78b..0000000
--- a/ElvUI_SLE/modules/pvpmover/pvpmover.lua
+++ /dev/null
@@ -1,25 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-local P = E:NewModule('PvPMover', 'AceHook-3.0', 'AceEvent-3.0');
-local holder = CreateFrame("Frame", "SLE_PvP", E.UIParent)
-
-
-local function update()
-	if WorldStateCaptureBar1 then
-		local bar = WorldStateCaptureBar1
-		bar:HookScript("OnShow", function(self) self:SetPoint("TOP", WorldStateAlwaysUpFrame, "BOTTOM", 0, -10) end)
-		bar:Hide()
-		bar:Show()
-		P:UnregisterEvent("UPDATE_WORLD_STATES")
-	end
-end
-
-function P:Initialize()
-	holder:SetSize(10, 58)
-	holder:SetPoint("TOP", E.UIParent, "TOP", -5, -15)
-	WorldStateAlwaysUpFrame:ClearAllPoints()
-	WorldStateAlwaysUpFrame:SetPoint("CENTER", holder)
-	self:RegisterEvent("UPDATE_WORLD_STATES", update)
-	E:CreateMover(holder, "PvPMover", "PvP", nil, nil, nil, "ALL,S&L,S&L MISC")
-end
-
-E:RegisterModule(P:GetName())
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/raidutility.lua b/ElvUI_SLE/modules/raidutility.lua
new file mode 100644
index 0000000..ad42c46
--- /dev/null
+++ b/ElvUI_SLE/modules/raidutility.lua
@@ -0,0 +1,55 @@
+local E, L, V, P, G = unpack(ElvUI);
+local M = E:GetModule('Misc');
+
+local function Enter(self)
+	if not E.db.sle.rumouseover then return end
+	self:SetAlpha(1)
+end
+
+local function Leave(self)
+	if not E.db.sle.rumouseover then return end
+	self:SetAlpha(0)
+end
+
+function M:RUReset()
+	local a = E.db.sle.rumouseover and 0 or 1
+	RaidUtility_ShowButton:SetAlpha(a)
+end
+
+--For moving raid utility button
+local function MoreInit()
+	E:CreateMover(RaidUtility_ShowButton, "RaidUtility_Mover", L["Raid Utility"], nil, nil, nil, "ALL,S&L,S&L MISC")
+	local mover = RaidUtility_Mover
+	local frame = RaidUtility_ShowButton
+	if E.db.movers == nil then E.db.movers = {} end
+
+	mover:HookScript("OnDragStart", function(self)
+		frame:ClearAllPoints()
+		frame:SetPoint("CENTER", self)
+	end)
+
+	local function dropfix()
+		local point, anchor, point2, x, y = mover:GetPoint()
+		frame:ClearAllPoints()
+		if string.find(point, "BOTTOM") then
+			frame:SetPoint(point, anchor, point2, x, y)
+		else
+			frame:SetPoint(point, anchor, point2, x, y)
+		end
+	end
+
+	mover:HookScript("OnDragStop", dropfix)
+
+	if E.db.movers.RaidUtility_Mover == nil then
+		frame:ClearAllPoints()
+		frame:SetPoint("TOP", E.UIParent, "TOP", -400, E.Border)
+	else
+		dropfix()
+	end
+	frame:RegisterForDrag("")
+	frame:HookScript("OnEnter", Enter)
+	frame:HookScript("OnLeave", Leave)
+	Leave(frame)
+end
+
+hooksecurefunc(M, "Initialize", MoreInit)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/raidutility/load_raidutility.xml b/ElvUI_SLE/modules/raidutility/load_raidutility.xml
deleted file mode 100755
index bb89684..0000000
--- a/ElvUI_SLE/modules/raidutility/load_raidutility.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='raidutility.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/raidutility/raidutility.lua b/ElvUI_SLE/modules/raidutility/raidutility.lua
deleted file mode 100755
index 2ae13c3..0000000
--- a/ElvUI_SLE/modules/raidutility/raidutility.lua
+++ /dev/null
@@ -1,41 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local RU = E:GetModule('RaidUtility');
-local M = E:GetModule('Misc');
-
-E.RaidUtility = RU
-
---For moving raid utility button
-M.InitializeSLE = M.Initialize
-function M:Initialize()
-	M.InitializeSLE(self)
-	E:CreateMover(RaidUtility_ShowButton, "RaidUtility_Mover", L["Raid Utility"], nil, nil, nil, "ALL,S&L,S&L MISC")
-	local mover = RaidUtility_Mover
-	local frame = RaidUtility_ShowButton
-	if E.db.movers == nil then E.db.movers = {} end
-
-	mover:HookScript("OnDragStart", function(self)
-		frame:ClearAllPoints()
-		frame:SetPoint("CENTER", self)
-	end)
-
-	local function dropfix()
-		local point, anchor, point2, x, y = mover:GetPoint()
-		frame:ClearAllPoints()
-		if string.find(point, "BOTTOM") then
-			frame:SetPoint(point, anchor, point2, x, y)
-		else
-			frame:SetPoint(point, anchor, point2, x, y)
-		end
-	end
-
-	mover:HookScript("OnDragStop", dropfix)
-
-	if E.db.movers.RaidUtility_Mover == nil then
-		frame:ClearAllPoints()
-		frame:SetPoint("TOP", E.UIParent, "TOP", -400, E.Border)
-	else
-		dropfix()
-	end
-end
-
-RaidUtility_ShowButton:RegisterForDrag("") --Unregister any buttons for dragging.
diff --git a/ElvUI_SLE/modules/screensaver.lua b/ElvUI_SLE/modules/screensaver.lua
new file mode 100644
index 0000000..90e3ac2
--- /dev/null
+++ b/ElvUI_SLE/modules/screensaver.lua
@@ -0,0 +1,281 @@
+local E, L, V, P, G = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
+local SLE = E:GetModule('SLE');
+local S = E:GetModule("SLE_ScreenSaver")
+local LSM = LibStub("LibSharedMedia-3.0")
+local SS
+local ru = false
+local Months = {}
+local Week = {}
+
+if GetLocale() == "ruRU" then
+	ru = true
+	Months = {
+		"Января",
+		"Февраля",
+		"Марта",
+		"Апреля",
+		"Мая",
+		"Июня",
+		"Июля",
+		"Августа",
+		"Сентября",
+		"Октября",
+		"Ноября",
+		"Декабря",
+	}
+
+	Week = {
+		"Воскресенье",
+		"Понедельник",
+		"Вторник",
+		"Среда",
+		"Четверг",
+		"Пятница",
+		"Суббота",
+	}
+end
+
+-- Blizzard Unit Functions - OnShow / OnEvent
+local UnitLevel, IsInGuild, GetGuildInfo, UnitPVPName, UnitIsAFK = UnitLevel, IsInGuild, GetGuildInfo, UnitPVPName, UnitIsAFK
+local GetScreenWidth, GetScreenHeight = GetScreenWidth, GetScreenHeight
+local FlipCameraYaw = FlipCameraYaw
+
+-- Blizzard Lua Helpers - OnUpdate
+local format, random, date = format, random, date
+
+local Name, Level, GuildName, GuildRank
+local Class, ClassToken = UnitClass("player")
+local Race, RaceToken = UnitRace("player")
+local FactionToken, Faction = UnitFactionGroup("player")
+local Color = RAID_CLASS_COLORS[ClassToken]
+local CrestPath = [[Interface\AddOns\ElvUI_SLE\media\textures\crests\]]
+local crestSize, month, week
+local UpdateElapsed, TipsElapsed, TipNum, TipThrottle, OldTip = 0, 0, 1, 10, 0
+local degree = 0
+local fading = false
+
+local Tips = {
+	"Не стой в огне!",
+	"Спать вредно! Пока ты спишь, враг качается!",
+	"|cffFF4040Алгалон кричит: Я покараю вас анально, бичи со Свежевателя!|r",
+	"Сделал дейлик - спас китайца!",
+	"Lord Wert: Воронка, как ультимативное оружие, крайне сомнительна!",
+	"Иди паси ёжиков! (С) Горыныч",
+	"‹Elv›: I just utilized my degree in afro engineering and fixed it",
+	"Ragenvald: да вы ****ец че за сильные духом и закаленные травой",
+	"Варлоки пришли к нам из сказочного мира, где их любят и уважают. Поэтому они ненавидят наш мир лютой ненавистью.",
+}
+
+function S:Media()
+	local db = E.db.sle.media.screensaver
+	SS.Top.Title:SetFont(LSM:Fetch('font', db.title.font), db.title.size, db.title.outline)
+	SS.Top.Quote:SetFont(LSM:Fetch('font', db.subtitle.font), db.subtitle.size, db.subtitle.outline)
+	SS.Top.Date:SetFont(LSM:Fetch('font', db.date.font), db.date.size, db.date.outline)
+	SS.Top.Time:SetFont(LSM:Fetch('font', db.date.font), db.date.size, db.date.outline)
+	SS.Top.PlayerName:SetFont(LSM:Fetch('font', db.player.font), db.player.size, db.player.outline)
+	SS.Top.PlayerInfo:SetFont(LSM:Fetch('font', db.player.font), db.player.size, db.player.outline)
+	SS.Top.GuildR:SetFont(LSM:Fetch('font', db.player.font), db.player.size, db.player.outline)
+	SS.Top.Guild:SetFont(LSM:Fetch('font', db.player.font), db.player.size, db.player.outline)
+	SS.ScrollFrame:SetFont(LSM:Fetch('font', db.tips.font), db.tips.size, db.tips.outline)
+
+	SS.FactCrest:SetSize(db.crest, db.crest)
+	SS.RaceCrest:SetSize(db.crest, db.crest)
+
+end
+
+function S:Setup()
+	--Creating stuff
+	SS.Top = CreateFrame("Frame", nil, SS)
+	SS.Top:SetTemplate("Transparent")
+	SS.Bottom = CreateFrame("Frame", nil, SS)
+	SS.Bottom:SetTemplate("Transparent")
+	SS.FactCrest = SS.Top:CreateTexture(nil, 'OVERLAY')
+	SS.FactCrest:SetTexture(CrestPath..FactionToken)
+	SS.RaceCrest = SS.Top:CreateTexture(nil, 'ARTWORK')
+	SS.RaceCrest:SetTexture(CrestPath..RaceToken)
+	SS.ExPack = SS.Top:CreateTexture(nil, 'OVERLAY')
+	SS.ExPack:SetTexture([[Interface\Glues\Common\Glues-WoW-WoDLogo.blp]])
+	-- SS.ExPack:SetTexture([[Interface\Glues\Common\Glues-WoW-MPLogo.blp]])
+	SS.ExPack:SetSize(150, 75)
+	SS.model = CreateFrame("PlayerModel", "ScreenModel", SS)
+	-- SS.model:CreateBackdrop("Transparent") --For checking size and borders
+	SS.Top.Title = SS.Top:CreateFontString(nil, "OVERLAY")
+	SS.Top.Quote = SS.Top:CreateFontString(nil, "OVERLAY")
+	SS.Top.Quote:SetJustifyH("LEFT")
+	SS.Top.Date = SS.Top:CreateFontString(nil, "OVERAY")
+	SS.Top.Time = SS.Top:CreateFontString(nil, "OVERLAY")
+	SS.Top.PlayerName = SS.Top:CreateFontString(nil, "OVERLAY")
+	SS.Top.PlayerInfo = SS.Top:CreateFontString(nil, "OVERLAY")
+	SS.Top.Guild = SS.Top:CreateFontString(nil, "OVERLAY")
+	SS.Top.GuildR = SS.Top:CreateFontString(nil, "OVERLAY")
+	SS.ScrollFrame = CreateFrame("ScrollingMessageFrame", nil, SS)
+
+	SS.testmodel = CreateFrame("PlayerModel", "ScreenTestModel", E.UIParent)
+	SS.testmodel:SetPoint("RIGHT", E.UIParent, "RIGHT", -5, 0)
+	SS.testmodel:SetSize((GetScreenHeight()/6), (GetScreenHeight()/3))
+	SS.testmodel:Hide()
+
+	-- SS.ScrollFrame:SetShadowColor(0, 0, 0, 0)
+	SS.ScrollFrame:SetFading(false)
+	SS.ScrollFrame:SetFadeDuration(0)
+	SS.ScrollFrame:SetTimeVisible(1)
+	SS.ScrollFrame:SetMaxLines(1)
+	SS.ScrollFrame:SetSpacing(2)
+
+	--Calling for fonts and shit updating
+	self:Media()
+
+	--Positioning stuff
+	SS.Top:SetPoint("TOP", UIParent, "TOP", 0, 0)
+	SS.Bottom:SetPoint("BOTTOM", UIParent, "BOTTOM", 0, 0)
+	SS.Top.Date:SetPoint("RIGHT", SS.Top, "RIGHT", -40, 10)
+	SS.Top.Time:SetPoint("TOP", SS.Top.Date, "BOTTOM", 0, -2)
+	SS.Top.PlayerName:SetPoint("BOTTOM", SS.Top.PlayerInfo, "TOP", 0, 2)
+	SS.Top.PlayerInfo:SetPoint("LEFT", SS.Top, "LEFT", 5, 10)
+	SS.Top.Guild:SetPoint("TOP", SS.Top.PlayerInfo, "BOTTOM", 0, -2)
+	SS.Top.GuildR:SetPoint("TOP", SS.Top.Guild, "BOTTOM", 0, -2)
+	SS.FactCrest:SetPoint("CENTER", SS.Top, "BOTTOM", -(GetScreenWidth()/6), 0)
+	SS.RaceCrest:SetPoint("CENTER", SS.Top, "BOTTOM", (GetScreenWidth()/6), 0)
+	SS.ExPack:SetPoint("CENTER", SS.Top, "BOTTOM", 0, 0)
+	SS.Top.Title:SetPoint("TOP", SS.Top, "TOP", 0, -10)
+	SS.Top.Quote:SetPoint("TOP", SS.Top.Title, "BOTTOM", 0, -2)
+	SS.ScrollFrame:SetPoint("CENTER", SS.Bottom, "CENTER", 0, 0)
+
+	SS.Top.Title:SetText("|cff00AAFF"..L['You Are Away From Keyboard'].."|r")
+end
+
+local AnimTime, testM
+
+function S:TestShow()
+	if AnimTime then AnimTime:Cancel() end
+	testM = E.db.sle.media.screensaver.playermodel.anim
+	SS.testmodel:Show()
+	SS.testmodel:SetUnit("player")
+	SS.testmodel:SetPosition(0.3,0,-0.1)
+	SS.testmodel:SetFacing(-0.5)
+	SS.testmodel:SetAnimation(testM)
+	SS.testmodel:SetScript("OnAnimFinished", S.AnimTestFinished)
+
+	AnimTime = C_Timer.NewTimer(10, S.TestHide)
+end
+
+function S:TestHide()
+	SS.testmodel:Hide()
+end
+
+function S:AnimFinished()
+	SS.model:SetAnimation(E.db.sle.media.screensaver.playermodel.anim)
+end
+
+function S:AnimTestFinished()
+	SS.testmodel:SetAnimation(testM)
+end
+
+function S:Shown()
+	Level, Name, TipNum = UnitLevel("player"), UnitPVPName("player"), random(1, #Tips)
+	if IsInGuild() then
+		GuildName, GuildRank = GetGuildInfo("player")
+	end
+	local Width, Height = SLE:Scale(GetScreenWidth()), SLE:Scale(E.db.sle.media.screensaver.height)
+	self.model:SetUnit("player")
+	local x = E.db.sle.media.screensaver.playermodel.position == "RIGHT" and -1 or 1
+	local point = E.db.sle.media.screensaver.playermodel.position
+	self.model:SetPosition(0.1, -x*0.1, -0.1) --(pos/neg) first number moves closer/farther, second right/left, third up/down
+	self.model:SetFacing(x*0.5)
+	self.model:SetAnimation(E.db.sle.media.screensaver.playermodel.anim)
+	self.model:SetScript("OnAnimFinished", S.AnimFinished)
+	--Positioning model
+	SS.model:ClearAllPoints()
+	SS.model:SetWidth((GetScreenWidth()/4) + 20)
+	SS.model:SetPoint("TOP"..point, SS.Top,"BOTTOM"..point, 0,0)
+	SS.model:SetPoint("BOTTOM"..point, SS.Bottom, "TOP"..point, 0, 0)
+
+	self.Top.Quote:SetText(L["Take care of yourself, Master!"])
+
+	self.Top.PlayerName:SetText(format("|c%s%s|r", Color.colorStr, Name))
+	self.Top.Guild:SetText(format(GuildName and "|cff00AAFF<%s>|r" or "", GuildName))
+	self.Top.GuildR:SetText(format(GuildRank and "|cff00AAFF"..RANK..": %s|r" or "", GuildRank))
+	self.Top.PlayerInfo:SetText(format("|c%s%s|r, %s %s", Color.colorStr, Class, LEVEL, Level))
+
+	self.Top:SetSize(Width, Height)
+	self.Bottom:SetSize(Width, Height)
+	self.ScrollFrame:SetSize(Width, 24)
+
+	self.ScrollFrame:AddMessage(Tips[TipNum], 1, 1, 1)
+end
+
+function S:Update(elapsed)
+	UpdateElapsed = UpdateElapsed + elapsed
+	TipsElapsed = TipsElapsed + elapsed
+	if ru then
+		month = Months[tonumber(date("%m"))]
+		week = Week[tonumber(date("%w"))+1]
+	else
+		month = date("%B")
+		week = date("%A")
+	end
+	FlipCameraYaw(elapsed*10)
+	degree = degree + elapsed*10
+	if UpdateElapsed > 0.5 then
+		self.Top.Time:SetText(format("%s", date("%H|cff00AAFF:|r%M|cff00AAFF:|r%S")))
+		self.Top.Date:SetText(date("%d").." "..month.." |cff00AAFF"..week.."|r")
+		UpdateElapsed = 0
+	end
+	if TipsElapsed > TipThrottle then
+		TipNum = random(1, #Tips)
+		if TipNum == OldTip then TipNum = random(1, #Tips) end
+		self.ScrollFrame:AddMessage(Tips[TipNum], 1, 1, 1)
+		OldTip = TipNum
+		TipsElapsed = 0
+	end
+end
+
+function S:Event(event, unit)
+	if event == "PLAYER_FLAGS_CHANGED" and unit ~= "player" then return end
+	if UnitIsAFK("player") then
+		SS:Show()
+		Minimap:Hide()
+		if not fading then
+			fading = true
+			UIFrameFadeIn(UIParent, 0.5, 1, 0)
+		end
+	else
+		FlipCameraYaw(-degree)
+		degree = 0
+		SS:Hide()
+		if InCombatLockdown() then
+			self:RegisterEvent("PLAYER_REGEN_ENABLED", "Event")
+		else
+			Minimap:Show()
+		end
+		if fading then
+			fading = false
+			UIFrameFadeIn(UIParent, 0.5, 0, 1)
+		end
+	end
+	if event == "PLAYER_REGEN_ENABLED" then self:UnregisterEvent(event) end
+	if event == "PLAYER_ENTERING_WORLD" then self:UnregisterEvent(event) end
+end
+
+function S:Reg(opt)
+	if E.db.sle.media.screensaver.enable then
+		self:RegisterEvent("PLAYER_ENTERING_WORLD", "Event")
+		self:RegisterEvent("PLAYER_FLAGS_CHANGED", "Event")
+		self:RegisterEvent("PLAYER_LOGIN", "Event")
+	else
+		self:UnregisterEvent("PLAYER_ENTERING_WORLD")
+		self:UnregisterEvent("PLAYER_FLAGS_CHANGED")
+		self:UnregisterEvent("PLAYER_LOGIN")
+	end
+	if opt then self:Media() end
+end
+
+function S:Initialize()
+	SS = CreateFrame("Frame", "SLE_SS", WorldFrame)
+	SS:Hide()
+	SS:SetFrameStrata("FULLSCREEN")
+	self:Setup()
+	SS:SetScript("OnShow", self.Shown)
+	SS:SetScript("OnUpdate", self.Update)
+	self:Reg()
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/agility.lua b/ElvUI_SLE/modules/sledatatexts/agility.lua
new file mode 100644
index 0000000..95c12a2
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/agility.lua
@@ -0,0 +1,21 @@
+local E, L, V, P, G = unpack(ElvUI)
+local DT = E:GetModule('DataTexts')
+
+local displayNumberString = ''
+local lastPanel
+
+local function OnEvent(self, event, ...)
+	self.text:SetFormattedText(displayNumberString, AGILITY_COLON, select(2, UnitStat("player", 2)))
+	lastPanel = self
+end
+
+local function ValueColorUpdate(hex, r, g, b)
+	displayNumberString = strjoin("", "%s ", hex, "%.f|r")
+
+	if lastPanel ~= nil then
+		OnEvent(lastPanel)
+	end
+end
+E['valueColorUpdateFuncs'][ValueColorUpdate] = true
+
+DT:RegisterDatatext('Agility', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/currency.lua b/ElvUI_SLE/modules/sledatatexts/currency.lua
new file mode 100644
index 0000000..5a7c5f0
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/currency.lua
@@ -0,0 +1,268 @@
+local E, L, V, P, G = unpack(ElvUI)
+local DT = E:GetModule('DataTexts')
+local SLE = E:GetModule('SLE')
+
+local format, floor, abs, mod, pairs, tinsert = format, floor, abs, mod, pairs, tinsert
+local GetMoney, GetCurrencyInfo, GetNumWatchedTokens, GetBackpackCurrencyInfo, UnitLevel, GetCurrencyListInfo = GetMoney, GetCurrencyInfo, GetNumWatchedTokens, GetBackpackCurrencyInfo, UnitLevel, GetCurrencyListInfo
+
+local join = string.join
+
+local defaultColor = { 1, 1, 1 }
+local Profit	= 0
+local Spent		= 0
+local copperFormatter = join("", "%d", L.copperabbrev)
+local silverFormatter = join("", "%d", L.silverabbrev, " %.2d", L.copperabbrev)
+local goldFormatter =  join("", "%s", L.goldabbrev, " %.2d", L.silverabbrev, " %.2d", L.copperabbrev)
+local resetInfoFormatter = join("", "|cffaaaaaa", L["Reset Data: Hold Shift + Right Click"], "|r")
+local JEWELCRAFTING, COOKING, ARCHAEOLOGY
+
+local ArchaeologyFragments = { 398, 384, 393, 677, 400, 394, 397, 676, 401, 385, 399 }
+local CookingAwards = { 81, 402 }
+local JewelcraftingTokens = { 61, 361, 698 }
+local DungeonRaid = { 776, 752, 697, 738, 615, 614, 395, 396 }
+local PvPPoints = { 390, 392, 391 }
+local MiscellaneousCurrency = { 241, 416, 515, 777 }
+
+local _, Faction = UnitFactionGroup('player')
+local HordeColor = RAID_CLASS_COLORS['DEATHKNIGHT']
+local AllianceColor = RAID_CLASS_COLORS['SHAMAN']
+
+local function OrderedPairs(t, f)
+	local function orderednext(t, n)
+		local key = t[t.__next]
+		if not key then return end
+		t.__next = t.__next + 1
+		return key, t.__source[key]
+	end
+
+	local keys, kn = {__source = t, __next = 1}, 1
+	for k in pairs(t) do
+		keys[kn], kn = k, kn + 1
+	end
+	sort(keys, f)
+	return orderednext, keys
+end
+
+V['ElvUI_Currency'] = {
+	['Archaeology'] = true,
+	['Jewelcrafting'] = true,
+	['PvP'] = true,
+	['Raid'] = true,
+	['Cooking'] = true,
+	['Miscellaneous'] = true,
+	['Zero'] = true,
+	['Icons'] = true,
+	['Faction'] = true,
+	['Unused'] = true,
+}
+
+local function ToggleOption(name)
+	if E.private['ElvUI_Currency'][name] then
+		E.private['ElvUI_Currency'][name] = false
+	else
+		E.private['ElvUI_Currency'][name] = true
+	end
+end
+
+local function GetOption(name)
+	return E.private['ElvUI_Currency'][name]
+end
+
+local HiddenCurrency = {}
+
+local function UnusedCheck()
+	if GetOption('Unused') then HiddenCurrency = {}; return end
+	for i = 1, GetCurrencyListSize() do
+		local name, _, _, isUnused = GetCurrencyListInfo(i)
+		if isUnused then
+			if not SLE:SimpleTable(HiddenCurrency, name) then
+				table.insert(HiddenCurrency,#(HiddenCurrency)+1, name)
+			end
+		else
+			if SLE:SimpleTable(HiddenCurrency, name) then
+				HiddenCurrency[i] = nil
+			end
+		end
+	end
+end
+
+local function GetCurrency(CurrencyTable, Text)
+	local Seperator = false
+	UnusedCheck()
+	for key, id in pairs(CurrencyTable) do
+		local name, amount, texture, week, weekmax, maxed, discovered = GetCurrencyInfo(id)
+		local LeftString = GetOption('Icons') and format('%s %s', format('|T%s:14:14:0:0:64:64:4:60:4:60|t', texture), name) or name
+		local RightString = amount
+		local unused = SLE:SimpleTable(HiddenCurrency, name) or nil
+
+		if id == 392 or id == 395 then
+			maxed = 4000
+		elseif id == 396 then
+			maxed = 3000
+		end
+
+		if id == 390 then
+			discovered = UnitLevel('player') >= SHOW_CONQUEST_LEVEL
+			RightString = format('%s %s | %s %s / %s', L['Current:'], amount, L['Weekly:'], week, weekmax)
+		elseif maxed <= 4000 and maxed > 0 then
+			RightString = format('%s / %s', amount, maxed)
+		end
+
+		local r1, g1, b1 = 1, 1, 1
+		for i = 1, GetNumWatchedTokens() do
+			local _, _, _, itemID = GetBackpackCurrencyInfo(i)
+			if id == itemID then
+				r1, g1, b1 = .24, .54, .78
+			end
+		end
+		local r2, g2, b2 = r1, g1, b1
+		if maxed > 0 and (amount == maxed) or weekmax > 0 and (week == weekmax) then r2, g2, b2 = .77, .12, .23 end
+		if not (amount == 0 and not GetOption('Zero') and r1 == 1) and discovered and not unused then
+			if not Seperator then
+				DT.tooltip:AddLine(' ')
+				DT.tooltip:AddLine(Text)
+				Seperator = true
+			end
+			DT.tooltip:AddDoubleLine(LeftString, RightString, r1, g1, b1, r2, g2, b2)
+		end
+	end
+end
+
+local function FormatMoney(money)
+	local gold, silver, copper = floor(abs(money / 10000)), abs(mod(money / 100, 100)), abs(mod(money, 100))
+	if gold ~= 0 then
+		return format(goldFormatter, BreakUpLargeNumbers(gold), silver, copper)
+	elseif silver ~= 0 then
+		return format(silverFormatter, silver, copper)
+	else
+		return format(copperFormatter, copper)
+	end
+end
+
+local function FormatTooltipMoney(money)
+	if not money then return end
+	local gold, silver, copper = floor(abs(money / 10000)), abs(mod(money / 100, 100)), abs(mod(money, 100))
+	return format(goldFormatter, BreakUpLargeNumbers(gold), silver, copper)
+end
+
+local function OnEvent(self, event, ...)
+	if not IsLoggedIn() then return end
+	local NewMoney = GetMoney();
+	ElvDB = ElvDB or { };
+	ElvDB['gold'] = ElvDB['gold'] or {};
+	ElvDB['gold'][E.myrealm] = ElvDB['gold'][E.myrealm] or {};
+	ElvDB['gold'][E.myrealm][E.myname] = ElvDB['gold'][E.myrealm][E.myname] or NewMoney;
+	ElvDB['class'] = ElvDB['class'] or {};
+	ElvDB['class'][E.myrealm] = ElvDB['class'][E.myrealm] or {};
+	ElvDB['class'][E.myrealm][E.myname] = select(2, UnitClass('player'))
+	ElvDB['faction'] = ElvDB['faction'] or {};
+	ElvDB['faction'][E.myrealm] = ElvDB['faction'][E.myrealm] or {};
+	ElvDB['faction'][E.myrealm][FACTION_HORDE] = ElvDB['faction'][E.myrealm][FACTION_HORDE] or {};
+	ElvDB['faction'][E.myrealm][FACTION_ALLIANCE] = ElvDB['faction'][E.myrealm][FACTION_ALLIANCE] or {};
+
+	local OldMoney = ElvDB['gold'][E.myrealm][E.myname] or NewMoney
+
+	local Change = NewMoney-OldMoney -- Positive if we gain money
+	if OldMoney>NewMoney then		-- Lost Money
+		Spent = Spent - Change
+	else							-- Gained Moeny
+		Profit = Profit + Change
+	end
+
+	self.text:SetText(FormatMoney(NewMoney))
+
+	ElvDB['gold'][E.myrealm][E.myname] = NewMoney
+	ElvDB['faction'][E.myrealm][Faction][E.myname] = NewMoney
+	if event == 'PLAYER_ENTERING_WORLD' or event == 'SPELLS_CHANGED' then
+		JEWELCRAFTING = nil
+		for k, v in pairs({GetProfessions()}) do
+			if v then
+				local name, _, _, _, _, _, skillid = GetProfessionInfo(v)
+				if skillid == 755 then
+					JEWELCRAFTING = name
+				elseif skillid == 185 then
+					COOKING = name
+				elseif skillid == 794 then
+					ARCHAEOLOGY = name
+				end
+			end
+		end
+	end
+end
+
+local function Click(self, btn)
+	if btn == "RightButton" then
+		if IsShiftKeyDown() then
+			ElvDB.gold = nil;
+			OnEvent(self)
+			DT.tooltip:Hide();
+		end
+	else
+		ToggleAllBags()
+	end
+end
+
+local function OnEnter(self)
+	DT:SetupTooltip(self)
+
+	DT.tooltip:AddLine(L['Session:'])
+	DT.tooltip:AddDoubleLine(L["Earned:"], FormatMoney(Profit), 1, 1, 1, 1, 1, 1)
+	DT.tooltip:AddDoubleLine(L["Spent:"], FormatMoney(Spent), 1, 1, 1, 1, 1, 1)
+	if Profit < Spent then
+		DT.tooltip:AddDoubleLine(L["Deficit:"], FormatMoney(Profit-Spent), 1, 0, 0, 1, 1, 1)
+	elseif (Profit-Spent)>0 then
+		DT.tooltip:AddDoubleLine(L["Profit:"], FormatMoney(Profit-Spent), 0, 1, 0, 1, 1, 1)
+	end
+	DT.tooltip:AddLine' '
+
+	local totalGold, AllianceGold, HordeGold = 0, 0, 0
+	DT.tooltip:AddLine(L["Character: "])
+	for k,_ in OrderedPairs(ElvDB['gold'][E.myrealm]) do
+		if ElvDB['gold'][E.myrealm][k] then
+			local class = ElvDB['class'][E.myrealm][k]
+			local color = RAID_CLASS_COLORS[class or 'PRIEST']
+			DT.tooltip:AddDoubleLine(k, FormatTooltipMoney(ElvDB['gold'][E.myrealm][k]), color.r, color.g, color.b, 1, 1, 1)
+			if ElvDB['faction'][E.myrealm][FACTION_ALLIANCE][k] then
+				AllianceGold = AllianceGold + ElvDB['gold'][E.myrealm][k]
+			end
+			if ElvDB['faction'][E.myrealm][FACTION_HORDE][k] then
+				HordeGold = HordeGold + ElvDB['gold'][E.myrealm][k]
+			end
+			totalGold = totalGold + ElvDB['gold'][E.myrealm][k]
+		end
+	end
+
+	DT.tooltip:AddLine' '
+	DT.tooltip:AddLine(L["Server: "])
+	if GetOption('Faction') then
+		DT.tooltip:AddDoubleLine(format('%s: ', FACTION_HORDE), FormatTooltipMoney(HordeGold), HordeColor.r, HordeColor.g, HordeColor.b, 1, 1, 1)
+		DT.tooltip:AddDoubleLine(format('%s: ', FACTION_ALLIANCE), FormatTooltipMoney(AllianceGold), AllianceColor.r, AllianceColor.g, AllianceColor.b, 1, 1, 1)
+	end
+	DT.tooltip:AddDoubleLine(L["Total: "], FormatTooltipMoney(totalGold), 1, 1, 1, 1, 1, 1)
+
+	if ARCHAEOLOGY ~= nil and GetOption('Archaeology') then
+		GetCurrency(ArchaeologyFragments, format('%s %s:', ARCHAEOLOGY, ARCHAEOLOGY_RUNE_STONES))
+	end
+	if COOKING ~= nil and GetOption('Cooking') then
+		GetCurrency(CookingAwards, format("%s:", COOKING))
+	end
+	if JEWELCRAFTING ~= nil and GetOption('Jewelcrafting') then
+		GetCurrency(JewelcraftingTokens, format("%s:", JEWELCRAFTING))
+	end
+	if GetOption('Raid') then
+		GetCurrency(DungeonRaid, format('%s & %s:', CALENDAR_TYPE_DUNGEON, CALENDAR_TYPE_RAID))
+	end
+	if GetOption('PvP') then
+		GetCurrency(PvPPoints, format("%s:", PLAYER_V_PLAYER))
+	end
+	if GetOption('Miscellaneous') then
+		GetCurrency(MiscellaneousCurrency, format("%s:", MISCELLANEOUS))
+	end
+
+	DT.tooltip:AddLine' '
+	DT.tooltip:AddLine(resetInfoFormatter)
+
+	DT.tooltip:Show()
+end
+
+DT:RegisterDatatext('S&L Currency', {'PLAYER_ENTERING_WORLD', 'PLAYER_MONEY', 'SEND_MAIL_MONEY_CHANGED', 'SEND_MAIL_COD_CHANGED', 'PLAYER_TRADE_MONEY', 'TRADE_MONEY_CHANGED', 'SPELLS_CHANGED'}, OnEvent, nil, Click, OnEnter)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/energyregen.lua b/ElvUI_SLE/modules/sledatatexts/energyregen.lua
new file mode 100644
index 0000000..65d0ca9
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/energyregen.lua
@@ -0,0 +1,21 @@
+local E, L, V, P, G = unpack(ElvUI)
+local DT = E:GetModule('DataTexts')
+
+local displayNumberString = ''
+local lastPanel
+
+local function OnEvent(self, event, ...)
+	self.text:SetFormattedText(displayNumberString, STAT_ENERGY_REGEN, GetPowerRegen())
+	lastPanel = self
+end
+
+local function ValueColorUpdate(hex, r, g, b)
+	displayNumberString = strjoin("", "%s: ", hex, "%.f|r")
+
+	if lastPanel ~= nil then
+		OnEvent(lastPanel)
+	end
+end
+E['valueColorUpdateFuncs'][ValueColorUpdate] = true
+
+DT:RegisterDatatext('Energy Regen', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/friends.lua b/ElvUI_SLE/modules/sledatatexts/friends.lua
new file mode 100644
index 0000000..a1c326e
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/friends.lua
@@ -0,0 +1,555 @@
+local E, L, V, P, G = unpack(ElvUI);
+local LibQTip = LibStub('LibQTip-1.0')
+local ACD = LibStub("AceConfigDialog-3.0")
+local DT = E:GetModule('DataTexts')
+local LDB = LibStub("LibDataBroker-1.1"):NewDataObject("S&L Friends",
+{
+	type	= "data source",
+	icon	= "Interface\\Icons\\INV_Drink_08.png",
+	label	= "S&L Friends",
+	text	= "S&L Friends"
+})
+local _G = getfenv(0)
+local string = _G.string
+local pairs = _G.pairs
+local ONE_MINUTE = 60;
+local ONE_HOUR = 60 * ONE_MINUTE;
+local ONE_DAY = 24 * ONE_HOUR;
+local ONE_MONTH = 30 * ONE_DAY;
+local ONE_YEAR = 12 * ONE_MONTH;
+
+local function sletime_Conversion(timeDifference, isAbsolute)
+   if ( not isAbsolute ) then
+      timeDifference = time() - timeDifference;
+   end
+   local year, month, day, hour, minute;
+
+   if ( timeDifference < ONE_MINUTE ) then
+      return LASTONLINE_SECS;
+   elseif ( timeDifference >= ONE_MINUTE and timeDifference < ONE_HOUR ) then
+      return format(LASTONLINE_MINUTES, floor(timeDifference / ONE_MINUTE));
+   elseif ( timeDifference >= ONE_HOUR and timeDifference < ONE_DAY ) then
+      return format(LASTONLINE_HOURS, floor(timeDifference / ONE_HOUR));
+   elseif ( timeDifference >= ONE_DAY and timeDifference < ONE_MONTH ) then
+      return format(LASTONLINE_DAYS, floor(timeDifference / ONE_DAY));
+   elseif ( timeDifference >= ONE_MONTH and timeDifference < ONE_YEAR ) then
+      return format(LASTONLINE_MONTHS, floor(timeDifference / ONE_MONTH));
+   else
+      return format(LASTONLINE_YEARS, floor(timeDifference / ONE_YEAR));
+   end
+end
+
+local frame = CreateFrame("frame")
+local tooltip
+local LDB_ANCHOR
+local wtcgString = BNET_CLIENT_WTCG
+local GROUP_CHECKMARK	= "|TInterface\\Buttons\\UI-CheckBox-Check:0|t"
+local AWAY_ICON		= "|TInterface\\FriendsFrame\\StatusIcon-Away:18|t"
+local BUSY_ICON		= "|TInterface\\FriendsFrame\\StatusIcon-DnD:18|t"
+local MOBILE_ICON	= "|TInterface\\ChatFrame\\UI-ChatIcon-ArmoryChat:18|t"
+local MINIMIZE		= "|TInterface\\BUTTONS\\UI-PlusButton-Up:0|t"
+local BROADCAST_ICON = "|TInterface\\FriendsFrame\\BroadcastIcon:0|t"
+
+-- Setup the Title Font. 14
+local ssTitleFont = CreateFont("ssTitleFont")
+ssTitleFont:SetTextColor(1,0.823529,0)
+ssTitleFont:SetFont(GameTooltipText:GetFont(), 14)
+
+-- Setup the Header Font. 12
+local ssHeaderFont = CreateFont("ssHeaderFont")
+ssHeaderFont:SetTextColor(1,0.823529,0)
+ssHeaderFont:SetFont(GameTooltipHeaderText:GetFont(), 12)
+
+-- Setup the Regular Font. 12
+local ssRegFont = CreateFont("ssRegFont")
+ssRegFont:SetTextColor(1,0.823529,0)
+ssRegFont:SetFont(GameTooltipText:GetFont(), 12)
+
+local list_sort = {
+	TOONNAME = function(a, b)
+		return a["TOONNAME"] < b["TOONNAME"]
+	end,
+	LEVEL =	function(a, b)
+		if a["LEVEL"] < b["LEVEL"] then
+			return true
+		elseif a["LEVEL"] > b["LEVEL"] then
+			return false
+		else  -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end,
+	RANKINDEX =	function(a, b)
+		if a["RANKINDEX"] > b["RANKINDEX"] then
+			return true
+		elseif a["RANKINDEX"] < b["RANKINDEX"] then
+			return false
+		else -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end,
+	ZONENAME = function(a, b)
+		if a["ZONENAME"] < b["ZONENAME"] then
+			return true
+		elseif a["ZONENAME"] > b["ZONENAME"] then
+			return false
+		else -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end,
+	REALMNAME = function(a, b)
+		if a["REALMNAME"] < b["REALMNAME"] then
+			return true
+		elseif a["REALMNAME"] > b["REALMNAME"] then
+			return false
+		else -- TOONNAME
+			return a["ZONENAME"] < b["ZONENAME"]
+		end
+	end,
+	revTOONNAME	= function(a, b)
+		return a["TOONNAME"] > b["TOONNAME"]
+	end,
+	revLEVEL = function(a, b)
+		if a["LEVEL"] > b["LEVEL"] then
+			return true
+		elseif a["LEVEL"] < b["LEVEL"] then
+			return false
+		else  -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end,
+	revRANKINDEX = function(a, b)
+		if a["RANKINDEX"] < b["RANKINDEX"] then
+			return true
+		elseif a["RANKINDEX"] > b["RANKINDEX"] then
+			return false
+		else -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end,
+	revZONENAME	= function(a, b)
+		if a["ZONENAME"] > b["ZONENAME"] then
+			return true
+		elseif a["ZONENAME"] < b["ZONENAME"] then
+			return false
+		else -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end,
+	revREALMNAME = function(a, b)
+		if a["REALMNAME"] > b["REALMNAME"] then
+			return true
+		elseif a["REALMNAME"] < b["REALMNAME"] then
+			return false
+		else -- TOONNAME
+			return a["ZONENAME"] < b["ZONENAME"]
+		end
+	end
+}
+
+local function inGroup(name)
+	if GetNumSubgroupMembers() > 0 and UnitInParty(name) then
+		return true
+	elseif GetNumGroupMembers() > 0 and UnitInRaid(name) then
+		return true
+	end
+
+	return false
+end
+
+local function nameIndex(name)
+	local lookupname
+
+	for i = 1, GetNumFriends() do
+		lookupname = GetFriendInfo(i)
+		if lookupname == name then
+			return i
+		end
+	end
+end
+
+local function ColoredLevel(level)
+	if level ~= "" then
+		local color = GetQuestDifficultyColor(level)
+		return string.format("|cff%02x%02x%02x%d|r", color.r * 255, color.g * 255, color.b * 255, level)
+	end
+end
+
+local CLASS_COLORS, color = {}
+local classes_female, classes_male = {}, {}
+
+FillLocalizedClassList(classes_female, true)
+FillLocalizedClassList(classes_male, false)
+
+for token, localizedName in pairs(classes_female) do
+	color = RAID_CLASS_COLORS[token]
+	CLASS_COLORS[localizedName] = string.format("%02x%02x%02x", color.r * 255, color.g * 255, color.b * 255)
+end
+
+for token, localizedName in pairs(classes_male) do
+	color = RAID_CLASS_COLORS[token]
+	CLASS_COLORS[localizedName] = string.format("%02x%02x%02x", color.r * 255, color.g * 255, color.b * 255)
+end
+
+local function valueColor(totals)
+	if totals ~= "" then
+		local color = E.db.general.valuecolor
+		return string.format("|cff%02x%02x%02x%d|r", color.r * 255, color.g * 255, color.b * 255, totals)
+	end
+end
+
+function DT:update_Friends()
+	ShowFriends()
+	local friendsTotal, friendsOnline = GetNumFriends()
+	local bnTotal, bnOnline = BNGetNumFriends()
+	local totalOnline = friendsOnline + bnOnline
+	local totalFriends = friendsTotal + bnTotal
+
+	if E.db.sle.dt.friends.totals then
+		LDB.text = "|cffffffff"..L['Friends']..": |r"..valueColor(totalOnline).."/"..valueColor(totalFriends)
+	else
+		LDB.text = "|cffffffff"..L['Friends']..": |r"..valueColor(totalOnline)
+	end
+end
+
+local function Entry_OnMouseUp(frame, info, button)
+	local i_type, toon_name, full_name, presence_id = string.split(":", info)
+
+	if button == "LeftButton" then
+		if IsAltKeyDown() then
+			if i_type == "realid" then
+				local presenceID, presenceName, battleTag, isBattleTagPresence, toonName, toonID = BNGetFriendInfo(BNGetFriendIndex(presence_id))
+				local _, toonName, client, realmName, realmID, faction, race, class, guild, zoneName, level, gameText = BNGetToonInfo(toonID or 0)
+
+				InviteUnit(toon_name.."-"..realmName)
+				return
+			else
+				InviteUnit(toon_name)
+				return
+			end
+		end
+
+		if IsShiftKeyDown() then
+			SetItemRef("player:"..toon_name, "|Hplayer:"..toon_name.."|h["..toon_name.."|h", "LeftButton")
+			return
+		end
+
+		if IsControlKeyDown() then
+			if i_type == "friends" then
+				FriendsFrame.NotesID = nameIndex(toon_name)
+ 				StaticPopup_Show("SET_FRIENDNOTE", GetFriendInfo(FriendsFrame.NotesID))
+ 				return
+			end
+
+			if i_type == "realid" then
+				FriendsFrame.NotesID = presence_id
+				StaticPopup_Show("SET_BNFRIENDNOTE", full_name)
+				return
+			end
+		end
+
+		if i_type == "realid" then
+			local name = full_name..":"..presence_id
+			SetItemRef( "BNplayer:"..name, ("|HBNplayer:%1$s|h[%1$s]|h"):format(name), "LeftButton" )
+		else
+			SetItemRef( "player:"..full_name, ("|Hplayer:%1$s|h[%1$s]|h"):format(full_name), "LeftButton" )
+		end
+	elseif button == "RightButton" then
+		if IsControlKeyDown() then
+			--Possibly Set BNetBroadcast
+			--	E:StaticPopup_Show("SET_BN_BROADCAST")
+		end
+	elseif button == "MiddleButton" then
+		E.db.sle.dt.friends.expandBNBroadcast = not E.db.sle.dt.friends.expandBNBroadcast
+		LDB.OnEnter(LDB_ANCHOR)
+	end
+end
+
+local function HideOnMouseUp(cell, section)
+	E.db.sle.dt.friends[section] = not E.db.sle.dt.friends[section]
+	LDB.OnEnter(LDB_ANCHOR)
+end
+
+local function SetRealIDSort(cell, sortsection)
+	if E.db.sle.dt.friends["sortBN"] == sortsection then
+		E.db.sle.dt.friends["sortBN"] = "rev" .. sortsection
+	else
+		E.db.sle.dt.friends["sortBN"] = sortsection
+	end
+	LDB.OnEnter(LDB_ANCHOR)
+end
+
+function LDB:OnClick(button)
+	if button == "LeftButton" then
+		ToggleFriendsFrame()
+	end
+
+	if button == "RightButton" then
+		ElvConfigToggle:Click();
+		ACD:SelectGroup("ElvUI", "sle", "sldatatext", "slfriends")
+	end
+end
+
+function LDB.OnLeave() end
+
+function LDB.OnEnter(self)
+	if E.db.sle.dt.friends.combat and InCombatLockdown() then return end
+	LDB_ANCHOR = self
+
+	if LibQTip:IsAcquired("ShadowLightFriends") then
+		tooltip:Clear()
+	else
+		tooltip = LibQTip:Acquire("ShadowLightFriends", 8, "RIGHT", "RIGHT", "LEFT", "LEFT", "CENTER", "CENTER", "RIGHT")
+
+		tooltip:SetBackdropColor(0,0,0,1)
+
+		tooltip:SetHeaderFont(ssHeaderFont)
+		tooltip:SetFont(ssRegFont)
+
+		tooltip:SmartAnchorTo(self)
+		tooltip:SetAutoHideDelay(E.db.sle.dt.friends.tooltipAutohide, self)
+		tooltip:SetScript("OnShow", function(ttskinself) ttskinself:SetTemplate('Transparent') end)
+	end
+
+	local line = tooltip:AddLine()
+	tooltip:SetCell(line, 1, "Shadow & Light Friends", ssTitleFont, "CENTER", 0)
+	tooltip:AddLine(" ")
+
+	local _, numBNOnline = BNGetNumFriends()
+	local _, numFriendsOnline = GetNumFriends()
+
+	if (numBNOnline > 0) or (numFriendsOnline > 0) then
+		line = tooltip:AddLine()
+		if not E.db.sle.dt.friends.hideFriends then
+			tooltip:SetCell(line, 1, "|cffffffff" .. _G.FRIENDS .. "|r", "LEFT", 3)
+		else
+			tooltip:SetCell(line, 1, "|cffffffff" .. MINIMIZE .. _G.FRIENDS .. "|r", "LEFT", 3)
+		end
+		tooltip:SetCellScript(line, 1, "OnMouseUp", HideOnMouseUp, "hideFriends")
+
+		if not E.db.sle.dt.friends.hideFriends then
+			line = tooltip:AddHeader()
+			line = tooltip:SetCell(line, 1, "  ")
+			tooltip:SetCellScript(line, 1, "OnMouseUp", SetRealIDSort, "LEVEL")
+			line = tooltip:SetCell(line, 3, _G.NAME)
+			tooltip:SetCellScript(line, 3, "OnMouseUp", SetRealIDSort, "TOONNAME")
+			line = tooltip:SetCell(line, 4, _G.BATTLENET_FRIEND)
+			tooltip:SetCellScript(line, 4, "OnMouseUp", SetRealIDSort, "REALID")
+			line = tooltip:SetCell(line, 5, _G.LOCATION_COLON)
+			tooltip:SetCellScript(line, 5, "OnMouseUp", SetRealIDSort, "ZONENAME")
+			line = tooltip:SetCell(line, 6, _G.FRIENDS_LIST_REALM)
+			tooltip:SetCellScript(line, 6, "OnMouseUp", SetRealIDSort, "REALMNAME")
+			if not E.db.sle.dt.friends.hideFriendsNotes then
+				line = tooltip:SetCell(line, 7, _G.NOTE_COLON)
+			else
+				line = tooltip:SetCell(line, 7, MINIMIZE .. _G.NOTE_COLON)
+			end
+			tooltip:SetCellScript(line, 7, "OnMouseUp", HideOnMouseUp, "hideFriendsNotes")
+
+			tooltip:AddSeparator()
+
+			if numBNOnline > 0 then
+				local realid_table = {}
+				for i = 1, numBNOnline do
+					local presenceID, givenName, bTag, _, _, toonID, gameClient, isOnline, lastOnline, isAFK, isDND, broadcast, note, _, castTime = BNGetFriendInfo(i)
+					local _, toonName, client, realmName, realmID, faction, race, class, guild, zoneName, level, gameText = BNGetToonInfo(toonID or 0)
+					local broadcastTime = ""
+					if castTime then
+						broadcastTime = string.format(BNET_BROADCAST_SENT_TIME, sletime_Conversion(castTime));
+					end
+
+					local fcolor
+					local status = ""
+					if toonName then
+						if faction then
+							if faction == "Horde" then
+								fcolor = RED_FONT_COLOR_CODE
+							else
+								fcolor = "|cff0070dd"
+							end
+						end
+						if isAFK then
+							status = AWAY_ICON
+						end
+						if isDND then
+							status = BUSY_ICON
+						end
+						if note and note ~= "" then note = "|cffff8800{"..note.."}|r" end
+
+						table.insert(realid_table, {
+							GIVENNAME = givenName,
+							SURNAME = bTag or "",
+							LEVEL = level,
+							CLASS = class,
+							FCOLOR = fcolor,
+							STATUS = status,
+							BROADCAST_TEXT = broadcast or "",
+							BROADCAST_TIME = broadcastTime or "",
+							TOONNAME = toonName,
+							CLIENT = client,
+							ZONENAME = zoneName,
+							REALMNAME = realmName,
+							GAMETEXT = gameText,
+							NOTE = note,
+							PRESENCEID = presenceID
+							})
+					end
+				end
+
+				if (E.db.sle.dt.friends["sortBN"] ~= "REALID") and (E.db.sle.dt.friends["sortBN"] ~= "revREALID") then
+					table.sort(realid_table, list_sort[E.db.sle.dt.friends["sortBN"]])
+				end
+
+				for _, player in ipairs(realid_table) do
+					local broadcast_flag
+					if not E.db.sle.dt.friends.expandBNBroadcast and player["BROADCAST_TEXT"] ~= "" then
+						broadcast_flag = " " .. BROADCAST_ICON
+					else
+						broadcast_flag = ""
+					end
+
+					line = tooltip:AddLine()
+					line = tooltip:SetCell(line, 1, ColoredLevel(player["LEVEL"]))
+					line = tooltip:SetCell(line, 2, player["STATUS"])
+					line = tooltip:SetCell(line, 3,
+						string.format("|cff%s%s",CLASS_COLORS[player["CLASS"]] or "B8B8B8", player["TOONNAME"] .. "|r")..
+						(inGroup(player["TOONNAME"]) and GROUP_CHECKMARK or ""))
+					line = tooltip:SetCell(line, 4,
+						"|cff82c5ff" .. player["GIVENNAME"] .. "|r" .. broadcast_flag)
+
+					if player["CLIENT"] == "WoW" then
+						line = tooltip:SetCell(line, 5, player["ZONENAME"])
+						line = tooltip:SetCell(line, 6, player["FCOLOR"] .. player["REALMNAME"] .. "|r")
+					elseif player["CLIENT"] == "App" then
+							line = tooltip:SetCell(line, 5, "|cff82c5ffDesktop Application|r")
+							line = tooltip:SetCell(line, 6, "|cff01b2f1Battle.net|r")
+					else
+						line = tooltip:SetCell(line, 5, player["GAMETEXT"])
+						if player["CLIENT"] == "S2" then
+							line = tooltip:SetCell(line, 6, "|cff82c5ffStarCraft 2|r")
+						end
+
+						if player["CLIENT"] == "D3" then
+							line = tooltip:SetCell(line, 6, "|cffad835aDiablo 3|r")
+						end
+
+						if player["CLIENT"] == wtcgString then
+							line = tooltip:SetCell(line, 6, "|cff82c5ffHearthstone|r")
+						end
+						if player["CLIENT"] == "Hero" then
+							line = tooltip:SetCell(line, 6, "|cff82c5ffHeroes of The Storm|r")
+						end
+					end
+
+					if not E.db.sle.dt.friends.hideFriendsNotes then
+						line = tooltip:SetCell(line, 7, player["NOTE"])
+					end
+
+					tooltip:SetLineScript(line, "OnMouseUp", Entry_OnMouseUp, string.format("realid:%s:%s:%d", player["TOONNAME"], player["GIVENNAME"], player["PRESENCEID"]))
+
+					if E.db.sle.dt.friends.expandBNBroadcast and player["BROADCAST_TEXT"] ~= "" then
+						line = tooltip:AddLine()
+						line = tooltip:SetCell(line, 1, BROADCAST_ICON .. " |cff7b8489" .. player["BROADCAST_TEXT"] .. "|r "..player["BROADCAST_TIME"], "LEFT", 0)
+						tooltip:SetLineScript(line, "OnMouseUp", Entry_OnMouseUp, string.format("realid:%s:%s:%d", player["TOONNAME"], player["GIVENNAME"], player["PRESENCEID"]))
+					end
+				end
+				tooltip:AddLine(" ")
+			end
+
+			if numFriendsOnline > 0 then
+				local friend_table = {}
+				for i = 1,numFriendsOnline do
+					local toonName, level, class, zoneName, connected, status, note = GetFriendInfo(i)
+					note = note and "|cffff8800{"..note.."}|r" or ""
+
+					if status == CHAT_FLAG_AFK then
+						status = AWAY_ICON
+					elseif status == CHAT_FLAG_DND then
+						status = BUSY_ICON
+					end
+
+					table.insert(friend_table, {
+						TOONNAME = toonName,
+						LEVEL = level,
+						CLASS = class,
+						ZONENAME = zoneName,
+						REALMNAME = "",
+						STATUS = status,
+						NOTE = note
+						})
+				end
+
+				if (E.db.sle.dt.friends["sortBN"] ~= "REALID") and (E.db.sle.dt.friends["sortBN"] ~= "revREALID") then
+					table.sort(friend_table, list_sort[E.db.sle.dt.friends["sortBN"]])
+				else
+					table.sort(friend_table, list_sort["TOONNAME"])
+				end
+
+				for _, player in ipairs(friend_table) do
+					line = tooltip:AddLine()
+					line = tooltip:SetCell(line, 1, ColoredLevel(player["LEVEL"]))
+					line = tooltip:SetCell(line, 2, player["STATUS"])
+					line = tooltip:SetCell(line, 3,
+						string.format("|cff%s%s", CLASS_COLORS[player["CLASS"]] or "ffffff", player["TOONNAME"] .. "|r") .. (inGroup(player["TOONNAME"]) and GROUP_CHECKMARK or ""));
+					line = tooltip:SetCell(line, 5, player["ZONENAME"])
+					if not E.db.sle.dt.friends.hideFriendsNotes then
+						line = tooltip:SetCell(line, 7, player["NOTE"])
+					end
+					tooltip:SetLineScript(line, "OnMouseUp", Entry_OnMouseUp, string.format("friends:%s:%s", player["TOONNAME"], player["TOONNAME"]))
+				end
+			end
+		end
+		tooltip:AddLine(" ")
+	end
+
+	if not E.db.sle.dt.friends.hide_hintline then
+		line = tooltip:AddLine()
+		if not E.db.sle.dt.friends.minimize_hintline then
+			tooltip:SetCell(line, 1, "Hint:", "LEFT", 3)
+		else
+			tooltip:SetCell(line, 1, MINIMIZE .. "Hint:", "LEFT", 3)
+		end
+		tooltip:SetCellScript(line, 1, "OnMouseUp", HideOnMouseUp, "minimize_hintline")
+
+		if not E.db.sle.dt.friends.minimize_hintline then
+			line = tooltip:AddLine()
+			tooltip:SetCell(line, 1, "", "LEFT", 1)
+			tooltip:SetCell(line, 2, "|cffeda55fLeft Click|r to open the friends panel.", "LEFT", 3)
+			tooltip:SetCell(line, 5, "|cffeda55fRight Click|r to open configuration panel.", "LEFT", 3)
+			line = tooltip:AddLine()
+			tooltip:SetCell(line, 1, "", "LEFT", 1)
+			tooltip:SetCell(line, 2, "|cffeda55fLeft Click|r a line to whisper a player.", "LEFT", 3)
+			tooltip:SetCell(line, 5, "|cffeda55fShift+Left Click|r a line to lookup a player.", "LEFT", 3)
+			line = tooltip:AddLine()
+			tooltip:SetCell(line, 1, "", "LEFT", 1)
+			tooltip:SetCell(line, 2, "|cffeda55fCtrl+Left Click|r a line to edit a note.", "LEFT", 3)
+			tooltip:SetCell(line, 5, "|cffeda55fMiddleClick|r a line to expand RealID.", "LEFT", 3)
+			line = tooltip:AddLine()
+			tooltip:SetCell(line, 1, "", "LEFT", 1)
+			tooltip:SetCell(line, 2, "|cffeda55fAlt+Left Click|r a line to invite.", "LEFT", 3)
+			tooltip:SetCell(line, 5, "|cffeda55fLeft Click|r a Header to hide it or sort it.", "LEFT", 3)
+		end
+	end
+
+	tooltip:UpdateScrolling()
+	tooltip:Show()
+end
+
+frame:SetScript("OnEvent", function(self, event, ...)
+	if self[event] then
+		return self[event](self, event, ...)
+	end
+end)
+
+local DELAY = 15  --  Update every 15 seconds
+local elapsed = DELAY - 5
+
+frame:SetScript("OnUpdate", function (self, elapse)
+	elapsed = elapsed + elapse
+
+	if elapsed >= DELAY then
+		elapsed = 0
+		DT:update_Friends()
+	end
+end)
+
+frame:RegisterEvent("PLAYER_LOGIN")
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/guild.lua b/ElvUI_SLE/modules/sledatatexts/guild.lua
new file mode 100644
index 0000000..f1b3140
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/guild.lua
@@ -0,0 +1,423 @@
+local E, L, V, P, G = unpack(ElvUI);
+local LibQTip = LibStub('LibQTip-1.0')
+local ACD = LibStub("AceConfigDialog-3.0")
+local DT = E:GetModule('DataTexts')
+local LDB = LibStub("LibDataBroker-1.1"):NewDataObject("S&L Guild",
+{
+	type	= "data source",
+	icon	= "Interface\\Icons\\INV_Drink_08.png",
+	label	= "S&L Guild",
+	text	= "S&L Guild"
+})
+local _G = getfenv(0)
+local string = _G.string
+local pairs = _G.pairs
+local MyRealm = E.myrealm
+local frame = CreateFrame("frame")
+
+local tooltip
+local LDB_ANCHOR
+
+local GROUP_CHECKMARK	= "|TInterface\\Buttons\\UI-CheckBox-Check:0|t"
+local AWAY_ICON		= "|TInterface\\FriendsFrame\\StatusIcon-Away:18|t"
+local BUSY_ICON		= "|TInterface\\FriendsFrame\\StatusIcon-DnD:18|t"
+local MOBILE_ICON	= "|TInterface\\ChatFrame\\UI-ChatIcon-ArmoryChat:18|t"
+local MINIMIZE		= "|TInterface\\BUTTONS\\UI-PlusButton-Up:0|t"
+
+local FACTION_COLOR_HORDE = RED_FONT_COLOR_CODE
+local FACTION_COLOR_ALLIANCE = "|cff0070dd"
+
+-- Setup the Title Font. 14
+local ssTitleFont = CreateFont("ssTitleFont")
+ssTitleFont:SetTextColor(1,0.823529,0)
+ssTitleFont:SetFont(GameTooltipText:GetFont(), 14)
+
+-- Setup the Header Font. 12
+local ssHeaderFont = CreateFont("ssHeaderFont")
+ssHeaderFont:SetTextColor(1,0.823529,0)
+ssHeaderFont:SetFont(GameTooltipHeaderText:GetFont(), 12)
+
+-- Setup the Regular Font. 12
+local ssRegFont = CreateFont("ssRegFont")
+ssRegFont:SetTextColor(1,0.823529,0)
+ssRegFont:SetFont(GameTooltipText:GetFont(), 12)
+
+local list_sort = {
+	TOONNAME = function(a, b)
+		return a["TOONNAME"] < b["TOONNAME"]
+	end,
+	LEVEL =	function(a, b)
+		if a["LEVEL"] < b["LEVEL"] then
+			return true
+		elseif a["LEVEL"] > b["LEVEL"] then
+			return false
+		else  -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end,
+	RANKINDEX =	function(a, b)
+		if a["RANKINDEX"] > b["RANKINDEX"] then
+			return true
+		elseif a["RANKINDEX"] < b["RANKINDEX"] then
+			return false
+		else -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end,
+	ZONENAME = function(a, b)
+		if a["ZONENAME"] < b["ZONENAME"] then
+			return true
+		elseif a["ZONENAME"] > b["ZONENAME"] then
+			return false
+		else -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end,
+	revTOONNAME	= function(a, b)
+		return a["TOONNAME"] > b["TOONNAME"]
+	end,
+	revLEVEL = function(a, b)
+		if a["LEVEL"] > b["LEVEL"] then
+			return true
+		elseif a["LEVEL"] < b["LEVEL"] then
+			return false
+		else  -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end,
+	revRANKINDEX = function(a, b)
+		if a["RANKINDEX"] < b["RANKINDEX"] then
+			return true
+		elseif a["RANKINDEX"] > b["RANKINDEX"] then
+			return false
+		else -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end,
+	revZONENAME	= function(a, b)
+		if a["ZONENAME"] > b["ZONENAME"] then
+			return true
+		elseif a["ZONENAME"] < b["ZONENAME"] then
+			return false
+		else -- TOONNAME
+			return a["TOONNAME"] < b["TOONNAME"]
+		end
+	end
+}
+
+local function inGroup(name)
+	if GetNumSubgroupMembers() > 0 and UnitInParty(name) then
+		return true
+	elseif GetNumGroupMembers() > 0 and UnitInRaid(name) then
+		return true
+	end
+
+	return false
+end
+
+local function guild_name_to_index(name)
+	local lookupname
+
+	for i = 1, GetNumGuildMembers() do
+		lookupname = GetGuildRosterInfo(i)
+
+		if lookupname == name then
+			return i
+		end
+	end
+end
+
+local function ColoredLevel(level)
+	if level ~= "" then
+		local color = GetQuestDifficultyColor(level)
+		return string.format("|cff%02x%02x%02x%d|r", color.r * 255, color.g * 255, color.b * 255, level)
+	end
+end
+
+local CLASS_COLORS, color = {}
+local classes_female, classes_male = {}, {}
+
+FillLocalizedClassList(classes_female, true)
+FillLocalizedClassList(classes_male, false)
+
+for token, localizedName in pairs(classes_female) do
+	color = RAID_CLASS_COLORS[token]
+	CLASS_COLORS[localizedName] = string.format("%02x%02x%02x", color.r * 255, color.g * 255, color.b * 255)
+end
+
+for token, localizedName in pairs(classes_male) do
+	color = RAID_CLASS_COLORS[token]
+	CLASS_COLORS[localizedName] = string.format("%02x%02x%02x", color.r * 255, color.g * 255, color.b * 255)
+end
+
+local function valueColor(totals)
+	if totals ~= "" then
+		local color = E.db.general.valuecolor
+		return string.format("|cff%02x%02x%02x%d|r", color.r * 255, color.g * 255, color.b * 255, totals)
+	end
+end
+
+function DT:update_Guild()
+	if IsInGuild() then
+		GuildRoster()
+		local guildTotal, online = GetNumGuildMembers()
+			for i = 1, GetNumGuildMembers() do
+				local _, _, _, _, _, _, _, _, connected, _, _, _, _, isMobile = GetGuildRosterInfo(i)
+				if isMobile then
+					online = online + 1
+				end
+			end
+		if E.db.sle.dt.guild.totals then
+			LDB.text = --[["|cff82c5ff"]]"|cffffffff"..GUILD..": |r"..valueColor(online).."/"..valueColor(guildTotal)--[["|r"]]
+		else
+			LDB.text = "|cffffffff"..GUILD..": |r"..valueColor(online)
+		end
+	else
+		LDB.text = "|cffffffff"..L['No Guild'].."|r"
+	end
+end
+
+local function Entry_OnMouseUp(frame, info, button)
+	local i_type, toon_name, full_name, presence_id = string.split(":", info)
+
+	if button == "LeftButton" then
+		if IsAltKeyDown() then
+			InviteUnit(toon_name)
+			return
+		end
+
+		if IsShiftKeyDown() then
+			SetItemRef("player:"..toon_name, "|Hplayer:"..toon_name.."|h["..toon_name.."|h", "LeftButton")
+			return
+		end
+
+		if IsControlKeyDown() then
+			if i_type == "guild" and CanEditPublicNote() then
+				SetGuildRosterSelection(guild_name_to_index(toon_name))
+				StaticPopup_Show("SET_GUILDPLAYERNOTE")
+				return
+			end
+		end
+
+		SetItemRef( "player:"..full_name, ("|Hplayer:%1$s|h[%1$s]|h"):format(full_name), "LeftButton" )
+	elseif button == "RightButton" then
+		if IsControlKeyDown() then
+			if i_type == "guild" and CanEditOfficerNote() then
+				SetGuildRosterSelection(guild_name_to_index(toon_name))
+				StaticPopup_Show("SET_GUILDOFFICERNOTE")
+			end
+		end
+	end
+end
+
+local function HideOnMouseUp(cell, section)
+	E.db.sle.dt.guild[section] = not E.db.sle.dt.guild[section]
+	LDB.OnEnter(LDB_ANCHOR)
+end
+
+local function SetGuildSort(cell, sortsection)
+	if E.db.sle.dt.guild["sortGuild"] == sortsection then
+		E.db.sle.dt.guild["sortGuild"] = "rev" .. sortsection
+	else
+		E.db.sle.dt.guild["sortGuild"] = sortsection
+	end
+	LDB.OnEnter(LDB_ANCHOR)
+end
+
+function LDB:OnClick(button)
+	if button == "LeftButton" then
+		ToggleGuildFrame(1)
+	end
+
+	if button == "RightButton" then
+		ElvConfigToggle:Click();
+		ACD:SelectGroup("ElvUI", "sle", "sldatatext", "slguild")
+	end
+end
+
+function LDB.OnLeave() end
+
+function LDB.OnEnter(self)
+	if E.db.sle.dt.guild.combat and InCombatLockdown() then return end
+	LDB_ANCHOR = self
+
+	if LibQTip:IsAcquired("ShadowLightGuild") then
+		tooltip:Clear()
+	else
+		tooltip = LibQTip:Acquire("ShadowLightGuild", 8, "RIGHT", "RIGHT", "LEFT", "LEFT", "CENTER", "CENTER", "RIGHT")
+
+		tooltip:SetBackdropColor(0,0,0,1)
+
+		tooltip:SetHeaderFont(ssHeaderFont)
+		tooltip:SetFont(ssRegFont)
+
+		tooltip:SmartAnchorTo(self)
+		tooltip:SetAutoHideDelay(E.db.sle.dt.guild.tooltipAutohide, self)
+		tooltip:SetScript("OnShow", function(ttskinself) ttskinself:SetTemplate('Transparent') end)
+	end
+
+	local line = tooltip:AddLine()
+	tooltip:SetCell(line, 1, "Shadow & Light Guild", ssTitleFont, "CENTER", 0)
+	tooltip:AddLine(" ")
+
+	if IsInGuild() then
+		local guild_table = {}
+		if not E.db.sle.dt.guild.hide_gmotd then
+			line = tooltip:AddLine()
+			if not E.db.sle.dt.guild.minimize_gmotd then
+				tooltip:SetCell(line, 1, "|cffffffff" .. _G.CHAT_GUILD_MOTD_SEND .. "|r", "LEFT", 3)
+			else
+				tooltip:SetCell(line, 1, "|cffffffff".. MINIMIZE .. _G.CHAT_GUILD_MOTD_SEND .. "|r", "LEFT", 3)
+			end
+			tooltip:SetCellScript(line, 1, "OnMouseUp", HideOnMouseUp, "minimize_gmotd")
+
+			if not E.db.sle.dt.guild.minimize_gmotd then
+				line = tooltip:AddLine()
+				tooltip:SetCell(line, 1, "|cff00ff00"..GetGuildRosterMOTD().."|r", "LEFT", 0, nil, nil, nil, 100)
+			end
+
+			tooltip:AddLine(" ")
+		end
+
+		local ssGuildName
+		if not E.db.sle.dt.guild.hide_guildname then
+			ssGuildName = GetGuildInfo("player")
+		else
+			ssGuildName = _G.GUILD
+		end
+
+		line = tooltip:AddLine()
+		if not E.db.sle.dt.guild.hideGuild then
+			tooltip:SetCell(line, 1, "|cffffffff" .. ssGuildName .."|r", "LEFT", 3)
+		else
+			line = tooltip:SetCell(line, 1, MINIMIZE .. "|cffffffff" .. ssGuildName .. "|r", "LEFT", 3)
+		end
+		tooltip:SetCellScript(line, 1, "OnMouseUp", HideOnMouseUp, "hideGuild")
+
+		if not E.db.sle.dt.guild.hideGuild then
+			line = tooltip:AddHeader()
+			line = tooltip:SetCell(line, 1, "  ")
+			tooltip:SetCellScript(line, 1, "OnMouseUp", SetGuildSort, "LEVEL")
+			line = tooltip:SetCell(line, 3, _G.NAME)
+			tooltip:SetCellScript(line, 3, "OnMouseUp", SetGuildSort, "TOONNAME")
+			line = tooltip:SetCell(line, 5, _G.ZONE)
+			tooltip:SetCellScript(line, 5, "OnMouseUp", SetGuildSort, "ZONENAME")
+			line = tooltip:SetCell(line, 6, _G.RANK)
+			tooltip:SetCellScript(line, 6, "OnMouseUp", SetGuildSort, "RANKINDEX")
+
+			if not E.db.sle.dt.guild.hide_guild_onotes then
+				line = tooltip:SetCell(line, 7, _G.NOTE_COLON)
+			else
+				line = tooltip:SetCell(line, 7, MINIMIZE .. _G.NOTE_COLON)
+			end
+			tooltip:SetCellScript(line, 7, "OnMouseUp", HideOnMouseUp, "hide_guild_onotes")
+
+			tooltip:AddSeparator()
+
+			for i = 1, GetNumGuildMembers() do
+				local toonName, rank, rankindex, level, class, zoneName, note, onote, connected, status, classFileName, achievementPoints, achievementRank, isMobile = GetGuildRosterInfo(i)
+				local toonShortName, toonRealm = string.split("-", toonName)
+				if MyRealm == toonRealm then toonName = toonShortName end
+				if connected or isMobile then
+					if note and note ~= '' then note="|cff00ff00["..note.."]|r" end
+					if onote and onote ~= '' then onote = "|cff00ffff["..onote.."]|r" end
+
+					if status == 1 then
+						status = AWAY_ICON
+					elseif status == 2 then
+						status = BUSY_ICON
+					elseif status == 0 then
+						status = ''
+					end
+
+					if isMobile then
+						status = MOBILE_ICON
+						zoneName = "Remote Chat"
+					end
+
+					table.insert(guild_table, {
+						TOONNAME = toonName,
+						RANK = rank,
+						RANKINDEX = rankindex,
+						LEVEL = level,
+						CLASS = class,
+						ZONENAME = zoneName,
+						NOTE = note,
+						ONOTE = onote,
+						STATUS = status
+						})
+				end
+			end
+
+			table.sort(guild_table, list_sort[E.db.sle.dt.guild["sortGuild"]])
+
+			for _, player in ipairs(guild_table) do
+					line = tooltip:AddLine()
+					line = tooltip:SetCell(line, 1, ColoredLevel(player["LEVEL"]))
+					line = tooltip:SetCell(line, 2, player["STATUS"])
+					line = tooltip:SetCell(line, 3,
+						string.format("|cff%s%s", CLASS_COLORS[player["CLASS"]] or "ffffff", player["TOONNAME"] .. "|r") .. (inGroup(player["TOONNAME"]) and GROUP_CHECKMARK or ""))
+					line = tooltip:SetCell(line, 5, player["ZONENAME"] or "???")
+					line = tooltip:SetCell(line, 6, player["RANK"])
+					if not E.db.sle.dt.guild.hide_guild_onotes then
+						line = tooltip:SetCell(line, 7, player["NOTE"] .. player["ONOTE"])
+					end
+
+					tooltip:SetLineScript(line, "OnMouseUp", Entry_OnMouseUp, string.format("guild:%s:%s", player["TOONNAME"], player["TOONNAME"]))
+			end
+		end
+		tooltip:AddLine(" ")
+	end
+
+	if not E.db.sle.dt.guild.hide_hintline then
+		line = tooltip:AddLine()
+		if not E.db.sle.dt.guild.minimize_hintline then
+			tooltip:SetCell(line, 1, "Hint:", "LEFT", 3)
+		else
+			tooltip:SetCell(line, 1, MINIMIZE .. "Hint:", "LEFT", 3)
+		end
+		tooltip:SetCellScript(line, 1, "OnMouseUp", HideOnMouseUp, "minimize_hintline")
+
+		if not E.db.sle.dt.guild.minimize_hintline then
+			line = tooltip:AddLine()
+			tooltip:SetCell(line, 1, "", "LEFT", 1)
+			tooltip:SetCell(line, 2, "|cffeda55fLeft Click|r to open the guild panel.", "LEFT", 3)
+			tooltip:SetCell(line, 5, "|cffeda55fRight Click|r to open configuration panel.", "LEFT", 3)
+			line = tooltip:AddLine()
+			tooltip:SetCell(line, 1, "", "LEFT", 1)
+			tooltip:SetCell(line, 2, "|cffeda55fLeft Click|r a line to whisper a player.", "LEFT", 3)
+			tooltip:SetCell(line, 5, "|cffeda55fShift+Left Click|r a line to lookup a player.", "LEFT", 3)--
+			line = tooltip:AddLine()
+			tooltip:SetCell(line, 1, "", "LEFT", 1)
+			tooltip:SetCell(line, 2, "|cffeda55fCtrl+Left Click|r a line to edit note.", "LEFT", 3)
+			tooltip:SetCell(line, 5, "|cffeda55fCtrl+Right Click|r a line to edit officer note.", "LEFT", 3)
+			line = tooltip:AddLine()
+			tooltip:SetCell(line, 1, "", "LEFT", 1)
+			tooltip:SetCell(line, 2, "|cffeda55fAlt+Left Click|r a line to invite.", "LEFT", 3)--
+			tooltip:SetCell(line, 5, "|cffeda55fLeft Click|r a Header to hide it or sort it.", "LEFT", 3)--
+		end
+	end
+
+	tooltip:UpdateScrolling()
+	tooltip:Show()
+end
+
+frame:SetScript("OnEvent", function(self, event, ...)
+	if self[event] then
+		return self[event](self, event, ...)
+	end
+end)
+
+local DELAY = 15  --  Update every 15 seconds
+local elapsed = DELAY - 5
+
+frame:SetScript("OnUpdate", function (self, elapse)
+	elapsed = elapsed + elapse
+
+	if elapsed >= DELAY then
+		elapsed = 0
+		DT:update_Guild()
+	end
+end)
+
+frame:RegisterEvent("PLAYER_LOGIN")
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/intellect.lua b/ElvUI_SLE/modules/sledatatexts/intellect.lua
new file mode 100644
index 0000000..32a26ce
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/intellect.lua
@@ -0,0 +1,21 @@
+local E, L, V, P, G = unpack(ElvUI)
+local DT = E:GetModule('DataTexts')
+
+local displayNumberString = ''
+local lastPanel
+
+local function OnEvent(self, event, ...)
+	self.text:SetFormattedText(displayNumberString, INTELLECT_COLON, select(2, UnitStat("player", 4)))
+	lastPanel = self
+end
+
+local function ValueColorUpdate(hex, r, g, b)
+	displayNumberString = strjoin("", "%s ", hex, "%.f|r")
+
+	if lastPanel ~= nil then
+		OnEvent(lastPanel)
+	end
+end
+E['valueColorUpdateFuncs'][ValueColorUpdate] = true
+
+DT:RegisterDatatext('Intellect', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/itemlevel.lua b/ElvUI_SLE/modules/sledatatexts/itemlevel.lua
new file mode 100644
index 0000000..7fb704a
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/itemlevel.lua
@@ -0,0 +1,263 @@
+local E, L, V, P, G = unpack(ElvUI)
+local DT = E:GetModule('DataTexts')
+
+local displayString = ''
+local lastPanel
+local floor = floor
+local GetInventoryItemLink, GetInventorySlotInfo = GetInventoryItemLink, GetInventorySlotInfo
+
+local slots = {
+	[1] = { "HeadSlot", HEADSLOT },
+	[2] = { "NeckSlot", NECKSLOT },
+	[3] = { "ShoulderSlot", SHOULDERSLOT },
+	[4] = { "BackSlot", BACKSLOT },
+	[5] = { "ChestSlot", CHESTSLOT },
+	[6] = { "WristSlot", WRISTSLOT },
+	[7] = { "HandsSlot", HANDSSLOT },
+	[8] = { "WaistSlot", WAISTSLOT },
+	[9] = { "LegsSlot", LEGSSLOT },
+	[10] = { "FeetSlot", FEETSLOT },
+	[11] = { "Finger0Slot", FINGER0SLOT_UNIQUE },
+	[12] = { "Finger1Slot", FINGER1SLOT_UNIQUE },
+	[13] = { "Trinket0Slot", TRINKET0SLOT_UNIQUE },
+	[14] = { "Trinket1Slot", TRINKET1SLOT_UNIQUE },
+	[15] = { "MainHandSlot", MAINHANDSLOT },
+	[16] = { "SecondaryHandSlot", SECONDARYHANDSLOT },
+}
+
+local levelColors = {
+	[0] = { 1, 0, 0 },
+	[1] = { 0, 1, 0 },
+	[2] = { 1, 1, .5 },
+}
+
+local levelAdjust = {
+	["0"]=0,["1"]=8,["373"]=4,["374"]=8,["375"]=4,["376"]=4,["377"]=4,["379"]=4,["380"]=4,
+	["445"]=0,["446"]=4,["447"]=8,["451"]=0,["452"]=8,["453"]=0,["454"]=4,["455"]=8,
+	["456"]=0,["457"]=8,["458"]=0,["459"]=4,["460"]=8,["461"]=12,["462"]=16,
+	["465"]=0,["466"]=4,["467"]=8,["468"] = 0,["469"] = 4,["470"] = 8,["471"] = 12,["472"] = 16,
+	["491"]=0,["492"]=4,["493"]=8,["494"]=4,["495"]=8,["496"]=8,["497"]=12,["498"]=16
+}
+
+local heirlooms = {
+	[80] = {
+		42943, --Bloodied Arcanite Reaper
+		42944, --Balanced Heartseeker
+		42945, --Venerable Dal'Rend's Sacred Charge
+		42946, --Charmed Ancient Bone Bow
+		42947, --Dignified Headmaster's Charge
+		42948, --Devout Aurastone Hammer
+		42949, --Polished Spaulders of Valor
+		42950, --Champion Herod's Shoulder
+		42951, --Mystical Pauldrons of Elements
+		42952, --Stained Shadowcraft Spaulders
+		42984, --Preened Ironfeather Shoulders
+		42985, --Tattered Dreadmist Mantle
+		42991, --Swift Hand of Justice
+		42992, --Discerning Eye of the Beast
+		44091, --Sharpened Scarlet Kris
+		44092, --Reforged Truesilver Champion
+		44093, --Upgraded Dwarven Hand Cannon
+		44094, --The Blessed Hammer of Grace
+		44095, --Grand Staff of Jordan
+		44096, --Battleworn Thrash Blade
+		44097, --Inherited Insignia of the Horde
+		44098, --Inherited Insignia of the Alliance
+		44099, --Strengthened Stockade Pauldrons
+		44100, --Pristine Lightforge Spaulders
+		44101, --Prized Beastmaster's Mantle
+		44102, --Aged Pauldrons of The Five Thunders
+		44103, --Exceptional Stormshroud Shoulders
+		44105, --Lasting Feralheart Spaulders
+		44107, --Exquisite Sunderseer Mantle
+		48677, --Champion's Deathdealer Breastplate
+		48683, --Mystical Vest of Elements
+		48685, --Polished Breastplate of Valor
+		48687, --Preened Ironfeather Breastplate
+		48689, --Stained Shadowcraft Tunic
+		48691, --Tattered Dreadmist Robe
+		48716, --Venerable Mass of McGowan
+		48718, --Repurposed Lava Dredger
+		50255, --Dread Pirate Ring
+		69889, --Burnished Breastplate of Might
+		69890, --Burnished Pauldrons of Might
+		69893, --Bloodsoaked Skullforge Reaver
+		79131, --Burnished Warden Staff
+	},
+	[85] = {
+		61931, --Polished Helm of Valor
+		61935, --Tarnished Raging Berserker's Helm
+		61936, --Mystical Coif of Elements
+		61937, --Stained Shadowcraft Cap
+		61942, --Preened Tribal War Feathers
+		61958, --Tattered Dreadmist Mask
+		62023, --Polished Legplates of Valor
+		62024, --Tarnished Leggings of Destruction
+		62025, --Mystical Kilt of Elements
+		62026, --Stained Shadowcraft Pants
+		62027, --Preened Wildfeather Leggings
+		62029, --Tattered Dreadmist Leggings
+		62038, --Worn Stoneskin Gargoyle Cape
+		62039, --Inherited Cape of the Black Baron
+		62040, --Ancient Bloodmoon Cloak
+		69887, --Burnished Helm of Might
+		69888, --Burnished Legplates of Might
+		69892, --Ripped Sandstorm Cloak
+		93841, --Smoothbore Dwarven Hand Cannon
+		93843, --Hardened Arcanite Reaper
+		93844, --Refinished Warden Staff
+		93845, --Gore-Steeped Skullforge Reaver
+		93846, --Re-Engineered Lava Dredger
+		93847, --Crushing Mass of McGowan
+		93848, --Battle-Hardened Thrash Blade
+		93849, --Elder Staff of Jordan
+		93850, --The Sanctified hammer of Grace
+		93851, --Battle-Forged Truesilver Champion
+		93852, --Deadly Scarlet Kris
+		93853, --Pious Aurastone hammer
+		93854, --Scholarly Headmaster's Charge
+		93855, --War-Torn Ancient Bone Bow
+		93856, --Noble Dal'Rend's Sacred Charge
+		93857, --Vengeful Heartseeker
+		93859, --Bloodstained Dreadmist Mantle
+		93860, --Bloodstained Dreadmist Robe
+		93861, --Prestigious Sunderseer Mantle
+		93862, --Supple Shadowcraft Spaulders
+		93863, --Supple Shadowcraft Tunic
+		93864, --Majestic Ironfeather Shoulders
+		93865, --Majestic Ironfeather Breastplate
+		93866, --Wild Feralheart Spaulders
+		93867, --Superior Stormshroud Shoulders
+		93876, --Awakened Pauldrons of Elements
+		93885, --Awakened Vest of Elements
+		93886, --Adorned Beastmaster's Mantle
+		93887, --Grand Champion Herod's Shoulder
+		93888, --Furious Deathdealer Breastplate
+		93889, --Venerated Pauldrons of The Five Thunders
+		93890, --Gleaming Spaulders of Valor
+		93891, --Gleaming Breastplate of Valor
+		93892, --Brushed Breaastplate of Might
+		93893, --Brushed Pauldrons of Might
+		93894, --Immaculate Lightforge Spaulders
+		93895, --Reinforced Stockade Pauldrons
+		93896, --Forceful Hand of Justice
+		93897, --Piercing Eye of the Beast
+		93899, --Bequeathed Insignia of the Alliance
+		93900, --Inherited Mark of Tyranny
+		93902, --Flamescarred Draconian Deflector
+		93903, --Weathered Observer's Shield
+		93904, --Musty Tome of the Lost
+	},
+	[90] = {
+		104399, --Hellscream's Warbow (Normal)
+		104400, --Hellscream's Razor (Normal)
+		104401, --Hellscream's Doomblade (Normal)
+		104402, --Hellscream's Warmace (Normal)
+		104403, --Hellscream's Pig Sticker (Normal)
+		104404, --Hellscream's Cleaver (Normal)
+		104405, --Hellscream's Decapitator (Normal)
+		104406, --Hellscream's War Staff (Normal)
+		104407, --Hellscream's Shield Wall (Normal)
+		104408, --Hellscream's Tome of Destruction (Normal)
+		104409, --Hellscream's Barrier (Normal)
+		105670, --Hellscream's Warbow (Flex)
+		105671, --Hellscream's Razor (Flex)
+		105672, --Hellscream's Cleaver (Flex)
+		105673, --Hellscream's Pig Sticker (Flex)
+		105674, --Hellscream's Barrier (Flex)
+		105675, --Hellscream's Warmace (Flex)
+		105676, --Hellscream's Tome of Destruction (Flex)
+		105677, --Hellscream's War Staff (Flex)
+		105678, --Hellscream's Doomblade (Flex)
+		105679, --Hellscream's Decapitator (Flex)
+		105680, --Hellscream's Shield Wall (Flex)
+		105683, --Hellscream's Warbow (Heroic)
+		105684, --Hellscream's Razor (Heroic)
+		105685, --Hellscream's Cleaver (Heroic)
+		105686, --Hellscream's Pig Sticker (Heroic)
+		105687, --Hellscream's Barrier (Heroic)
+		105688, --Hellscream's Warmace (Heroic)
+		105689, --Hellscream's Tome of Destruction (Heroic)
+		105690, --Hellscream's War Staff (Heroic)
+		105691, --Hellscream's Doomblade (Heroic)
+		105692, --Hellscream's Decapitator (Heroic)
+		105693, --Hellscream's Shield Wall (Heroic)
+	},
+}
+
+local function HeirLoomLevel(itemLink)
+	local ItemID, _, _, _, _, _, _, _, level = strmatch(itemLink, '|Hitem:(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+)')
+	ItemID, level = tonumber(ItemID), tonumber(level)
+	for _, ID in pairs(heirlooms[90]) do
+		if ID == ItemID then
+			return select(4, GetItemInfo(itemLink))
+		end
+	end
+	for _, ID in pairs(heirlooms[85]) do
+		if ID == ItemID and level > 85 then
+			level = 85
+			break
+		end
+	end
+	for _, ID in pairs(heirlooms[80]) do
+		if ID == ItemID and level > 80 then
+			level = 80
+			break
+		end
+	end
+
+	if level > 80 then
+		return (( level - 81) * 12) + 285;
+	elseif level > 67 then
+		return (( level - 68) * 6) + 115;
+	elseif level > 59 then
+		return (( level - 60) * 3) + 85;
+	else
+		return level
+	end
+end
+
+local function GetItemLevel(itemLink)
+	local rarity, itemLevel = select(3, GetItemInfo(itemLink))
+	if rarity == 7 then
+		itemLevel = HeirLoomLevel(itemLink)
+	end
+	local upgrade = strmatch(itemLink, ":(%d+)\124h%[")
+	if itemLevel and upgrade and levelAdjust[upgrade] then
+		itemLevel = itemLevel + levelAdjust[upgrade]
+	end
+	return itemLevel
+end
+
+local function OnEvent(self)
+	self.avgItemLevel, self.avgEquipItemLevel = GetAverageItemLevel()
+	self.text:SetFormattedText(displayString, ITEM_LEVEL_ABBR, floor(self.avgEquipItemLevel), floor(self.avgItemLevel))
+end
+
+local function OnEnter(self)
+	local avgItemLevel, avgEquipItemLevel = self.avgItemLevel, self.avgEquipItemLevel
+
+	DT:SetupTooltip(self)
+	DT.tooltip:AddDoubleLine(TOTAL, floor(avgItemLevel), 1, 1, 1, 0, 1, 0)
+	DT.tooltip:AddDoubleLine(GMSURVEYRATING3, floor(avgEquipItemLevel), 1, 1, 1, 0, 1, 0)
+	DT.tooltip:AddLine(" ")
+	for i = 1, 16 do
+		local itemLink = GetInventoryItemLink("player", GetInventorySlotInfo(slots[i][1]))
+		if itemLink then
+			itemLevel = GetItemLevel(itemLink)
+			if itemLevel and avgEquipItemLevel then
+				local color = levelColors[(itemLevel < avgEquipItemLevel - 10 and 0 or (itemLevel > avgEquipItemLevel + 10 and 1 or (2)))]
+				DT.tooltip:AddDoubleLine(slots[i][2], itemLevel, 1, 1, 1, color[1], color[2], color[3])
+			end
+		end
+	end
+	DT.tooltip:Show()
+end
+
+local function ValueColorUpdate(hex, r, g, b)
+	displayString = string.join("", "|cffffffff%s:|r", " ", hex, "%d / %d|r")
+	if lastPanel ~= nil then OnEvent(lastPanel) end
+end
+E["valueColorUpdateFuncs"][ValueColorUpdate] = true
+
+DT:RegisterDatatext("S&L Item Level", {"PLAYER_ENTERING_WORLD", "PLAYER_EQUIPMENT_CHANGED", "UNIT_INVENTORY_CHANGED"}, OnEvent, nil, nil, OnEnter)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/lfr.lua b/ElvUI_SLE/modules/sledatatexts/lfr.lua
new file mode 100644
index 0000000..8527e37
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/lfr.lua
@@ -0,0 +1,407 @@
+local E, L, V, P, G = unpack(ElvUI);
+--LFR boss status calculations--
+local DT = E:GetModule('DataTexts')
+
+local GetLFGDungeonEncounterInfo = GetLFGDungeonEncounterInfo
+local AddLine = AddLine
+local AddDoubleLine = AddDoubleLine
+local GetMapNameByID = GetMapNameByID
+
+--For 4 boss raid
+local function FourKill(id)
+	local killNum = 0
+	for i =1,4 do
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	if killNum == 4 then
+		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/4", RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
+	else
+		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/4", GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b)
+	end
+end
+
+local function FourShift(id)
+	for i =1,4 do --1st part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif (isIneligible) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+end
+
+--For 6 boss raid
+local function SixKill(id1, id2)
+	local killNum = 0
+	for i =1,3 do --1st part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id1, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	for i =4,6 do --2nd part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id2, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	if killNum == 6 then
+		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/6", RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
+	else
+		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/6", GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b)
+	end
+end
+
+local function SixShift(id1, id2)
+	for i =1,3 do --1st part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id1, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif ( isIneligible ) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+	for i =4,6 do --2nd part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id2, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif (isIneligible) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+end
+
+--For 8 boss raid
+local function EightKill(id1, id2)
+	local killNum = 0
+	for i =1,4 do --1st part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id1, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	for i =5,8 do --2nd part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id2, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	if killNum == 8 then
+		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/8", RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
+	else
+		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/8", GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b)
+	end
+end
+
+local function EightShift(id1, id2)
+	for i =1,4 do --1st part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id1, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif (isIneligible) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+	for i =5,8 do --2nd part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id2, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif (isIneligible) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+end
+
+--For 12 boss raid
+local function TwelveKill(id1, id2, id3, id4)
+	local killNum = 0
+	for i =1,3 do --1st part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id1, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	for i =4,6 do --2nd part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id2, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	for i =7,9 do --3rd part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id3, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	for i =10,12 do --4th part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id4, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	if killNum == 12 then
+		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/12", RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
+	else
+		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/12", GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b)
+	end
+end
+
+local function TwelveShift(id1, id2, id3, id4)
+	for i =1,3 do --1st part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id1, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif ( isIneligible ) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+	for i =4,6 do --2nd part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id2, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif (isIneligible) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+	for i =7,9 do --3rd part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id3, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif (isIneligible) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+	for i =10,12 do --4th part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id4, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif (isIneligible) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+end
+
+--For 14 boss raid
+local function FourteenKill(id1, id2, id3, id4)
+	local killNum = 0
+	for i =1,4 do --1st part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id1, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	for i =5,8 do --2nd part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id2, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	for i =9,11 do --3rd part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id3, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	for i =12,14 do --4th part
+		_, _, isKilled = GetLFGDungeonEncounterInfo(id4, i);
+		if (isKilled) then
+			killNum = killNum + 1
+		end
+	end
+	if killNum == 14 then
+		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/14", RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
+	else
+		DT.tooltip:AddLine(" "..L["Bosses killed: "]..killNum.."/14", GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b)
+	end
+end
+
+local function FourteenShift(id1, id2, id3, id4)
+	for i =1,4 do --1st part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id1, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif (isIneligible) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+	for i =5,8 do --2nd part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id2, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif (isIneligible) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+	for i =9,11 do --3rd part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id3, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif (isIneligible) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+	for i =12,14 do --4th part
+		bossName, _, isKilled, isIneligible = GetLFGDungeonEncounterInfo(id4, i);
+		if (isKilled) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b);
+		elseif (isIneligible) then
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE_INELIGIBLE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		else
+			DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
+		end
+	end
+end
+
+local function DragonSoul(id1, id2)
+	if IsShiftKeyDown() then
+		EightShift(id1, id2)
+	else
+		EightKill(id1, id2)
+	end
+end
+
+local function Mogushan(id1, id2)
+	if IsShiftKeyDown() then
+		SixShift(id1, id2)
+	else
+		SixKill(id1, id2)
+	end
+end
+
+local function HoF(id1, id2)
+	if IsShiftKeyDown() then
+		SixShift(id1, id2)
+	else
+		SixKill(id1, id2)
+	end
+end
+
+local function ToES(id)
+	if IsShiftKeyDown() then
+		FourShift(id)
+	else
+		FourKill(id)
+	end
+end
+
+local function ToT(id1, id2, id3, id4)
+	if IsShiftKeyDown() then
+		TwelveShift(id1, id2, id3, id4)
+	else
+		TwelveKill(id1, id2, id3, id4)
+	end
+end
+
+local function SoO(id1, id2, id3, id4)
+	if IsShiftKeyDown() then
+		FourteenShift(id1, id2, id3, id4)
+	else
+		FourteenKill(id1, id2, id3, id4)
+	end
+end
+
+function DT:LFRShow()
+	local lvl = UnitLevel("player")
+	local ilvl = GetAverageItemLevel()
+	DT.tooltip:AddLine(" ")
+	DT.tooltip:AddLine(RAID_FINDER)
+	if E.db.sle.lfrshow.ds then
+		DT.tooltip:AddLine(" "..GetMapNameByID(824))
+		if lvl == 85 and ilvl >= 372 then
+			DragonSoul(416, 417)
+		else
+			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
+		end
+		DT.tooltip:AddLine(" ")
+	end
+		if E.db.sle.lfrshow.mv then
+		DT.tooltip:AddLine(" "..GetMapNameByID(896))
+		if lvl == 90 and ilvl >= 460 then
+			Mogushan(527, 528)
+		else
+			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
+		end
+		DT.tooltip:AddLine(" ")
+	end
+
+	if E.db.sle.lfrshow.hof then
+			DT.tooltip:AddLine(" "..GetMapNameByID(897))
+		if lvl == 90 and ilvl >= 470 then
+			HoF(529, 530)
+		else
+			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
+		end
+		DT.tooltip:AddLine(" ")
+	end
+
+	if E.db.sle.lfrshow.toes then
+		DT.tooltip:AddLine(" "..GetMapNameByID(886))
+		if lvl == 90 and ilvl >= 470 then
+			ToES(526)
+		else
+			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
+		end
+		DT.tooltip:AddLine(" ")
+	end
+
+	if E.db.sle.lfrshow.tot then
+		DT.tooltip:AddLine(" "..GetMapNameByID(930))
+		if lvl == 90 and ilvl >= 480 then
+			ToT(610, 611, 612, 613)
+		else
+			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
+		end
+		DT.tooltip:AddLine(" ")
+	end
+
+	if E.db.sle.lfrshow.soo then
+		DT.tooltip:AddLine(" "..GetMapNameByID(953))
+		if lvl == 90 and ilvl >= 496 then
+			SoO(716, 717, 724, 725)
+		else
+			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
+		end
+		DT.tooltip:AddLine(" ")
+	end
+
+	if E.db.sle.lfrshow.soof then
+		DT.tooltip:AddLine(" "..FLEX_RAID.." "..GetMapNameByID(953))
+		if lvl == 90 then
+			SoO(726, 728, 729, 730)
+		else
+			DT.tooltip:AddLine(" "..L["This LFR isn't available for your level/gear."])
+		end
+		DT.tooltip:AddLine(" ")
+	end
+	if not E.db.sle.lfrshow.ds and not E.db.sle.lfrshow.mv and not E.db.sle.lfrshow.hof and not E.db.sle.lfrshow.toes and not E.db.sle.lfrshow.tot and not E.db.sle.lfrshow.soo and not E.db.sle.lfrshow.soof then
+		DT.tooltip:AddLine(" "..L["You didn't select any instance to track."])
+	end
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/load_datatexts.xml b/ElvUI_SLE/modules/sledatatexts/load_datatexts.xml
new file mode 100644
index 0000000..da5babc
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/load_datatexts.xml
@@ -0,0 +1,20 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/">
+	<Script file='lfr.lua'/>
+	<Script file='version.lua'/>
+	<Script file='regen.lua'/>
+	<Script file='agility.lua'/>
+	<Script file='strength.lua'/>
+	<Script file='energyregen.lua'/>
+	<Script file='intellect.lua'/>
+	<Script file='stamina.lua'/>
+	<Script file='spirit.lua'/>
+	<Script file='time.lua'/>
+	<Script file='friends.lua'/>
+	<Script file='guild.lua'/>
+	<Script file='itemlevel.lua'/>
+	<Script file='played.lua'/>
+	<Script file='mail.lua'/>
+	<Script file='micromenu.lua'/>
+	<Script file='currency.lua'/>
+	<Script file='range.lua'/>
+</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/mail.lua b/ElvUI_SLE/modules/sledatatexts/mail.lua
new file mode 100644
index 0000000..215a03b
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/mail.lua
@@ -0,0 +1,88 @@
+local E, L, V, P, G = unpack(ElvUI);
+local DT = E:GetModule('DataTexts')
+
+local Mail_Icon = "|TInterface\\MINIMAP\\TRACKING\\Mailbox.blp:14:14|t";
+local OldShow = MiniMapMailFrame.Show
+
+local Read;
+local AddLine = AddLine
+
+local function MakeIconString()
+	local str = ""
+		str = str..Mail_Icon
+
+	return str
+end
+
+function DT:SLEmailUp(newmail)
+	if not E.db.sle.dt.mail.icon then
+		MiniMapMailFrame:Hide()
+		MiniMapMailFrame.Show = nil
+	else
+		if not MiniMapMailFrame.Show then
+			MiniMapMailFrame.Show = OldShow
+		end
+		if newmail then
+			MiniMapMailFrame:Show()
+		end
+	end
+end
+
+local function OnEvent(self, event, ...)
+	local newMail = false
+
+	if event == "UPDATE_PENDING_MAIL" or event == "PLAYER_ENTERING_WORLD" or event =="PLAYER_LOGIN" then
+
+		newMail = HasNewMail()
+
+		if unreadMail ~= newMail then
+			unreadMail = newMail
+		end
+
+		DT:SLEmailUp(newmail)
+
+		self:UnregisterEvent("PLAYER_ENTERING_WORLD")
+		self:UnregisterEvent("PLAYER_LOGIN")
+	end
+
+	if event == "MAIL_INBOX_UPDATE" or event == "MAIL_SHOW" or event == "MAIL_CLOSED" then
+		for i = 1, GetInboxNumItems() do
+			local _, _, _, _, _, _, _, _, wasRead = GetInboxHeaderInfo(i);
+			if( not wasRead ) then
+				newMail = true;
+				break;
+			end
+		end
+	end
+
+	if newMail then
+		self.text:SetText(MakeIconString().."New Mail")
+		Read = false;
+	else
+		self.text:SetText("No Mail")
+		Read = true;
+	end
+
+end
+
+local function OnUpdate(self)
+	OnEvent(self, "UPDATE_PENDING_MAIL")
+	self:SetScript("OnUpdate", nil)
+end
+
+local function OnEnter(self)
+	DT:SetupTooltip(self)
+
+	local sender1, sender2, sender3 = GetLatestThreeSenders()
+
+	if not Read then
+		DT.tooltip:AddLine(HAVE_MAIL_FROM)
+		if sender1 then DT.tooltip:AddLine("    "..sender1) end
+		if sender2 then DT.tooltip:AddLine("    "..sender2) end
+		if sender3 then DT.tooltip:AddLine("    "..sender3) end
+
+	end
+	DT.tooltip:Show()
+end
+
+DT:RegisterDatatext('S&L Mail', {'PLAYER_ENTERING_WORLD', 'MAIL_INBOX_UPDATE', 'UPDATE_PENDING_MAIL', 'MAIL_CLOSED', 'PLAYER_LOGIN','MAIL_SHOW'}, OnEvent, OnUpdate, nil, OnEnter)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/micromenu.lua b/ElvUI_SLE/modules/sledatatexts/micromenu.lua
new file mode 100644
index 0000000..befbcd4
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/micromenu.lua
@@ -0,0 +1,73 @@
+local E, L, V, P, G = unpack(ElvUI)
+local DT = E:GetModule('DataTexts')
+
+local gsub, upper = string.gsub, string.upper
+local menuFrame = CreateFrame("Frame", "ElvUI_SLE_MainMenuFrame", E.UIParent)
+menuFrame:SetTemplate("Transparent", true)
+
+local calendar_string = gsub(SLASH_CALENDAR1, "/", "")
+calendar_string = gsub(calendar_string, "^%l", upper)
+
+local menu = {
+	{ text = L['Main Menu'], func = function()
+		if not GameMenuFrame:IsShown() then
+			ShowUIPanel(GameMenuFrame);
+		else
+			HideUIPanel(GameMenuFrame);
+		end
+	end },
+	{ text = CHARACTER_BUTTON, func = function() ToggleCharacter("PaperDollFrame") end },
+	{ text = SPELLBOOK_ABILITIES_BUTTON, func = function() if not SpellBookFrame:IsShown() then ShowUIPanel(SpellBookFrame) else HideUIPanel(SpellBookFrame) end end },
+	{ text = MOUNTS_AND_PETS, func = function() TogglePetJournal() end },
+	{ text = TALENTS_BUTTON, func = function()
+		if not PlayerTalentFrame then
+			TalentFrame_LoadUI()
+		end
+
+		if not GlyphFrame then
+			GlyphFrame_LoadUI()
+		end
+
+		if not PlayerTalentFrame:IsShown() then
+			ShowUIPanel(PlayerTalentFrame)
+		else
+			HideUIPanel(PlayerTalentFrame)
+		end
+	end },
+	{ text = TIMEMANAGER_TITLE, func = function() ToggleFrame(TimeManagerFrame) end },
+	{ text = ACHIEVEMENT_BUTTON, func = function() ToggleAchievementFrame() end },
+	{ text = QUESTLOG_BUTTON, func = function() ToggleFrame(QuestLogFrame) end },
+	{ text = SOCIAL_BUTTON, func = function() ToggleFriendsFrame() end },
+	{ text = calendar_string, func = function() GameTimeFrame:Click() end },
+	{ text = PLAYER_V_PLAYER, func = function()
+		if not PVPUIFrame then
+			PVP_LoadUI()
+		end
+		ToggleFrame(PVPUIFrame)
+	end },
+	{ text = ACHIEVEMENTS_GUILD_TAB, func = function()
+		if IsInGuild() then
+			if not GuildFrame then GuildFrame_LoadUI() end
+			GuildFrame_Toggle()
+		else
+			if not LookingForGuildFrame then LookingForGuildFrame_LoadUI() end
+			if not LookingForGuildFrame then return end
+			LookingForGuildFrame_Toggle()
+		end
+	end },
+	{ text = LFG_TITLE, func = function() PVEFrame_ToggleFrame(); end },
+	{ text = L["Raid Browser"], func = function() ToggleFrame(RaidBrowserFrame) end },
+	{ text = ENCOUNTER_JOURNAL, func = function() if not IsAddOnLoaded('Blizzard_EncounterJournal') then EncounterJournal_LoadUI(); end ToggleFrame(EncounterJournal) end },
+	{ text = BLIZZARD_STORE, func = function() StoreMicroButton:Click() end },
+	{ text = HELP_BUTTON, func = function() ToggleHelpFrame() end },
+}
+
+local function OnClick(self)
+	E:DropDown(menu, menuFrame)
+end
+
+local function OnEvent(self, event, ...)
+	self.text:SetText(L['Main Menu'])
+end
+
+DT:RegisterDatatext('S&L MicroMenu', {'PLAYER_LOGIN'}, OnEvent, nil, OnClick, nil)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/played.lua b/ElvUI_SLE/modules/sledatatexts/played.lua
new file mode 100644
index 0000000..62601ec
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/played.lua
@@ -0,0 +1,136 @@
+local E, L, V, P, G = unpack(ElvUI);
+local DT = E:GetModule('DataTexts')
+
+local format, GetTime, ChatFrame_TimeBreakDown, InCombatLockdown = format, GetTime, ChatFrame_TimeBreakDown, InCombatLockdown
+local PlayedTimeFormatFull = '%d '..L["D"]..' %02d:%02d:%02d'
+local PlayedTimeFormatNoDay = '%02d:%02d:%02d'
+local TotalPlayTime, LevelPlayTime, SessionPlayTime, LevelPlayedOffset, LastLevelTime
+local MyRealm = E.myrealm
+local MyName = E.myname
+local MyClass = E.myclass
+local AddLine, AddDoubleLine = AddLine, AddDoubleLine
+
+local OnEnter = function(self)
+	if not InCombatLockdown() and SessionPlayTime then
+	DT:SetupTooltip(self)
+		local SessionDay, SessionHour, SessionMinute, SessionSecond = ChatFrame_TimeBreakDown(GetTime() - SessionPlayTime)
+		local TotalDay, TotalHour, TotalMinute, TotalSecond = ChatFrame_TimeBreakDown(TotalPlayTime + (GetTime() - SessionPlayTime))
+		local LevelDay, LevelHour, LevelMinute, LevelSecond = ChatFrame_TimeBreakDown(LevelPlayTime + (GetTime() - LevelPlayTimeOffset))
+		local LastLevelDay, LastLevelHour, LastLevelMinute, LastLevelSecond = ChatFrame_TimeBreakDown(LastLevelTime)
+		DT.tooltip:ClearLines()
+		DT.tooltip:AddLine(TIME_PLAYED_MSG, 1, 1, 1)
+		DT.tooltip:AddLine(' ')
+		DT.tooltip:AddDoubleLine(L["Session:"], SessionDay > 0 and format(PlayedTimeFormatFull, SessionDay, SessionHour, SessionMinute, SessionSecond) or format(PlayedTimeFormatNoDay, SessionHour, SessionMinute, SessionSecond), 1, 1, 1, 1, 1, 1)
+		if LastLevelSecond > 0 then
+			DT.tooltip:AddDoubleLine(L["Previous Level:"], LastLevelDay > 0 and format(PlayedTimeFormatFull, LastLevelDay. LastLevelHour, LastLevelMinute, LastLevelSecond) or format(PlayedTimeFormatNoDay, LastLevelHour, LastLevelMinute, LastLevelSecond), 1, 1, 1, 1, 1, 1)
+		end
+		DT.tooltip:AddDoubleLine(LEVEL..':', LevelDay > 0 and format(PlayedTimeFormatFull, LevelDay, LevelHour, LevelMinute, LevelSecond) or format(PlayedTimeFormatNoDay, LevelHour, LevelMinute, LevelSecond), 1, 1, 1, 1, 1, 1)
+		DT.tooltip:AddDoubleLine(TOTAL..':', TotalDay > 0 and format(PlayedTimeFormatFull, TotalDay, TotalHour, TotalMinute, TotalSecond) or format(PlayedTimeFormatNoDay, TotalHour, TotalMinute, TotalSecond), 1, 1, 1, 1, 1, 1)
+		DT.tooltip:AddLine(' ')
+		DT.tooltip:AddLine(L["Account Time Played"], 1, 1, 1)
+		DT.tooltip:AddLine(' ')
+		local Class, Level, AccountDay, AccountHour, AccountMinute, AccountSecond, TotalAccountTime
+		for player, subtable in pairs(ElvDB['sle']['TimePlayed'][MyRealm]) do
+			for k, v in pairs(subtable) do
+				if k == 'TotalTime' then
+					AccountDay, AccountHour, AccountMinute, AccountSecond = ChatFrame_TimeBreakDown(v)
+					TotalAccountTime = (TotalAccountTime or 0) + v
+				end
+				if k == 'Class' then Class = v end
+				if k == 'Level' then Level = v end
+			end
+			local color = RAID_CLASS_COLORS[Class]
+			DT.tooltip:AddDoubleLine(format('%s |cFFFFFFFF- %s %d', player, LEVEL, Level), format(PlayedTimeFormatFull, AccountDay, AccountHour, AccountMinute, AccountSecond), color.r, color.g, color.b, 1, 1, 1)
+		end
+		DT.tooltip:AddLine(' ')
+		local TotalAccountDay, TotalAccountHour, TotalAccountMinute, TotalAccountSecond = ChatFrame_TimeBreakDown(TotalAccountTime)
+		DT.tooltip:AddDoubleLine(TOTAL, format(PlayedTimeFormatFull, TotalAccountDay, TotalAccountHour, TotalAccountMinute, TotalAccountSecond), 1, 0, 1, 1, 1, 1)
+		DT.tooltip:AddLine(' ')
+		DT.tooltip:AddLine(L["Reset Data: Hold Shift + Right Click"])
+		DT.tooltip:Show()
+	end
+end
+
+local ElapsedTimer = 0
+local OnUpdate = function(self, elapsed)
+	ElapsedTimer = ElapsedTimer + elapsed
+	if (not self.text) then
+		local text = self:CreateFontString(nil, 'OVERLAY')
+		text:SetFont(DataText.Font, DataText.Size, DataText.Flags)
+		text:SetText(TIME_PLAYED_MSG)
+		self.text = text
+	end
+
+	if TotalPlayTime and LevelPlayTime and SessionPlayTime then
+		local Day, Hour, Minute, Second
+		if UnitLevel('player') ~= MAX_PLAYER_LEVEL then
+			Day, Hour, Minute, Second = ChatFrame_TimeBreakDown(LevelPlayTime + (GetTime() - LevelPlayTimeOffset))
+		else
+			Day, Hour, Minute, Second = ChatFrame_TimeBreakDown(TotalPlayTime + (GetTime() - SessionPlayTime))
+		end
+		if Day > 0 then
+			self.text:SetFormattedText('%d '..L["D"]..' %02d:%02d', Day, Hour, Minute)
+		else
+			self.text:SetFormattedText('%02d:%02d', Hour, Minute)
+		end
+	else
+		if ElapsedTimer > 1 and not self.Requested then
+			self.Requested = true
+			RequestTimePlayed()
+		end
+	end
+end
+
+local OnEvent = function(self, event, ...)
+	if not ElvDB['sle'] then ElvDB['sle'] = {} end
+	if not ElvDB['sle']['TimePlayed'] then ElvDB['sle']['TimePlayed'] = {} end
+	if not ElvDB['sle']['TimePlayed'][MyRealm] then ElvDB['sle']['TimePlayed'][MyRealm] = {} end
+	if not ElvDB['sle']['TimePlayed'][MyRealm][MyName] then ElvDB['sle']['TimePlayed'][MyRealm][MyName] = {} end
+	ElvDB['sle']['TimePlayed'][MyRealm][MyName]['Class'] = MyClass
+	ElvDB['sle']['TimePlayed'][MyRealm][MyName]['Level'] = UnitLevel('player')
+	LastLevelTime = ElvDB['sle']['TimePlayed'][MyRealm][MyName]['LastLevelTime'] or 0
+	if event == 'TIME_PLAYED_MSG' then
+		local TotalTime, LevelTime = ...
+		TotalPlayTime = TotalTime
+		LevelPlayTime = LevelTime
+		if SessionPlayTime == nil then SessionPlayTime = GetTime() end
+		LevelPlayTimeOffset = GetTime()
+		ElvDB['sle']['TimePlayed'][MyRealm][MyName]['TotalTime'] = TotalTime
+		ElvDB['sle']['TimePlayed'][MyRealm][MyName]['LevelTime'] = LevelTime
+	end
+	if event == 'PLAYER_LEVEL_UP' then
+		LastLevelTime = floor(LevelPlayTime + (GetTime() - LevelPlayTimeOffset))
+		ElvDB['sle']['TimePlayed'][MyRealm][MyName]['LastLevelTime'] = LastLevelTime
+		LevelPlayTime = 1
+		LevelPlayTimeOffset = GetTime()
+		ElvDB['sle']['TimePlayed'][MyRealm][MyName]['Level'] = UnitLevel('player')
+	end
+	if event == 'PLAYER_ENTERING_WORLD' then
+		self:UnregisterEvent(event)
+		if not IsAddOnLoaded('DataStore_Characters') then
+			RequestTimePlayed()
+		end
+	end
+	if event == 'PLAYER_LOGOUT' then
+		RequestTimePlayed()
+	end
+end
+
+local function Reset()
+	ElvDB['sle']['TimePlayed'][MyRealm] = {}
+	ElvDB['sle']['TimePlayed'][MyRealm][MyName] = {}
+	ElvDB['sle']['TimePlayed'][MyRealm][MyName]['Level'] = UnitLevel('player')
+	ElvDB['sle']['TimePlayed'][MyRealm][MyName]['LastLevelTime'] = LastLevelTime
+	ElvDB['sle']['TimePlayed'][MyRealm][MyName]['Class'] = MyClass
+	RequestTimePlayed()
+	print(': Time Played has been reset!')
+end
+
+local OnMouseDown = function(self, button)
+	if button == 'RightButton' then
+		if IsShiftKeyDown()then
+			Reset()
+		end
+	end
+end
+DT:RegisterDatatext('S&L Time Played', {'TIME_PLAYED_MSG', 'PLAYER_LEVEL_UP', 'PLAYER_ENTERING_WORLD' , 'PLAYER_LOGOUT'}, OnEvent, OnUpdate, OnMouseDown, OnEnter, OnLeave)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/range.lua b/ElvUI_SLE/modules/sledatatexts/range.lua
new file mode 100644
index 0000000..bae1d5b
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/range.lua
@@ -0,0 +1,53 @@
+local E, L, V, P, G = unpack(ElvUI)
+local DT = E:GetModule('DataTexts')
+
+local RC = LibStub("LibRangeCheck-2.0")
+local displayString = ''
+local lastPanel
+local int = 1
+local curMin, curMax
+local updateTargetRange = false
+local forceUpdate = false
+
+local function OnUpdate(self, t)
+	if not updateTargetRange then return end
+
+	int = int - t
+	if int > 0 then return end
+	int = .25
+
+	local min, max = RC:GetRange('target')
+	if not forceUpdate and (min == curMin and max == curMax) then return end
+
+	curMin = min
+	curMax = max
+
+	if min and max then
+		self.text:SetFormattedText(displayString, WHC_TITLE_HUNTER_2, min, max)
+	else
+		self.text:SetText(SPELL_FAILED_BAD_IMPLICIT_TARGETS)
+	end
+	forceUpdate = false
+	lastPanel = self
+end
+
+local function OnEvent(self, event)
+	updateTargetRange = UnitName("target") ~= nil
+	int = 0
+	if updateTargetRange then
+		forceUpdate = true
+	else
+		self.text:SetText(SPELL_FAILED_BAD_IMPLICIT_TARGETS)
+	end
+end
+
+local function ValueColorUpdate(hex, r, g, b)
+	displayString = string.join("", "%s: ", hex, "%d|r-", hex, "%d|r")
+
+	if lastPanel ~= nil then
+		OnEvent(lastPanel)
+	end
+end
+E.valueColorUpdateFuncs[ValueColorUpdate] = true
+
+DT:RegisterDatatext('S&L Target Range', {"PLAYER_TARGET_CHANGED"}, OnEvent, OnUpdate)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/regen.lua b/ElvUI_SLE/modules/sledatatexts/regen.lua
new file mode 100644
index 0000000..07da3cc
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/regen.lua
@@ -0,0 +1,28 @@
+local E, L, V, P, G = unpack(ElvUI);
+local DT = E:GetModule('DataTexts')
+
+local displayNumberString = ''
+local lastPanel;
+local join = string.join
+
+local function OnEvent(self, event, unit)
+	local baseMR, castingMR = GetManaRegen()
+	if InCombatLockdown() then
+		self.text:SetFormattedText(displayNumberString, "MP5", castingMR*5)
+	else
+		self.text:SetFormattedText(displayNumberString, "MP5", baseMR*5)
+	end
+
+	lastPanel = self
+end
+
+local function ValueColorUpdate(hex, r, g, b)
+	displayNumberString = join("", "%s: ", hex, "%.2f|r")
+
+	if lastPanel ~= nil then
+		OnEvent(lastPanel)
+	end
+end
+E['valueColorUpdateFuncs'][ValueColorUpdate] = true
+
+DT:RegisterDatatext('MP5', {"UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/spirit.lua b/ElvUI_SLE/modules/sledatatexts/spirit.lua
new file mode 100644
index 0000000..3a4eaf8
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/spirit.lua
@@ -0,0 +1,21 @@
+local E, L, V, P, G = unpack(ElvUI)
+local DT = E:GetModule('DataTexts')
+
+local displayNumberString = ''
+local lastPanel
+
+local function OnEvent(self, event, ...)
+	self.text:SetFormattedText(displayNumberString, SPIRIT_COLON, select(2, UnitStat("player", 5)))
+	lastPanel = self
+end
+
+local function ValueColorUpdate(hex, r, g, b)
+	displayNumberString = strjoin("", "%s ", hex, "%.f|r")
+
+	if lastPanel ~= nil then
+		OnEvent(lastPanel)
+	end
+end
+E['valueColorUpdateFuncs'][ValueColorUpdate] = true
+
+DT:RegisterDatatext('Spirit', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/stamina.lua b/ElvUI_SLE/modules/sledatatexts/stamina.lua
new file mode 100644
index 0000000..c295cc0
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/stamina.lua
@@ -0,0 +1,21 @@
+local E, L, V, P, G = unpack(ElvUI)
+local DT = E:GetModule('DataTexts')
+
+local displayNumberString = ''
+local lastPanel
+
+local function OnEvent(self, event, ...)
+	self.text:SetFormattedText(displayNumberString, STAMINA_COLON, select(2, UnitStat("player", 3)))
+	lastPanel = self
+end
+
+local function ValueColorUpdate(hex, r, g, b)
+	displayNumberString = strjoin("", "%s ", hex, "%.f|r")
+
+	if lastPanel ~= nil then
+		OnEvent(lastPanel)
+	end
+end
+E['valueColorUpdateFuncs'][ValueColorUpdate] = true
+
+DT:RegisterDatatext('Stamina', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/strength.lua b/ElvUI_SLE/modules/sledatatexts/strength.lua
new file mode 100644
index 0000000..d05c3e8
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/strength.lua
@@ -0,0 +1,21 @@
+local E, L, V, P, G = unpack(ElvUI)
+local DT = E:GetModule('DataTexts')
+
+local displayNumberString = ''
+local lastPanel
+
+local function OnEvent(self, event, ...)
+	self.text:SetFormattedText(displayNumberString, STRENGTH_COLON, select(2, UnitStat("player", 1)))
+	lastPanel = self
+end
+
+local function ValueColorUpdate(hex, r, g, b)
+	displayNumberString = strjoin("", "%s ", hex, "%.f|r")
+
+	if lastPanel ~= nil then
+		OnEvent(lastPanel)
+	end
+end
+E['valueColorUpdateFuncs'][ValueColorUpdate] = true
+
+DT:RegisterDatatext('Strength', { "UNIT_STATS", "UNIT_AURA", "FORGE_MASTER_ITEM_CHANGED", "ACTIVE_TALENT_GROUP_CHANGED", "PLAYER_TALENT_UPDATE"}, OnEvent)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/time.lua b/ElvUI_SLE/modules/sledatatexts/time.lua
new file mode 100644
index 0000000..0e5c5e3
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/time.lua
@@ -0,0 +1,214 @@
+local E, L, V, P, G = unpack(ElvUI);
+--Replacement of Elv's time datatext with some additions
+local DT = E:GetModule('DataTexts')
+
+local format = string.format
+local join = string.join
+local floor = math.floor
+local wipe = table.wipe
+
+local APM = { TIMEMANAGER_PM, TIMEMANAGER_AM }
+local europeDisplayFormat = '';
+local ukDisplayFormat = '';
+local europeDisplayFormat_nocolor = join("", "%02d", ":|r%02d")
+local ukDisplayFormat_nocolor = join("", "", "%d", ":|r%02d", " %s|r")
+local timerLongFormat = "%d:%02d:%02d"
+local timerShortFormat = "%d:%02d"
+local lockoutInfoFormat = "%s%s |cffaaaaaa(%s, %s/%s)"
+local lockoutInfoFormatNoEnc = "%s%s |cffaaaaaa(%s)"
+local formatBattleGroundInfo = "%s: "
+local lockoutColorExtended, lockoutColorNormal = { r=0.3,g=1,b=0.3 }, { r=.8,g=.8,b=.8 }
+local lockoutFormatString = { "%dd %02dh %02dm", "%dd %dh %02dm", "%02dh %02dm", "%dh %02dm", "%dh %02dm", "%dm" }
+local curHr, curMin, curAmPm
+local enteredFrame = false;
+
+local level = UnitLevel("player")
+
+local Update, lastPanel; -- UpValue
+local localizedName, isActive, canQueue, startTime, canEnter
+local name, reset, locked, extended, isRaid, maxPlayers, difficulty, numEncounters, encounterProgress
+
+local function ValueColorUpdate(hex, r, g, b)
+	europeDisplayFormat = join("", "%02d", hex, ":|r%02d")
+	ukDisplayFormat = join("", "", "%d", hex, ":|r%02d", hex, " %s|r")
+
+	if lastPanel ~= nil then
+		Update(lastPanel, 20000)
+	end
+end
+E['valueColorUpdateFuncs'][ValueColorUpdate] = true
+
+local function ConvertTime(h, m)
+	local AmPm
+	if E.db.datatexts.time24 == true then
+		return h, m, -1
+	else
+		if h >= 12 then
+			if h > 12 then h = h - 12 end
+			AmPm = 1
+		else
+			if h == 0 then h = 12 end
+			AmPm = 2
+		end
+	end
+	return h, m, AmPm
+end
+
+local function CalculateTimeValues(tooltip)
+	if (tooltip and E.db.datatexts.localtime) or (not tooltip and not E.db.datatexts.localtime) then
+		return ConvertTime(GetGameTime())
+	else
+		local	dateTable =	date("*t")
+		return ConvertTime(dateTable["hour"], dateTable["min"])
+	end
+end
+
+local function CalculateTimeLeft(time)
+	local hour = floor(time / 3600)
+	local min = floor(time / 60 - (hour*60))
+	local sec = time - (hour * 3600) - (min * 60)
+
+	return hour, min, sec
+end
+
+local function Click()
+	GameTimeFrame:Click();
+end
+
+local function OnLeave(self)
+	DT.tooltip:Hide();
+	enteredFrame = false;
+end
+
+local function OnEvent()
+	if event == "UPDATE_INSTANCE_INFO" and enteredFrame then
+		RequestRaidInfo()
+	end
+end
+
+local function OnEnter(self)
+	DT:SetupTooltip(self)
+
+	if(not enteredFrame) then
+		enteredFrame = true;
+		RequestRaidInfo()
+	end
+
+	DT.tooltip:AddLine(VOICE_CHAT_BATTLEGROUND);
+	for i = 1, GetNumWorldPVPAreas() do
+		_, localizedName, isActive, canQueue, startTime, canEnter = GetWorldPVPAreaInfo(i)
+		if canEnter then
+			if isActive then
+				startTime = WINTERGRASP_IN_PROGRESS
+			elseif startTime == nil then
+				startTime = QUEUE_TIME_UNAVAILABLE
+			else
+				startTime = SecondsToTime(startTime, false, nil, 3)
+			end
+			DT.tooltip:AddDoubleLine(format(formatBattleGroundInfo, localizedName), startTime, 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b)
+		end
+	end
+
+	--LFR lockout text
+	if E.db.sle.lfrshow.enabled then
+		DT:LFRShow()
+	end
+
+	local oneraid, lockoutColor
+	for i = 1, GetNumSavedInstances() do
+		name, _, reset, difficultyId, locked, extended, _, isRaid, maxPlayers, difficulty, numEncounters, encounterProgress  = GetSavedInstanceInfo(i)
+		if isRaid and (locked or extended) and name then
+			if not oneraid then
+				DT.tooltip:AddLine(" ")
+				DT.tooltip:AddLine(L["Saved Raid(s)"])
+				oneraid = true
+			end
+			if extended then
+				lockoutColor = lockoutColorExtended
+			else
+				lockoutColor = lockoutColorNormal
+			end
+
+			local _, _, isHeroic, _ = GetDifficultyInfo(difficultyId)
+			if (numEncounters and numEncounters > 0) and (encounterProgress and encounterProgress > 0) then
+				DT.tooltip:AddDoubleLine(format(lockoutInfoFormat, maxPlayers, (isHeroic and "H" or "N"), name, encounterProgress, numEncounters), SecondsToTime(reset, false, nil, 3), 1, 1, 1, lockoutColor.r, lockoutColor.g, lockoutColor.b)
+			else
+				DT.tooltip:AddDoubleLine(format(lockoutInfoFormatNoEnc, maxPlayers, (isHeroic and "H" or "N"), name), SecondsToTime(reset, false, nil, 3), 1, 1, 1, lockoutColor.r, lockoutColor.g, lockoutColor.b)
+			end
+		end
+	end
+
+	local addedLine = false
+	for i = 1, GetNumSavedWorldBosses() do
+		name, instanceID, reset = GetSavedWorldBossInfo(i)
+		if(reset) then
+			if(not addedLine) then
+				DT.tooltip:AddLine(' ')
+				DT.tooltip:AddLine(RAID_INFO_WORLD_BOSS.."(s)")
+				addedLine = true
+			end
+			DT.tooltip:AddDoubleLine(name, SecondsToTime(reset, true, nil, 3), 1, 1, 1, 0.8, 0.8, 0.8)
+		end
+	end
+
+	local LeiShenKey = IsQuestFlaggedCompleted(32626)
+	local Trove = IsQuestFlaggedCompleted(32609)
+
+	if level == 90 and E.db.sle.lfrshow.leishen then
+		DT.tooltip:AddDoubleLine(L["Key to the Palace of Lei Shen:"], LeiShenKey and "\124cffff0000"..L["Looted"].."\124r" or "\124cff00ff00"..L["Not looted"].."\124r", 1, 1, 1, 0.8, 0.8, 0.8)
+		DT.tooltip:AddDoubleLine(L["Trove of the Thunder King:"], Trove and "\124cffff0000"..L["Looted"].."\124r" or "\124cff00ff00"..L["Not looted"].."\124r", 1, 1, 1, 0.8, 0.8, 0.8)
+	end
+
+	local timeText
+	local Hr, Min, AmPm = CalculateTimeValues(true)
+
+	DT.tooltip:AddLine(" ")
+	if AmPm == -1 then
+		DT.tooltip:AddDoubleLine(E.db.datatexts.localtime and TIMEMANAGER_TOOLTIP_REALMTIME or TIMEMANAGER_TOOLTIP_LOCALTIME,
+			format(europeDisplayFormat_nocolor, Hr, Min), 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b)
+	else
+		DT.tooltip:AddDoubleLine(E.db.datatexts.localtime and TIMEMANAGER_TOOLTIP_REALMTIME or TIMEMANAGER_TOOLTIP_LOCALTIME,
+			format(ukDisplayFormat_nocolor, Hr, Min, APM[AmPm]), 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b)
+	end
+
+	DT.tooltip:Show()
+end
+
+local int = 3
+function Update(self, t)
+	int = int - t
+
+	if int > 0 then return end
+
+	if GameTimeFrame.flashInvite then
+		E:Flash(self, 0.53)
+	else
+		E:StopFlash(self)
+	end
+
+	if enteredFrame then
+		OnEnter(self)
+	end
+
+	local Hr, Min, AmPm = CalculateTimeValues(false)
+
+	-- no update quick exit
+	if (Hr == curHr and Min == curMin and AmPm == curAmPm) and not (int < -15000) then
+		int = 5
+		return
+	end
+
+	curHr = Hr
+	curMin = Min
+	curAmPm = AmPm
+
+	if AmPm == -1 then
+		self.text:SetFormattedText(europeDisplayFormat, Hr, Min)
+	else
+		self.text:SetFormattedText(ukDisplayFormat, Hr, Min, APM[AmPm])
+	end
+	lastPanel = self
+	int = 5
+end
+
+DT:RegisterDatatext('Time', {"UPDATE_INSTANCE_INFO"}, OnEvent, Update, Click, OnEnter, OnLeave)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/sledatatexts/version.lua b/ElvUI_SLE/modules/sledatatexts/version.lua
new file mode 100644
index 0000000..afb3f67
--- /dev/null
+++ b/ElvUI_SLE/modules/sledatatexts/version.lua
@@ -0,0 +1,45 @@
+local E, L, V, P, G = unpack(ElvUI);
+--Version datatext. Only in Russian for now.
+local DT = E:GetModule('DataTexts')
+local SLE = E:GetModule('SLE')
+local ACD = LibStub("AceConfigDialog-3.0")
+
+local displayString = '';
+local lastPanel;
+local self = lastPanel
+local join = string.join
+local AddLine = AddLine
+local AddDoubleLine =AddDoubleLine
+local Eversion = E.version
+local format = format
+
+local function OnEvent(self, event, ...)
+	self.text:SetFormattedText(displayString, 'ElvUI v', Eversion, SLE.version);
+end
+
+local function Click()
+	ElvConfigToggle:Click();
+	ACD:SelectGroup("ElvUI", "sle")
+end
+
+local function OnEnter(self)
+	DT:SetupTooltip(self)
+
+	DT.tooltip:AddDoubleLine("ElvUI "..GAME_VERSION_LABEL..format(": |cff99ff33%s|r", Eversion))
+	DT.tooltip:AddLine(L["SLE_AUTHOR_INFO"]..". "..GAME_VERSION_LABEL..format(": |cff99ff33%s|r", SLE.version))
+	DT.tooltip:AddLine(" ")
+	DT.tooltip:AddLine(L['SLE_CONTACTS'])
+
+	DT.tooltip:Show()
+end
+
+local function ValueColorUpdate(hex, r, g, b)
+	displayString = join("", "%s", hex, "%s|r", " : Shadow & Light v", hex, "%s|r")
+
+	if lastPanel ~= nil then
+		OnEvent(lastPanel)
+	end
+end
+E['valueColorUpdateFuncs'][ValueColorUpdate] = true
+
+DT:RegisterDatatext("Version", {'PLAYER_ENTERING_WORLD'}, OnEvent, Update, Click, OnEnter)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/threat.lua b/ElvUI_SLE/modules/threat.lua
new file mode 100644
index 0000000..abf952b
--- /dev/null
+++ b/ElvUI_SLE/modules/threat.lua
@@ -0,0 +1,35 @@
+local E, L, V, P, G = unpack(ElvUI);
+local SLT = E:GetModule('SLE_Threat');
+local T = E:GetModule('Threat');
+
+function SLT:UpdatePosition()
+	if not E.db.general.threat.enable or not E.db.sle.threat.enable then return end
+
+	T.bar:SetInside(E.db.sle.threat.position)
+	T.bar:SetParent(E.db.sle.threat.position)
+
+	T.bar.text:FontTemplate(nil, E.db.general.threat.textSize)
+	T.bar:SetFrameStrata('MEDIUM')
+	T.bar:SetAlpha(1)
+end
+
+local function LoadConfig(event, addon)
+	if addon ~= "ElvUI_Config" then return end
+
+	SLT:Update()
+	SLT:UnregisterEvent("ADDON_LOADED")
+end
+
+function SLT:Update()
+	if E.db.sle.threat.enable then
+		E.Options.args.general.args.threat.args.position.disabled = function() return true end
+	else
+		E.Options.args.general.args.threat.args.position.disabled = function() return false end
+	end
+end
+
+function SLT:Initialize()
+	hooksecurefunc(T, 'UpdatePosition', SLT.UpdatePosition)
+	SLT:RegisterEvent("ADDON_LOADED", LoadConfig)
+	SLT:UpdatePosition()
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/tooltip.lua b/ElvUI_SLE/modules/tooltip.lua
new file mode 100644
index 0000000..1497aa7
--- /dev/null
+++ b/ElvUI_SLE/modules/tooltip.lua
@@ -0,0 +1,62 @@
+local E, L, V, P, G = unpack(ElvUI);
+local TT = E:GetModule('Tooltip');
+
+--Defaults (Need to be moved.)
+P['tooltip']['overrideCombat'] = false
+
+local iconPath = [[Interface\AddOns\ElvUI_SLE\media\textures\]]
+
+local function AnchorFrameToMouse()
+	if not E.db.tooltip.cursorAnchor or (E.db.sle.tooltip.xOffset == 0 and E.db.sle.tooltip.yOffset == 0) then return end
+
+	local frame = GameTooltip
+	if frame:GetAnchorType() ~= "ANCHOR_CURSOR" then return end
+
+	local x, y = GetCursorPosition();
+	local scale = frame:GetEffectiveScale();
+	local tipWidth = frame:GetWidth();
+
+	frame:ClearAllPoints();
+	--frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", (x/scale + (E.db.tooltip.mouseOffsetX - tipWidth/2)), (y/scale + E.db.tooltip.mouseOffsetY));
+	frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", (x/scale + (E.db.sle.tooltip.xOffset - tipWidth/2)), (y/scale + E.db.sle.tooltip.yOffset));
+end
+
+local function SetDefaultAnchor(self, tt, parent)
+	if (tt:GetAnchorType() ~= "ANCHOR_CURSOR") then
+		return
+	end
+	if InCombatLockdown() and self.db.visibility.combat then
+		tt:Hide()
+		return
+	end
+	if (parent) then
+		if(self.db.cursorAnchor) then
+			AnchorFrameToMouse(tt);
+			return
+		end
+	end
+end
+
+local function OnTooltipSetUnit(self, tt)
+	if not E.db.sle.tooltip.showFaction then return end
+
+	local unit = select(2, tt:GetUnit())
+	if (UnitIsPlayer(unit)) then
+		local text = GameTooltipTextLeft1:GetText()
+		local faction = UnitFactionGroup(unit)
+
+		if not faction then faction = "Neutral" end
+
+		GameTooltipTextLeft1:SetText("|T"..iconPath..faction..".blp:15:15:0:0:64:64:2:56:2:56|t "..text)
+	end
+end
+
+local function Init()
+	if not E.private.tooltip.enable then return end
+	hooksecurefunc(TT, "GameTooltip_OnTooltipSetUnit", OnTooltipSetUnit)
+
+	--if not E.db.tooltip.cursorAnchor then return end
+	hooksecurefunc(TT, "CheckBackdropColor", AnchorFrameToMouse)
+	--hooksecurefunc(TT, "GameTooltip_SetDefaultAnchor", SetDefaultAnchor)
+end
+hooksecurefunc(TT, "Initialize", Init)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/tooltip/load_tooltip.xml b/ElvUI_SLE/modules/tooltip/load_tooltip.xml
deleted file mode 100644
index 63a0632..0000000
--- a/ElvUI_SLE/modules/tooltip/load_tooltip.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='tooltip.lua'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/tooltip/options.lua b/ElvUI_SLE/modules/tooltip/options.lua
deleted file mode 100644
index 7c86230..0000000
--- a/ElvUI_SLE/modules/tooltip/options.lua
+++ /dev/null
@@ -1,67 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI);
-
-local function configTable()
-	--if not E.Options.args.sle.args.tooltip then E.Options.args.sle.args.tooltip = {} end
-	E.Options.args.sle.args.options.args.general.args.tooltip = {
-		order = 95,
-		type = "group",
-		get = function(info) return E.db.tooltip[ info[#info] ] end,
-		name = L["Tooltip"],
-		args = {
-			header = {
-				order = 1,
-				type = "header",
-				name = L["Tooltip"],
-			},
-			intro = {
-				order = 2,
-				type = 'description',
-				name = L["Tooltip enhancements"],
-			},
-			tooltipicon = {
-				order = 3,
-				type = 'toggle',
-				name = L["Faction Icon"],
-				desc = L["Show faction icon to the left of player's name on tooltip."],
-				get = function(info) return E.db.sle.tooltipicon end,
-				set = function(info, value) E.db.sle.tooltipicon = value end,
-			},
-			offset = {
-				type = "group",
-				name = L["Tooltip Cursor Offset"],
-				order = 4,
-				guiInline = true,
-				disabled = function() return not E.private.tooltip.enable or (not E.db.tooltip.cursorAnchor and E.private.tooltip.enable) end,
-				args = {
-					mouseOffsetX = {
-						order = 31,
-						type = 'range',
-						name = L["Tooltip X-offset"],
-						desc = L["Offset the tooltip on the X-axis."],
-						min = -200, max = 200, step = 1,
-						set = function(info, value) E.db.tooltip[ info[#info] ] = value end,
-					},
-					mouseOffsetY = {
-						order = 32,
-						type = 'range',
-						name = L["Tooltip Y-offset"],
-						desc = L["Offset the tooltip on the Y-axis."],
-						min = -200, max = 200, step = 1,
-						set = function(info, value) E.db.tooltip[ info[#info] ] = value end,
-					},
-					--overrideCombat = {
-						--order = 33,
-						--type = 'toggle',
-						--name = 'Override Combat Hide',
-						--desc = 'When enabled, Combat Hide will get overridden when Shift is pressed. Note: You have to mouseover the unit again for the tooltip to show.',
-						--set = function(info, value)
-						--E.db.tooltip[ info[#info] ] = value
-						--end,
-					--},
-				},
-			},
-		},
-	}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/tooltip/tooltip.lua b/ElvUI_SLE/modules/tooltip/tooltip.lua
deleted file mode 100644
index 81a0edf..0000000
--- a/ElvUI_SLE/modules/tooltip/tooltip.lua
+++ /dev/null
@@ -1,67 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
-local TT = E:GetModule('Tooltip');
-
---Defaults (Need to be moved.)
-P['tooltip']['mouseOffsetX'] = 0
-P['tooltip']['mouseOffsetY'] = 0
-P['tooltip']['overrideCombat'] = false
-
-local iconPath = [[Interface\AddOns\ElvUI_SLE\media\textures\]]
-
-TT.GameTooltip_SetDefaultAnchorSLE = TT.GameTooltip_SetDefaultAnchor
-function TT:GameTooltip_SetDefaultAnchor(tt, parent)
-	TT:GameTooltip_SetDefaultAnchorSLE(tt, parent)
-	if E.private["tooltip"].enable ~= true then return end
-	if(tt:GetAnchorType() ~= "ANCHOR_CURSOR") then return end
-	if InCombatLockdown() and self.db.visibility.combat then
-		tt:Hide()
-		return
-	end
-	if(parent) then
-		if(self.db.cursorAnchor) then
-			TT:AnchorFrameToMouse(tt);
-			return
-		end
-	end
-end
-
-function TT:AnchorFrameToMouse(frame)
-	if frame:GetAnchorType() ~= "ANCHOR_CURSOR" then return end
-	--if (E.db.tooltip.onlyMod and not (IsShiftKeyDown() or IsControlKeyDown() or IsAltKeyDown())) then return end
-	local x, y = GetCursorPosition();
-	local scale = frame:GetEffectiveScale();
-	local tipWidth = frame:GetWidth();
-	frame:ClearAllPoints();
-	frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", (x/scale + (E.db.tooltip.mouseOffsetX - tipWidth/2)), (y/scale + E.db.tooltip.mouseOffsetY));
-end
-
-
-
-TT.GameTooltip_OnTooltipSetUnitSLE = TT.GameTooltip_OnTooltipSetUnit
-function TT:GameTooltip_OnTooltipSetUnit(tt)
-	TT:GameTooltip_OnTooltipSetUnitSLE(tt)
-	if not E.db.sle.tooltipicon then return end
-	local unit = select(2, tt:GetUnit())
-	if(UnitIsPlayer(unit)) then
-		local text = GameTooltipTextLeft1:GetText()
-		local faction = UnitFactionGroup(unit)
-		if not faction then faction = "Neutral" end
-		GameTooltipTextLeft1:SetText("|T"..iconPath..faction..".blp:15:15:0:0:64:64:2:56:2:56|t "..text)
-	end
-end
-
-function TT:AddonName_OnUpdate(self, elapsed)
-  TT:AnchorFrameToMouse(self);
-end
-
---function TT:MODIFIER_STATE_CHANGED(event, key)
-	--if InCombatLockdown() and E.db.tooltip.combathide and not (E.db.tooltip.overrideCombat and IsShiftKeyDown()) then
-	--		GameTooltip:Hide()
-	--end
---end
-
-TT.InitializeSLE = TT.Initialize
-function TT:Initialize()
-	TT:InitializeSLE()
-	self:HookScript(GameTooltip, "OnUpdate", "AddonName_OnUpdate");
-end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/uibuttons.lua b/ElvUI_SLE/modules/uibuttons.lua
new file mode 100644
index 0000000..56cfdfd
--- /dev/null
+++ b/ElvUI_SLE/modules/uibuttons.lua
@@ -0,0 +1,179 @@
+local E, L, V, P, G = unpack(ElvUI);
+local UB = E:GetModule('SLE_UIButtons');
+local Btemplate = "SecureActionButtonTemplate"
+local NumBut = 5
+
+local UIBFrame = CreateFrame('Frame', "UIBFrame", E.UIParent);
+local Cbutton = CreateFrame("Button", "ConfigUIButton", UIBFrame, Btemplate)
+local Rbutton = CreateFrame("Button", "ReloadUIButton", UIBFrame, Btemplate)
+local Mbutton = CreateFrame("Button", "MoveUIButton", UIBFrame, Btemplate)
+local Bbutton = CreateFrame("Button", "Bbutton", UIBFrame, Btemplate)
+local Abutton = CreateFrame("Button", "Abutton", UIBFrame, Btemplate)
+
+if IsAddOnLoaded("iFilger_ConfigUI") then
+	local Fbutton = CreateFrame("Button", "Fbutton", UIBFrame, Btemplate)
+	NumBut = 6
+end
+
+local ButtonTable = {
+	Cbutton,
+	Rbutton,
+	Mbutton,
+	Bbutton,
+	Abutton,
+}
+
+local function Mouseover()
+	local self = UIBFrame
+	if E.db.sle.uibuttons.mouse then
+		if (MouseIsOver(self)) then
+			UIFrameFadeIn(self, 0.2, self:GetAlpha(), 1)
+		else
+			UIFrameFadeOut(self, 0.2, self:GetAlpha(), 0)
+		end
+	else
+		UIBFrame:SetAlpha(1)
+	end
+end
+
+local function CreateHolder()
+	UIBFrame:SetFrameLevel(5);
+	UIBFrame:SetFrameStrata('BACKGROUND');
+	UIBFrame:Point("LEFT", E.UIParent, "LEFT", -2, 0);
+
+	UIBFrame:SetScript("OnUpdate", function(self,event,...)
+		Mouseover()
+	end)
+end
+
+local function CreateB(button, symbol, text, name, desc)
+	button:CreateBackdrop()
+	local button_text = button:CreateFontString(nil, 'OVERLAY')
+	button_text:SetFont(E["media"].normFont, 10)
+	button_text:SetText(symbol)
+	button_text:SetPoint("CENTER", button, "CENTER")
+	button:SetAttribute("type1", "macro")
+	if button == Bbutton then
+		if IsAddOnLoaded("DXE_Loader") then
+			button:SetAttribute("macrotext1", "/dxe config")
+		elseif IsAddOnLoaded("Bigwigs") then
+			button:SetAttribute("macrotext1", "/bigwigs")
+		elseif IsAddOnLoaded("DBM-Core") then
+			button:SetAttribute("macrotext1", "/dbm options")
+		elseif IsAddOnLoaded("VEM-Core") then
+			button:SetAttribute("macrotext1", "/vem")
+		end
+	elseif button == Abutton then
+		if IsAddOnLoaded("ACP") then
+			button:SetAttribute("macrotext1", "/acp")
+		elseif IsAddOnLoaded("Ampere") then
+			button:SetAttribute("macrotext1", "/ampere")
+		else
+			button:SetAttribute("macrotext1", "/stam")
+		end
+	else
+		button:SetAttribute("macrotext1", text)
+	end
+
+	button:SetScript("OnEnter", function(self)
+		GameTooltip:SetOwner(self, "ANCHOR_TOP", 30,0)
+		GameTooltip:AddLine(name, .6, .6, .6, .6, .6, 1)
+		GameTooltip:AddLine(desc, 1, 1, 1, 1, 1, 1)
+		GameTooltip:Show()
+	end)
+
+	button:SetScript("OnLeave", function(self)
+		GameTooltip:Hide()
+	end)
+end
+
+local function CreateButtons()
+	CreateB(Cbutton, "C", "/ec", L["ElvUI Config"], L["Click to toggle config window"]) --Config
+	CreateB(Rbutton, "R", "/rl", L["Reload UI"], L["Click to reload your interface"]) --Reload
+	CreateB(Mbutton, "M", "/moveui", L["Move UI"], L["Click to unlock moving ElvUI elements"]) --Move UI
+	CreateB(Bbutton, "B", nil, L["Boss Mod"], L["Click to toggle the Configuration/Option Window from the Bossmod (DXE, DBM or Bigwigs) you have enabled."])--Boss Mod
+	CreateB(Abutton, "A", nil, L["AddOns Manager"], L["Click to toggle the AddOn Manager frame (stAddOnManager, Ampere or ACP) you have enabled."])--Addon Manager
+	if Fbutton then
+		CreateB(Fbutton, "F", "/ifilger", "iFilger", L["Click to toggle iFilger's config UI"])
+	end
+end
+
+local function Positioning()
+	local db = E.db.sle.uibuttons
+	for i = 1, 5 do
+		ButtonTable[i]:ClearAllPoints()
+	end
+	if Fbutton then
+		Fbutton:ClearAllPoints()
+	end
+	--position check
+	if db.position == "uib_vert" then
+		Cbutton:Point("TOP", UIBFrame, "TOP", 0, (E.PixelMode and -1 or -2))
+		Rbutton:Point("TOP", Cbutton, "BOTTOM", 0, (E.PixelMode and -db.spacing or -(db.spacing+2)))
+		Mbutton:Point("TOP", Rbutton, "BOTTOM", 0, (E.PixelMode and -db.spacing or -(db.spacing+2)))
+		Bbutton:Point("TOP", Mbutton, "BOTTOM", 0, (E.PixelMode and -db.spacing or -(db.spacing+2)))
+		Abutton:Point("TOP", Bbutton, "BOTTOM", 0, (E.PixelMode and -db.spacing or -(db.spacing+2)))
+		if Fbutton then
+			Fbutton:Point("TOP", Abutton, "BOTTOM", 0, (E.PixelMode and -db.spacing or -(db.spacing+2)))
+		end
+	else
+		Cbutton:Point("LEFT", UIBFrame, "LEFT", (E.PixelMode and 1 or 2), 0)
+		Rbutton:Point("LEFT", Cbutton, "RIGHT", (E.PixelMode and db.spacing or db.spacing+2), 0)
+		Mbutton:Point("LEFT", Rbutton, "RIGHT", (E.PixelMode and db.spacing or db.spacing+2), 0)
+		Bbutton:Point("LEFT", Mbutton, "RIGHT", (E.PixelMode and db.spacing or db.spacing+2), 0)
+		Abutton:Point("LEFT", Bbutton, "RIGHT", (E.PixelMode and db.spacing or db.spacing+2), 0)
+		if Fbutton then
+			Fbutton:Point("LEFT", Abutton, "RIGHT", (E.PixelMode and db.spacing or db.spacing+2), 0)
+		end
+	end
+end
+
+local function MoverSize()
+	local db = E.db.sle.uibuttons
+	if db.position == "uib_vert" then
+		UIBFrame:SetWidth(db.size + (E.PixelMode and 2 or 4))
+		UIBFrame:SetHeight((db.size*NumBut)+((E.PixelMode and db.spacing or db.spacing+2)*(NumBut-1))+2)
+	else
+		UIBFrame:SetWidth((db.size*NumBut)+((E.PixelMode and db.spacing or db.spacing+2)*(NumBut-1))+2)
+		UIBFrame:SetHeight(db.size + (E.PixelMode and 2 or 4))
+	end
+end
+
+local function FrameSize()
+	local db = E.db.sle.uibuttons
+	MoverSize()
+
+	for i = 1, 5 do
+		ButtonTable[i]:Size(db.size)
+	end
+	if Fbutton then
+		Fbutton:Size(db.size)
+	end
+
+	Positioning()
+end
+
+function UB:Start()
+	if E.db.sle.uibuttons.enable then
+		UIBFrame:Show()
+	else
+		UIBFrame:Hide()
+	end
+end
+
+function UB:UpdateAll()
+	FrameSize()
+	UB:Start()
+end
+
+function UB:Initialize()
+	CreateHolder()
+	FrameSize()
+	CreateButtons()
+	UB:Start()
+
+	E.FrameLocks['UIBFrame'] = true
+
+	E:CreateMover(UIBFrame, "UIBFrameMover", L["UI Buttons"], nil, nil, nil, "ALL,S&L,S&L MISC")
+	MoverSize()
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/uibuttons/load_uibuttons.xml b/ElvUI_SLE/modules/uibuttons/load_uibuttons.xml
deleted file mode 100755
index ea8e43e..0000000
--- a/ElvUI_SLE/modules/uibuttons/load_uibuttons.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='uibuttons.lua'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/uibuttons/options.lua b/ElvUI_SLE/modules/uibuttons/options.lua
deleted file mode 100755
index 382173e..0000000
--- a/ElvUI_SLE/modules/uibuttons/options.lua
+++ /dev/null
@@ -1,85 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local UB = E:GetModule('UIButtons')
-local function configTable()
-
---UI Buttons
-E.Options.args.sle.args.options.args.general.args.uibuttons = {
-	type = "group",
-	name = L["UI Buttons"],
-	order = 99,
-	args = {
-		header = {
-			order = 1,
-			type = "header",
-			name = L["UI Buttons"],
-		},
-		intro = {
-			order = 2,
-			type = "description",
-			name = L["Additional menu with useful buttons"],
-		},
-		enabled = {
-			order = 3,
-			type = "toggle",
-			name = L["Enable"],
-			desc = L["Show/Hide UI buttons."],
-			get = function(info) return E.db.sle.uibuttons.enable end,
-			set = function(info, value) E.db.sle.uibuttons.enable = value; UB:Start() end
-		},
-		space1 = {
-			order = 4,
-			type = 'description',
-			name = "",
-		},
-		space2 = {
-			order = 5,
-			type = 'description',
-			name = "",
-		},
-		size = {
-			order = 6,
-			type = "range",
-			name = L['Size'],
-			desc = L["Sets size of buttons"],
-			min = 12, max = 25, step = 1,
-			disabled = function() return not E.db.sle.uibuttons.enable end,
-			get = function(info) return E.db.sle.uibuttons.size end,
-			set = function(info, value) E.db.sle.uibuttons.size = value; UB:FrameSize() end,
-		},
-		spacing = {
-			order = 7,
-			type = "range",
-			name = L['Button Spacing'],
-			desc = L['The spacing between buttons.'],
-			min = 1, max = 10, step = 1,
-			disabled = function() return not E.db.sle.uibuttons.enable end,
-			get = function(info) return E.db.sle.uibuttons.spacing end,
-			set = function(info, value) E.db.sle.uibuttons.spacing = value; UB:Positioning(); UB:FrameSize(); UB:MoverSize() end,
-		},
-		mouse = {
-			order = 8,
-			type = "toggle",
-			name = L["Mouse over"],
-			desc = L["Show on mouse over."],
-			disabled = function() return not E.db.sle.uibuttons.enable end,
-			get = function(info) return E.db.sle.uibuttons.mouse end,
-			set = function(info, value) E.db.sle.uibuttons.mouse = value; end
-		},
-		position = {
-			order = 10,
-			name = L["Buttons position"],
-			desc = L["Layout for UI buttons."],
-			type = "select",
-			values = {
-				["uib_hor"] = L['Horizontal'],
-				["uib_vert"] = L['Vertical'],
-			},
-			disabled = function() return not E.db.sle.uibuttons.enable end,
-			get = function(info) return E.db.sle.uibuttons.position end,
-			set = function(info, value) E.db.sle.uibuttons.position = value; UB:Positioning(); UB:MoverSize() end,
-		},
-	},
-}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/uibuttons/uibuttons.lua b/ElvUI_SLE/modules/uibuttons/uibuttons.lua
deleted file mode 100755
index b49c7ff..0000000
--- a/ElvUI_SLE/modules/uibuttons/uibuttons.lua
+++ /dev/null
@@ -1,179 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local UB = E:NewModule('UIButtons', 'AceHook-3.0', 'AceEvent-3.0');
-local Btemplate = "SecureActionButtonTemplate"
-local NumBut = 5
-
-local UIBFrame = CreateFrame('Frame', "UIBFrame", E.UIParent);
-local Cbutton = CreateFrame("Button", "ConfigUIButton", UIBFrame, Btemplate)
-local Rbutton = CreateFrame("Button", "ReloadUIButton", UIBFrame, Btemplate)
-local Mbutton = CreateFrame("Button", "MoveUIButton", UIBFrame, Btemplate)
-local Bbutton = CreateFrame("Button", "Bbutton", UIBFrame, Btemplate)
-local Abutton = CreateFrame("Button", "Abutton", UIBFrame, Btemplate)
-if IsAddOnLoaded("iFilger_ConfigUI") then
-	local Fbutton = CreateFrame("Button", "Fbutton", UIBFrame, Btemplate)
-	NumBut = 6
-end
-
-local ButtonTable = {
-Cbutton,
-Rbutton,
-Mbutton,
-Bbutton,
-Abutton,
-}
-
-function UB:CreateFrame()
-	UIBFrame:SetFrameLevel(5);
-	UIBFrame:SetFrameStrata('BACKGROUND');
-	UIBFrame:Point("LEFT", E.UIParent, "LEFT", -2, 0);
-
-	UIBFrame:SetScript("OnUpdate", function(self,event,...)
-		UB:Mouseover()
-	end)
-end
-
-function UB:Create(button, symbol, text, name, desc)
-	button:CreateBackdrop()
-	local button_text = button:CreateFontString(nil, 'OVERLAY')
-	button_text:SetFont(E["media"].normFont, 10)
-	button_text:SetText(symbol)
-	button_text:SetPoint("CENTER", button, "CENTER")
-	button:SetAttribute("type1", "macro")
-	if button == Bbutton then
-		if IsAddOnLoaded("DXE_Loader") then
-			button:SetAttribute("macrotext1", "/dxe config")
-		elseif IsAddOnLoaded("Bigwigs") then
-			button:SetAttribute("macrotext1", "/bigwigs")
-		elseif IsAddOnLoaded("DBM-Core") then
-			button:SetAttribute("macrotext1", "/dbm options")
-		elseif IsAddOnLoaded("VEM-Core") then
-			button:SetAttribute("macrotext1", "/vem")
-		end
-	elseif button == Abutton then
-		if IsAddOnLoaded("ACP") then
-			button:SetAttribute("macrotext1", "/acp")
-		elseif IsAddOnLoaded("Ampere") then
-			button:SetAttribute("macrotext1", "/ampere")
-		else
-			button:SetAttribute("macrotext1", "/stam")
-		end
-	else
-		button:SetAttribute("macrotext1", text)
-	end
-
-	button:SetScript("OnEnter", function(self)
-		GameTooltip:SetOwner(self, "ANCHOR_TOP", 30,0)
-		GameTooltip:AddLine(name, .6, .6, .6, .6, .6, 1)
-		GameTooltip:AddLine(desc, 1, 1, 1, 1, 1, 1)
-		GameTooltip:Show()
-	end)
-
-	button:SetScript("OnLeave", function(self)
-		GameTooltip:Hide()
-	end)
-end
-
-function UB:CreateButtons()
-	UB:Create(Cbutton, "C", "/ec", L["ElvUI Config"], L["Click to toggle config window"]) --Config
-	UB:Create(Rbutton, "R", "/rl", L["Reload UI"], L["Click to reload your interface"]) --Reload
-	UB:Create(Mbutton, "M", "/moveui", L["Move UI"], L["Click to unlock moving ElvUI elements"]) --Move UI
-	UB:Create(Bbutton, "B", nil, L["Boss Mod"], L["Click to toggle the Configuration/Option Window from the Bossmod (DXE, DBM or Bigwigs) you have enabled."])--Boss Mod
-	UB:Create(Abutton, "A", nil, L["AddOns Manager"], L["Click to toggle the AddOn Manager frame (stAddOnManager, Ampere or ACP) you have enabled."])--Addon Manager
-	if Fbutton then
-		UB:Create(Fbutton, "F", "/ifilger", "iFilger", L["Click to toggle iFilger's config UI"])
-	end
-end
-
-function UB:FrameSize()
-	local db = E.db.sle.uibuttons
-	UB:MoverSize()
-
-	for i = 1, 5 do
-		ButtonTable[i]:Size(db.size)
-	end
-	if Fbutton then
-		Fbutton:Size(db.size)
-	end
-
-	UB:Positioning()
-end
-
-function UB:Positioning()
-	local db = E.db.sle.uibuttons
-	for i = 1, 5 do
-		ButtonTable[i]:ClearAllPoints()
-	end
-	if Fbutton then
-		Fbutton:ClearAllPoints()
-	end
-	--position check
-	if db.position == "uib_vert" then
-		Cbutton:Point("TOP", UIBFrame, "TOP", 0, (E.PixelMode and -1 or -2))
-		Rbutton:Point("TOP", Cbutton, "BOTTOM", 0, (E.PixelMode and -db.spacing or -(db.spacing+2)))
-		Mbutton:Point("TOP", Rbutton, "BOTTOM", 0, (E.PixelMode and -db.spacing or -(db.spacing+2)))
-		Bbutton:Point("TOP", Mbutton, "BOTTOM", 0, (E.PixelMode and -db.spacing or -(db.spacing+2)))
-		Abutton:Point("TOP", Bbutton, "BOTTOM", 0, (E.PixelMode and -db.spacing or -(db.spacing+2)))
-		if Fbutton then
-			Fbutton:Point("TOP", Abutton, "BOTTOM", 0, (E.PixelMode and -db.spacing or -(db.spacing+2)))
-		end
-	else
-		Cbutton:Point("LEFT", UIBFrame, "LEFT", (E.PixelMode and 1 or 2), 0)
-		Rbutton:Point("LEFT", Cbutton, "RIGHT", (E.PixelMode and db.spacing or db.spacing+2), 0)
-		Mbutton:Point("LEFT", Rbutton, "RIGHT", (E.PixelMode and db.spacing or db.spacing+2), 0)
-		Bbutton:Point("LEFT", Mbutton, "RIGHT", (E.PixelMode and db.spacing or db.spacing+2), 0)
-		Abutton:Point("LEFT", Bbutton, "RIGHT", (E.PixelMode and db.spacing or db.spacing+2), 0)
-		if Fbutton then
-			Fbutton:Point("LEFT", Abutton, "RIGHT", (E.PixelMode and db.spacing or db.spacing+2), 0)
-		end
-	end
-end
-
-function UB:MoverSize()
-	local db = E.db.sle.uibuttons
-	if db.position == "uib_vert" then
-		UIBFrame:SetWidth(db.size + (E.PixelMode and 2 or 4))
-		UIBFrame:SetHeight((db.size*NumBut)+((E.PixelMode and db.spacing or db.spacing+2)*(NumBut-1))+2)
-	else
-		UIBFrame:SetWidth((db.size*NumBut)+((E.PixelMode and db.spacing or db.spacing+2)*(NumBut-1))+2)
-		UIBFrame:SetHeight(db.size + (E.PixelMode and 2 or 4))
-	end
-end
-
-function UB:Start()
-	if E.db.sle.uibuttons.enable then
-		UIBFrame:Show()
-	else
-		UIBFrame:Hide()
-	end
-end
-
-function UB:Mouseover()
-	if E.db.sle.uibuttons.mouse then
-		if (MouseIsOver(UIBFrame)) then
-			UIBFrame:SetAlpha(1)
-		else
-			UIBFrame:SetAlpha(0)
-		end
-	else
-		UIBFrame:SetAlpha(1)
-	end
-end
-
-function UB:UpdateAll()
-	UB:FrameSize()
-	UB:Start()
-end
-
-function UB:Initialize()
-	UB:CreateFrame()
-	UB:FrameSize()
-	UB:CreateButtons()
-	UB:Start()
-
-	E.FrameLocks['UIBFrame'] = true
-
-	E:CreateMover(UIBFrame, "UIBFrameMover", L["UI Buttons"], nil, nil, nil, "ALL,S&L,S&L MISC")
-	UB:MoverSize()
-end
-
-E:RegisterModule(UB:GetName())
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/unitframes.lua b/ElvUI_SLE/modules/unitframes.lua
new file mode 100644
index 0000000..7a59554
--- /dev/null
+++ b/ElvUI_SLE/modules/unitframes.lua
@@ -0,0 +1,286 @@
+local E, L, V, P, G = unpack(ElvUI);
+if not E.private.unitframe.enable then return end
+local UF = E:GetModule('UnitFrames');
+local SLE = E:GetModule('SLE');
+local RC = LibStub("LibRangeCheck-2.0")
+local format = format
+
+--Replacement of text formats on unitframes.
+local styles = {
+	['CURRENT'] = '%s',
+	['CURRENT_MAX'] = '%s - %s',
+	['CURRENT_PERCENT'] =  '%s - %s%%',
+	['CURRENT_MAX_PERCENT'] = '%s - %s | %s%%',
+	['DEFICIT'] = '-%s'
+}
+
+local function GetFormattedTextSLE(style, min, max)
+	assert(styles[style], 'Invalid format style: '..style)
+	assert(min, 'You need to provide a current value. Usage: E:GetFormattedText(style, min, max)')
+	assert(max, 'You need to provide a maximum value. Usage: E:GetFormattedText(style, min, max)')
+
+	if max == 0 then max = 1 end
+
+	local useStyle = styles[style]
+
+	if style == 'DEFICIT' then
+		local deficit = max - min
+		if deficit <= 0 then
+			return ''
+		else
+			return format(useStyle, deficit)
+		end
+	elseif style == 'CURRENT' or ((style == 'CURRENT_MAX' or style == 'CURRENT_MAX_PERCENT' or style == 'CURRENT_PERCENT') and min == max) then
+			return format(styles['CURRENT'], min)
+	elseif style == 'CURRENT_MAX' then
+			return format(useStyle, min, max)
+	elseif style == 'CURRENT_PERCENT' then
+			return format(useStyle, min, format("%.1f", min / max * 100))
+	elseif style == 'CURRENT_MAX_PERCENT' then
+			return format(useStyle, min, max, format("%.1f", min / max * 100))
+	end
+end
+
+--New Tags
+local function AddTags()
+
+	ElvUF.Tags.Events['vengeance:current:sl'] = 'UNIT_AURA'
+	ElvUF.Tags.Methods['vengeance:current:sl'] = function(unit)
+		local SPELL_VENGEANCE_NAME = (GetSpellInfo(93098))
+		local veng = select(15, UnitAura(unit, SPELL_VENGEANCE_NAME, nil, 'HELPFUL')) or 0
+		if (veng > 999999) then
+			veng = math.floor(veng/1000000) .. "m"
+		elseif (veng > 999) then
+			veng = math.floor(veng/1000) .. "k"
+		end
+		if veng == 0 then
+			return ' '
+		else
+			return veng
+		end
+	end
+
+	ElvUF.Tags.Events['resolve:current-percent:sl'] = 'UNIT_AURA'
+	ElvUF.Tags.Methods['resolve:current-percent:sl'] = function(unit)
+	local SPELL_RESOLVE_NAME = GetSpellInfo(158300)
+	--/run print(GetSpellInfo(158300))
+	--/run print(UnitAura('player', 'Resolve', nil, 'HELPFUL'))
+	end
+
+	ElvUF.Tags.Methods['range:sl'] = function(unit)
+		local name, server = UnitName(unit)
+		local rangeText = ''
+		local min, max = RC:GetRange(unit)
+		curMin = min
+		curMax = max
+
+		if(server and server ~= "") then
+			name = format("%s-%s", name, server)
+		end
+
+		if min and max and (name ~= UnitName('player')) then
+			rangeText = curMin.."-"..curMax
+		end
+		return rangeText
+	end
+
+	ElvUF.Tags.Events['health:current:sl'] = 'UNIT_HEALTH_FREQUENT UNIT_MAXHEALTH UNIT_CONNECTION'
+	ElvUF.Tags.Methods['health:current:sl'] = function(unit)
+		local min, max = UnitHealth(unit), UnitHealthMax(unit)
+		local status = not UnitIsConnected(unit) and L['Offline'] or UnitIsGhost(unit) and L['Ghost'] or UnitIsDead(unit) and DEAD
+
+		if (status) then
+			return status
+		else
+			return GetFormattedTextSLE('CURRENT', min, max)
+		end
+	end
+
+	ElvUF.Tags.Events['health:deficit:sl'] = 'UNIT_HEALTH_FREQUENT UNIT_MAXHEALTH UNIT_CONNECTION'
+	ElvUF.Tags.Methods['health:deficit:sl'] = function(unit)
+		local min, max = UnitHealth(unit), UnitHealthMax(unit)
+		local status = not UnitIsConnected(unit) and L['Offline'] or UnitIsGhost(unit) and L['Ghost'] or UnitIsDead(unit) and DEAD
+
+		if (status) then
+			return status
+		else
+			return GetFormattedTextSLE('DEFICIT', min, max)
+		end
+	end
+
+	ElvUF.Tags.Events['health:current-percent:sl'] = 'UNIT_HEALTH_FREQUENT UNIT_MAXHEALTH UNIT_CONNECTION'
+	ElvUF.Tags.Methods['health:current-percent:sl'] = function(unit)
+		local min, max = UnitHealth(unit), UnitHealthMax(unit)
+		local status = not UnitIsConnected(unit) and L['Offline'] or UnitIsGhost(unit) and L['Ghost'] or UnitIsDead(unit) and DEAD
+
+		if (status) then
+			return status
+		else
+			return GetFormattedTextSLE('CURRENT_PERCENT', min, max)
+		end
+	end
+
+	ElvUF.Tags.Events['health:current-max:sl'] = 'UNIT_HEALTH_FREQUENT UNIT_MAXHEALTH UNIT_CONNECTION'
+	ElvUF.Tags.Methods['health:current-max:sl'] = function(unit)
+		local min, max = UnitHealth(unit), UnitHealthMax(unit)
+		local status = not UnitIsConnected(unit) and L['Offline'] or UnitIsGhost(unit) and L['Ghost'] or UnitIsDead(unit) and DEAD
+
+		if (status) then
+			return status
+		else
+			return GetFormattedTextSLE('CURRENT_MAX', min, max)
+		end
+	end
+
+	ElvUF.Tags.Events['health:current-max-percent:sl'] = 'UNIT_HEALTH_FREQUENT UNIT_MAXHEALTH UNIT_CONNECTION'
+	ElvUF.Tags.Methods['health:current-max-percent:sl'] = function(unit)
+		local min, max = UnitHealth(unit), UnitHealthMax(unit)
+		local status = not UnitIsConnected(unit) and L['Offline'] or UnitIsGhost(unit) and L['Ghost'] or UnitIsDead(unit) and DEAD
+
+		if (status) then
+			return status
+		else
+			return GetFormattedTextSLE('CURRENT_MAX_PERCENT', min, max)
+		end
+	end
+
+	ElvUF.Tags.Events['power:current:sl'] = 'UNIT_POWER_FREQUENT UNIT_MAXPOWER'
+	ElvUF.Tags.Methods['power:current:sl'] = function(unit)
+		local pType = UnitPowerType(unit)
+		local min, max = UnitPower(unit, pType), UnitPowerMax(unit, pType)
+
+		if min == 0 then
+			return ' '
+		else
+			return GetFormattedTextSLE('CURRENT', min, max)
+		end
+	end
+
+	ElvUF.Tags.Events['power:current-max:sl'] = 'UNIT_POWER_FREQUENT UNIT_MAXPOWER'
+	ElvUF.Tags.Methods['power:current-max:sl'] = function(unit)
+		local pType = UnitPowerType(unit)
+		local min, max = UnitPower(unit, pType), UnitPowerMax(unit, pType)
+
+		if min == 0 then
+			return ' '
+		else
+			return GetFormattedTextSLE('CURRENT_MAX', min, max)
+		end
+	end
+
+	ElvUF.Tags.Events['power:current-percent:sl'] = 'UNIT_POWER_FREQUENT UNIT_MAXPOWER'
+	ElvUF.Tags.Methods['power:current-percent:sl'] = function(unit)
+		local pType = UnitPowerType(unit)
+		local min, max = UnitPower(unit, pType), UnitPowerMax(unit, pType)
+
+		if min == 0 then
+			return ' '
+		else
+			return GetFormattedTextSLE('CURRENT_PERCENT', min, max)
+		end
+	end
+
+	ElvUF.Tags.Events['power:current-max-percent:sl'] = 'UNIT_POWER_FREQUENT UNIT_MAXPOWER'
+	ElvUF.Tags.Methods['power:current-max-percent:sl'] = function(unit)
+		local pType = UnitPowerType(unit)
+		local min, max = UnitPower(unit, pType), UnitPowerMax(unit, pType)
+
+		if min == 0 then
+			return ' '
+		else
+			return GetFormattedTextSLE('CURRENT_MAX_PERCENT', min, max)
+		end
+	end
+
+	ElvUF.Tags.Events['power:deficit:sl'] = 'UNIT_POWER_FREQUENT UNIT_MAXPOWER'
+	ElvUF.Tags.Methods['power:deficit:sl'] = function(unit)
+		local pType = UnitPowerType(unit)
+		local min, max = UnitPower(unit, pType), UnitPowerMax(unit, pType)
+
+		return GetFormattedTextSLE('DEFICIT', min, max, r, g, b)
+	end
+end
+AddTags()
+
+--Player Frame Enhancements
+function UF:Update_CombatIndicator()
+	local CombatText = ElvUF_Player.Combat
+	if E.db.sle.combatico.pos == "NONE" then
+		CombatText:ClearAllPoints()
+	else
+		local x, y = UF:GetPositionOffset(E.db.sle.combatico.pos)
+		CombatText:ClearAllPoints()
+		CombatText:Point(E.db.sle.combatico.pos, ElvUF_Player.Health, E.db.sle.combatico.pos, x, x)
+	end
+	SLE:UnregisterEvent("PLAYER_REGEN_DISABLED")
+end
+
+local function EclipseTextSLE()
+	local eclipseBar = ElvUF_Player.EclipseBar
+	local spower = UnitPower( PlayerFrame.unit, SPELL_POWER_ECLIPSE );
+	if E.db.sle.powtext then
+		eclipseBar.powtext:SetText(spower)
+	else
+		eclipseBar.powtext:SetText('')
+	end
+end
+
+local function DFTextSLE()
+	local ShardBar = ElvUF_Player.ShardBar
+	local dfpower = UnitPower( PlayerFrame.unit, SPELL_POWER_DEMONIC_FURY );
+	local hasspec = GetSpecialization(false, false)
+	if hasspec == nil then return end
+	local index = select(1, GetSpecializationInfo(GetSpecialization(false, false, active)), false, false)
+	if index == 266 then --This crap is checking the spec.
+		if E.db.sle.powtext then
+			ShardBar.powtext:SetText(dfpower)
+			if E.db.unitframe.units.player.classbar.fill == "spaced" then
+				ShardBar.powtext:ClearAllPoints()
+				ShardBar.powtext:SetPoint("LEFT", ShardBar, "RIGHT")
+			else
+				ShardBar.powtext:ClearAllPoints()
+				ShardBar.powtext:SetPoint("CENTER", ShardBar, "CENTER")
+			end
+		else
+			ShardBar.powtext:SetText('')
+		end
+	else
+		ShardBar.powtext:SetText('')
+	end
+end
+
+local function PlayerFrameAnchors()
+	if E.myclass == "DRUID" then
+		EclipseTextSLE()
+	elseif E.myclass == "WARLOCK" then
+		DFTextSLE()
+	end
+end
+
+hooksecurefunc(UF, "UpdatePlayerFrameAnchors", PlayerFrameAnchors)
+
+function UF:ClassbarTextSLE()
+	if E.myclass == "DRUID" then
+		EclipseTextSLE()
+	elseif E.myclass == "WARLOCK" then
+		DFTextSLE()
+	end
+end
+
+--Text for druid eclipse bar
+if E.myclass == "DRUID" then
+	local eclipseBar = ElvUF_Player.EclipseBar
+	local lunarBar = eclipseBar.LunarBar
+
+	eclipseBar.powtext = lunarBar:CreateFontString(nil, 'OVERLAY')
+	eclipseBar.powtext:SetPoint("CENTER", eclipseBar, "CENTER")
+	eclipseBar.powtext:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
+end
+
+if E.myclass == "WARLOCK" then
+	local ShardBar = ElvUF_Player.ShardBar
+	local dfbar = select(2, ShardBar:GetChildren())
+
+	ShardBar.powtext = dfbar:CreateFontString(nil, 'OVERLAY')
+	ShardBar.powtext:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/unitframes/load_unitframes.xml b/ElvUI_SLE/modules/unitframes/load_unitframes.xml
deleted file mode 100755
index 1b880e0..0000000
--- a/ElvUI_SLE/modules/unitframes/load_unitframes.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='tags.lua'/>
-	<Script file='update_elements.lua'/>
-	<Include file='units\load_units.xml'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/unitframes/options.lua b/ElvUI_SLE/modules/unitframes/options.lua
deleted file mode 100755
index 57befb1..0000000
--- a/ElvUI_SLE/modules/unitframes/options.lua
+++ /dev/null
@@ -1,82 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-local UF = E:GetModule('UnitFrames')
-local CAN_HAVE_CLASSBAR = (E.myclass == "PALADIN" or E.myclass == "DRUID" or E.myclass == "DEATHKNIGHT" or E.myclass == "WARLOCK" or E.myclass == "PRIEST" or E.myclass == "MONK" or E.myclass == 'MAGE')
-local function configTable()
-
-local positionValues = {
-	TOPLEFT = 'TOPLEFT',
-	LEFT = 'LEFT',
-	BOTTOMLEFT = 'BOTTOMLEFT',
-	RIGHT = 'RIGHT',
-	TOPRIGHT = 'TOPRIGHT',
-	BOTTOMRIGHT = 'BOTTOMRIGHT',
-	CENTER = 'CENTER',
-	TOP = 'TOP',
-	BOTTOM = 'BOTTOM',
-	NONE = L['Hide']
-};
-
-E.Options.args.sle.args.options.args.general.args.unitframes = {
-	type = "group",
-	name = L["UnitFrames"],
-	order = 100,
-	args = {
-		header = {
-			order = 1,
-			type = "header",
-			name = L["Additional unit frames options"],
-		},
-		info = {
-			order = 2,
-			type = "description",
-			name = L["Options for customizing unit frames. Please don't change these setting when ElvUI's testing frames for bosses and arena teams are shown. That will make them invisible until retoggling."],
-		},
-		Reset = {
-			order = 3,
-			type = 'execute',
-			name = L['Restore Defaults'],
-			desc = L["Reset these options to defaults"],
-			func = function() E:GetModule('SLE'):Reset(nil, true) end,
-		},
-		indicators = {
-			order = 5,
-			type = "group",
-			name = L["Player Frame Indicators"],
-			guiInline = true,
-			args = {
-				combaticopos = {
-					order = 6,
-					type = "select",
-					name = L["Combat Position"],
-					desc = L["Set the point to show combat icon"],
-					get = function(info) return E.db.sle.combatico.pos end,
-					set = function(info, value) E.db.sle.combatico.pos = value; UF:Update_CombatIndicator() end,
-					values = positionValues
-				},
-			},
-		},
-	},
-}
-
-if E.myclass == "DRUID" or E.myclass == "WARLOCK" then
-E.Options.args.sle.args.options.args.general.args.unitframes.args.druid = {
-	order = 7,
-	type = 'group',
-	name = L["Classbar Energy"],
-	guiInline = true,
-	args = {
-		powtext = {
-			order = 1,
-			type = "toggle",
-			name = L["Enable"],
-			desc = L["Show/hide the text with exact number of energy (Solar/Lunar or Demonic Fury) on your Classbar."],
-			get = function(info) return E.db.sle.powtext end,
-			set = function(info, value) E.db.sle.powtext = value; UF:ClassbarTextSLE() end,
-		},
-	},
-}
-end
-
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/unitframes/tags.lua b/ElvUI_SLE/modules/unitframes/tags.lua
deleted file mode 100755
index ae5bcf8..0000000
--- a/ElvUI_SLE/modules/unitframes/tags.lua
+++ /dev/null
@@ -1,152 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-
-local RC = LibStub("LibRangeCheck-2.0")
-
-ElvUF.Tags.Events['vengeance:current:sl'] = 'UNIT_AURA'
-ElvUF.Tags.Methods['vengeance:current:sl'] = function(unit)
-	local SPELL_VENGEANCE_NAME = (GetSpellInfo(93098))
-	local veng = select(15, UnitAura(unit, SPELL_VENGEANCE_NAME, nil, 'HELPFUL')) or 0
-	if (veng > 999999) then
-		veng = math.floor(veng/1000000) .. "m"
-	elseif (veng > 999) then
-		veng = math.floor(veng/1000) .. "k"
-	end
-	if veng == 0 then
-		return ' '
-	else
-		return veng
-	end
-end
-
-ElvUF.Tags.Methods['range:sl'] = function(unit)
-	local name, server = UnitName(unit)
-	local rangeText = ''
-	local min, max = RC:GetRange(unit)
-	curMin = min
-	curMax = max
-
-	if(server and server ~= "") then
-		name = format("%s-%s", name, server)
-	end
-
-	if min and max and (name ~= UnitName('player')) then
-		rangeText = curMin.."-"..curMax
-	end
-	return rangeText
-end
-
-ElvUF.Tags.Events['health:current:sl'] = 'UNIT_HEALTH_FREQUENT UNIT_MAXHEALTH UNIT_CONNECTION'
-ElvUF.Tags.Methods['health:current:sl'] = function(unit)
-	local min, max = UnitHealth(unit), UnitHealthMax(unit)
-	local status = not UnitIsConnected(unit) and L['Offline'] or UnitIsGhost(unit) and L['Ghost'] or UnitIsDead(unit) and DEAD
-
-	if (status) then
-		return status
-	else
-		return E:GetFormattedTextSLE('CURRENT', min, max)
-	end
-end
-
-ElvUF.Tags.Events['health:deficit:sl'] = 'UNIT_HEALTH_FREQUENT UNIT_MAXHEALTH UNIT_CONNECTION'
-ElvUF.Tags.Methods['health:deficit:sl'] = function(unit)
-	local min, max = UnitHealth(unit), UnitHealthMax(unit)
-	local status = not UnitIsConnected(unit) and L['Offline'] or UnitIsGhost(unit) and L['Ghost'] or UnitIsDead(unit) and DEAD
-
-	if (status) then
-		return status
-	else
-		return E:GetFormattedTextSLE('DEFICIT', min, max)
-	end
-end
-
-ElvUF.Tags.Events['health:current-percent:sl'] = 'UNIT_HEALTH_FREQUENT UNIT_MAXHEALTH UNIT_CONNECTION'
-ElvUF.Tags.Methods['health:current-percent:sl'] = function(unit)
-	local min, max = UnitHealth(unit), UnitHealthMax(unit)
-	local status = not UnitIsConnected(unit) and L['Offline'] or UnitIsGhost(unit) and L['Ghost'] or UnitIsDead(unit) and DEAD
-
-	if (status) then
-		return status
-	else
-		return E:GetFormattedTextSLE('CURRENT_PERCENT', min, max)
-	end
-end
-
-ElvUF.Tags.Events['health:current-max:sl'] = 'UNIT_HEALTH_FREQUENT UNIT_MAXHEALTH UNIT_CONNECTION'
-ElvUF.Tags.Methods['health:current-max:sl'] = function(unit)
-	local min, max = UnitHealth(unit), UnitHealthMax(unit)
-	local status = not UnitIsConnected(unit) and L['Offline'] or UnitIsGhost(unit) and L['Ghost'] or UnitIsDead(unit) and DEAD
-
-	if (status) then
-		return status
-	else
-		return E:GetFormattedTextSLE('CURRENT_MAX', min, max)
-	end
-end
-
-ElvUF.Tags.Events['health:current-max-percent:sl'] = 'UNIT_HEALTH_FREQUENT UNIT_MAXHEALTH UNIT_CONNECTION'
-ElvUF.Tags.Methods['health:current-max-percent:sl'] = function(unit)
-	local min, max = UnitHealth(unit), UnitHealthMax(unit)
-	local status = not UnitIsConnected(unit) and L['Offline'] or UnitIsGhost(unit) and L['Ghost'] or UnitIsDead(unit) and DEAD
-
-	if (status) then
-		return status
-	else
-		return E:GetFormattedTextSLE('CURRENT_MAX_PERCENT', min, max)
-	end
-end
-
-ElvUF.Tags.Events['power:current:sl'] = 'UNIT_POWER_FREQUENT UNIT_MAXPOWER'
-ElvUF.Tags.Methods['power:current:sl'] = function(unit)
-	local pType = UnitPowerType(unit)
-	local min, max = UnitPower(unit, pType), UnitPowerMax(unit, pType)
-
-	if min == 0 then
-		return ' '
-	else
-		return E:GetFormattedTextSLE('CURRENT', min, max)
-	end
-end
-
-ElvUF.Tags.Events['power:current-max:sl'] = 'UNIT_POWER_FREQUENT UNIT_MAXPOWER'
-ElvUF.Tags.Methods['power:current-max:sl'] = function(unit)
-	local pType = UnitPowerType(unit)
-	local min, max = UnitPower(unit, pType), UnitPowerMax(unit, pType)
-
-	if min == 0 then
-		return ' '
-	else
-		return E:GetFormattedTextSLE('CURRENT_MAX', min, max)
-	end
-end
-
-ElvUF.Tags.Events['power:current-percent:sl'] = 'UNIT_POWER_FREQUENT UNIT_MAXPOWER'
-ElvUF.Tags.Methods['power:current-percent:sl'] = function(unit)
-	local pType = UnitPowerType(unit)
-	local min, max = UnitPower(unit, pType), UnitPowerMax(unit, pType)
-
-	if min == 0 then
-		return ' '
-	else
-		return E:GetFormattedTextSLE('CURRENT_PERCENT', min, max)
-	end
-end
-
-ElvUF.Tags.Events['power:current-max-percent:sl'] = 'UNIT_POWER_FREQUENT UNIT_MAXPOWER'
-ElvUF.Tags.Methods['power:current-max-percent:sl'] = function(unit)
-	local pType = UnitPowerType(unit)
-	local min, max = UnitPower(unit, pType), UnitPowerMax(unit, pType)
-
-	if min == 0 then
-		return ' '
-	else
-		return E:GetFormattedTextSLE('CURRENT_MAX_PERCENT', min, max)
-	end
-end
-
-ElvUF.Tags.Events['power:deficit:sl'] = 'UNIT_POWER_FREQUENT UNIT_MAXPOWER'
-ElvUF.Tags.Methods['power:deficit:sl'] = function(unit)
-	local pType = UnitPowerType(unit)
-	local min, max = UnitPower(unit, pType), UnitPowerMax(unit, pType)
-
-	return E:GetFormattedTextSLE('DEFICIT', min, max, r, g, b)
-end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/unitframes/units/load_units.xml b/ElvUI_SLE/modules/unitframes/units/load_units.xml
deleted file mode 100755
index 752c7d3..0000000
--- a/ElvUI_SLE/modules/unitframes/units/load_units.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='player.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/unitframes/units/player.lua b/ElvUI_SLE/modules/unitframes/units/player.lua
deleted file mode 100755
index c7b11d8..0000000
--- a/ElvUI_SLE/modules/unitframes/units/player.lua
+++ /dev/null
@@ -1,91 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-if not E.private.unitframe.enable then return end
-
-local UF = E:GetModule('UnitFrames');
-local SLE = E:GetModule('SLE');
-
-
-function UF:Update_CombatIndicator()
-	local CombatText = ElvUF_Player.Combat
-	if E.db.sle.combatico.pos == "NONE" then
-		CombatText:ClearAllPoints()
-	else
-		local x, y = UF:GetPositionOffset(E.db.sle.combatico.pos)
-		CombatText:ClearAllPoints()
-		CombatText:Point(E.db.sle.combatico.pos, ElvUF_Player.Health, E.db.sle.combatico.pos, x, x)
-	end
-	SLE:UnregisterEvent("PLAYER_REGEN_DISABLED")
-end
-
-UF.UpdatePlayerFrameAnchorsSLE = UF.UpdatePlayerFrameAnchors
-function UF:UpdatePlayerFrameAnchors(frame, isShown)
-	UF:UpdatePlayerFrameAnchorsSLE(frame, isShown)
-
-	if E.myclass == "DRUID" then
-		UF:EclipseTextSLE()
-	end
-
-	if E.myclass == "WARLOCK" then
-		UF:DFTextSLE()
-	end
-end
-
-function UF:ClassbarTextSLE()
-	if E.myclass == "DRUID" then
-		UF:EclipseTextSLE()
-	elseif E.myclass == "WARLOCK" then
-		UF:DFTextSLE()
-	end
-end
-
-function UF:EclipseTextSLE()
-	local eclipseBar = ElvUF_Player.EclipseBar
-	local spower = UnitPower( PlayerFrame.unit, SPELL_POWER_ECLIPSE );
-	if E.db.sle.powtext then
-		eclipseBar.powtext:SetText(spower)
-	else
-		eclipseBar.powtext:SetText('')
-	end
-end
-
-function UF:DFTextSLE()
-	local ShardBar = ElvUF_Player.ShardBar
-	local dfpower = UnitPower( PlayerFrame.unit, SPELL_POWER_DEMONIC_FURY );
-	local hasspec = GetSpecialization(false, false)
-	if hasspec == nil then return end
-	local index = select(1, GetSpecializationInfo(GetSpecialization(false, false, active)), false, false)
-	if index == 266 then --This crap is checking the spec.
-		if E.db.sle.powtext then
-			ShardBar.powtext:SetText(dfpower)
-			if E.db.unitframe.units.player.classbar.fill == "spaced" then
-				ShardBar.powtext:ClearAllPoints()
-				ShardBar.powtext:SetPoint("LEFT", ShardBar, "RIGHT")
-			else
-				ShardBar.powtext:ClearAllPoints()
-				ShardBar.powtext:SetPoint("CENTER", ShardBar, "CENTER")
-			end
-		else
-			ShardBar.powtext:SetText('')
-		end
-	else
-		ShardBar.powtext:SetText('')
-	end
-end
-
---Text for druid eclipse bar
-if E.myclass == "DRUID" then
-	local eclipseBar = ElvUF_Player.EclipseBar
-	local lunarBar = eclipseBar.LunarBar
-
-	eclipseBar.powtext = lunarBar:CreateFontString(nil, 'OVERLAY')
-	eclipseBar.powtext:SetPoint("CENTER", eclipseBar, "CENTER")
-	eclipseBar.powtext:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
-end
-
-if E.myclass == "WARLOCK" then
-	local ShardBar = ElvUF_Player.ShardBar
-	local dfbar = select(2, ShardBar:GetChildren())
-
-	ShardBar.powtext = dfbar:CreateFontString(nil, 'OVERLAY')
-	ShardBar.powtext:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
-end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/unitframes/update_elements.lua b/ElvUI_SLE/modules/unitframes/update_elements.lua
deleted file mode 100755
index 78e41b3..0000000
--- a/ElvUI_SLE/modules/unitframes/update_elements.lua
+++ /dev/null
@@ -1,41 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-if not E.private.unitframe.enable then return end
-local UF = E:GetModule('UnitFrames');
-
-local format = format
-
---Replacement of text formats on unitframes.
-local styles = {
-	['CURRENT'] = '%s',
-	['CURRENT_MAX'] = '%s - %s',
-	['CURRENT_PERCENT'] =  '%s - %s%%',
-	['CURRENT_MAX_PERCENT'] = '%s - %s | %s%%',
-	['DEFICIT'] = '-%s'
-}
-
-function E:GetFormattedTextSLE(style, min, max)
-	assert(styles[style], 'Invalid format style: '..style)
-	assert(min, 'You need to provide a current value. Usage: E:GetFormattedText(style, min, max)')
-	assert(max, 'You need to provide a maximum value. Usage: E:GetFormattedText(style, min, max)')
-
-	if max == 0 then max = 1 end
-
-	local useStyle = styles[style]
-
-	if style == 'DEFICIT' then
-		local deficit = max - min
-		if deficit <= 0 then
-			return ''
-		else
-			return format(useStyle, deficit)
-		end
-	elseif style == 'CURRENT' or ((style == 'CURRENT_MAX' or style == 'CURRENT_MAX_PERCENT' or style == 'CURRENT_PERCENT') and min == max) then
-			return format(styles['CURRENT'], min)
-	elseif style == 'CURRENT_MAX' then
-			return format(useStyle, min, max)
-	elseif style == 'CURRENT_PERCENT' then
-			return format(useStyle, min, format("%.1f", min / max * 100))
-	elseif style == 'CURRENT_MAX_PERCENT' then
-			return format(useStyle, min, max, format("%.1f", min / max * 100))
-	end
-end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/vehicle.lua b/ElvUI_SLE/modules/vehicle.lua
new file mode 100644
index 0000000..61097e9
--- /dev/null
+++ b/ElvUI_SLE/modules/vehicle.lua
@@ -0,0 +1,137 @@
+local E, L, V, P, G = unpack(ElvUI);
+local EVB = E:GetModule("SLE_EnhancedVehicleBar")
+local AB = E:GetModule("ActionBars");
+local LAB = LibStub("LibActionButton-1.0")
+
+-- Regular Button for these bars are 52. 52 * .71 = ~37.. I just rounded it up to 40 and called it good.
+function EVB:Animate(bar, x, y, duration)
+	bar.anim = bar:CreateAnimationGroup('Move_In')
+	bar.anim.in1 = bar.anim:CreateAnimation('Translation')
+	bar.anim.in1:SetDuration(0)
+	bar.anim.in1:SetOrder(1)
+	bar.anim.in2 = bar.anim:CreateAnimation('Translation')
+	bar.anim.in2:SetDuration(duration)
+	bar.anim.in2:SetOrder(2)
+	bar.anim.in2:SetSmoothing('OUT')
+	bar.anim.out1 = bar:CreateAnimationGroup('Move_Out')
+	bar.anim.out2 = bar.anim.out1:CreateAnimation('Translation')
+	bar.anim.out2:SetDuration(duration)
+	bar.anim.out2:SetOrder(1)
+	bar.anim.out2:SetSmoothing('IN')
+	bar.anim.in1:SetOffset(x, y)
+	bar.anim.in2:SetOffset(-x, -y)
+	bar.anim.out2:SetOffset(x, y)
+	bar.anim.out1:SetScript('OnFinished', function() bar:Hide() end)
+end
+
+function EVB:AnimSlideIn(bar)
+	if not bar.anim then
+		Animate(bar)
+	end
+
+	bar.anim.out1:Stop()
+	bar.anim:Play()
+end
+
+function EVB:AnimSlideOut(bar)
+	if bar.anim then
+		bar.anim:Finish()
+	end
+
+	bar.anim:Stop()
+	bar.anim.out1:Play()
+end
+
+function EVB:CreateExtraButtonSet()
+	local bar = self.bar
+	bar.buttons = {}
+	for i = 1, 7 do
+		i = i == 7 and 12 or i
+
+		bar.buttons[i] = LAB:CreateButton(i, format(bar:GetName().."Button%d", i), bar, nil);
+		bar.buttons[i]:SetState(0, "action", i);
+
+		for k = 1, 14 do
+			bar.buttons[i]:SetState(k, "action", (k - 1) * 12 + i)
+		end
+
+		if i == 12 then
+			bar.buttons[i]:SetState(12, "custom", AB.customExitButton)
+		end
+
+		bar.buttons[i]:Size(self.size);
+
+		if (i == 1) then
+			bar.buttons[i]:SetPoint('BOTTOMLEFT', self.spacing, self.spacing)
+		else
+			local prev = i == 12 and bar.buttons[6] or bar.buttons[i-1];
+			bar.buttons[i]:SetPoint('LEFT', prev, 'RIGHT', self.spacing, 0)
+		end
+
+		AB:StyleButton(bar.buttons[i]);
+		RegisterStateDriver(bar.buttons[i], 'visibility', '[petbattle] hide; [vehicleui][overridebar][shapeshift][possessbar] show; hide')
+
+	end
+end
+
+function EVB:Initialize()
+	if (not E.private.sle.vehicle.enable) then return end;
+
+	local visibility = "[petbattle] hide; [vehicleui][overridebar][shapeshift][possessbar] hide;"
+	local page = format("[vehicleui] %d; [possessbar] %d; [overridebar] %d; [shapeshift] 13;", GetVehicleBarIndex(), GetVehicleBarIndex(), GetOverrideBarIndex());
+	local bindButtons = "ACTIONBUTTON";
+
+	hooksecurefunc(AB, "PositionAndSizeBar", function(self, barName)
+		local bar = self["handledBars"][barName]
+		if (self.db[barName].enabled) and (barName == "bar1") then
+			UnregisterStateDriver(bar, 'visibility');
+			RegisterStateDriver(bar, 'visibility', visibility..self.db[barName].visibility);
+		end
+	end);
+
+	local size = 40;
+	local spacing = E:Scale(AB.db["bar1"].buttonspacing);
+	local bar = CreateFrame("Frame", "ElvUISLEEnhancedVehicleBar", UIParent, "SecureHandlerStateTemplate");
+
+	self.size = size;
+	self.spacing = spacing;
+
+	bar:SetWidth((size * 7) + (spacing * 8));
+	bar:SetHeight(size + (spacing * 2));
+	bar:SetTemplate("Transparent");
+	bar:CreateShadow();
+	if (E:GetModule("EnhancedShadows", true)) then
+		E:GetModule("EnhancedShadows"):RegisterShadow(bar.shadow);
+	end
+
+	bar:SetPoint("BOTTOM", 0, 34);
+	bar:HookScript("OnShow", function(frame) self:AnimSlideIn(frame) end);
+	RegisterStateDriver(bar, 'visibility', '[petbattle] hide; [vehicleui][overridebar][shapeshift][possessbar] show; hide');
+	RegisterStateDriver(bar, 'page', page);
+
+	bar:SetAttribute("_onstate-page", [[
+		if HasTempShapeshiftActionBar() and self:GetAttribute("hasTempBar") then
+			newstate = GetTempShapeshiftBarIndex() or newstate
+		end
+
+		if newstate ~= 0 then
+			self:SetAttribute("state", newstate)
+			control:ChildUpdate("state", newstate)
+		else
+			local newCondition = self:GetAttribute("newCondition")
+			if newCondition then
+				newstate = SecureCmdOptionParse(newCondition)
+				self:SetAttribute("state", newstate)
+				control:ChildUpdate("state", newstate)
+			end
+		end
+	]]);
+
+	self:Animate(bar, 0, -(bar:GetHeight()), 1);
+
+	self.bar = bar;
+
+	self:CreateExtraButtonSet();
+
+	AB:UpdateButtonConfig(bar, bindButtons);
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/vehicle/load_vehicle.xml b/ElvUI_SLE/modules/vehicle/load_vehicle.xml
deleted file mode 100755
index 2a9d267..0000000
--- a/ElvUI_SLE/modules/vehicle/load_vehicle.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
-	<Script file='vehicle.lua'/>
-	<Script file='options.lua'/>
-</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/vehicle/options.lua b/ElvUI_SLE/modules/vehicle/options.lua
deleted file mode 100755
index 20e61a4..0000000
--- a/ElvUI_SLE/modules/vehicle/options.lua
+++ /dev/null
@@ -1,30 +0,0 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
-
-local function configTable()
-	E.Options.args.sle.args.options.args.general.args.vehicle = {
-		type = "group",
-		name = L["Enhanced Vehicle Bar"],
-		order = 84,
-		args = {
-			header = {
-				order = 1,
-				type = "header",
-				name = L["Enhanced Vehicle Bar"],
-			},
-			info = {
-				order = 2,
-				type = "description",
-				name = L["Use the enhanced vehicle bar based on work by Azilroka"],
-			},
-			enable = {
-				order = 3,
-				type = "toggle",
-				name = L["Enable"],
-				get = function(info) return E.private.sle.vehicle.enable end,
-				set = function(info, value) E.private.sle.vehicle.enable = value; E:StaticPopup_Show("PRIVATE_RL") end,
-			},
-		},
-	}
-end
-
-table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/modules/vehicle/vehicle.lua b/ElvUI_SLE/modules/vehicle/vehicle.lua
deleted file mode 100755
index f3e5812..0000000
--- a/ElvUI_SLE/modules/vehicle/vehicle.lua
+++ /dev/null
@@ -1,139 +0,0 @@
-local E, L, V, P, G = unpack(ElvUI);
-local EVB = E:NewModule("EnhancedVehicleBar");
-local AB = E:GetModule("ActionBars");
-local LAB = LibStub("LibActionButton-1.0")
-
--- Regular Button for these bars are 52. 52 * .71 = ~37.. I just rounded it up to 40 and called it good.
-function EVB:Animate(bar, x, y, duration)
-	bar.anim = bar:CreateAnimationGroup('Move_In')
-	bar.anim.in1 = bar.anim:CreateAnimation('Translation')
-	bar.anim.in1:SetDuration(0)
-	bar.anim.in1:SetOrder(1)
-	bar.anim.in2 = bar.anim:CreateAnimation('Translation')
-	bar.anim.in2:SetDuration(duration)
-	bar.anim.in2:SetOrder(2)
-	bar.anim.in2:SetSmoothing('OUT')
-	bar.anim.out1 = bar:CreateAnimationGroup('Move_Out')
-	bar.anim.out2 = bar.anim.out1:CreateAnimation('Translation')
-	bar.anim.out2:SetDuration(duration)
-	bar.anim.out2:SetOrder(1)
-	bar.anim.out2:SetSmoothing('IN')
-	bar.anim.in1:SetOffset(x, y)
-	bar.anim.in2:SetOffset(-x, -y)
-	bar.anim.out2:SetOffset(x, y)
-	bar.anim.out1:SetScript('OnFinished', function() bar:Hide() end)
-end
-
-function EVB:AnimSlideIn(bar)
-	if not bar.anim then
-		Animate(bar)
-	end
-
-	bar.anim.out1:Stop()
-	bar.anim:Play()
-end
-
-function EVB:AnimSlideOut(bar)
-	if bar.anim then
-		bar.anim:Finish()
-	end
-
-	bar.anim:Stop()
-	bar.anim.out1:Play()
-end
-
-function EVB:CreateExtraButtonSet()
-	local bar = self.bar
-	bar.buttons = {}
-	for i = 1, 7 do
-		i = i == 7 and 12 or i
-
-		bar.buttons[i] = LAB:CreateButton(i, format(bar:GetName().."Button%d", i), bar, nil);
-		bar.buttons[i]:SetState(0, "action", i);
-
-		for k = 1, 14 do
-			bar.buttons[i]:SetState(k, "action", (k - 1) * 12 + i)
-		end
-
-		if i == 12 then
-			bar.buttons[i]:SetState(12, "custom", AB.customExitButton)
-		end
-
-		bar.buttons[i]:Size(self.size);
-
-		if (i == 1) then
-			bar.buttons[i]:SetPoint('BOTTOMLEFT', self.spacing, self.spacing)
-		else
-			local prev = i == 12 and bar.buttons[6] or bar.buttons[i-1];
-			bar.buttons[i]:SetPoint('LEFT', prev, 'RIGHT', self.spacing, 0)
-		end
-
-		AB:StyleButton(bar.buttons[i]);
-		RegisterStateDriver(bar.buttons[i], 'visibility', '[petbattle] hide; [vehicleui][overridebar][shapeshift][possessbar] show; hide')
-
-	end
-end
-
-function EVB:Initialize()
-	if (not E.private.sle.vehicle.enable) then return end;
-
-	local visibility = "[petbattle] hide; [vehicleui][overridebar][shapeshift][possessbar] hide; show"
-	local page = format("[vehicleui] %d; [possessbar] %d; [overridebar] %d; [shapeshift] 13;", GetVehicleBarIndex(), GetVehicleBarIndex(), GetOverrideBarIndex());
-	local bindButtons = "ACTIONBUTTON";
-
-	hooksecurefunc(AB, "PositionAndSizeBar", function(self, barName)
-		local bar = self["handledBars"][barName]
-		if (self.db[barName].enabled) then
-			UnregisterStateDriver(bar, 'visibility');
-			RegisterStateDriver(bar, 'visibility', visibility);
-		end
-	end);
-
-	local size = 40;
-	local spacing = E:Scale(AB.db["bar1"].buttonspacing);
-	local bar = CreateFrame("Frame", "ElvUISLEEnhancedVehicleBar", UIParent, "SecureHandlerStateTemplate");
-
-	self.size = size;
-	self.spacing = spacing;
-
-	bar:SetWidth((size * 7) + (spacing * 8));
-	bar:SetHeight(size + (spacing * 2));
-	bar:SetTemplate("Transparent");
-	bar:CreateShadow();
-	if (E:GetModule("EnhancedShadows", true)) then
-		E:GetModule("EnhancedShadows"):RegisterShadow(bar.shadow);
-	end
-
-	bar:SetPoint("BOTTOM", 0, 34);
-	bar:HookScript("OnShow", function(frame) self:AnimSlideIn(frame) end);
-	RegisterStateDriver(bar, 'visibility', '[petbattle] hide; [vehicleui][overridebar][shapeshift][possessbar] show; hide');
-	RegisterStateDriver(bar, 'page', page);
-
-	bar:SetAttribute("_onstate-page", [[
-		if HasTempShapeshiftActionBar() and self:GetAttribute("hasTempBar") then
-			newstate = GetTempShapeshiftBarIndex() or newstate
-		end
-
-		if newstate ~= 0 then
-			self:SetAttribute("state", newstate)
-			control:ChildUpdate("state", newstate)
-		else
-			local newCondition = self:GetAttribute("newCondition")
-			if newCondition then
-				newstate = SecureCmdOptionParse(newCondition)
-				self:SetAttribute("state", newstate)
-				control:ChildUpdate("state", newstate)
-			end
-		end
-	]]);
-
-	self:Animate(bar, 0, -(bar:GetHeight()), 1);
-
-	self.bar = bar;
-
-	self:CreateExtraButtonSet();
-
-	AB:UpdateButtonConfig(bar, bindButtons);
-end
-
-E:RegisterModule(EVB:GetName())
\ No newline at end of file
diff --git a/ElvUI_SLE/options/auras_c.lua b/ElvUI_SLE/options/auras_c.lua
new file mode 100644
index 0000000..92e279f
--- /dev/null
+++ b/ElvUI_SLE/options/auras_c.lua
@@ -0,0 +1,60 @@
+local E, L, V, P, G = unpack(ElvUI);
+--local AT = E:GetModule('SLE_AuraTimers')
+
+local function configTable()
+	E.Options.args.sle.args.options.args.general.args.auras = {
+		type = "group",
+		name = L["Auras"],
+		order = 1,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["Auras"],
+			},
+			intro = {
+				order = 2,
+				type = "description",
+				name = "",
+			},
+			enabled = {
+				order = 3,
+				type = "toggle",
+				name = L["Enable"],
+				--desc = L["Show/Hide UI buttons."],
+				get = function(info) return E.db.sle.auras.enable end,
+				set = function(info, value) E.db.sle.auras.enable = value end
+			},
+			space1 = {
+				order = 4,
+				type = 'description',
+				name = "",
+			},
+			space2 = {
+				order = 5,
+				type = 'description',
+				name = "",
+			},
+			buffs = {
+				order = 6,
+				type = "toggle",
+				name = L["Hide Buff Timer"],
+				desc = L["This hides the time remaining for your buffs."],
+				disabled = function() return not E.db.sle.auras.enable end,
+				get = function(info) return E.db.sle.auras.buffs.hideTimer end,
+				set = function(info, value) E.db.sle.auras.buffs.hideTimer = value end,
+			},
+			debuffs = {
+				order = 7,
+				type = "toggle",
+				name = L["Hide Debuff Timer"],
+				desc = L["This hides the time remaining for your debuffs."],
+				disabled = function() return not E.db.sle.auras.enable end,
+				get = function(info) return E.db.sle.auras.debuffs.hideTimer end,
+				set = function(info, value) E.db.sle.auras.debuffs.hideTimer = value end,
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/autorelease_c.lua b/ElvUI_SLE/options/autorelease_c.lua
new file mode 100644
index 0000000..bbf23e5
--- /dev/null
+++ b/ElvUI_SLE/options/autorelease_c.lua
@@ -0,0 +1,30 @@
+local E, L, V, P, G = unpack(ElvUI);
+
+local function configTable()
+	E.Options.args.sle.args.options.args.general.args.pvpautorelease = {
+		type = "group",
+		name = L["PvP Auto Release"],
+		order = 9,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["PvP Auto Release"],
+			},
+			intro = {
+				order = 2,
+				type = "description",
+				name = L["Automatically release body when killed inside a battleground."],
+			},
+			enable = {
+				order = 3,
+				type = "toggle",
+				name = L["Enable"],
+				get = function(info) return E.db.sle.pvpautorelease end,
+				set = function(info, value) E.db.sle.pvpautorelease = value; end
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/backgrounds_c.lua b/ElvUI_SLE/options/backgrounds_c.lua
new file mode 100644
index 0000000..8a84fb6
--- /dev/null
+++ b/ElvUI_SLE/options/backgrounds_c.lua
@@ -0,0 +1,169 @@
+local E, L, V, P, G = unpack(ElvUI);
+local BG = E:GetModule('SLE_BackGrounds')
+
+local function configTable()
+	--GroupName = { ShortName, Order }
+	local drop = {
+		["Bottom BG"] = {"bottom", 1},
+		["Left BG"] = {"left", 2},
+		["Right BG"] = {"right", 3},
+		["Actionbar BG"] = {"action", 4},
+	}
+
+	--Options for additional background frames. Main group
+	E.Options.args.sle.args.datatext.args.backgrounds = {
+		type = "group",
+		name = L["Backgrounds"],
+		order = 3,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["Additional Background Panels"],
+			},
+			intro = {
+				order = 2,
+				type = "description",
+				name = L["BG_DESC"]
+			},
+			enabled = {
+				order = 3,
+				type = "toggle",
+				name = L["Enable"],
+				desc = L["Show/Hide this frame."],
+				get = function(info) return E.private.sle.backgrounds end,
+				set = function(info, value) E.private.sle.backgrounds = value; E:StaticPopup_Show("PRIVATE_RL") end
+			},
+			Reset = {
+				order = 4,
+				type = 'execute',
+				name = L['Restore Defaults'],
+				desc = L["Reset these options to defaults"],
+				disabled = function() return not E.private.sle.backgrounds end,
+				func = function() E:GetModule('SLE'):Reset(nil, nil, nil, true) end,
+			},
+			spacerreset = {
+				order = 5,
+				type = 'description',
+				name = "",
+			},
+			bottom_enabled = {
+				order = 6,
+				type = "toggle",
+				name = L["Bottom BG"],
+				desc = L["Show/Hide this frame."],
+				disabled = function() return not E.private.sle.backgrounds end,
+				get = function(info) return E.db.sle.backgrounds.bottom.enabled end,
+				set = function(info, value) E.db.sle.backgrounds.bottom.enabled = value; BG:FramesVisibility() end
+			},
+			left_enabled = {
+				order = 7,
+				type = "toggle",
+				name = L["Left BG"],
+				desc = L["Show/Hide this frame."],
+				disabled = function() return not E.private.sle.backgrounds end,
+				get = function(info) return E.db.sle.backgrounds.left.enabled end,
+				set = function(info, value) E.db.sle.backgrounds.left.enabled = value; BG:FramesVisibility() end
+			},
+			spacer = {
+				order = 8,
+				type = "description",
+				name = "",
+			},
+			right_enabled = {
+				order = 9,
+				type = "toggle",
+				name = L["Right BG"],
+				desc = L["Show/Hide this frame."],
+				disabled = function() return not E.private.sle.backgrounds end,
+				get = function(info) return E.db.sle.backgrounds.right.enabled end,
+				set = function(info, value) E.db.sle.backgrounds.right.enabled = value; BG:FramesVisibility() end
+			},
+			action_enabled = {
+				order = 10,
+				type = "toggle",
+				name = L["Actionbar BG"],
+				desc = L["Show/Hide this frame."],
+				disabled = function() return not E.private.sle.backgrounds end,
+				get = function(info) return E.db.sle.backgrounds.action.enabled end,
+				set = function(info, value) E.db.sle.backgrounds.action.enabled = value; BG:FramesVisibility() end
+			},
+		}
+	}
+
+	--Subgroups
+	for k,v in pairs(drop) do
+		E.Options.args.sle.args.datatext.args.backgrounds.args[v[1]] = {
+			type = "group",
+			name = L[k],
+			order = v[2],
+			get = function(info) return E.db.sle.backgrounds[v[1]][ info[#info] ] end,
+			disabled = function() return not E.db.sle.backgrounds[v[1]].enabled or not E.private.sle.backgrounds end,
+			args = {
+				width = {
+					order = 1,
+					type = "range",
+					name = L['Width'],
+					desc = L["Sets width of the frame"],
+					min = 50, max = E.screenwidth, step = 1,
+					set = function(info, value) E.db.sle.backgrounds[v[1]].width = value; BG:FramesSize() end,
+				},
+				height = {
+					order = 2,
+					type = "range",
+					name = L['Height'],
+					desc = L["Sets height of the frame"],
+					min = 30, max = E.screenheight/2, step = 1,
+					set = function(info, value) E.db.sle.backgrounds[v[1]].height = value; BG:FramesSize() end,
+				},
+				spacer = {
+					order = 3,
+					type = "description",
+					name = "",
+				},
+				texture = {
+					order = 6,
+					type = 'input',
+					width = 'full',
+					name = L["Texture"],
+					desc = L["Set the texture to use in this frame.  Requirements are the same as the chat textures."],
+					set = function(info, value)
+						E.db.sle.backgrounds[v[1]].texture = value
+						E:UpdateMedia()
+						BG:UpdateTex()
+					end,
+				},
+				template = {
+					order = 7,
+					type = "select",
+					name = L["Backdrop Template"],
+					desc = L["Change the template used for this backdrop."],
+					get = function(info) return E.db.sle.backgrounds[v[1]].template end,
+					set = function(info, value) E.db.sle.backgrounds[v[1]].template = value; BG:UpdateFrames() end,
+					values = {
+						['Default'] = L["Default"],
+						['Transparent'] = L["Transparent"],
+					},
+				},
+				pethide = {
+					order = 8,
+					type = "toggle",
+					name = L["Hide in Pet Batlle"],
+					desc = L["Show/Hide this frame during Pet Battles."],
+					set = function(info, value) E.db.sle.backgrounds[v[1]].pethide = value; BG:RegisterHide() end
+				},
+				alpha = {
+					order = 12,
+					type = 'range',
+					name = L['Alpha'],
+					isPercent = true,
+					min = 0, max = 1, step = 0.01,
+					get = function(info) return E.db.sle.backgrounds[v[1]].alpha end,
+					set = function(info, value) E.db.sle.backgrounds[v[1]].alpha = value; BG:UpdateFrames() end,
+				},
+			},
+		}
+	end
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/characterframe_c.lua b/ElvUI_SLE/options/characterframe_c.lua
new file mode 100644
index 0000000..3908910
--- /dev/null
+++ b/ElvUI_SLE/options/characterframe_c.lua
@@ -0,0 +1,369 @@
+local E, L, V, P, G = unpack(ElvUI);
+local CFO = E:GetModule('CharacterFrameOptions')
+
+local function configTable()
+	E.Options.args.sle.args.characterframeoptions = {
+		type = 'group',
+		name = L["Armory Mode"],
+		order = 6,
+		childGroups = 'tab',
+		args = {
+			intro = {
+				order = -1,
+				type = 'description',
+				name = L['Test Description'],
+			},
+			characterframe = {
+				order = 2,
+				type = 'group',
+				name = L['Character Frame'],
+				args = {
+					header = {
+						order = 1,
+						type = "header",
+						name = L["Character Frame Options"],
+					},
+					intro = {
+						order = 2,
+						type = 'description',
+						name = L['CFO_DESC'],
+					},
+					enable = {
+						order = 3,
+						type = "toggle",
+						name = L["Enable"],
+						desc = L["Enable/Disable Character Frame Options"],
+						get = function(info) return E.private.sle.characterframeoptions.enable end,
+						set = function(info, value) E.private.sle.characterframeoptions.enable = value; E:StaticPopup_Show("PRIVATE_RL") end
+					},
+					decoration = {
+						type = "group",
+						name = L["Decoration"],
+						order = 55,
+						disabled = function() return not E.private.sle.characterframeoptions.enable end,
+						args = {
+							normalgradient = {
+								order = 1,
+								type = 'toggle',
+								name = L["Show Equipment Gradients"],
+								desc = L["Shows gradient effect for all equipment slots."],
+								get = function(info) return E.db.sle.characterframeoptions.shownormalgradient end,
+								set = function(info, value) E.db.sle.characterframeoptions.shownormalgradient = value; CFO:ChangeGradiantVisibility(); end,
+							},
+							errorgradient = {
+								order = 2,
+								type = 'toggle',
+								name = L["Show Error Gradients"],
+								desc = L["Highlights equipment slot if an error has been found."],
+								disabled = function() return not E.private.sle.characterframeoptions.enable or not E.db.sle.characterframeoptions.shownormalgradient end,
+								get = function(info) return E.db.sle.characterframeoptions.showerrorgradient end,
+								set = function(info, value) E.db.sle.characterframeoptions.showerrorgradient = value; CFO:ArmoryFrame_DataSetting(); end,
+							},
+							bgimage = {
+								order = 3,
+								type = 'toggle',
+								name = L["Show Background Image"],
+								get = function(info) return E.db.sle.characterframeoptions.showimage end,
+								set = function(info, value) E.db.sle.characterframeoptions.showimage = value; CFO:UpdateCharacterBG(); end,
+							},
+							dropdown = {
+								type = 'select',
+								name = L['Background picture'],
+								order = 4,
+								disabled = function() return not E.db.sle.characterframeoptions.showimage end,
+								values = {
+									['SPACE'] = 'Space',
+									['ALLIANCE'] = FACTION_ALLIANCE,
+									['HORDE'] = FACTION_HORDE,
+									['CUSTOM'] = L["Custom"],
+									["EMPIRE"] = "The Empire",
+									["CASTLE"] = "Castle",
+								},
+								get = function() return E.db.sle.characterframeoptions.image.dropdown end,
+								set = function(_, value)
+									E.db.sle.characterframeoptions.image.dropdown = value; CFO:UpdateCharacterBG();
+								end,
+
+							},
+							custom = {
+								order = 5,
+								type = 'input',
+								width = 'full',
+								name = L["Texture"],
+								desc = L["Set the texture to use in this frame. Requirements are the same as the chat textures."],
+								disabled = function() return E.db.sle.characterframeoptions.image.dropdown ~= "CUSTOM" or not E.db.sle.characterframeoptions.showimage end,
+								get = function() return E.db.sle.characterframeoptions.image.custom end,
+								set = function(info, value)
+									E.db.sle.characterframeoptions.image.custom = value;
+									CFO:ArmoryFrame_DataSetting();
+								end,
+							},
+						},
+					},
+					itemlevel = {
+						type = "group",
+						name = STAT_AVERAGE_ITEM_LEVEL,
+						order = 66,
+						disabled = function() return not E.private.sle.characterframeoptions.enable end,
+						args = {
+							show = {
+								order = 3,
+								type = "toggle",
+								name = L["Show Item Level"],
+								get = function(info) return E.db.sle.characterframeoptions.itemlevel.show end,
+								set = function(info, value) E.db.sle.characterframeoptions.itemlevel.show = value; CFO:ArmoryFrame_DataSetting(); end,
+							},
+							fontGroup = {
+								order = 5,
+								type = 'group',
+								guiInline = true,
+								name = L['Font'],
+								args = {
+									font = {
+										type = "select", dialogControl = 'LSM30_Font',
+										order = 1,
+										name = L["Font"],
+										desc = L["The font that the item level will use."],
+										values = AceGUIWidgetLSMlists.font,
+										get = function(info) return E.db.sle.characterframeoptions.itemlevel.font end,
+										set = function(info, value) E.db.sle.characterframeoptions.itemlevel.font = value; CFO:ArmoryFrame_DataSetting(); end,
+									},
+									fontSize = {
+										order = 2,
+										name = L["Font Size"],
+										desc = L["Set the font size that the item level will use."],
+										type = "range",
+										min = 6, max = 22, step = 1,
+										get = function(info) return E.db.sle.characterframeoptions.itemlevel.fontSize end,
+										set = function(info, value) E.db.sle.characterframeoptions.itemlevel.fontSize = value; CFO:ArmoryFrame_DataSetting(); end,
+									},
+									fontOutline = {
+										order = 3,
+										name = L["Font Outline"],
+										desc = L["Set the font outline that the item level will use."],
+										type = "select",
+										values = {
+											['NONE'] = L['None'],
+											['OUTLINE'] = 'OUTLINE',
+											['MONOCHROME'] = 'MONOCHROME',
+											['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+											['THICKOUTLINE'] = 'THICKOUTLINE',
+										},
+										get = function(info) return E.db.sle.characterframeoptions.itemlevel.fontOutline end,
+										set = function(info, value) E.db.sle.characterframeoptions.itemlevel.fontOutline = value; CFO:ArmoryFrame_DataSetting(); end,
+									},
+								},
+							},
+						},
+					},
+					itemdurabilty = {
+						type = "group",
+						name = DURABILITY,
+						order = 77,
+						disabled = function() return not E.private.sle.characterframeoptions.enable end,
+						args = {
+							show = {
+								order = 3,
+								type = "toggle",
+								name = L["Show Durability"],
+								get = function(info) return E.db.sle.characterframeoptions.itemdurability.show end,
+								set = function(info, value) E.db.sle.characterframeoptions.itemdurability.show = value; CFO:ArmoryFrame_DataSetting(); end,
+							},
+							fontGroup = {
+								order = 5,
+								type = 'group',
+								guiInline = true,
+								name = L['Font'],
+								args = {
+									font = {
+										type = "select", dialogControl = 'LSM30_Font',
+										order = 1,
+										name = L["Font"],
+										desc = L["The font that the item durability will use."],
+										values = AceGUIWidgetLSMlists.font,
+										get = function(info) return E.db.sle.characterframeoptions.itemdurability.font end,
+										set = function(info, value) E.db.sle.characterframeoptions.itemdurability.font = value; CFO:ArmoryFrame_DataSetting(); end,
+									},
+									fontSize = {
+										order = 2,
+										name = L["Font Size"],
+										desc = L["Set the font size that the item durability will use."],
+										type = "range",
+										min = 6, max = 22, step = 1,
+										get = function(info) return E.db.sle.characterframeoptions.itemdurability.fontSize end,
+										set = function(info, value) E.db.sle.characterframeoptions.itemdurability.fontSize = value; CFO:ArmoryFrame_DataSetting(); end,
+									},
+									fontOutline = {
+										order = 3,
+										name = L["Font Outline"],
+										desc = L["Set the font outline that the item durability will use."],
+										type = "select",
+										values = {
+											['NONE'] = L['None'],
+											['OUTLINE'] = 'OUTLINE',
+											['MONOCHROME'] = 'MONOCHROME',
+											['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+											['THICKOUTLINE'] = 'THICKOUTLINE',
+										},
+										get = function(info) return E.db.sle.characterframeoptions.itemdurability.fontOutline end,
+										set = function(info, value) E.db.sle.characterframeoptions.itemdurability.fontOutline = value; CFO:ArmoryFrame_DataSetting(); end,
+									},
+								},
+							},
+						},
+					},
+					itemenchant = {
+						type = "group",
+						name = L["Enchanting"],
+						order = 88,
+						disabled = function() return not E.private.sle.characterframeoptions.enable end,
+						args = {
+							show = {
+								order = 1,
+								type = "toggle",
+								name = L["Show Enchants"],
+								desc = L["Show the enchantment effect near the enchanted item"],
+								get = function(info) return E.db.sle.characterframeoptions.itemenchant.show end,
+								set = function(info, value) E.db.sle.characterframeoptions.itemenchant.show = value; CFO:ArmoryFrame_DataSetting(); end,
+							},
+							mouseover = {
+								order = 2,
+								type = "toggle",
+								name = L['Mouse Over'],
+								desc = L["Show the enchantment effect near the enchanted item (not the item itself) when mousing over."],
+								disabled = function() return not E.db.sle.characterframeoptions.itemenchant.show or not E.private.sle.characterframeoptions.enable end,
+								get = function(info) return E.db.sle.characterframeoptions.itemenchant.mouseover end,
+								set = function(info, value) E.db.sle.characterframeoptions.itemenchant.mouseover = value; CFO:ArmoryFrame_DataSetting(); end,
+							},
+							showwarning = {
+								order = 3,
+								type = "toggle",
+								name = L["Show Warning"],
+								get = function(info) return E.db.sle.characterframeoptions.itemenchant.showwarning end,
+								set = function(info, value) E.db.sle.characterframeoptions.itemenchant.showwarning = value; CFO:ArmoryFrame_DataSetting(); end,
+							},
+							warningsize = {
+								order = 4,
+								name = L["Warning Size"],
+								desc = L["Set the icon size that the warning notification will use."],
+								type = "range",
+								min = 8, max = 18, step = 1,
+								get = function(info) return E.db.sle.characterframeoptions.itemenchant.warningSize end,
+								set = function(info, value) E.db.sle.characterframeoptions.itemenchant.warningSize = value; CFO:ResizeErrorIcon(); end,
+							},
+							fontGroup = {
+								order = 5,
+								type = 'group',
+								guiInline = true,
+								name = L['Font'],
+								args = {
+									font = {
+										type = "select", dialogControl = 'LSM30_Font',
+										order = 1,
+										name = L["Font"],
+										desc = L["The font that the enchant notification will use."],
+										values = AceGUIWidgetLSMlists.font,
+										get = function(info) return E.db.sle.characterframeoptions.itemenchant.font end,
+										set = function(info, value) E.db.sle.characterframeoptions.itemenchant.font = value; CFO:ArmoryFrame_DataSetting(); end,
+									},
+									fontSize = {
+										order = 2,
+										name = L["Font Size"],
+										desc = L["Set the font size that the enchant notification will use."],
+										type = "range",
+										min = 6, max = 22, step = 1,
+										get = function(info) return E.db.sle.characterframeoptions.itemenchant.fontSize end,
+										set = function(info, value) E.db.sle.characterframeoptions.itemenchant.fontSize = value; CFO:ArmoryFrame_DataSetting(); end,
+									},
+									fontOutline = {
+										order = 3,
+										name = L["Font Outline"],
+										desc = L["Set the font outline that the enchant notification will use."],
+										type = "select",
+										values = {
+											['NONE'] = L['None'],
+											['OUTLINE'] = 'OUTLINE',
+											['MONOCHROME'] = 'MONOCHROME',
+											['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+											['THICKOUTLINE'] = 'THICKOUTLINE',
+										},
+										get = function(info) return E.db.sle.characterframeoptions.itemenchant.fontOutline end,
+										set = function(info, value) E.db.sle.characterframeoptions.itemenchant.fontOutline = value; CFO:ArmoryFrame_DataSetting(); end,
+									},
+								},
+							},
+						},
+					},
+					itemgem = {
+						type = "group",
+						name = L["Gem Sockets"],
+						order = 99,
+						disabled = function() return not E.private.sle.characterframeoptions.enable end,
+						args = {
+							show = {
+								order = 1,
+								type = "toggle",
+								name = L["Show Gems"],
+								desc = L["Show gem slots near the item"],
+								get = function(info) return E.db.sle.characterframeoptions.itemgem.show end,
+								set = function(info, value) E.db.sle.characterframeoptions.itemgem.show = value; CFO:ArmoryFrame_DataSetting(); end,
+							},
+							showwarning = {
+								order = 2,
+								type = "toggle",
+								name = L["Show Warning"],
+								get = function(info) return E.db.sle.characterframeoptions.itemgem.showwarning end,
+								set = function(info, value) E.db.sle.characterframeoptions.itemgem.showwarning = value; CFO:ArmoryFrame_DataSetting(); end,
+							},
+							warningsize = {
+								order = 3,
+								name = L["Warning Size"],
+								desc = L["Set the icon size that the warning notification will use."],
+								type = "range",
+								min = 8, max = 18, step = 1,
+								get = function(info) return E.db.sle.characterframeoptions.itemgem.warningSize end,
+								set = function(info, value) E.db.sle.characterframeoptions.itemgem.warningSize = value; CFO:ResizeErrorIcon(); end,
+							},
+							socketsize = {
+								order = 4,
+								name = L["Socket Size"],
+								desc = L["Set the size of sockets to show."],
+								type = "range",
+								min = 10, max = 18, step = 1,
+								get = function(info) return E.db.sle.characterframeoptions.itemgem.socketSize end,
+								set = function(info, value) E.db.sle.characterframeoptions.itemgem.socketSize = value; CFO:ResizeErrorIcon(); end,
+							},
+						},
+					},
+				},
+			},
+			inspectframe = {
+				order = 2,
+				type = 'group',
+				name = L['Inspect Frame'],
+				args = {
+					header = {
+						order = 1,
+						type = "header",
+						name = L["Inspect Frame Options"],
+					},
+					intro = {
+						order = 2,
+						type = 'description',
+						name = L['IFO_DESC'],
+					},
+					enable = {
+						order = 3,
+						type = "toggle",
+						name = L["Enable"],
+						desc = L["Enable/Disable Inspect Frame Options"],
+						get = function(info) return E.private.sle.inspectframeoptions.enable end,
+						set = function(info, value) E.private.sle.inspectframeoptions.enable = value; E:StaticPopup_Show("PRIVATE_RL") end
+					},
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/chat_c.lua b/ElvUI_SLE/options/chat_c.lua
new file mode 100644
index 0000000..0fdeda1
--- /dev/null
+++ b/ElvUI_SLE/options/chat_c.lua
@@ -0,0 +1,57 @@
+local E, L, V, P, G = unpack(ElvUI);
+local CH = E:GetModule('Chat')
+
+local function configTable()
+	E.Options.args.sle.args.options.args.general.args.chat = {
+		order = 5,
+		type = "group",
+		name = L["Chat"],
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["Chat"],
+			},
+			historyreset = {
+				order = 2,
+				type = 'execute',
+				name = L["Reset Chat History"],
+				desc = L["Clears your chat history and will reload your UI."],
+				disabled = function() return not E.db.chat.chatHistory end,
+				func = function() E:StaticPopup_Show("SLE_CHAT_HISTORY") end,
+			},
+			editreset = {
+				order = 3,
+				type = 'execute',
+				name = L["Reset Editbox History"],
+				desc = L["Clears the editbox history and will reload your UI."],
+				disabled = function() return not E.db.chat.chatHistory end,
+				func = function() E:StaticPopup_Show("SLE_EDIT_HISTORY") end,
+			},
+			header2 = {
+				order = 4,
+				type = "description",
+				name = "",
+			},
+			guildmaster = {
+				order = 5,
+				type = "toggle",
+				name = L["Guild Master Icon"],
+				desc = L["Displays an icon near your Guild Master in chat.\n\n|cffFF0000Note:|r Some messages in chat history may disappear on login."],
+				get = function(info) return E.db.sle.chat.guildmaster end,
+				set = function(info, value)	E.db.sle.chat.guildmaster = value; CH:GMIconUpdate() end,
+			},
+			editboxhistory = {
+				order = 6,
+				type = "range",
+				name = L["Chat Editbox History"],
+				desc = L["The amount of messages to save in the editbox history.\n\n|cffFF0000Note:|r To disable, set to 0."],
+				min = 0, max = 20, step = 1,
+				get = function(info) return E.db.chat.editboxhistory end,
+				set = function(info, value)	E.db.chat.editboxhistory = value; end,
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/core_c.lua b/ElvUI_SLE/options/core_c.lua
new file mode 100644
index 0000000..384cd80
--- /dev/null
+++ b/ElvUI_SLE/options/core_c.lua
@@ -0,0 +1,110 @@
+local E, L, V, P, G = unpack(ElvUI)
+local SLE = E:GetModule('SLE')
+local LT = E:GetModule('SLE_Loot')
+
+local function configTable()
+	E.Options.args.ElvUI_Header = {
+			order = 1,
+			type = "header",
+			name = "ElvUI"..format(": |cff99ff33%s|r",E.version).."  ".."Shadow & Light"..format(": |cff99ff33%s|r",SLE.version),
+			width = "full",
+	}
+
+	--local size = E.db.general.fontSize
+
+	--Main options group
+	E.Options.args.sle = {
+		type = "group",
+		name = L["Shadow & Light"],
+		desc = "Plugin for |cff1784d1ElvUI|r by\nDarth Predator and Repooc.",
+		order = 50,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = "Shadow & Light"..format(": |cff99ff33%s|r", SLE.version),
+			},
+			logo = {
+				type = 'description',
+				name = '',
+				order = 2,
+				image = function() return 'Interface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Title', 650, 410 end,
+			},
+			info = {
+				order = 3,
+				type = "description",
+				name = L["SLE_DESC"],
+			},
+			Install = {
+				order = 4,
+				type = 'execute',
+				name = L['Install'],
+				desc = L['Run the installation process.'],
+				func = function() SLE:Install(); E:ToggleConfig() end,
+			},
+			options = {
+				order = 1,
+				type = "group",
+				childGroups = 'tab',
+				name = SETTINGS,
+				args = {
+					--[[intro = {
+						order = 1,
+						type = "description",
+						name = L["Below you can see option groups presented by |cff1784d1Shadow & Light|r."],
+					},]]
+					general = {
+						order = 2,
+						type = "group",
+						name = L["General"],
+						args = {
+							--[[intro = {
+								order = 1,
+								type = "description",
+								name = L["General options of |cff1784d1Shadow & Light|r."],
+							},]]
+							Reset = {
+								order = 2,
+								type = 'execute',
+								name = L["Reset All"],
+								desc = L["Resets all movers & options for S&L."],
+								func = function() SLE:Reset(true) end,
+							},
+							space1 = {
+								order = 3,
+								type = 'description',
+								name = "",
+							},
+							space2 = {
+								order = 4,
+								type = 'description',
+								name = "",
+							},
+						},
+					},
+				},
+			},
+		},
+	}
+
+	--Credits
+	E.Options.args.sle.args.credits = {
+		order = 400,
+		type = 'group',
+		name = L["Credits"],
+		args = {
+			creditheader = {
+				order = 1,
+				type = "header",
+				name = L["Credits"],
+			},
+			credits = {
+				order = 2,
+				type = "description",
+				name = L["ELVUI_SLE_CREDITS"]..'\n\n\n'..L["Submodules and Coding:"]..'\n\n'..L["ELVUI_SLE_CODERS"]..'\n\n\n'..L["Other Support:"]..'\n\n'..L["ELVUI_SLE_MISC"],
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/datatexts_c.lua b/ElvUI_SLE/options/datatexts_c.lua
new file mode 100644
index 0000000..5a57203
--- /dev/null
+++ b/ElvUI_SLE/options/datatexts_c.lua
@@ -0,0 +1,521 @@
+local E, L, V, P, G = unpack(ElvUI);
+local DTP = E:GetModule('SLE_DTPanels')
+local DT = E:GetModule('DataTexts')
+local datatexts = {}
+
+local function configTable()
+	local drop = {
+		--Group name = {short name, order, slot}
+		["DP_1"] = {"dp1", 1, 3},
+		["DP_2"] = {"dp2", 2, 3},
+		["DP_3"] = {"dp3", 3, 3},
+		["DP_4"] = {"dp4", 4, 3},
+		["DP_5"] = {"dp5", 5, 3},
+		["DP_6"] = {"dp6", 6, 3},
+		["Top_Center"] = {"top", 7, 1},
+		["Bottom_Panel"] = {"bottom", 8, 1},
+	}
+	local chatT = {
+		--Group name = {short name, order, elv's varible, chat panel(used to call functions)}
+		["Left Chat"] = {"chatleft", 9, "leftChatPanel", "LeftChat"},
+		["Right Chat"] = {"chatright", 10, "rightChatPanel", "RightChat"},
+	}
+
+	--Datatext panels
+	E.Options.args.sle.args.datatext = {
+		type = "group",
+		name = L["Panels & Dashboard"],
+		order = 10,
+		childGroups = "tab",
+		args = {
+			panels = {
+				type = "group",
+				name = L["Panels & Dashboard"],
+				order = 1,
+				args = {
+					header = {
+						order = 1,
+						type = "header",
+						name = L["Additional Datatext Panels"],
+					},
+					intro = {
+						order = 2,
+						type = "description",
+						name = L["DP_DESC"]
+					},
+					Reset = {
+						order = 3,
+						type = 'execute',
+						name = L['Restore Defaults'],
+						desc = L["Reset these options to defaults"],
+						func = function() E:GetModule('SLE'):Reset(nil, nil, true) end,
+					},
+					spacer = {
+						order = 4,
+						type = 'description',
+						name = "",
+					},
+					dashboard = {
+						order = 5,
+						type = "toggle",
+						name = L["Dashboard"],
+						desc = L["Show/Hide dashboard."],
+						get = function(info) return E.db.sle.datatext.dashboard.enable end,
+						set = function(info, value) E.db.sle.datatext.dashboard.enable = value; DTP:DashboardShow() end
+					},
+					width = {
+						order = 6,
+						type = "range",
+						name = L["Dashboard Panels Width"],
+						desc = L["Sets size of dashboard panels."],
+						disabled = function() return not E.db.sle.datatext.dashboard.enable end,
+						min = 75, max = 200, step = 1,
+						get = function(info) return E.db.sle.datatext.dashboard.width end,
+						set = function(info, value) E.db.sle.datatext.dashboard.width = value; DTP:DashWidth() end,
+					},
+					chathandle = {
+						order = 7,
+						type = "toggle",
+						name = L["Override Chat DT Panels"],
+						desc = L["This will have S&L handle chat datatext panels and place them below the left & right chat panels.\n\n|cffFF0000Note:|r When you first enabled, you may need to move the chat panels up to see your datatext panels."],
+						get = function(info) return E.db.sle.datatext.chathandle end,
+						set = function(info, value) E.db.sle.datatext.chathandle = value; E:GetModule('Layout'):ToggleChatPanels() end
+					},
+				},
+			},
+		},
+	}
+
+	for k,v in pairs(drop) do
+	E.Options.args.sle.args.datatext.args.panels.args[v[1]] = {
+		order = v[2],
+		type = "group",
+		name = L[k],
+		get = function(info) return E.db.sle.datatext[v[1]][ info[#info] ] end,
+		args = {
+			enabled = {
+				order = 1,
+				type = "toggle",
+				name = L["Enable"],
+				desc = L["Show/Hide this panel."],
+				set = function(info, value) E.db.sle.datatext[v[1]].enabled = value; DTP:ExtraDataBarSetup() end
+			},
+			width = {
+				order = 2,
+				type = "range",
+				name = L['Width'],
+				desc = L["Sets size of this panel"],
+				disabled = function() return not E.db.sle.datatext[v[1]].enabled end,
+				min = 100 * v[3], max = E.screenwidth/2, step = 1,
+				set = function(info, value) E.db.sle.datatext[v[1]].width = value; DTP:Update() end,
+			},
+			hide = {
+				order = 3,
+				type = "toggle",
+				name = L['Hide panel background'],
+				desc = L["Don't show this panel, only datatexts assinged to it"],
+				disabled = function() return not E.db.sle.datatext[v[1]].enabled end,
+				get = function(info) return E.private.sle.datatext[v[1].."hide"] end,
+				set = function(info, value) E.private.sle.datatext[v[1].."hide"] = value; E:StaticPopup_Show("PRIVATE_RL") end,
+			},
+			transparent = {
+				order = 4,
+				name = L['Panel Transparency'],
+				type = 'toggle',
+				disabled = function() return not E.db.sle.datatext[v[1]].enabled or E.private.sle.datatext[v[1].."hide"] end,
+				set = function(info, value) E.db.sle.datatext[v[1]].transparent = value; DTP:ExtraDataBarSetup() end,
+			},
+			pethide = {
+				order = 5,
+				name = L['Hide in Pet Battle'],
+				type = 'toggle',
+				desc = L['Show/Hide this frame during Pet Battles.'],
+				set = function(info, value) E.db.sle.datatext[v[1]].pethide = value; DTP:RegisterHide() end,
+			},
+			alpha = {
+				order = 12,
+				type = 'range',
+				name = L['Alpha'],
+				isPercent = true,
+				min = 0, max = 1, step = 0.01,
+				--get = function(info) return E.db.sle.backgrounds[v[1]].alpha end,
+				set = function(info, value) E.db.sle.datatext[v[1]].alpha = value; DTP:Update() end,
+			},
+		},
+	}
+	end
+
+	for k,v in pairs(chatT) do
+	E.Options.args.sle.args.datatext.args.panels.args[v[1]] = {
+		order = v[2],
+		type = "group",
+		name = L[k],
+		args = {
+			enabled = {
+				order = 1,
+				type = "toggle",
+				name = L["Enable"],
+				desc = L["Show/Hide this panel."],
+				get = function(info) return E.db.datatexts[v[3]] end,
+				set = function(info, value)
+					E.db.datatexts[v[3]] = value;
+					if E.db[v[4].."PanelFaded"] then
+						E.db[v[4].."PanelFaded"] = true;
+						Hide[v[4]]()
+					end
+					E:GetModule('Chat'):UpdateAnchors()
+					E:GetModule('Layout'):ToggleChatPanels()
+					E:GetModule('Bags'):PositionBagFrames()
+				end
+			},
+			width = {
+				order = 2,
+				type = "range",
+				name = L['Width'],
+				desc = L["Sets size of this panel"],
+				disabled = function() return not E.db.datatexts[v[3]] end,
+				min = 150, max = E.screenwidth/2, step = 1,
+				get = function(info) return E.db.sle.datatext[v[1]].width end,
+				set = function(info, value) E.db.sle.datatext[v[1]].width = value; DTP:ChatResize() end,
+			},
+			alpha = {
+				order = 12,
+				type = 'range',
+				name = L['Alpha'],
+				isPercent = true,
+				min = 0, max = 1, step = 0.01,
+				get = function(info) return E.db.sle.datatext[v[1]].alpha end,
+				set = function(info, value) E.db.sle.datatext[v[1]].alpha = value; DTP:ChatResize() end,
+			},
+		},
+
+	}
+	end
+
+	E.Options.args.sle.args.datatext.args.sldatatext = {
+		type = "group",
+		name = L["S&L Datatexts"],
+		order = 2,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["Datatext Options"],
+			},
+			intro = {
+				order = 2,
+				type = "description",
+				name = L["Some datatexts that Shadow & Light are supplied with have settings that can be modified to alter the displayed information. Please use the dropdown box to select which datatext you would like to configure."]
+			},
+			spacer = {
+				order = 3,
+				type = 'description',
+				name = "",
+			},
+			timedt = {
+				type = "group",
+				name = RAID_FINDER,
+				order = 1,
+				args = {
+					lfrshow = {
+						order = 1,
+						type = "toggle",
+						name = L["LFR Lockout"],
+						desc = L["Show/Hide LFR lockout info in time datatext's tooltip."],
+						get = function(info) return E.db.sle.lfrshow.enabled end,
+						set = function(info, value) E.db.sle.lfrshow.enabled = value; end
+					},
+					instances = {
+						order = 2,
+						type = "group",
+						name = L["Loot History"],
+						guiInline = true,
+						get = function(info) return E.db.sle.lfrshow[ info[#info] ] end,
+						set = function(info, value) E.db.sle.lfrshow[ info[#info] ] = value; end,
+						args = {
+							ds = {
+								order = 1,
+								type = "toggle",
+								name = GetMapNameByID(824),
+							},
+							mv = {
+								order = 2,
+								type = "toggle",
+								name = GetMapNameByID(896),
+							},
+							hof = {
+								order = 3,
+								type = "toggle",
+								name = GetMapNameByID(897),
+							},
+							toes = {
+								order = 4,
+								type = "toggle",
+								name = GetMapNameByID(886),
+							},
+							tot = {
+								order = 5,
+								type = "toggle",
+								name = GetMapNameByID(930),
+							},
+							soo = {
+								order = 6,
+								type = "toggle",
+								name = GetMapNameByID(953),
+							},
+							soof = {
+								order = 7,
+								type = "toggle",
+								name = FLEX_RAID.." "..GetMapNameByID(953),
+							},
+						},
+					},
+					hubs = {
+						order = 3,
+						type = "group",
+						name = L["World Loot"],
+						guiInline = true,
+						get = function(info) return E.db.sle.lfrshow[ info[#info] ] end,
+						set = function(info, value) E.db.sle.lfrshow[ info[#info] ] = value; end,
+						args = {
+							leishen = {
+								order = 1,
+								type = "toggle",
+								name = GetMapNameByID(928),
+								desc = L["Show/Hide the status of Key to the Palace of Lei Shen and Trove of the Thunder King."],
+							},
+						},
+					},
+				},
+			},
+			slcurrency = {
+				type = "group",
+				name = "S&L Currency",
+				order = 2,
+				args = {
+					header = {
+						order = 1,
+						type = "description",
+						name = L['ElvUI Improved Currency Options'],
+					},
+					arch = {
+						order = 2,
+						type = "toggle",
+						name = L['Show Archaeology Fragments'],
+						get = function(info) return E.private['ElvUI_Currency']['Archaeology'] end,
+						set = function(info, value) E.private['ElvUI_Currency']['Archaeology'] = value; end,
+					},
+					jewel = {
+						order = 3,
+						type = "toggle",
+						name = L['Show Jewelcrafting Tokens'],
+						get = function(info) return E.private['ElvUI_Currency']['Jewelcrafting'] end,
+						set = function(info, value) E.private['ElvUI_Currency']['Jewelcrafting'] = value; end,
+					},
+					pvp = {
+						order = 4,
+						type = "toggle",
+						name = L['Show Player vs Player Currency'],
+						get = function(info) return E.private['ElvUI_Currency']['PvP'] end,
+						set = function(info, value) E.private['ElvUI_Currency']['PvP'] = value; end,
+					},
+					dungeon = {
+						order = 5,
+						type = "toggle",
+						name = L['Show Dungeon and Raid Currency'],
+						get = function(info) return E.private['ElvUI_Currency']['Raid'] end,
+						set = function(info, value) E.private['ElvUI_Currency']['Raid'] = value; end,
+					},
+					cook = {
+						order = 6,
+						type = "toggle",
+						name = L['Show Cooking Awards'],
+						get = function(info) return E.private['ElvUI_Currency']['Cooking'] end,
+						set = function(info, value) E.private['ElvUI_Currency']['Cooking'] = value; end,
+					},
+					misc = {
+						order = 7,
+						type = "toggle",
+						name = L['Show Miscellaneous Currency'],
+						get = function(info) return E.private['ElvUI_Currency']['Miscellaneous'] end,
+						set = function(info, value) E.private['ElvUI_Currency']['Miscellaneous'] = value; end,
+					},
+					zero = {
+						order = 8,
+						type = "toggle",
+						name = L['Show Zero Currency'],
+						get = function(info) return E.private['ElvUI_Currency']['Zero'] end,
+						set = function(info, value) E.private['ElvUI_Currency']['Zero'] = value; end,
+					},
+					icons = {
+						order = 9,
+						type = "toggle",
+						name = L['Show Icons'],
+						get = function(info) return E.private['ElvUI_Currency']['Icons'] end,
+						set = function(info, value) E.private['ElvUI_Currency']['Icons'] = value; end,
+					},
+					faction = {
+						order = 10,
+						type = "toggle",
+						name = L['Show Faction Totals'],
+						get = function(info) return E.private['ElvUI_Currency']['Faction'] end,
+						set = function(info, value) E.private['ElvUI_Currency']['Faction'] = value; end,
+					},
+					unused = {
+						order = 11,
+						type = "toggle",
+						name = L['Show Unsed Currency'],
+						get = function(info) return E.private['ElvUI_Currency']['Unused'] end,
+						set = function(info, value) E.private['ElvUI_Currency']['Unused'] = value; end,
+					},
+				},
+			},
+			slfriends = {
+				type = "group",
+				name = L["S&L Friends"],
+				order = 3,
+				args = {
+					header = {
+						order = 1,
+						type = "description",
+						name = L["These options are for modifing the Shadow & Light Friends datatext."],
+					},
+					combat = {
+						order = 2,
+						type = "toggle",
+						name = L["Hide In Combat"],
+						desc = L["Will not show the tooltip while in combat."],
+						get = function(info) return E.db.sle.dt.friends.combat end,
+						set = function(info, value) E.db.sle.dt.friends.combat = value; end,
+					},
+					hidetotals = {
+						order = 3,
+						type = "toggle",
+						name = L["Show Totals"],
+						desc = L["Show total friends in the datatext."],
+						get = function(info) return E.db.sle.dt.friends.totals end,
+						set = function(info, value) E.db.sle.dt.friends.totals = value; DT:update_Friends() end,
+					},
+					hidehintline = {
+						order = 4,
+						type = "toggle",
+						name = L["Hide Hints"],
+						desc = L["Hide the hints in the tooltip."],
+						get = function(info) return E.db.sle.dt.friends.hide_hintline end,
+						set = function(info, value) E.db.sle.dt.friends.hide_hintline = value; end,
+					},
+					bnbroadcast = {
+						order = 5,
+						type = "toggle",
+						name = L["Expand RealID"],
+						desc = L["Display realid with two lines to view broadcasts."],
+						get = function(info) return E.db.sle.dt.friends.expandBNBroadcast end,
+						set = function(info, value) E.db.sle.dt.friends.expandBNBroadcast = value; end,
+					},
+					spacer = {
+						order = 6,
+						type = 'description',
+						name = "",
+					},
+					tooltipautohide = {
+						order = 7,
+						type = "range",
+						name = L["Autohide Delay:"],
+						desc = L["Adjust the tooltip autohide delay when mouse is no longer hovering of the datatext."],
+						min = 0.1, max = 1, step = 0.1,
+						get = function(info) return E.db.sle.dt.friends.tooltipAutohide end,
+						set = function(info, value) E.db.sle.dt.friends.tooltipAutohide = value; end,
+					},
+				},
+			},
+			slguild = {
+				type = "group",
+				name = L["S&L Guild"],
+				order = 4,
+				args = {
+					header = {
+						order = 1,
+						type = "description",
+						name = L["These options are for modifing the Shadow & Light Guild datatext."],
+					},
+					combat = {
+						order = 2,
+						type = "toggle",
+						name = L["Hide In Combat"],
+						desc = L["Will not show the tooltip while in combat."],
+						get = function(info) return E.db.sle.dt.guild.combat end,
+						set = function(info, value) E.db.sle.dt.guild.combat = value; end,
+					},
+					hidetotals = {
+						order = 3,
+						type = "toggle",
+						name = L["Show Totals"],
+						desc = L["Show total guild members in the datatext."],
+						get = function(info) return E.db.sle.dt.guild.totals end,
+						set = function(info, value) E.db.sle.dt.guild.totals = value; DT:update_Guild() end,
+					},
+					hidehintline = {
+						order = 4,
+						type = "toggle",
+						name = L["Hide Hints"],
+						desc = L["Display the hints in the tooltip."],
+						get = function(info) return E.db.sle.dt.guild.hide_hintline end,
+						set = function(info, value) E.db.sle.dt.guild.hide_hintline = value; end,
+					},
+					hidemotd = {
+						order = 5,
+						type = "toggle",
+						name = L["Hide MOTD"],
+						desc = L["Hide the guild's Message of the Day in the tooltip."],
+						get = function(info) return E.db.sle.dt.guild.hide_gmotd end,
+						set = function(info, value) E.db.sle.dt.guild.hide_gmotd = value; end,
+					},
+					hideguildname = {
+						order = 6,
+						type = "toggle",
+						name = L["Hide Guild Name"],
+						desc = L["Hide the guild's name in the tooltip."],
+						get = function(info) return E.db.sle.dt.guild.hide_guildname end,
+						set = function(info, value) E.db.sle.dt.guild.hide_guildname = value; end,
+					},
+					spacer = {
+						order = 7,
+						type = 'description',
+						name = "",
+					},
+					tooltipautohide = {
+						order = 8,
+						type = "range",
+						name = L["Autohide Delay:"],
+						desc = L["Adjust the tooltip autohide delay when mouse is no longer hovering of the datatext."],
+						min = 0.1, max = 1, step = 0.1,
+						get = function(info) return E.db.sle.dt.guild.tooltipAutohide end,
+						set = function(info, value) E.db.sle.dt.guild.tooltipAutohide = value; end,
+					},
+				},
+			},
+			slmail = {
+				type = "group",
+				name = L["S&L Mail"],
+				order = 5,
+				args = {
+					header = {
+						order = 1,
+						type = "description",
+						name = L["These options are for modifing the Shadow & Light Mail datatext."],
+					},
+					icon = {
+						order = 2,
+						type = "toggle",
+						name = L["Minimap icon"],
+						desc = L["If enabled will show new mail icon on minimap."],
+						get = function(info) return E.db.sle.dt.mail.icon end,
+						set = function(info, value) E.db.sle.dt.mail.icon = value; DT:SLEmailUp() end,
+					}
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/dev_c.lua b/ElvUI_SLE/options/dev_c.lua
new file mode 100644
index 0000000..85a815b
--- /dev/null
+++ b/ElvUI_SLE/options/dev_c.lua
@@ -0,0 +1,378 @@
+local E, L, V, P, G = unpack(ElvUI);
+local SLE = E:GetModule('SLE');
+local ACD = LibStub("AceConfigDialog-3.0")
+
+local bnettesttbl = {}
+function SLE:GetBNetInfo()
+	local _, numBNetOnline = BNGetNumFriends()
+	for i = 1, numBNetOnline do
+		local presenceID, presenceName, _, _, _, _, client, isOnline = BNGetFriendInfo(i)
+		if isOnline and client == BNET_CLIENT_WOW then
+			BNSendGameData(presenceID, 'SLE_DEV_REQ', 'slesay#'..presenceID)
+		end
+	end
+end
+
+if SLE:Auth() then
+	local selectedChannel = ''
+	local UserListCache = {}
+	local highestVersion = tonumber(SLE.version)
+	local flag = 'SLE_DEV_SAYS'
+	local addonChannel = 'GUILD'
+	local addonTarget = ""
+	local output = 'SAY'
+	local text = ''
+	local wtarget = ""
+	local bnetP
+
+	function SLE:delete(...)
+		local _, id = ...
+		id = tostring(id)
+		bnettesttbl[id] = nil
+	end
+	SLE:RegisterEvent('BN_FRIEND_ACCOUNT_OFFLINE', 'delete')
+
+	RegisterAddonMessagePrefix('SLE_DEV_INFO')
+
+	local f = CreateFrame('Frame')
+	f:RegisterEvent('CHAT_MSG_ADDON')
+	f:RegisterEvent('BN_CHAT_MSG_ADDON')
+	f:RegisterEvent('BN_FRIEND_ACCOUNT_ONLINE')
+	f:RegisterEvent('PLAYER_ENTERING_WORLD')
+	f:SetScript('OnEvent', function(self, event, prefix, message, channel, sender)
+		if event == 'BN_FRIEND_ACCOUNT_ONLINE' or event == 'BN_FRIEND_ACCOUNT_OFFLINE' then
+			SLE:GetBNetInfo()
+		end
+
+		if event == 'PLAYER_ENTERING_WORLD' then
+			SLE:GetBNetInfo()
+		end
+
+		if prefix == 'SLE_DEV_INFO' then
+			if event == 'CHAT_MSG_ADDON' or event == 'BN_CHAT_MSG_ADDON' then
+				if not message:find("SLEinfo") then
+					local userLevel, userClass, userName, userRealm, userVersion = strsplit('#', message)
+					if (userName == E.myname and userRealm == E.myrealm) then return end;
+
+					userVersion = tonumber(userVersion)
+
+					if userVersion > highestVersion then
+						highestVersion = userVersion
+					end
+
+					local id = #UserListCache + 1;
+
+					for i=1,#UserListCache do
+						if (UserListCache[i].userName == userName and UserListCache[i].userRealm == userRealm) then
+							id = i;
+							break;
+						end
+					end
+
+					UserListCache[id] = {
+						['userLevel'] = userLevel,
+						['userClass'] = userClass,
+						['userName'] = userName,
+						['userRealm'] = userRealm,
+						['userVersion'] = userVersion,
+					}
+
+					if (IsAddOnLoaded("ElvUI_Config")) then
+						ACD:SelectGroup('ElvUI', 'sle', 'developer', 'userList')
+					end
+				else
+					local _, numBNetOnline = BNGetNumFriends()
+					for i = 1, numBNetOnline do
+						local presenceID, presenceName, _, _, toon, _, _, _ = BNGetFriendInfo(i)
+						message = message:gsub("SLEinfo", '')
+						local pid = tonumber(message)
+						if pid == presenceID then
+							bnettesttbl[message] = presenceName;
+						end
+					end
+				end
+			end
+		end
+	end)
+
+	local function configTable()
+		E.Options.args.sle.args.developer = {
+			order = 999,
+			type = 'group',
+			name = "Developer",
+			childGroups = 'tab',
+			args = {
+				header = {
+					order = 1,
+					type = "header",
+					name = "Evil Overlord Control Panel",
+				},
+				testdesc = {
+					order = 2,
+					type = "description",
+					name = "WTF are you doing here, asshole?!",
+				},
+				userList = {
+					order = 3,
+					type = "group",
+					name = "User List",
+					args = {
+						listheader = {
+							order = 1,
+							type = "header",
+							name = "List of possible victims",
+						},
+						List = {
+							type = 'select',
+							name = 'Choose a channel',
+							order = 2,
+							get = function() return selectedChannel end,
+							set = function(_, value)
+								selectedChannel = value
+							end,
+							values = {
+								[''] = ' ',
+								['GUILD'] = 'Guild',
+								['INSTANCE_CHAT'] = 'Instance',
+								['PARTY'] = 'Party',
+								['RAID'] = 'Raid',
+								['BNET'] = 'BNet',
+							},
+						},
+						submitbutton = {
+							type = 'execute',
+							order = 3,
+							name = function()
+								return selectedChannel ~= '' and "Update List" or "Clear List"
+							end,
+							func = function(info, value)
+								UserListCache = {} -- Clear Cache
+
+								if selectedChannel == 'BNET' then
+									local _, numBNetOnline = BNGetNumFriends()
+									for i = 1, numBNetOnline do
+										local presenceID, _, _, _, _, _, client, isOnline = BNGetFriendInfo(i)
+										if isOnline and client == BNET_CLIENT_WOW then
+											BNSendGameData(presenceID, 'SLE_DEV_REQ', 'userlist')
+										end
+									end
+								elseif selectedChannel ~= '' then
+									SendAddonMessage('SLE_DEV_REQ', 'userlist', selectedChannel)
+								end
+							end,
+						},
+						Space = {
+							type = 'description',
+							name = ' ',
+							order = 4,
+						},
+						userList = {
+							type = 'group',
+							name = function()
+								return 'Userlist : '..selectedChannel
+							end,
+							order = 5,
+							guiInline = true,
+							args = {},
+							hidden = function() return selectedChannel == '' end,
+						},
+					},
+				},
+				devcommand = {
+					order = 4,
+					type = "group",
+					name = "Commands",
+					args = {
+						header = {
+							order = 1,
+							type = "header",
+							name = "Developer commands execution GUI",
+						},
+						desc = {
+							order = 2,
+							type = 'description',
+							name = "The GUI for executing old /slesays and /slecmd without typing all the shit mannually.",
+						},
+						flag = {
+							type = 'select',
+							name = 'Addon message type',
+							order = 3,
+							get = function() return flag end,
+							set = function(_, value)
+								flag = value
+							end,
+							values = {
+								['SLE_DEV_SAYS'] = 'S&L Says',
+								['SLE_DEV_CMD'] = 'S&L Command',
+							},
+						},
+						channel = {
+							type = 'select',
+							name = 'Addon message channel',
+							order = 4,
+							get = function() return addonChannel end,
+							set = function(_, value)
+								addonChannel = value
+							end,
+							values = {
+								['GUILD'] = 'Guild',
+								['INSTANCE_CHAT'] = 'Instance',
+								['PARTY'] = 'Party',
+								['RAID'] = 'Raid',
+								['WHISPER'] = 'Whisper',
+								['BNET'] = 'BNet',
+							},
+						},
+						bnetlist = {
+							type = 'select',
+							name = 'BNet List',
+							order = 5,
+							disabled = function() return addonChannel ~= 'BNET' end,
+							get = function() return bnetP end,
+							set = function(_, value)
+								bnetP = value
+							end,
+							values = function()
+								SLE:GetBNetInfo()
+								return bnettesttbl
+							end,
+						},
+						target = {
+							order = 6,
+							type = 'input',
+							width = 'full',
+							name = 'Unit to send message to',
+							disabled = function() return addonChannel == 'BNET' end,
+							get = function() return addonTarget end,
+							set = function(_, value)
+								addonTarget = value
+							end,
+						},
+						message = {
+							order = 7,
+							type = "group",
+							name = 'Message',
+							guiInline = true,
+							args = {
+								channel = {
+									type = 'select',
+									order = 1,
+									name = 'Output channel (S&L Says only)',
+									disabled = function() return flag ~= 'SLE_DEV_SAYS' end,
+									get = function() return output end,
+									set = function(_, value)
+										output = value
+									end,
+									values = {
+										['GUILD'] = 'Guild',
+										['INSTANCE_CHAT'] = 'Instance',
+										['PARTY'] = 'Party',
+										['RAID'] = 'Raid',
+										['SAY'] = "Say",
+										['YELL'] = "Yell",
+										['WHISPER'] = "Whisper",
+									},
+								},
+								message = {
+									type = 'input',
+									order = 2,
+									width = 'full',
+									name = 'Message to send/Script to execute',
+									get = function() return text end,
+									set = function(_, value)
+										text = value
+									end,
+								},
+								whispTarget = {
+									type = 'input',
+									order = 3,
+									width = 'full',
+									name = 'Whisper target (S&L Says with whisper only)',
+									disabled = function() return (flag ~= 'SLE_DEV_SAYS') or (flag == 'SLE_DEV_SAYS' and output ~= 'WHISPER') end,
+									get = function() return wtarget end,
+									set = function(_, value)
+										wtarget = value
+									end,
+								},
+							},
+						},
+						submitbutton = {
+							type = 'execute',
+							order = 8,
+							name = "Execute command",
+							desc = "Unleash the chaos!!!",
+							func = function ()
+								SLE:Print('Trying to execute this command...')
+								E:sleCommand(flag, addonChannel, addonTarget, output, text, wtarget, bnetP)
+							end,
+						},
+					},
+				},
+				devdiaggroup = {
+					order = 5,
+					type = "group",
+					name = "Tech and shit",
+					args = {
+						subgroup = {
+							order = 1,
+							type = "header",
+							name = "Some tech stuff",
+						},
+						cpuprofiling = {
+							order = 2,
+							type = 'execute',
+							name = "CPU Profiling",
+							func = function() SetCVar("scriptProfile", GetCVar("scriptProfile") == "1" and 0 or 1); ReloadUI() end,
+						},
+					},
+				},
+				devgroupone = {
+					order = 500,
+					type = "group",
+					name = "Test Group",
+					args = {
+						subgroup = {
+							order = 1,
+							type = "header",
+							name = "Dafuq we have this?",
+						},
+					},
+				},
+			},
+		}
+
+		for i = 1, 40 do
+			E.Options.args.sle.args.developer.args.userList.args.userList.args[tostring(i)] = {
+				type = 'description',
+				order = i,
+				name = function()
+					if UserListCache[i] then
+						local Level = GetQuestDifficultyColor(UserListCache[i]['userLevel'])
+						Level = format('|cff%02x%02x%02x%s|r', Level.r *255, Level.g *255, Level.b *255, UserListCache[i]['userLevel'])
+
+						local ClassColor = '|c'..RAID_CLASS_COLORS[(UserListCache[i]['userClass'])]['colorStr']
+						local UserName = ClassColor..UserListCache[i]['userName']..'|r'
+
+						local UserRealm = UserListCache[i]['userRealm']
+
+						local UserVersion = UserListCache[i]['userVersion']
+						UserVersion = (UserVersion == highestVersion and '|cffceff00' or '|cffff5678')..UserVersion
+
+						local Icon = '';
+						local realm = UserRealm:gsub(' ','');
+						if (SLE.SpecialChatIcons[realm] and SLE.SpecialChatIcons[realm][UserListCache[i]['userName']]) then
+							Icon = SLE.SpecialChatIcons[realm][UserListCache[i]['userName']];
+
+						end
+						return Level..'  '..UserName.. '|cffffffff - '..UserRealm..' : '..UserVersion..Icon
+					else
+						return ' '
+					end
+				end,
+				hidden = function() return not UserListCache[i] end,
+			}
+		end
+	end
+
+	table.insert(E.SLEConfigs, configTable)
+end
\ No newline at end of file
diff --git a/ElvUI_SLE/options/equipmanager_c.lua b/ElvUI_SLE/options/equipmanager_c.lua
new file mode 100644
index 0000000..26ad8e3
--- /dev/null
+++ b/ElvUI_SLE/options/equipmanager_c.lua
@@ -0,0 +1,129 @@
+local E, L, V, P, G = unpack(ElvUI);
+local EM = E:GetModule('SLE_EquipManager')
+local BI = E:GetModule('SLE_BagInfo')
+
+local sets = {}
+
+local function FillTable()
+	sets = {}
+	sets["NONE"] = NONE
+	for i = 1, GetNumEquipmentSets() do
+		local name, icon, lessIndex = GetEquipmentSetInfo(i)
+		if name then
+			sets[name] = name
+		end
+	end
+	return sets
+end
+
+local function configTable()
+	E.Options.args.sle.args.options.args.equipmanager = {
+		type = 'group',
+		order = 7,
+		name = L['Equipment Manager'],
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["Equipment Manager"],
+			},
+			intro = {
+				order = 2,
+				type = 'description',
+				name = L["EM_DESC"],
+			},
+			enable = {
+				type = "toggle",
+				order = 3,
+				name = L['Enable'],
+				get = function(info) return E.private.sle.equip.enable end,
+				set = function(info, value) E.private.sle.equip.enable = value; E:StaticPopup_Show("PRIVATE_RL") end
+			},
+			spam = {
+				type = "toggle",
+				order = 4,
+				name = L['Spam Throttling'],
+				desc = L["Removes the spam from chat stating what talents were learned or unlearned during spec change."],
+				get = function(info) return E.private.sle.equip.spam end,
+				set = function(info, value) E.private.sle.equip.spam = value; EM:SpamThrottle() end
+			},
+			setoverlay = {
+				type = "toggle",
+				order = 5,
+				name = L['Equipment Set Overlay'],
+				desc = L['Show the associated equipment sets for the items in your bags (or bank).'],
+				get = function(info) return E.private.sle.equip.setoverlay end,
+				set = function(info, value) E.private.sle.equip.setoverlay = value; BI:ToggleSettings(); end,
+			},
+			equipsets = {
+				type = "group",
+				name = PAPERDOLL_EQUIPMENTMANAGER,
+				order = 6,
+				disabled = function() return not E.private.sle.equip.enable end,
+				guiInline = true,
+				args = {
+					intro = {
+						order = 1,
+						type = 'description',
+						name = L["Here you can choose what equipment sets to use in different situations."],
+					},
+					primary = {
+						order = 2,
+						type = "select",
+						name = SPECIALIZATION_PRIMARY,
+						desc = L["Equip this set when switching to primary talents."],
+						get = function(info) return E.private.sle.equip.primary end,
+						set = function(info, value) E.private.sle.equip.primary = value; end,
+						values = function()
+							FillTable()
+							return sets
+						end,
+					},
+					secondary = {
+						order = 3,
+						type = "select",
+						name = SPECIALIZATION_SECONDARY,
+						desc = L["Equip this set when switching to secondary talents."],
+						get = function(info) return E.private.sle.equip.secondary end,
+						set = function(info, value) E.private.sle.equip.secondary = value end,
+						values = function()
+							FillTable()
+							return sets
+						end,
+					},
+					spacer = {
+						type = "description",
+						order = 4,
+						name = "",
+					},
+					instance = {
+						order = 5,
+						type = "select",
+						name = DUNGEONS,
+						desc = L["Equip this set after entering dungeons or raids."],
+						get = function(info) return E.private.sle.equip.instance end,
+						set = function(info, value) E.private.sle.equip.instance = value end,
+						values = function()
+							FillTable()
+							return sets
+						end,
+					},
+					pvp = {
+						order = 6,
+						type = "select",
+						name = PVP,
+						desc = L["Equip this set after entering battlegrounds or arens."],
+						get = function(info) return E.private.sle.equip.pvp end,
+						set = function(info, value) E.private.sle.equip.pvp = value end,
+						values = function()
+							FillTable()
+							return sets
+						end,
+					},
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/exprepbar_c.lua b/ElvUI_SLE/options/exprepbar_c.lua
new file mode 100644
index 0000000..0138040
--- /dev/null
+++ b/ElvUI_SLE/options/exprepbar_c.lua
@@ -0,0 +1,44 @@
+local E, L, V, P, G = unpack(ElvUI);
+local M = E:GetModule('Misc')
+
+local function configTable()
+	--Options for Exp/Rep text
+	E.Options.args.sle.args.options.args.general.args.exprep = {
+		type = "group",
+		name = L["Xp-Rep Text"],
+		order = 99,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["Xp-Rep Text"],
+			},
+			explong = {
+				order = 2,
+				type = "toggle",
+				name = L["Full value on Exp Bar"],
+				desc = L["Changes the way text is shown on exp bar."],
+				get = function(info) return E.db.sle.exprep.explong end,
+				set = function(info, value) E.db.sle.exprep.explong = value; M:UpdateExperience() end
+			},
+			replong = {
+				order = 3,
+				type = "toggle",
+				name = L["Full value on Rep Bar"],
+				desc = L["Changes the way text is shown on rep bar."],
+				get = function(info) return E.db.sle.exprep.replong end,
+				set = function(info, value) E.db.sle.exprep.replong = value; M:UpdateReputation() end
+			},
+			autotrackrep = {
+				order = 4,
+				type = "toggle",
+				name = L["Auto Track Reputation"],
+				desc = L["Automatically sets reputation tracking to the most recent reputation change."],
+				get = function(info) return E.private.sle.exprep.autotrack end,
+				set = function(info, value) E.private.sle.exprep.autotrack = value; end
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/farm_c.lua b/ElvUI_SLE/options/farm_c.lua
new file mode 100644
index 0000000..d51711b
--- /dev/null
+++ b/ElvUI_SLE/options/farm_c.lua
@@ -0,0 +1,97 @@
+local E, L, V, P, G = unpack(ElvUI);
+local F = E:GetModule('SLE_Farm')
+
+local function configTable()
+	E.Options.args.sle.args.options.args.farm = {
+		type = 'group',
+		order = 8,
+		name = L['Farm'],
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["Farm Options"],
+			},
+			intro = {
+				order = 2,
+				type = 'description',
+				name = L["FARM_DESC"],
+			},
+			enable = {
+				type = "toggle",
+				order = 3,
+				name = L['Enable'],
+				get = function(info) return E.private.sle.farm.enable end,
+				set = function(info, value) E.private.sle.farm.enable = value; E:StaticPopup_Show("PRIVATE_RL") end
+			},
+			active = {
+				order = 4,
+				type = 'toggle',
+				name = L['Only active buttons'],
+				desc = L['Only show the buttons for the seeds, portals, tools you have in your bags.'],
+				disabled = function() return not E.private.sle.farm.enable end,
+				get = function(info) return E.db.sle.farm.active end,
+				set = function(info, value) E.db.sle.farm.active = value; if SeedAnchor then F:UpdateLayout() end end,
+			},
+			size = {
+				order = 5,
+				type = "range",
+				name = L["Button Size"],
+				disabled = function() return not E.private.sle.farm.enable end,
+				min = 15, max = 60, step = 1,
+				get = function(info) return E.db.sle.farm.size end,
+				set = function(info, value) E.db.sle.farm.size = value; F:UpdateLayout() end,
+			},
+			seedbar = {
+				type = "group",
+				order = 6,
+				name = L["Seed Bars"],
+				disabled = function() return not E.private.sle.farm.enable end,
+				guiInline = true,
+				args = {
+					autotarget = {
+						type = "toggle",
+						order = 1,
+						name = L["Auto Planting"],
+						desc = L["Automatically plant seeds to the nearest tilled soil if one is not already selected."],
+						get = function(info) return E.db.sle.farm.autotarget end,
+						set = function(info, value) E.db.sle.farm.autotarget = value; end
+					},
+					trash = {
+						type = "toggle",
+						order = 2,
+						name = L["Drop Seeds"],
+						desc = L["Allow seeds to be destroyed from seed bars."],
+						get = function(info) return E.private.sle.farm.seedtrash end,
+						set = function(info, value) E.private.sle.farm.seedtrash = value; E:StaticPopup_Show("PRIVATE_RL") end
+					},
+					quest = {
+						type = "toggle",
+						order = 3,
+						name = L["Quest Glow"],
+						desc = L["Show glowing border on seeds needed for any quest in your log."],
+						get = function(info) return E.db.sle.farm.quest end,
+						set = function(info, value) E.db.sle.farm.quest = value; if SeedAnchor then F:UpdateLayout() end end
+					},
+					growth = {
+						order = 8,
+						type = "select",
+						name = L["Dock Buttons To"],
+						desc = L["Change the position from where seed bars will grow."],
+						disabled = function() return not E.private.sle.farm end,
+						get = function(info) return E.db.sle.farm.seedor end,
+						set = function(info, value) E.db.sle.farm.seedor = value; if SeedAnchor then F:UpdateLayout() end end,
+						values = {
+							['RIGHT'] = L["Right"],
+							['LEFT'] = L["Left"],
+							['BOTTOM'] = L["Bottom"],
+							['TOP'] = L["Top"],
+						},
+					},
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/help_c.lua b/ElvUI_SLE/options/help_c.lua
new file mode 100644
index 0000000..6710fe0
--- /dev/null
+++ b/ElvUI_SLE/options/help_c.lua
@@ -0,0 +1,120 @@
+local E, L, V, P, G = unpack(ElvUI);
+local SLE = E:GetModule('SLE')
+
+local function configTable()
+	--Main options group
+	E.Options.args.sle.args.help = {
+		type = 'group',
+		name = 'About/Help',
+		order = -2,
+		childGroups = 'tab',
+		args = {
+			desc = {
+				order = 1,
+				type = 'description',
+				fontSize = 'medium',
+				name = 'Da Helpz!!!!',
+			},
+			about = {
+				type = 'group',
+				name = 'About',
+				order = 2,
+				args = {
+					content = {
+						order = 1,
+						type = 'description',
+						fontSize = 'medium',
+						name = [[Shadow & Light is a plugin by two lazy asses.
+This shit is comletely broken and should be scrapped as soon as possible!]],
+					},
+				},
+			},
+			faq = {
+				type = 'group',
+				name = 'FAQ',
+				order = 2,
+				args = {
+					desc = {
+						order = 1,
+						type = 'description',
+						fontSize = 'medium',
+						name = 'Da FAQz!!!!',
+					},
+					q1 = {
+						type = 'group',
+						name = '',
+						order = 2,
+						guiInline = true,
+						args = {
+							q = {
+								order = 1,
+								type = 'description',
+								fontSize = 'medium',
+								name = [[|cff30ee30Imma be da first question!|r
+Imma be da first answerz]],
+							},
+						},
+					},
+					q2 = {
+						type = 'group',
+						name = '',
+						order = 3,
+						guiInline = true,
+						args = {
+							q = {
+								order = 2,
+								type = 'description',
+								fontSize = 'medium',
+								name = [[|cff30ee30Imma be da second question!|r
+Imma be da second answerz]],
+							},
+						},
+					},
+				},
+			},
+			links = {
+				type = 'group',
+				name = 'Links',
+				order = 10,
+				args = {
+					desc = {
+						order = 1,
+						type = 'description',
+						fontSize = 'medium',
+						name = 'Da LinkZ!!!!',
+					},
+					tukuilink = {
+						type = 'input',
+						width = 'full',
+						name = 'On TukUI.org',
+						get = function(info) return 'http://www.tukui.org/addons/index.php?act=view&id=42' end,
+						order = 2,
+					},
+					wowilink = {
+						type = 'input',
+						width = 'full',
+						name = 'On WoWI',
+						get = function(info) return 'http://www.wowinterface.com/downloads/info20927-ElvUIShadowLight.html' end,
+						order = 3,
+					},
+					curselink= {
+						type = 'input',
+						width = 'full',
+						name = 'On Curse',
+						get = function(info) return 'http://www.curse.com/addons/wow/shadow-and-light-edit' end,
+						order = 4,
+					},
+					gitlablink = {
+						type = 'input',
+						width = 'full',
+						name = 'GitLab Link / Report Errors',
+						get = function(info) return 'http://git.tukui.org/repooc/elvui-shadowandlight' end,
+						order = 5,
+					},
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/imports_c.lua b/ElvUI_SLE/options/imports_c.lua
new file mode 100644
index 0000000..0608d0e
--- /dev/null
+++ b/ElvUI_SLE/options/imports_c.lua
@@ -0,0 +1,600 @@
+local E, L, V, P, G = unpack(ElvUI);
+local AI = E:GetModule('SLE_AddonInstaller');
+local SLE = E:GetModule('SLE');
+
+local selectedAuthor
+local selectedClass
+local selectedOption
+local authors
+local options = {
+	Filters = "Filters",
+	Addons = "Addons",
+}
+local classes = {
+	AllClasses = "All Classes",
+	Priest = "Priest",
+	Druid = "Druid",
+	Paladin = "Paladin",
+	Shaman = "Shaman",
+	Monk = "Monk",
+	Rogue = "Rogue",
+	Mage = "Mage",
+	Warrior = "Warrior",
+	Deathknight = "Deathknight",
+}
+local function buffWatch(filter)
+	if filter == "AllClasses" and selectedAuthor == "Affinitii" then
+		E.global.unitframe.buffwatch["PRIEST"] = {
+			{["point"] = "LEFT",["displayText"] = true,["yOffset"] = 2,["style"] = "NONE",["textColor"] = {["g"] = 0,["b"] = 0,},},
+			{["point"] = "TOPRIGHT",["style"] = "texturedIcon",},
+			{["enabled"] = false,},{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},nil,
+			{["enabled"] = false,},{["enabled"] = false,},{["enabled"] = false,},
+			{["enabled"] = true,["anyUnit"] = false,["point"] = "BOTTOMLEFT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["textThreshold"] = -1,["yOffset"] = 8,["style"] = "NONE",["id"] = 47753,},
+			{["enabled"] = true,["anyUnit"] = false,["point"] = "BOTTOMRIGHT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["textThreshold"] = -1,["yOffset"] = 8,["style"] = "NONE",["id"] = 114908,},
+		}
+		E.global.unitframe.buffwatch["DRUID"] = {
+			{["point"] = "TOPLEFT",["displayText"] = true,["style"] = "NONE",}, -- [1]
+			{["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",
+			},{["point"] = "BOTTOMRIGHT",["displayText"] = true,["textThreshold"] = 5,["yOffset"] = 12,["style"] = "texturedIcon",},
+			{["point"] = "TOPRIGHT",["displayText"] = true,["textThreshold"] = 3,["style"] = "texturedIcon",},
+		}
+		E.global.unitframe.buffwatch["MONK"] = {
+			{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},{["enabled"] = false,},
+			{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",},
+			{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",},
+			{["enabled"] = true,["anyUnit"] = false,["point"] = "TOPRIGHT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,
+			},["id"] = 115175,["displayText"] = false,["style"] = "texturedIcon",["yOffset"] = 0,},
+		}
+		E.global.unitframe.buffwatch["SHAMAN"] = {
+			{["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["style"] = "NONE",},
+			{["point"] = "BOTTOMRIGHT",["yOffset"] = 10,["style"] = "texturedIcon",},
+			{["point"] = "TOPLEFT",["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},
+		}
+		ReloadUI();
+	elseif selectedAuthor == "Affintii" then
+		if filter == "Priest" then
+			E.global.unitframe.buffwatch["PRIEST"] = {
+				{["point"] = "LEFT",["displayText"] = true,["yOffset"] = 2,["style"] = "NONE",["textColor"] = {["g"] = 0,["b"] = 0,},},
+				{["point"] = "TOPRIGHT",["style"] = "texturedIcon",},
+				{["enabled"] = false,},{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},nil,
+				{["enabled"] = false,},{["enabled"] = false,},{["enabled"] = false,},
+				{["enabled"] = true,["anyUnit"] = false,["point"] = "BOTTOMLEFT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["textThreshold"] = -1,["yOffset"] = 8,["style"] = "NONE",["id"] = 47753,},
+				{["enabled"] = true,["anyUnit"] = false,["point"] = "BOTTOMRIGHT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["textThreshold"] = -1,["yOffset"] = 8,["style"] = "NONE",["id"] = 114908,},
+			}
+			ReloadUI();
+		elseif filter == "Druid" then
+			E.global.unitframe.buffwatch["DRUID"] = {
+				{["point"] = "TOPLEFT",["displayText"] = true,["style"] = "NONE",}, -- [1]
+				{["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",
+				},{["point"] = "BOTTOMRIGHT",["displayText"] = true,["textThreshold"] = 5,["yOffset"] = 12,["style"] = "texturedIcon",},
+				{["point"] = "TOPRIGHT",["displayText"] = true,["textThreshold"] = 3,["style"] = "texturedIcon",},
+			}
+			ReloadUI();
+		elseif filter == "Monk" then
+			E.global.unitframe.buffwatch["MONK"] = {
+				{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},{["enabled"] = false,},
+				{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",},
+				{["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["yOffset"] = 8,["style"] = "NONE",},
+				{["enabled"] = true,["anyUnit"] = false,["point"] = "TOPRIGHT",["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,
+				},["id"] = 115175,["displayText"] = false,["style"] = "texturedIcon",["yOffset"] = 0,},
+			}
+			ReloadUI();
+		elseif filter == "Shaman" then
+			E.global.unitframe.buffwatch["SHAMAN"] = {
+				{["color"] = {["b"] = 1,["g"] = 1,["r"] = 1,},["displayText"] = true,["style"] = "NONE",},
+				{["point"] = "BOTTOMRIGHT",["yOffset"] = 10,["style"] = "texturedIcon",},
+				{["point"] = "TOPLEFT",["color"] = {["r"] = 1,["g"] = 1,["b"] = 1,},["displayText"] = true,["style"] = "NONE",},
+			}
+			ReloadUI();
+		else
+			print("There is no filter for the class specified.")
+		end
+	elseif filter == "1Filter" then
+		E.global.unitframe.aurafilters["Blacklist"] = {
+			["spells"] = {
+				["Bright Light"] = {["enable"] = true,["priority"] = 0,},
+				["Insanity"] = {["enable"] = true,["priority"] = 0,},
+				["Infrared Light"] = {["enable"] = true,["priority"] = 0,},
+				["Blue Rays"] = {["enable"] = true,["priority"] = 0,},
+				["Demonic Rebirth: Cooldown"] = {["enable"] = true,["priority"] = 0,},
+				["Unleashed Anima"] = {["enable"] = true,["priority"] = 0,},
+				["Recently Bandaged"] = {["enable"] = true,["priority"] = 0,},
+				["Fully Mutated"] = {["enable"] = true,["priority"] = 0,},
+				["Keen Eyesight"] = {["enable"] = true,["priority"] = 0,},
+				["Thick Bones"] = {["enable"] = true,["priority"] = 0,},
+				["Clear Mind"] = {["enable"] = true,["priority"] = 0,},
+				["Improved Synapses"] = {["enable"] = true,["priority"] = 0,},
+				["Perdition"] = {["enable"] = true,["priority"] = 0,},
+				["Void-Touched"] = {["enable"] = true,["priority"] = 0,},
+			},
+		}
+		ReloadUI();
+	else
+		print("This author doesn't have a filter import for that option.")
+	end
+end
+
+local function UpdateAuthor()
+	if selectedAuthor == 'Affinitii' then
+		if not selectedAuthor then
+			E.Options.args.sle.args.importing.args.authors.args.authorGroup = nil
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = nil
+			return
+		end
+
+		E.Options.args.sle.args.importing.args.authors.args.authorGroup = {
+			type = 'group',
+			name = selectedAuthor,
+			guiInline = true,
+			order = 10,
+			args = {
+				importOptions = {
+					name = L["Import Options"],
+					type = 'select',
+					order = 1,
+					guiInline = true,
+					get = function(info) return selectedOption end,
+					set = function(info, value) selectedOption = value; UpdateAuthor(); end,
+					values = function()
+						local option = {}
+						option[''] = NONE
+						for k in pairs(options) do
+							option[k] = k
+						end
+
+						return option
+					end,
+				},
+			},
+		}
+		if not selectedOption or selectedOption == '' then
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = nil
+			selectedClass = nil
+			return
+		end
+
+		if selectedOption == 'Filters' then
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = {
+				type = "group",
+				name = selectedOption,
+				order = 15,
+				guiInline = true,
+				args = {
+					description = {
+						order = 2,
+						type = "description",
+						name = L["Please be aware that importing any of the filters will require a reload of the UI for the settings to take effect.\nOnce you click a filter button, your screen will reload automatically."],
+					},
+					selectClass = {
+						name = L["Select Filter"],
+						type = 'select',
+						order = 4,
+						guiInline = true,
+						get = function(info) return selectedClass end,
+						set = function(info, value) selectedClass = value; UpdateAuthor(); end,
+						values = function()
+							local class = {}
+							class[''] = NONE
+							class['1Filter'] = "General Filters"
+							for k, v in pairs(classes) do
+								class[k] = v
+							end
+
+							return class
+						end,
+					},
+					spacer = {
+						order = 6,
+						type = 'description',
+						name = '',
+					},
+				},
+			}
+			if not selectedClass or selectedClass == '' then
+				E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.class = nil
+				return
+			end
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.class = {
+				type = 'execute',
+				order = 5,
+				name = L["Import"],
+				func = function(info, value) buffWatch(selectedClass) end,
+			}
+			if selectedClass == '1Filter' then
+				E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.filterInfo = {
+					type = "description",
+					order = 7,
+					name = L["This will import non class specific filters from this author."],
+				}
+			elseif selectedClass == 'AllClasses' then
+				E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.filterInfo = {
+					type = "description",
+					order = 7,
+					name = L["This will import All Class specific filters from this author."],
+				}
+			end
+		elseif selectedOption == 'Addons' then
+			selectedClass = nil
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = {
+				type = "group",
+				name = selectedOption,
+				order = 15,
+				guiInline = true,
+				args = {
+					AllAddons = {
+						type = 'execute',
+						order = 2,
+						name = L['Import All'],
+						func = function(info, value) AI:LoadAddons("Affinitii, All"); ReloadUI(); end,
+					},
+					--BigWigs = {
+					--	type = 'execute',
+					--	order = 3,
+					--	name = "Big Wigs",
+					--	func = function(info, value) AI:LoadAddons("Affinitii, BigWigs"); ReloadUI(); end,
+					--},
+					--Hermes = {
+					--	type = 'execute',
+					--	order = 4,
+					--	name = "Hermes",
+					--	func = function(info, value) AI:LoadAddons("Affinitii, Hermes"); ReloadUI(); end,
+					--},
+					--xCT = {
+					--	type = 'execute',
+					--	order = 5,
+					--	name = "xCT+",
+					--	func = function(info, value) AI:LoadAddons("Affinitii, xCT+,"); ReloadUI(); end,
+					--},
+				},
+			}
+		end
+	elseif selectedAuthor == 'Repooc' then
+		if not selectedAuthor then
+			E.Options.args.sle.args.importing.args.authors.args.authorGroup = nil
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = nil
+			return
+		end
+
+		E.Options.args.sle.args.importing.args.authors.args.authorGroup = {
+			type = 'group',
+			name = selectedAuthor,
+			guiInline = true,
+			order = 10,
+			args = {
+				importOptions = {
+					name = L["Import Options"],
+					type = 'select',
+					order = 1,
+					guiInline = true,
+					get = function(info) return selectedOption end,
+					set = function(info, value) selectedOption = value; UpdateAuthor(); end,
+					values = function()
+						local option = {}
+						option[''] = NONE
+						for k in pairs(options) do
+							option[k] = k
+						end
+
+						return option
+					end,
+				},
+			},
+		}
+		if not selectedOption or selectedOption == '' then
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = nil
+			return
+		end
+
+		if selectedOption == 'Filters' then
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = {
+				type = "group",
+				name = selectedOption,
+				order = 15,
+				guiInline = true,
+				args = {
+					description = {
+						order = 2,
+						type = "description",
+						name = L["Please be aware that importing any of the filters will require a reload of the UI for the settings to take effect.\nOnce you click a filter button, your screen will reload automatically."],
+					},
+					selectClass = {
+						name = L["Select Filter"],
+						type = 'select',
+						order = 4,
+						guiInline = true,
+						get = function(info) return selectedClass end,
+						set = function(info, value) selectedClass = value; UpdateAuthor(); end,
+						values = function()
+							local class = {}
+							class[''] = NONE
+							class['1Filter'] = "General Filters"
+							for k, v in pairs(classes) do
+								class[k] = v
+							end
+
+							return class
+						end,
+					},
+					spacer = {
+						order = 6,
+						type = 'description',
+						name = '',
+					},
+				},
+			}
+			if not selectedClass or selectedClass == '' then
+				E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.class = nil
+				return
+			end
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.class = {
+				type = 'execute',
+				order = 5,
+				name = L["Import"],
+				func = function(info, value) buffWatch(selectedClass) end,
+			}
+			if selectedClass == '1Filter' then
+				E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.filterInfo = {
+					type = "description",
+					order = 7,
+					name = L["This will import non class specific filters from this author."],
+				}
+			elseif selectedClass == 'AllClasses' then
+				E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.filterInfo = {
+					type = "description",
+					order = 7,
+					name = L["This will import All Class specific filters from this author."],
+				}
+			end
+		elseif selectedOption == 'Addons' then
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = {
+				type = "group",
+				name = selectedOption,
+				order = 15,
+				guiInline = true,
+				args = {
+					repoocinfo = {
+						type = "description",
+						order = 2,
+						name = selectedAuthor..' '..L["has no data for this selected option."],
+					},
+				--[[
+					BigWigs = {
+						type = 'execute',
+						order = 2,
+						name = "Big Wigs",
+						func = function(info, value) AI:LoadAddons("Affinitii, BigWigs"); end,
+					},
+					Hermes = {
+						type = 'execute',
+						order = 2,
+						name = "Hermes",
+						func = function(info, value) AI:LoadAddons("Affinitii, Hermes"); end,
+					},
+					xCT = {
+						type = 'execute',
+						order = 2,
+						name = "xCT+",
+						func = function(info, value) AI:LoadAddons("Affinitii, xCT+"); end,
+					},]]
+				},
+			}
+		end
+	elseif selectedAuthor == 'Darth' then
+		if not selectedAuthor then
+			E.Options.args.sle.args.importing.args.authors.args.authorGroup = nil
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = nil
+			return
+		end
+
+		E.Options.args.sle.args.importing.args.authors.args.authorGroup = {
+			type = 'group',
+			name = selectedAuthor,
+			guiInline = true,
+			order = 10,
+			args = {
+				importOptions = {
+					name = L["Import Options"],
+					type = 'select',
+					order = 1,
+					guiInline = true,
+					get = function(info) return selectedOption end,
+					set = function(info, value) selectedOption = value; UpdateAuthor(); end,
+					values = function()
+						local option = {}
+						option[''] = NONE
+						for k in pairs(options) do
+							option[k] = k
+						end
+
+						return option
+					end,
+				},
+			},
+		}
+		if not selectedOption or selectedOption == '' then
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = nil
+			return
+		end
+
+		if selectedOption == 'Filters' then
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = {
+				type = "group",
+				name = selectedOption,
+				order = 15,
+				guiInline = true,
+				args = {
+					description = {
+						order = 2,
+						type = "description",
+						name = L["Please be aware that importing any of the filters will require a reload of the UI for the settings to take effect.\nOnce you click a filter button, your screen will reload automatically."],
+					},
+					selectClass = {
+						name = L["Select Filter"],
+						type = 'select',
+						order = 4,
+						guiInline = true,
+						get = function(info) return selectedClass end,
+						set = function(info, value) selectedClass = value; UpdateAuthor(); end,
+						values = function()
+							local class = {}
+							class[''] = NONE
+							class['1Filter'] = "General Filters"
+							for k, v in pairs(classes) do
+								class[k] = v
+							end
+
+							return class
+						end,
+					},
+					spacer = {
+						order = 6,
+						type = 'description',
+						name = '',
+					},
+				},
+			}
+			if not selectedClass or selectedClass == '' then
+				E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.class = nil
+				return
+			end
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.class = {
+				type = 'execute',
+				order = 5,
+				name = L["Import"],
+				func = function(info, value) buffWatch(selectedClass) end,
+			}
+			if selectedClass == '1Filter' then
+				E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.filterInfo = {
+					type = "description",
+					order = 7,
+					name = L["This will import non class specific filters from this author."],
+				}
+			elseif selectedClass == 'AllClasses' then
+				E.Options.args.sle.args.importing.args.authors.args.optionGroup.args.filterInfo = {
+					type = "description",
+					order = 7,
+					name = L["This will import All Class specific filters from this author."],
+				}
+			end
+		elseif selectedOption == 'Addons' then
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = {
+				type = "group",
+				name = selectedOption,
+				order = 15,
+				guiInline = true,
+				args = {
+					xCT = {
+						type = 'execute',
+						order = 2,
+						name = "xCT+",
+						func = function(info, value) AI:LoadAddons("Darth, All"); end,
+					},
+				},
+			}
+		end
+	else
+		if not selectedAuthor or selectedAuthor == "" then
+			E.Options.args.sle.args.importing.args.authors.args.authorGroup = nil
+			E.Options.args.sle.args.importing.args.authors.args.optionGroup = nil
+			return
+		end
+	end
+end
+
+local function configTable()
+	E.Options.args.sle.args.importing = {
+		type = 'group',
+		name = L['Import Options'],
+		order = 300,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L['Import Options'],
+			},
+			export = {
+				order = 2,
+				type = 'group',
+				name = L["Export / Import"],
+				guiInline = true,
+				args = {
+					description = {
+						order = 1,
+						type = "description",
+						name = L["SLE_EXPORTS"],
+					},
+					profile = {
+						order = 2,
+						type = "toggle",
+						name = L["Profile"],
+						get = function(info) return E.global.sle.export.profile end,
+						set = function(info, value)	E.global.sle.export.profile = value end,
+					},
+					private = {
+						order = 3,
+						type = "toggle",
+						name = L["Private"],
+						get = function(info) return E.global.sle.export.private end,
+						set = function(info, value)	E.global.sle.export.private = value end,
+					},
+					global = {
+						order = 4,
+						type = "toggle",
+						name = L["Global"],
+						get = function(info) return E.global.sle.export.global end,
+						set = function(info, value)	E.global.sle.export.global = value end,
+					},
+					full = {
+						order = 5,
+						type = "toggle",
+						name = L["Full tables"],
+						get = function(info) return E.global.sle.export.full end,
+						set = function(info, value)	E.global.sle.export.full = value end,
+					},
+					space = {
+						order = 6,
+						type = 'description',
+						name = "",
+					},
+					export = {
+						type = 'execute',
+						order = 7,
+						name = L["Export"],
+						func = function(info, value) SLE:OpenExport() end,
+					},
+				},
+			},
+			authors = {
+				order = 3,
+				type = 'group',
+				name = L["Author Specific Imports"],
+				guiInline = true,
+				args = {
+					description = {
+						order = 2,
+						type = "description",
+						name = L["SLE_IMPORTS"],
+					},
+					selectAuthor = {
+						order = 3,
+						type = 'select',
+						name = L['Select Author'],
+						get = function(info) if selectedAuthor == nil then return 'None' else return selectedAuthor end end,
+						set = function(info, value) if value == '' then selectedAuthor = nil; selectedClass = nil; selectedOption = nil; else selectedAuthor = value; selectedOption = nil; selectedClass = nil; end; UpdateAuthor() end,
+						values = function()
+							local authors = {}
+							authors[''] = NONE
+
+							authors['Affinitii'] = 'Affinitii'
+							authors['Repooc'] = 'Repooc'
+							authors['Darth'] = 'Darth'
+							return authors
+						end,
+					},
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/load_options.xml b/ElvUI_SLE/options/load_options.xml
new file mode 100644
index 0000000..52e426d
--- /dev/null
+++ b/ElvUI_SLE/options/load_options.xml
@@ -0,0 +1,27 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/">
+	<Script file='core_c.lua'/>
+	<Script file='help_c.lua'/>
+	<Script file='media_c.lua'/>
+	<Script file='auras_c.lua'/>
+	<Script file='autorelease_c.lua'/>
+	<Script file='datatexts_c.lua'/>
+	<Script file='backgrounds_c.lua'/>
+	<Script file='characterframe_c.lua'/>
+	<Script file='chat_c.lua'/>
+	<Script file='bags_c.lua'/>
+	<Script file='equipmanager_c.lua'/>
+	<Script file='exprepbar_c.lua'/>
+	<Script file='farm_c.lua'/>
+	<Script file='imports_c.lua'/>
+	<Script file='loot_c.lua'/>
+	<Script file='marks_c.lua'/>
+	<Script file='minimap_c.lua'/>
+	<Script file='nameplates_c.lua'/>
+	<Script file='raidutility_c.lua'/>
+	<Script file='threat_c.lua'/>
+	<Script file='tooltip_c.lua'/>
+	<Script file='uibuttons_c.lua'/>
+	<Script file='unitframes_c.lua'/>
+	<Script file='vehicle_c.lua'/>
+	<Script file='dev_c.lua'/>
+</Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/options/loot_c.lua b/ElvUI_SLE/options/loot_c.lua
new file mode 100644
index 0000000..fc19173
--- /dev/null
+++ b/ElvUI_SLE/options/loot_c.lua
@@ -0,0 +1,256 @@
+local E, L, V, P, G = unpack(ElvUI);
+local LT = E:GetModule('SLE_Loot')
+
+local function configTable()
+	E.Options.args.sle.args.options.args.loot = {
+		order = 9,
+		type = "group",
+		name = L['Loot'],
+		args = {
+			enable = {
+				order = 1,
+				type = "toggle",
+				name = L["Enable"],
+				get = function(info) return E.db.sle.loot.enable end,
+				set = function(info, value) E.db.sle.loot.enable = value; E:StaticPopup_Show("CONFIG_RL") end
+			},
+			space1 = {
+				order = 2,
+				type = 'description',
+				name = "",
+			},
+			autoroll = {
+				order = 1,
+				type = "group",
+				name = "Loot Auto Roll",
+				args = {
+					header = {
+						order = 1,
+						type = "header",
+						name = L['Loot Announcer'],
+					},
+					info = {
+						order = 2,
+						type = "description",
+						name = L["LOOT_DESC"],
+					},
+					space1 = {
+						order = 3,
+						type = 'description',
+						name = "",
+					},
+					enable = {
+						order = 4,
+						type = "toggle",
+						name = L["Enable"],
+						desc = "Automatically click OK on BOP items",
+						disabled = function() return not E.db.sle.loot.enable end,
+						get = function(info) return E.db.sle.loot.autoroll.enable end,
+						set = function(info, value) E.db.sle.loot.autoroll.enable = value; LT:Update() end,
+					},
+					space2 = {
+						order = 5,
+						type = 'description',
+						name = "",
+					},
+					autoconfirm = {
+						order = 6,
+						type = "toggle",
+						name = "Auto Confirm",
+						desc = "Automatically click OK on BOP items",
+						disabled = function() return not E.db.sle.loot.enable or not E.db.sle.loot.autoroll.enable end,
+						get = function(info) return E.db.sle.loot.autoroll.autoconfirm end,
+						set = function(info, value) E.db.sle.loot.autoroll.autoconfirm = value end,
+					},
+					autogreed = {
+						order = 7,
+						type = "toggle",
+						name = "Auto Greed",
+						desc = "Automatically greed uncommon (green) quality items at max level",
+						disabled = function() return not E.db.sle.loot.enable or not E.db.sle.loot.autoroll.enable end,
+						get = function(info) return E.db.sle.loot.autoroll.autogreed end,
+						set = function(info, value) E.db.sle.loot.autoroll.autogreed = value end,
+					},
+					autode = {
+						order = 8,
+						type = "toggle",
+						name = "Auto Disenchant",
+						desc = "Automatically disenchant uncommon (green) quality items at max level",
+						disabled = function() return not E.db.sle.loot.enable or not E.db.sle.loot.autoroll.enable end,
+						get = function(info) return E.db.sle.loot.autoroll.autode end,
+						set = function(info, value) E.db.sle.loot.autoroll.autode = value; end,
+					},
+					autoqlty = {
+						order = 9,
+						type = "select",
+						name = L["Loot Quality"],
+						desc = "Sets the auto greed/disenchant quality\n\nUncommon: Rolls on Uncommon only\nRare: Rolls on Rares & Uncommon",
+						disabled = function() return not E.db.sle.loot.enable or not E.db.sle.loot.autoroll.enable end,
+						get = function(info) return E.db.sle.loot.autoroll.autoqlty end,
+						set = function(info, value) E.db.sle.loot.autoroll.autoqlty = value; end,
+						values = {
+							[4] = "|cffA335EE"..ITEM_QUALITY4_DESC.."|r",
+							[3] = "|cff0070DD"..ITEM_QUALITY3_DESC.."|r",
+							[2] = "|cff1EFF00"..ITEM_QUALITY2_DESC.."|r",
+						},
+					},
+					space3 = {
+						order = 10,
+						type = 'description',
+						name = "",
+					},
+					bylevel = {
+						order = 11,
+						type = "toggle",
+						name = "Roll based on level.",
+						desc = "This will auto-roll if you are above the given level if: You cannot equip the item being rolled on, or the ilevel of your equipped item is higher than the item being rolled on or you have an heirloom equipped in that slot",
+						disabled = function() return not E.db.sle.loot.enable or not E.db.sle.loot.autoroll.enable end,
+						get = function(info) return E.db.sle.loot.autoroll.bylevel end,
+						set = function(info, value) E.db.sle.loot.autoroll.bylevel = value; end,
+					},
+					level = {
+						order = 12,
+						type = "range",
+						name = "Level to start auto-rolling from",
+						desc = "Automatically disenchant uncommon (green) quality items at max level",
+						disabled = function() return not E.db.sle.loot.enable or not E.db.sle.loot.autoroll.enable end,
+						min = 1, max = GetMaxPlayerLevel(), step = 1,
+						get = function(info) return E.db.sle.loot.autoroll.level end,
+						set = function(info, value) E.db.sle.loot.autoroll.level = value; end,
+					},
+				},
+			},
+			announcer = {
+				order = 2,
+				type = "group",
+				name = L["Loot Announcer"],
+				args = {
+					header = {
+						order = 1,
+						type = "header",
+						name = L['Loot Announcer'],
+					},
+					info = {
+						order = 2,
+						type = "description",
+						name = L["LOOT_DESC"],
+					},
+					space1 = {
+						order = 3,
+						type = 'description',
+						name = "",
+					},
+					enable = {
+						order = 4,
+						type = "toggle",
+						name = L["Enable"],
+						disabled = function() return not E.db.sle.loot.enable end,
+						get = function(info) return E.db.sle.loot.announcer.enable end,
+						set = function(info, value) E.db.sle.loot.announcer.enable = value; E:StaticPopup_Show("CONFIG_RL") end,
+					},
+					space2 = {
+						order = 5,
+						type = "description",
+						name = "",
+					},
+					auto = {
+						order = 6,
+						type = "toggle",
+						name = L["Auto Announce"],
+						desc = L["AUTOANNOUNCE_DESC"],
+						disabled = function() return not E.db.sle.loot.enable or not E.db.sle.loot.announcer.enable end,
+						get = function(info) return E.db.sle.loot.announcer.auto end,
+						set = function(info, value) E.db.sle.loot.announcer.auto = value; end,
+					},
+					override = {
+						order = 7,
+						type = "select",
+						name = L["Manual Override"],
+						desc = L["Sets the minimum loot threshold to announce."],
+						disabled = function() return not E.db.sle.loot.enable or not E.db.sle.loot.announcer.enable end,
+						get = function(info) return E.db.sle.loot.announcer.override end,
+						set = function(info, value) E.db.sle.loot.announcer.override = value; end,
+						values = {
+							['1'] = "No Override",
+							['2'] = "Automatic Override",
+							['3'] = "SHIFT Required",
+							['4'] = "ALT Required",
+							['5'] = "CTRL Required",
+						},
+					},
+					space3 = {
+						order = 8,
+						type = "description",
+						name = "",
+					},
+					quality = {
+						order = 9,
+						type = "select",
+						name = L["Loot Quality"],
+						desc = L["Sets the minimum loot threshold to announce."],
+						disabled = function() return not E.db.sle.loot.enable or not E.db.sle.loot.announcer.enable end,
+						get = function(info) return E.db.sle.loot.announcer.quality end,
+						set = function(info, value) E.db.sle.loot.announcer.quality = value; end,
+						values = {
+							['EPIC'] = "|cffA335EE"..ITEM_QUALITY4_DESC.."|r",
+							['RARE'] = "|cff0070DD"..ITEM_QUALITY3_DESC.."|r",
+							['UNCOMMON'] = "|cff1EFF00"..ITEM_QUALITY2_DESC.."|r",
+						},
+					},
+					channel = {
+						order = 10,
+						type = "select",
+						name = L["Chat"],
+						desc = L["Select chat channel to announce loot to."],
+						disabled = function() return not E.db.sle.loot.enable or not E.db.sle.loot.announcer.enable end,
+						get = function(info) return E.db.sle.loot.announcer.channel end,
+						set = function(info, value) E.db.sle.loot.announcer.channel = value; end,
+						values = {
+							['RAID'] = "|cffFF7F00"..RAID.."|r",
+							['PARTY'] = "|cffAAAAFF"..PARTY.."|r",
+							['SAY'] = "|cffFFFFFF"..SAY.."|r",
+						},
+					},
+				},
+			},
+			history = {
+				order = 3,
+				type = "group",
+				name = L["Loot Roll History"],
+				args = {
+					header = {
+						order = 1,
+						type = "header",
+						name = L["Loot Roll History"],
+					},
+					info = {
+						order = 2,
+						type = "description",
+						name = L["LOOTH_DESC"],
+					},
+					window = {
+						order = 3,
+						type = "toggle",
+						name = L["Auto hide"],
+						desc = L["Automaticaly hides Loot Roll Histroy frame when leaving the instance."],
+						disabled = function() return not E.db.sle.loot.enable end,
+						get = function(info) return E.db.sle.loot.history.autohide end,
+						set = function(info, value) E.db.sle.loot.history.autohide = value; LT:LootShow() end,
+					},
+					alpha = {
+						order = 4,
+						type = "range",
+						name = L['Alpha'],
+						desc = L["Sets the alpha of Loot Roll Histroy frame."],
+						min = 0.2, max = 1, step = 0.1,
+						disabled = function() return not E.db.sle.loot.enable end,
+						get = function(info) return E.db.sle.loot.history.alpha end,
+						set = function(info, value) E.db.sle.loot.history.alpha = value; LT:Update() end,
+					},
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/marks_c.lua b/ElvUI_SLE/options/marks_c.lua
new file mode 100644
index 0000000..789192c
--- /dev/null
+++ b/ElvUI_SLE/options/marks_c.lua
@@ -0,0 +1,187 @@
+local E, L, V, P, G = unpack(ElvUI);
+local RM = E:GetModule('SLE_RaidMarks')
+local RF = E:GetModule('SLE_RaidFlares')
+
+local function configTable()
+	E.Options.args.sle.args.options.args.marks = {
+		order = 4,
+		type = "group",
+		name = L["Raid Marks"],
+		args = {
+			intro = {
+				order = 1,
+				type = 'description',
+				name = L['Options for panels providing fast access to raid markers and flares.'],
+			},
+			marks = {
+				order = 2,
+				type = "group",
+				name = L["Raid Marks"],
+				set = function(info, value) E.db.sle.marks[ info[#info] ]  = value; RM:Update() end,
+				args = {
+					marksheader = {
+						order = 1,
+						type = "header",
+						name = L["Raid Marks"],
+					},
+					enabled = {
+						order = 2,
+						type = "toggle",
+						name = L["Enable"],
+						desc = L["Show/Hide raid marks."],
+						get = function(info) return E.private.sle.marks.marks end,
+						set = function(info, value) E.private.sle.marks.marks = value; E:StaticPopup_Show("PRIVATE_RL") end
+					},
+					backdrop = {
+						order = 3,
+						type = "toggle",
+						name = L["Backdrop"],
+						disabled = function() return not E.private.sle.marks.marks end,
+						get = function(info) return E.db.sle.marks.backdrop end,
+					},
+					Reset = {
+						order = 4,
+						type = 'execute',
+						name = L['Restore Defaults'],
+						desc = L["Reset these options to defaults"],
+						disabled = function() return not E.private.sle.marks.marks end,
+						func = function() E:GetModule('SLE'):Reset(nil, nil, nil, nil, true) end,
+					},
+					spacer = {
+						order = 5,
+						type = 'description',
+						name = "",
+					},
+					showinside = {
+						order = 6,
+						type = "toggle",
+						name = L["Show only in instances"],
+						desc = L["Selecting this option will have the Raid Markers appear only while in a raid or dungeon."],
+						disabled = function() return not E.private.sle.marks.marks end,
+						get = function(info) return E.db.sle.marks.showinside end,
+					},
+					target = {
+						order = 7,
+						type = "toggle",
+						name = L["Target Exists"],
+						desc = L["Selecting this option will have the Raid Markers appear only when you have a target."],
+						disabled = function() return not E.private.sle.marks.marks end,
+						get = function(info) return E.db.sle.marks.target end,
+					},
+					mouseover = {
+						order = 7,
+						type = "toggle",
+						name = L["Mouseover"],
+						desc = L["Show on mouse over."],
+						disabled = function() return not E.private.sle.marks.marks end,
+						get = function(info) return E.db.sle.marks.mouseover end,
+					},
+					size = {
+						order = 9,
+						type = "range",
+						name = L['Size'],
+						desc = L["Sets size of buttons"],
+						disabled = function() return not E.private.sle.marks.marks end,
+						min = 15, max = 30, step = 1,
+						get = function(info) return E.db.sle.marks.size end,
+					},
+					growth = {
+						order = 10,
+						type = "select",
+						name = L["Direction"],
+						desc = L["Change the direction of buttons growth from the skull marker"],
+						disabled = function() return not E.private.sle.marks.marks end,
+						get = function(info) return E.db.sle.marks.growth end,
+						values = {
+							['RIGHT'] = L["Right"],
+							['LEFT'] = L["Left"],
+							['UP'] = L["Up"],
+							['DOWN'] = L["Down"],
+						},
+					},
+				},
+			},
+			flares = {
+				order = 3,
+				type = "group",
+				name = L["Raid Flares"],
+				set = function(info, value) E.db.sle.flares[ info[#info] ]  = value; RF:Update() end,
+				args = {
+					header = {
+						order = 1,
+						type = "header",
+						name = L["Raid Flares"],
+					},
+					enabled = {
+						order = 2,
+						type = "toggle",
+						name = L["Enable"],
+						desc = L["Show/Hide Raid Flares."],
+						get = function(info) return E.private.sle.marks.flares end,
+						set = function(info, value) E.private.sle.marks.flares = value; E:StaticPopup_Show("PRIVATE_RL") end
+					},
+					backdrop = {
+						order = 3,
+						type = "toggle",
+						name = L["Backdrop"],
+						disabled = function() return not E.private.sle.marks.flares end,
+						get = function(info) return E.db.sle.flares.backdrop end,
+					},
+					spacer = {
+						order = 5,
+						type = 'description',
+						name = "",
+					},
+					showinside = {
+						order = 6,
+						type = "toggle",
+						name = L["Show only in instances"],
+						desc = L["Selecting this option will have the Raid Flares appear only while in a raid or dungeon."],
+						disabled = function() return not E.private.sle.marks.flares end,
+						get = function(info) return E.db.sle.flares.showinside end,
+					},
+					mouseover = {
+						order = 7,
+						type = "toggle",
+						name = L["Mouseover"],
+						desc = L["Show on mouse over."],
+						disabled = function() return not E.private.sle.marks.flares end,
+						get = function(info) return E.db.sle.flares.mouseover end,
+					},
+					tooltips = {
+						order = 8,
+						type = "toggle",
+						name = L["Show Tooltip"],
+						disabled = function() return not E.private.sle.marks.flares end,
+						get = function(info) return E.db.sle.flares.tooltips end,
+					},
+					size = {
+						order = 9,
+						type = "range",
+						name = L['Size'],
+						desc = L["Sets size of buttons"],
+						disabled = function() return not E.private.sle.marks.flares end,
+						min = 15, max = 30, step = 1,
+						get = function(info) return E.db.sle.flares.size end,
+					},
+					growth = {
+						order = 9,
+						type = "select",
+						name = L["Direction"],
+						desc = L["Change the direction of buttons growth from the square marker"],
+						disabled = function() return not E.private.sle.marks.flares end,
+						get = function(info) return E.db.sle.flares.growth end,
+						values = {
+							['RIGHT'] = L["Right"],
+							['LEFT'] = L["Left"],
+							['UP'] = L["Up"],
+							['DOWN'] = L["Down"],
+						},
+					},
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/media_c.lua b/ElvUI_SLE/options/media_c.lua
new file mode 100644
index 0000000..848eb80
--- /dev/null
+++ b/ElvUI_SLE/options/media_c.lua
@@ -0,0 +1,521 @@
+local E, L, V, P, G = unpack(ElvUI);
+local M = E:GetModule('SLE_Media')
+local S = E:GetModule("SLE_ScreenSaver")
+
+local function configTable()
+	E.Options.args.sle.args.media = {
+		type = "group",
+	    name = L["Media"],
+	    order = 3,
+		childGroups = 'tab',
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["Media"],
+			},
+			intro = {
+				order = 2,
+				type = "description",
+				name = "Imma text!",
+			},
+			zonefonts = {
+				type = "group",
+				name = L["Zone Texts"],
+				order = 3,
+				args = {
+					intro = {
+						order = 1,
+						type = "description",
+						name = "Placeholder text.",
+					},
+					test = {
+						order = 2,
+						type = 'execute',
+						name = "Test",
+						func = function() M:TextShow() end,
+					},
+					zone = {
+						type = "group",
+						name = "Zone Text",
+						order = 3,
+						guiInline = true,
+						get = function(info) return E.db.sle.media.fonts.zone[ info[#info] ] end,
+						set = function(info, value) E.db.sle.media.fonts.zone[ info[#info] ] = value; E:UpdateMedia() end,
+						args = {
+							font = {
+								type = "select", dialogControl = 'LSM30_Font',
+								order = 1,
+								name = L["Font"],
+								values = AceGUIWidgetLSMlists.font,
+							},
+							size = {
+								order = 2,
+								name = L["Font Size"],
+								type = "range",
+								min = 6, max = 48, step = 1,
+							},
+							outline = {
+								order = 3,
+								name = L["Font Outline"],
+								desc = L["Set the font outline."],
+								type = "select",
+								values = {
+									['NONE'] = L['None'],
+									['OUTLINE'] = 'OUTLINE',
+
+									['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+									['THICKOUTLINE'] = 'THICKOUTLINE',
+								},
+							},
+							width = {
+								order = 4,
+								name = L["Width"],
+								type = "range",
+								min = 512, max = E.screenwidth, step = 1,
+								set = function(info, value) E.db.sle.media.fonts.zone.width = value; M:TextWidth() end,
+							},
+						},
+					},
+					subzone = {
+						type = "group",
+						name = "Subzone Text",
+						order = 4,
+						guiInline = true,
+						get = function(info) return E.db.sle.media.fonts.subzone[ info[#info] ] end,
+						set = function(info, value) E.db.sle.media.fonts.subzone[ info[#info] ] = value; E:UpdateMedia() end,
+						args = {
+							font = {
+								type = "select", dialogControl = 'LSM30_Font',
+								order = 1,
+								name = L["Font"],
+								values = AceGUIWidgetLSMlists.font,
+							},
+							size = {
+								order = 2,
+								name = L["Font Size"],
+								type = "range",
+								min = 6, max = 48, step = 1,
+							},
+							outline = {
+								order = 3,
+								name = L["Font Outline"],
+								desc = L["Set the font outline."],
+								type = "select",
+								values = {
+									['NONE'] = L['None'],
+									['OUTLINE'] = 'OUTLINE',
+
+									['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+									['THICKOUTLINE'] = 'THICKOUTLINE',
+								},
+							},
+							width = {
+								order = 4,
+								name = L["Width"],
+								type = "range",
+								min = 512, max = E.screenwidth, step = 1,
+								set = function(info, value) E.db.sle.media.fonts.subzone.width = value; M:TextWidth() end,
+							},
+							offset = {
+								order = 5,
+								name = L["Offset"],
+								type = "range",
+								min = 0, max = 30, step = 1,
+							},
+						},
+					},
+					pvpstatus = {
+						type = "group",
+						name = "PvP Status Text",
+						order = 5,
+						guiInline = true,
+						get = function(info) return E.db.sle.media.fonts.pvp[ info[#info] ] end,
+						set = function(info, value) E.db.sle.media.fonts.pvp[ info[#info] ] = value; E:UpdateMedia() end,
+						args = {
+							font = {
+								type = "select", dialogControl = 'LSM30_Font',
+								order = 1,
+								name = L["Font"],
+								values = AceGUIWidgetLSMlists.font,
+							},
+							size = {
+								order = 2,
+								name = L["Font Size"],
+								type = "range",
+								min = 6, max = 48, step = 1,
+							},
+							outline = {
+								order = 3,
+								name = L["Font Outline"],
+								desc = L["Set the font outline."],
+								type = "select",
+								values = {
+									['NONE'] = L['None'],
+									['OUTLINE'] = 'OUTLINE',
+
+									['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+									['THICKOUTLINE'] = 'THICKOUTLINE',
+								},
+							},
+							width = {
+								order = 4,
+								name = L["Width"],
+								type = "range",
+								min = 512, max = E.screenwidth, step = 1,
+								set = function(info, value) E.db.sle.media.fonts.pvp.width = value; M:TextWidth() end,
+							},
+						},
+					},
+				},
+			},
+			miscfonts = {
+				type = "group",
+				name = L["Misc Texts"],
+				order = 4,
+				args = {
+					mail = {
+						type = "group",
+						name = "Mail Text",
+						order = 1,
+						guiInline = true,
+						get = function(info) return E.db.sle.media.fonts.mail[ info[#info] ] end,
+						set = function(info, value) E.db.sle.media.fonts.mail[ info[#info] ] = value; E:UpdateMedia() end,
+						args = {
+							font = {
+								type = "select", dialogControl = 'LSM30_Font',
+								order = 1,
+								name = L["Font"],
+								desc = "The font used for letters' body",
+								values = AceGUIWidgetLSMlists.font,
+							},
+							size = {
+								order = 2,
+								name = L["Font Size"],
+								type = "range",
+								min = 6, max = 22, step = 1,
+							},
+							outline = {
+								order = 3,
+								name = L["Font Outline"],
+								desc = L["Set the font outline."],
+								type = "select",
+								values = {
+									['NONE'] = L['None'],
+									['OUTLINE'] = 'OUTLINE',
+
+									['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+									['THICKOUTLINE'] = 'THICKOUTLINE',
+								},
+							},
+						},
+					},
+					editbox = {
+						type = "group",
+						name = "Chat Editbox Text",
+						order = 2,
+						guiInline = true,
+						get = function(info) return E.db.sle.media.fonts.editbox[ info[#info] ] end,
+						set = function(info, value) E.db.sle.media.fonts.editbox[ info[#info] ] = value; E:UpdateMedia() end,
+						args = {
+							font = {
+								type = "select", dialogControl = 'LSM30_Font',
+								order = 1,
+								name = L["Font"],
+								desc = "The font used for chat editbox",
+								values = AceGUIWidgetLSMlists.font,
+							},
+							size = {
+								order = 2,
+								name = L["Font Size"],
+								type = "range",
+								min = 6, max = 20, step = 1,
+							},
+							outline = {
+								order = 3,
+								name = L["Font Outline"],
+								desc = L["Set the font outline."],
+								type = "select",
+								values = {
+									['NONE'] = L['None'],
+									['OUTLINE'] = 'OUTLINE',
+
+									['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+									['THICKOUTLINE'] = 'THICKOUTLINE',
+								},
+							},
+						},
+					},
+				},
+			},
+			screensaver = {
+				type = "group",
+				name = L["Screensaver"],
+				order = 5,
+				childGroups = 'tab',
+				args = {
+					enable = {
+						order = 1,
+						type = "toggle",
+						name = L["Enable"],
+						get = function(info) return E.db.sle.media.screensaver.enable end,
+						set = function(info, value) E.db.sle.media.screensaver.enable = value; S:Reg(true) end,
+					},
+					fonts = {
+						type = "group",
+						name = L["Fonts"],
+						order = 1,
+						args = {
+							title = {
+								type = "group",
+								name = "Title font",
+								order = 1,
+								guiInline = true,
+								get = function(info) return E.db.sle.media.screensaver.title[ info[#info] ] end,
+								set = function(info, value) E.db.sle.media.screensaver.title[ info[#info] ] = value S:Media() end,
+								args = {
+									font = {
+										type = "select", dialogControl = 'LSM30_Font',
+										order = 1,
+										name = L["Font"],
+										desc = "The font used for ScreenSaver's Title",
+										values = AceGUIWidgetLSMlists.font,
+									},
+									size = {
+										order = 2,
+										name = L["Font Size"],
+										type = "range",
+										min = 12, max = 32, step = 1,
+									},
+									outline = {
+										order = 3,
+										name = L["Font Outline"],
+										desc = L["Set the font outline."],
+										type = "select",
+										values = {
+											['NONE'] = L['None'],
+											['OUTLINE'] = 'OUTLINE',
+											['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+											['THICKOUTLINE'] = 'THICKOUTLINE',
+										},
+									},
+								},
+							},
+							subtitle = {
+								type = "group",
+								name = "Subitle font",
+								order = 2,
+								guiInline = true,
+								get = function(info) return E.db.sle.media.screensaver.subtitle[ info[#info] ] end,
+								set = function(info, value) E.db.sle.media.screensaver.subtitle[ info[#info] ] = value S:Media() end,
+								args = {
+									font = {
+										type = "select", dialogControl = 'LSM30_Font',
+										order = 1,
+										name = L["Font"],
+										desc = "The font used for ScreenSaver's Subtitle",
+										values = AceGUIWidgetLSMlists.font,
+									},
+									size = {
+										order = 2,
+										name = L["Font Size"],
+										type = "range",
+										min = 12, max = 26, step = 1,
+									},
+									outline = {
+										order = 3,
+										name = L["Font Outline"],
+										desc = L["Set the font outline."],
+										type = "select",
+										values = {
+											['NONE'] = L['None'],
+											['OUTLINE'] = 'OUTLINE',
+											['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+											['THICKOUTLINE'] = 'THICKOUTLINE',
+										},
+									},
+								},
+							},
+							date = {
+								type = "group",
+								name = "Date font",
+								order = 3,
+								guiInline = true,
+								get = function(info) return E.db.sle.media.screensaver.date[ info[#info] ] end,
+								set = function(info, value) E.db.sle.media.screensaver.date[ info[#info] ] = value S:Media() end,
+								args = {
+									font = {
+										type = "select", dialogControl = 'LSM30_Font',
+										order = 1,
+										name = L["Font"],
+										desc = "The font used for Screensaver's Date and Time",
+										values = AceGUIWidgetLSMlists.font,
+									},
+									size = {
+										order = 2,
+										name = L["Font Size"],
+										type = "range",
+										min = 12, max = 26, step = 1,
+									},
+									outline = {
+										order = 3,
+										name = L["Font Outline"],
+										desc = L["Set the font outline."],
+										type = "select",
+										values = {
+											['NONE'] = L['None'],
+											['OUTLINE'] = 'OUTLINE',
+											['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+											['THICKOUTLINE'] = 'THICKOUTLINE',
+										},
+									},
+								},
+							},
+							player = {
+								type = "group",
+								name = "Player info font",
+								order = 4,
+								guiInline = true,
+								get = function(info) return E.db.sle.media.screensaver.player[ info[#info] ] end,
+								set = function(info, value) E.db.sle.media.screensaver.player[ info[#info] ] = value S:Media() end,
+								args = {
+									font = {
+										type = "select", dialogControl = 'LSM30_Font',
+										order = 1,
+										name = L["Font"],
+										desc = "The font used for Screensaver's Player info",
+										values = AceGUIWidgetLSMlists.font,
+									},
+									size = {
+										order = 2,
+										name = L["Font Size"],
+										type = "range",
+										min = 12, max = 26, step = 1,
+									},
+									outline = {
+										order = 3,
+										name = L["Font Outline"],
+										desc = L["Set the font outline."],
+										type = "select",
+										values = {
+											['NONE'] = L['None'],
+											['OUTLINE'] = 'OUTLINE',
+											['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+											['THICKOUTLINE'] = 'THICKOUTLINE',
+										},
+									},
+								},
+							},
+							tips = {
+								type = "group",
+								name = "Tips font",
+								order = 4,
+								guiInline = true,
+								get = function(info) return E.db.sle.media.screensaver.tips[ info[#info] ] end,
+								set = function(info, value) E.db.sle.media.screensaver.tips[ info[#info] ] = value S:Media() end,
+								args = {
+									font = {
+										type = "select", dialogControl = 'LSM30_Font',
+										order = 1,
+										name = L["Font"],
+										desc = "The font used for Screensaver's Tips",
+										values = AceGUIWidgetLSMlists.font,
+									},
+									size = {
+										order = 2,
+										name = L["Font Size"],
+										type = "range",
+										min = 12, max = 32, step = 1,
+									},
+									outline = {
+										order = 3,
+										name = L["Font Outline"],
+										desc = L["Set the font outline."],
+										type = "select",
+										values = {
+											['NONE'] = L['None'],
+											['OUTLINE'] = 'OUTLINE',
+											['MONOCHROMEOUTLINE'] = 'MONOCROMEOUTLINE',
+											['THICKOUTLINE'] = 'THICKOUTLINE',
+										},
+									},
+								},
+							},
+						},
+					},
+					model = {
+						type = "group",
+						name = L["Graphics"],
+						order = 2,
+						-- get = function(info) return E.db.sle.media.screensaver[ info[#info] ] end,
+						-- set = function(info, value) E.db.sle.media.screensaver[ info[#info] ] = value S:Media() end,
+						args = {
+							crest = {
+								order = 1,
+								name = L["Crest Size"],
+								type = "range",
+								min = 84, max = 256, step = 1,
+								get = function(info) return E.db.sle.media.screensaver.crest end,
+								set = function(info, value) E.db.sle.media.screensaver.crest = value; S:Media() end,
+							},
+							modelanim = {
+								order = 2,
+								name = L["Model Animation"],
+								type = "select",
+								get = function(info) return E.db.sle.media.screensaver.playermodel.anim end,
+								set = function(info, value) E.db.sle.media.screensaver.playermodel.anim = value end,
+								values = {
+									[47] = "Standing",
+									[4] = "Walking",
+									[5] = "Running",
+									[13] = "Walking backwards",
+									[25] = 'Unarmed Ready',
+									[60] = "Talking",
+									[64] = 'Exclmation',
+									[66] = 'Bow',
+									[67] = 'Wave',
+									[68] = 'Ceers',
+									[69] = 'Dance',
+									[70] = 'Laugh',
+									[76] = 'Kiss',
+									[77] = 'Cry',
+									[80] = 'Applaud',
+									[82] = 'Flex',
+									[83] = 'Shy',
+									[113] = 'Salute',
+								},
+							},
+							modelpos = {
+								order = 3,
+								name = L["Model Animation"],
+								type = "select",
+								get = function(info) return E.db.sle.media.screensaver.playermodel.position end,
+								set = function(info, value) E.db.sle.media.screensaver.playermodel.position = value end,
+								values = {
+									["RIGHT"] = L['Right'],
+									["LEFT"] = L['Left'],
+								},
+							},
+							height = {
+								order = 4,
+								name = L["Panel Height"],
+								type = "range",
+								min = 130, max = E.screenheight/6, step = 1,
+							},
+							testmodel = {
+								order = 5,
+								type = 'execute',
+								name = "Test Animation",
+								desc = "Shows a test model with selected animation for 10 seconds. Ckicking again will reset timer.",
+								-- disabled = function() return not E.db.chat.chatHistory end,
+								func = function() S:TestShow() end,
+							},
+						},
+					},
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/minimap_c.lua b/ElvUI_SLE/options/minimap_c.lua
new file mode 100644
index 0000000..6308474
--- /dev/null
+++ b/ElvUI_SLE/options/minimap_c.lua
@@ -0,0 +1,203 @@
+local E, L, V, P, G = unpack(ElvUI);
+
+local function configTable()
+	E.Options.args.sle.args.options.args.minimap = {
+		type = "group",
+		name = MINIMAP_LABEL,
+		order = 3,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["Minimap Options"],
+			},
+			intro = {
+				order = 2,
+				type = 'description',
+				name = L['MINIMAP_DESC'],
+			},
+			combat = {
+				type = "toggle",
+				name = L['Hide in Combat'],
+				order = 3,
+				desc = L['Hide minimap in combat.'],
+				disabled = false,
+				get = function(info) return E.db.sle.minimap.combat end,
+				set = function(info, value) E.db.sle.minimap.combat = value; E:GetModule('Minimap'):SLEHideMinimap() end,
+			},
+			alpha = {
+				order = 4,
+				type = 'range',
+				name = L['Minimap Alpha'],
+				isPercent = true,
+				min = 0.3, max = 1, step = 0.01,
+				get = function(info) return E.db.sle.minimap.alpha end,
+				set = function(info, value) E.db.sle.minimap.alpha = value; E:GetModule('Minimap'):Transparency() end,
+			},
+			coords = {
+				type = "group",
+				name = L["Minimap Coordinates"],
+				order = 5,
+				guiInline = true,
+				disabled = function() return not E.private.general.minimap.enable or not E.db.sle.minimap.enable end,
+				args = {
+					coordsenable = {
+						type = "toggle",
+						name = L['Enable'],
+						order = 1,
+						desc = L['Enable/Disable Square Minimap Coords.'],
+						get = function(info) return E.db.sle.minimap.enable end,
+						set = function(info, value) E.db.sle.minimap.enable = value; E:GetModule('Minimap'):UpdateSettings() end,
+						disabled = function() return not E.private.general.minimap.enable end,
+					},
+					display = {
+						order = 2,
+						type = 'select',
+						name = L['Coords Display'],
+						desc = L['Change settings for the display of the coordinates that are on the minimap.'],
+						get = function(info) return E.db.sle.minimap.coords.display end,
+						set = function(info, value) E.db.sle.minimap.coords.display = value; E:GetModule('Minimap'):UpdateSettings() end,
+						values = {
+							['MOUSEOVER'] = L['Minimap Mouseover'],
+							['SHOW'] = L['Always Display'],
+						},
+					},
+					middle = {
+						order = 3,
+						type = "select",
+						name = L["Coords Location"],
+						desc = L['This will determine where the coords are shown on the minimap.'],
+						get = function(info) return E.db.sle.minimap.coords.middle end,
+						set = function(info, value) E.db.sle.minimap.coords.middle = value; E:GetModule('Minimap'):UpdateSettings() end,
+						values = {
+							['CORNERS'] = L['Bottom Corners'],
+							['CENTER'] = L['Bottom Center'],
+						},
+					},
+					decimals = {
+						type = "toggle",
+						name = L['Decimals'],
+						order = 4,
+						--desc = L['Enable/Disable Square Minimap Coords.'],
+						get = function(info) return E.db.sle.minimap.coords.decimals end,
+						set = function(info, value) E.db.sle.minimap.coords.decimals = value; E:GetModule('Minimap'):UpdateSettings() end,
+						disabled = function() return not E.private.general.minimap.enable end,
+					},
+				},
+			},
+			mapicons = {
+				type = "group",
+				name = L["Minimap Buttons"],
+				order = 6,
+				guiInline = true,
+				disabled = function() return not E.private.sle.minimap.mapicons.enable end,
+				args = {
+					mapiconsenable = {
+						type = "toggle",
+						name = L['Enable'],
+						order = 1,
+						desc = L['Enable/Disable Square Minimap Buttons.'],
+						disabled = false,
+						get = function(info) return E.private.sle.minimap.mapicons.enable end,
+						set = function(info, value) E.private.sle.minimap.mapicons.enable = value; E:StaticPopup_Show("PRIVATE_RL") end,
+					},
+					barenable = {
+						order = 2,
+						type = "toggle",
+						name = L["Bar Enable"],
+						desc = L['Enable/Disable Square Minimap Bar.'],
+						get = function(info) return E.private.sle.minimap.mapicons.barenable end,
+						set = function(info, value) E.private.sle.minimap.mapicons.barenable = value; E:StaticPopup_Show("PRIVATE_RL") end,
+					},
+					skindungeon = {
+						order = 3,
+						type = 'toggle',
+						name = L['Skin Dungeon'],
+						desc = L['Skin dungeon icon.'],
+						get = function(info) return E.db.sle.minimap.mapicons.skindungeon end,
+						set = function(info, value) E.db.sle.minimap.mapicons.skindungeon = value; E:StaticPopup_Show("PRIVATE_RL") end,
+						disabled = function() return not E.private.sle.minimap.mapicons.enable end,
+					},
+					skinmail = {
+						order = 4,
+						type = 'toggle',
+						name = L['Skin Mail'],
+						desc = L['Skin mail icon.'],
+						get = function(info) return E.db.sle.minimap.mapicons.skinmail end,
+						set = function(info, value) E.db.sle.minimap.mapicons.skinmail = value; E:StaticPopup_Show("PRIVATE_RL") end,
+						disabled = function() return not E.private.sle.minimap.mapicons.enable end,
+					},
+					iconsize = {
+						order = 5,
+						type = 'range',
+						name = L['Button Size'],
+						desc = L['The size of the minimap buttons when not anchored to the minimap.'],
+						min = 16, max = 40, step = 1,
+						get = function(info) return E.db.sle.minimap.mapicons.iconsize end,
+						set = function(info, value) E.db.sle.minimap.mapicons.iconsize = value; E:GetModule('SLE_SquareMinimapButtons'):Update(SquareMinimapButtonBar) end,
+						disabled = function() return not E.private.sle.minimap.mapicons.enable end,
+					},
+					iconperrow = {
+						order = 6,
+						type = 'range',
+						name = L['Icons Per Row'],
+						desc = L['Anchor mode for displaying the minimap buttons are skinned.'],
+						min = 1, max = 12, step = 1,
+						get = function(info) return E.db.sle.minimap.mapicons.iconperrow end,
+						set = function(info, value) E.db.sle.minimap.mapicons.iconperrow = value; E:GetModule('SLE_SquareMinimapButtons'):Update(SquareMinimapButtonBar) end,
+						disabled = function() return not E.private.sle.minimap.mapicons.enable end,
+					},
+					iconmouseover = {
+						order = 7,
+						name = L['Mouse Over'],
+						desc = L['Show minimap buttons on mouseover.'],
+						type = "toggle",
+						get = function(info) return E.db.sle.minimap.mapicons.iconmouseover end,
+						set = function(info, value) E.db.sle.minimap.mapicons.iconmouseover = value; E:GetModule('SLE_SquareMinimapButtons'):ChangeMouseOverSetting() end,
+						disabled = function() return not E.private.sle.minimap.mapicons.enable end,
+					},
+				},
+			},
+			instance = {
+				type = "group",
+				name = L["Instance indication"],
+				order = 7,
+				guiInline = true,
+				get = function(info) return E.db.sle.minimap.instance[ info[#info] ] end,
+				set = function(info, value) E.db.sle.minimap.instance[ info[#info] ] = value; E:GetModule('SLE_InstDif'):UpdateFrame() end,
+				args = {
+					enable = {
+						order = 1,
+						type = 'toggle',
+						name = L['Enable'],
+						desc = L['Show instance difficulty info as text.'],
+						disabled = function() return not E.private.general.minimap.enable end,
+					},
+					flag = {
+						order = 2,
+						type = 'toggle',
+						name = L['Show texture'],
+						desc = L['Show instance difficulty info as default texture.'],
+						disabled = function() return not E.private.general.minimap.enable end,
+					},
+					xoffset = {
+						order = 3,
+						type = 'range',
+						name = L['X-Offset'],
+						min = -50, max = 100, step = 1,
+						disabled = function() return not E.private.general.minimap.enable or not E.db.sle.minimap.instance.enable end,
+					},
+					yoffset = {
+						order = 4,
+						type = 'range',
+						name = L['Y-Offset'],
+						min = -50, max = 100, step = 1,
+						disabled = function() return not E.private.general.minimap.enable or not E.db.sle.minimap.instance.enable end,
+					},
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/nameplates_c.lua b/ElvUI_SLE/options/nameplates_c.lua
new file mode 100644
index 0000000..8011797
--- /dev/null
+++ b/ElvUI_SLE/options/nameplates_c.lua
@@ -0,0 +1,33 @@
+local E, L, V, P, G = unpack(ElvUI);
+local NP = E:GetModule('NamePlates')
+
+local function configTable()
+	E.Options.args.sle.args.options.args.general.args.nameplate = {
+		type = "group",
+		name = L["NamePlates"],
+		order = 8,
+		get = function(info) return E.db.sle.nameplate[ info[#info] ] end,
+		set = function(info, value) E.db.sle.nameplate[ info[#info] ] = value; NP:UpdateAllPlates() end,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["NamePlates"],
+			},
+			targetcount = {
+				type = "toggle",
+				order = 2,
+				name = L["Target Count"],
+				desc = L["Display the number of party / raid members targetting the nameplate unit."],
+			},
+			showthreat = {
+				type = "toggle",
+				order = 3,
+				name = L["Threat Text"],
+				desc = L["Display threat level as text on targeted, boss or mouseover nameplate."],
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/raidutility_c.lua b/ElvUI_SLE/options/raidutility_c.lua
new file mode 100644
index 0000000..50b3adf
--- /dev/null
+++ b/ElvUI_SLE/options/raidutility_c.lua
@@ -0,0 +1,33 @@
+local E, L, V, P, G = unpack(ElvUI);
+local M = E:GetModule('Misc')
+
+local function configTable()
+	E.Options.args.sle.args.options.args.ru = {
+		order = 9,
+		type = "group",
+		name = L['Raid Utility'],
+		args = {
+			ru = {
+				order = 1,
+				type = "group",
+				name = L['Raid Utility'],
+				args = {
+					info = {
+						order = 1,
+						type = "description",
+						name = "Options for the raid control button",
+					},
+					mouseover = {
+						order = 2,
+						type = "toggle",
+						name = L["Enable"],
+						get = function(info) return E.db.sle.rumouseover end,
+						set = function(info, value) E.db.sle.rumouseover = value; M:RUReset() end,
+					},
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/threat_c.lua b/ElvUI_SLE/options/threat_c.lua
new file mode 100644
index 0000000..b377d44
--- /dev/null
+++ b/ElvUI_SLE/options/threat_c.lua
@@ -0,0 +1,62 @@
+local E, L, V, P, G = unpack(ElvUI);
+local SLT = E:GetModule('SLE_Threat');
+
+local function configTable()
+	E.Options.args.sle.args.options.args.general.args.threat = {
+		type = "group",
+		name = L['Threat'],
+		order = 55,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L['Threat'],
+			},
+			intro = {
+				order = 2,
+				type = "description",
+				name = "Some threat changes",
+			},
+			enabled = {
+				order = 3,
+				type = "toggle",
+				name = L["Enable"],
+				--desc = L["Show/Hide UI buttons."],
+				get = function(info) return E.db.sle.threat.enable end,
+				set = function(info, value) E.db.sle.threat.enable = value; SLT:Update(); SLT:UpdatePosition() end,
+			},
+			space1 = {
+				order = 4,
+				type = 'description',
+				name = "",
+			},
+			space2 = {
+				order = 5,
+				type = 'description',
+				name = "",
+			},
+			position = {
+				order = 6,
+				type = 'select',
+				name = L['Position'],
+				desc = L['Adjust the position of the threat bar to any of the datatext panels in ElvUI & S&L.'],
+				values = {
+					['Top_Center'] = "Top Panel",
+					['Bottom_Panel'] = "Bottom Panel",
+					['DP_1'] = "Data Panel 1",
+					['DP_2'] = "Data Panel 2",
+					['DP_3'] = "Data Panel 3",
+					['DP_4'] = "Data Panel 4",
+					['DP_5'] = "Data Panel 5",
+					['DP_6'] = "Data Panel 6",
+					['LeftChatDataPanel'] = L['Left Chat'],
+					['RightChatDataPanel'] = L['Right Chat'],
+				},
+				get = function(info) return E.db.sle.threat.position end,
+				set = function(info, value) E.db.sle.threat.position = value; SLT:UpdatePosition() end,
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/tooltip_c.lua b/ElvUI_SLE/options/tooltip_c.lua
new file mode 100644
index 0000000..b17f64b
--- /dev/null
+++ b/ElvUI_SLE/options/tooltip_c.lua
@@ -0,0 +1,80 @@
+local E, L, V, P, G = unpack(ElvUI);
+
+local function configTable()
+	E.Options.args.sle.args.options.args.general.args.tooltip = {
+		order = 66,
+		type = "group",
+		get = function(info) return E.db.sle.tooltip[ info[#info] ] end,
+		name = L["Tooltip"],
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["Tooltip"],
+			},
+			intro = {
+				order = 2,
+				type = 'description',
+				name = L["Tooltip enhancements"],
+			},
+			space1 = {
+				order = 4,
+				type = 'description',
+				name = "",
+			},
+			showFaction = {
+				order = 5,
+				type = 'toggle',
+				name = L["Faction Icon"],
+				desc = L["Show faction icon to the left of player's name on tooltip."],
+				disabled = function() return not E.private.tooltip.enable end,
+				--get = function(info) return E.db.sle.tooltip.showFaction end,
+				set = function(info, value) E.db.sle.tooltip.showFaction = value end,
+			},
+			space2 = {
+				order = 6,
+				type = 'description',
+				name = "",
+			},
+			offset = {
+				type = "group",
+				name = L["Tooltip Cursor Offset"],
+				order = 7,
+				guiInline = true,
+				disabled = function() return not E.private.tooltip.enable or not E.db.tooltip.cursorAnchor end,
+				args = {
+					intro = {
+						order = 1,
+						type = 'description',
+						name = L["TTOFFSET_DESC"],
+					},
+					space1 = {
+						order = 2,
+						type = 'description',
+						name = "",
+					},
+					xOffset = {
+						order = 31,
+						type = 'range',
+						name = L["Tooltip X-offset"],
+						desc = L["Offset the tooltip on the X-axis."],
+						min = -200, max = 200, step = 1,
+						--get = function(info) return E.db.sle.tooltip.xOffset end,
+						set = function(info, value) E.db.sle.tooltip[ info[#info] ] = value end,
+					},
+					yOffset = {
+						order = 32,
+						type = 'range',
+						name = L["Tooltip Y-offset"],
+						desc = L["Offset the tooltip on the Y-axis."],
+						min = -200, max = 200, step = 1,
+						--get = function(info) return E.db.sle.tooltip.yOffset
+						set = function(info, value) E.db.sle.tooltip[ info[#info] ] = value end,
+					},
+				},
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/uibuttons_c.lua b/ElvUI_SLE/options/uibuttons_c.lua
new file mode 100644
index 0000000..4624498
--- /dev/null
+++ b/ElvUI_SLE/options/uibuttons_c.lua
@@ -0,0 +1,84 @@
+local E, L, V, P, G = unpack(ElvUI);
+local UB = E:GetModule('SLE_UIButtons')
+
+local function configTable()
+	E.Options.args.sle.args.options.args.general.args.uibuttons = {
+		type = "group",
+		name = L["UI Buttons"],
+		order = 77,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["UI Buttons"],
+			},
+			intro = {
+				order = 2,
+				type = "description",
+				name = L["Additional menu with useful buttons"],
+			},
+			enabled = {
+				order = 3,
+				type = "toggle",
+				name = L["Enable"],
+				desc = L["Show/Hide UI buttons."],
+				get = function(info) return E.db.sle.uibuttons.enable end,
+				set = function(info, value) E.db.sle.uibuttons.enable = value; UB:Start() end
+			},
+			space1 = {
+				order = 4,
+				type = 'description',
+				name = "",
+			},
+			space2 = {
+				order = 5,
+				type = 'description',
+				name = "",
+			},
+			size = {
+				order = 6,
+				type = "range",
+				name = L['Size'],
+				desc = L["Sets size of buttons"],
+				min = 12, max = 25, step = 1,
+				disabled = function() return not E.db.sle.uibuttons.enable end,
+				get = function(info) return E.db.sle.uibuttons.size end,
+				set = function(info, value) E.db.sle.uibuttons.size = value; UB:UpdateAll() end,
+			},
+			spacing = {
+				order = 7,
+				type = "range",
+				name = L['Button Spacing'],
+				desc = L['The spacing between buttons.'],
+				min = 1, max = 10, step = 1,
+				disabled = function() return not E.db.sle.uibuttons.enable end,
+				get = function(info) return E.db.sle.uibuttons.spacing end,
+				set = function(info, value) E.db.sle.uibuttons.spacing = value; UB:UpdateAll() end,
+			},
+			mouse = {
+				order = 8,
+				type = "toggle",
+				name = L["Mouse over"],
+				desc = L["Show on mouse over."],
+				disabled = function() return not E.db.sle.uibuttons.enable end,
+				get = function(info) return E.db.sle.uibuttons.mouse end,
+				set = function(info, value) E.db.sle.uibuttons.mouse = value; end
+			},
+			position = {
+				order = 10,
+				name = L["Buttons position"],
+				desc = L["Layout for UI buttons."],
+				type = "select",
+				values = {
+					["uib_hor"] = L['Horizontal'],
+					["uib_vert"] = L['Vertical'],
+				},
+				disabled = function() return not E.db.sle.uibuttons.enable end,
+				get = function(info) return E.db.sle.uibuttons.position end,
+				set = function(info, value) E.db.sle.uibuttons.position = value; UB:UpdateAll() end,
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/unitframes_c.lua b/ElvUI_SLE/options/unitframes_c.lua
new file mode 100644
index 0000000..e208545
--- /dev/null
+++ b/ElvUI_SLE/options/unitframes_c.lua
@@ -0,0 +1,81 @@
+local E, L, V, P, G = unpack(ElvUI);
+local UF = E:GetModule('UnitFrames')
+local CAN_HAVE_CLASSBAR = (E.myclass == "PALADIN" or E.myclass == "DRUID" or E.myclass == "DEATHKNIGHT" or E.myclass == "WARLOCK" or E.myclass == "PRIEST" or E.myclass == "MONK" or E.myclass == 'MAGE')
+
+local function configTable()
+	local positionValues = {
+		TOPLEFT = 'TOPLEFT',
+		LEFT = 'LEFT',
+		BOTTOMLEFT = 'BOTTOMLEFT',
+		RIGHT = 'RIGHT',
+		TOPRIGHT = 'TOPRIGHT',
+		BOTTOMRIGHT = 'BOTTOMRIGHT',
+		CENTER = 'CENTER',
+		TOP = 'TOP',
+		BOTTOM = 'BOTTOM',
+		NONE = L['Hide']
+	};
+
+	E.Options.args.sle.args.options.args.general.args.unitframes = {
+		type = "group",
+		name = L["UnitFrames"],
+		order = 88,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["UnitFrames"],
+			},
+			info = {
+				order = 2,
+				type = "description",
+				name = L["Options for customizing unit frames. Please don't change these setting when ElvUI's testing frames for bosses and arena teams are shown. That will make them invisible until retoggling."],
+			},
+			Reset = {
+				order = 3,
+				type = 'execute',
+				name = L['Restore Defaults'],
+				desc = L["Reset these options to defaults"],
+				func = function() E:GetModule('SLE'):Reset(nil, true) end,
+			},
+			indicators = {
+				order = 5,
+				type = "group",
+				name = L["Player Frame Indicators"],
+				guiInline = true,
+				args = {
+					combaticopos = {
+						order = 6,
+						type = "select",
+						name = L["Combat Position"],
+						desc = L["Set the point to show combat icon"],
+						get = function(info) return E.db.sle.combatico.pos end,
+						set = function(info, value) E.db.sle.combatico.pos = value; UF:Update_CombatIndicator() end,
+						values = positionValues
+					},
+				},
+			},
+		},
+	}
+
+	if E.myclass == "DRUID" or E.myclass == "WARLOCK" then
+		E.Options.args.sle.args.options.args.general.args.unitframes.args.druid = {
+			order = 7,
+			type = 'group',
+			name = L["Classbar Energy"],
+			guiInline = true,
+			args = {
+				powtext = {
+					order = 1,
+					type = "toggle",
+					name = L["Enable"],
+					desc = L["Show/hide the text with exact number of energy (Solar/Lunar or Demonic Fury) on your Classbar."],
+					get = function(info) return E.db.sle.powtext end,
+					set = function(info, value) E.db.sle.powtext = value; UF:ClassbarTextSLE() end,
+				},
+			},
+		}
+	end
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/options/vehicle_c.lua b/ElvUI_SLE/options/vehicle_c.lua
new file mode 100644
index 0000000..ce98193
--- /dev/null
+++ b/ElvUI_SLE/options/vehicle_c.lua
@@ -0,0 +1,30 @@
+local E, L, V, P, G = unpack(ElvUI);
+
+local function configTable()
+	E.Options.args.sle.args.options.args.general.args.vehicle = {
+		type = "group",
+		name = L["Enhanced Vehicle Bar"],
+		order = 6,
+		args = {
+			header = {
+				order = 1,
+				type = "header",
+				name = L["Enhanced Vehicle Bar"],
+			},
+			info = {
+				order = 2,
+				type = "description",
+				name = L["A different look/feel vehicle bar based on work by Azilroka"],
+			},
+			enable = {
+				order = 3,
+				type = "toggle",
+				name = L["Enable"],
+				get = function(info) return E.private.sle.vehicle.enable end,
+				set = function(info, value) E.private.sle.vehicle.enable = value; E:StaticPopup_Show("PRIVATE_RL") end,
+			},
+		},
+	}
+end
+
+table.insert(E.SLEConfigs, configTable)
\ No newline at end of file
diff --git a/ElvUI_SLE/skins/blizzard/character.lua b/ElvUI_SLE/skins/blizzard/character.lua
new file mode 100644
index 0000000..5fb9b3a
--- /dev/null
+++ b/ElvUI_SLE/skins/blizzard/character.lua
@@ -0,0 +1,65 @@
+local E, L, V, P, G = unpack(ElvUI);
+local S = E:GetModule('Skins')
+
+local function LoadSkin()
+	if E.private.skins.blizzard.enable == true and E.private.skins.blizzard.character == true then return end
+	if not E.private.sle.characterframeoptions.enable then return end
+
+	local slots = {
+		"HeadSlot", "NeckSlot", "ShoulderSlot", "BackSlot", "ChestSlot", "ShirtSlot",
+		"TabardSlot", "WristSlot", "HandsSlot", "WaistSlot", "LegsSlot", "FeetSlot",
+		"Finger0Slot", "Finger1Slot", "Trinket0Slot", "Trinket1Slot", "MainHandSlot", "SecondaryHandSlot",
+	}
+
+	for _, slot in pairs(slots) do
+		local icon = _G["Character"..slot.."IconTexture"]
+		local cooldown = _G["Character"..slot.."Cooldown"]
+		slot = _G["Character"..slot]
+		slot:StripTextures()
+		slot:StyleButton(false)
+		slot.ignoreTexture:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-LeaveItem-Transparent]])
+		slot:SetTemplate("Default", true)
+		icon:SetTexCoord(unpack(E.TexCoords))
+		icon:SetInside()
+
+		if(cooldown) then
+			E:RegisterCooldown(cooldown)
+		end
+	end
+
+	local function ColorItemBorder()
+		for _, slot in pairs(slots) do
+			local target = _G["Character"..slot]
+			local slotId, _, _ = GetInventorySlotInfo(slot)
+			local itemId = GetInventoryItemID("player", slotId)
+
+			if itemId then
+				local _, _, rarity, _, _, _, _, _, _, _, _ = GetItemInfo(itemId)
+				if rarity and rarity > 1 then
+					target:SetBackdropBorderColor(GetItemQualityColor(rarity))
+				else
+					target:SetBackdropBorderColor(unpack(E.media.bordercolor))
+				end
+			else
+				target:SetBackdropBorderColor(unpack(E.media.bordercolor))
+			end
+		end
+	end
+
+	local CheckItemBorderColor = CreateFrame("Frame")
+	CheckItemBorderColor:RegisterEvent("PLAYER_EQUIPMENT_CHANGED")
+	CheckItemBorderColor:SetScript("OnEvent", ColorItemBorder)
+	CharacterFrame:HookScript("OnShow", ColorItemBorder)
+	ColorItemBorder()
+
+	local charframe = {
+		"CharacterModelFrame",
+		"CharacterFrameInset",
+	}
+
+	for _, object in pairs(charframe) do
+		_G[object]:StripTextures()
+	end
+end
+
+hooksecurefunc(S, "Initialize", LoadSkin)
\ No newline at end of file
diff --git a/ElvUI_SLE/skins/blizzard/extraab.lua b/ElvUI_SLE/skins/blizzard/extraab.lua
old mode 100755
new mode 100644
index 8cc2e1f..ff368fe
--- a/ElvUI_SLE/skins/blizzard/extraab.lua
+++ b/ElvUI_SLE/skins/blizzard/extraab.lua
@@ -1,4 +1,4 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
+local E, L, V, P, G = unpack(ElvUI);

 ExtraActionButton1.style:SetTexture(nil)
 ExtraActionButton1.style.SetTexture = function() end
diff --git a/ElvUI_SLE/skins/blizzard/load_blizzard.xml b/ElvUI_SLE/skins/blizzard/load_blizzard.xml
old mode 100755
new mode 100644
index 566848e..1be1f97
--- a/ElvUI_SLE/skins/blizzard/load_blizzard.xml
+++ b/ElvUI_SLE/skins/blizzard/load_blizzard.xml
@@ -1,4 +1,5 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/">
+<Ui xmlns="http://www.blizzard.com/wow/ui/">
+	<Script file='character.lua'/>
 	<Script file='extraab.lua'/>
 	<Script file='petbattle.lua'/>
 </Ui>
\ No newline at end of file
diff --git a/ElvUI_SLE/skins/blizzard/petbattle.lua b/ElvUI_SLE/skins/blizzard/petbattle.lua
old mode 100755
new mode 100644
index 714abc7..cb069d3
--- a/ElvUI_SLE/skins/blizzard/petbattle.lua
+++ b/ElvUI_SLE/skins/blizzard/petbattle.lua
@@ -1,379 +1,23 @@
-local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore
+local E, L, V, P, G = unpack(ElvUI);
 local S = E:GetModule('Skins')

-local function LoadSkin()
+local function PetBattle()
 	if E.private.skins.blizzard.enable ~= true or E.private.skins.blizzard.petbattleui ~= true then return end
 	local f = PetBattleFrame
-	local bf = f.BottomFrame
-	local infoBars = {
-		f.ActiveAlly,
-		f.ActiveEnemy
-	}
-	S:HandleCloseButton(FloatingBattlePetTooltip.CloseButton)
+	local bar = ElvUIPetBattleActionBar

-	-- TOP FRAMES
-	f:StripTextures()
-
-	for index, infoBar in pairs(infoBars) do
-		infoBar.Border:SetAlpha(0)
-		infoBar.Border2:SetAlpha(0)
-		infoBar.healthBarWidth = 300
-
-		infoBar.IconBackdrop = CreateFrame("Frame", nil, infoBar)
-		infoBar.IconBackdrop:SetFrameLevel(infoBar:GetFrameLevel() - 1)
-		infoBar.IconBackdrop:SetOutside(infoBar.Icon)
-		infoBar.IconBackdrop:SetTemplate()
-		infoBar.BorderFlash:Kill()
-		infoBar.HealthBarBG:Kill()
-		infoBar.HealthBarFrame:Kill()
-		infoBar.HealthBarBackdrop = CreateFrame("Frame", nil, infoBar)
-		infoBar.HealthBarBackdrop:SetFrameLevel(infoBar:GetFrameLevel() - 1)
-		infoBar.HealthBarBackdrop:SetTemplate("Transparent")
-		infoBar.HealthBarBackdrop:Width(infoBar.healthBarWidth + (E.Border * 2))
-		infoBar.ActualHealthBar:SetTexture(E.media.normTex)
-
-		infoBar.PetTypeFrame = CreateFrame("Frame", nil, infoBar)
-		infoBar.PetTypeFrame:Size(100, 23)
-		infoBar.PetTypeFrame.text = infoBar.PetTypeFrame:CreateFontString(nil, 'OVERLAY')
-		infoBar.PetTypeFrame.text:FontTemplate()
-		infoBar.PetTypeFrame.text:SetText("")
-
-		infoBar.ActualHealthBar:ClearAllPoints()
-		infoBar.Name:ClearAllPoints()
-
-		infoBar.FirstAttack = infoBar:CreateTexture(nil, "ARTWORK")
-		infoBar.FirstAttack:Size(30)
-		infoBar.FirstAttack:SetTexture("Interface\\PetBattles\\PetBattle-StatIcons")
-		if index == 1 then
-			infoBar.HealthBarBackdrop:Point('TOPLEFT', infoBar.ActualHealthBar, 'TOPLEFT', -E.Border, E.Border)
-			infoBar.HealthBarBackdrop:Point('BOTTOMLEFT', infoBar.ActualHealthBar, 'BOTTOMLEFT', -E.Border, -E.Border)
-			infoBar.ActualHealthBar:SetVertexColor(171/255, 214/255, 116/255)
-			f.Ally2.iconPoint = infoBar.IconBackdrop
-			f.Ally3.iconPoint = infoBar.IconBackdrop
-
-			infoBar.Icon:Point("TOP", E.UIParent, "TOP", 0, -23) --Player's pet frame
-
-			infoBar.ActualHealthBar:Point('BOTTOMLEFT', infoBar.Icon, 'BOTTOMRIGHT', 10, 0)
-			infoBar.Name:Point('BOTTOMLEFT', infoBar.ActualHealthBar, 'TOPLEFT', 0, 10)
-			infoBar.PetTypeFrame:SetPoint("BOTTOMRIGHT",infoBar.HealthBarBackdrop, "TOPRIGHT", 0, 4)
-			infoBar.PetTypeFrame.text:SetPoint("RIGHT")
-
-			infoBar.FirstAttack:SetPoint("LEFT", infoBar.HealthBarBackdrop, "RIGHT", 5, 0)
-			infoBar.FirstAttack:SetTexCoord(infoBar.SpeedIcon:GetTexCoord())
-			infoBar.FirstAttack:SetVertexColor(.1,.1,.1,1)
-
-		else
-			infoBar.HealthBarBackdrop:Point('TOPRIGHT', infoBar.ActualHealthBar, 'TOPRIGHT', E.Border, E.Border)
-			infoBar.HealthBarBackdrop:Point('BOTTOMRIGHT', infoBar.ActualHealthBar, 'BOTTOMRIGHT', E.Border, -E.Border)
-			infoBar.ActualHealthBar:SetVertexColor(196/255,  30/255,  60/255)
-			f.Enemy2.iconPoint = infoBar.IconBackdrop
-			f.Enemy3.iconPoint = infoBar.IconBackdrop
-
-			infoBar.Icon:Point("TOP", E.UIParent, "TOP", 0, -23) --Enemy frame
-
-			infoBar.ActualHealthBar:Point('BOTTOMRIGHT', infoBar.Icon, 'BOTTOMLEFT', -10, 0)
-			infoBar.Name:Point('BOTTOMRIGHT', infoBar.ActualHealthBar, 'TOPRIGHT', 0, 10)
-
-			infoBar.PetTypeFrame:SetPoint("BOTTOMLEFT",infoBar.HealthBarBackdrop, "TOPLEFT", 2, 4)
-			infoBar.PetTypeFrame.text:SetPoint("LEFT")
-
-			infoBar.FirstAttack:SetPoint("RIGHT", infoBar.HealthBarBackdrop, "LEFT", -5, 0)
-			infoBar.FirstAttack:SetTexCoord(.5, 0, .5, 1)
-			infoBar.FirstAttack:SetVertexColor(.1,.1,.1,1)
-		end
-
-		infoBar.HealthText:ClearAllPoints()
-		infoBar.HealthText:SetPoint('CENTER', infoBar.HealthBarBackdrop, 'CENTER')
-
-		infoBar.PetType:ClearAllPoints()
-		infoBar.PetType:SetAllPoints(infoBar.PetTypeFrame)
-		infoBar.PetType:SetFrameLevel(infoBar.PetTypeFrame:GetFrameLevel() + 2)
-		infoBar.PetType:SetAlpha(0)
-
-		infoBar.LevelUnderlay:SetAlpha(0)
-		infoBar.Level:SetFontObject(NumberFont_Outline_Huge)
-		infoBar.Level:ClearAllPoints()
-		infoBar.Level:Point('BOTTOMLEFT', infoBar.Icon, 'BOTTOMLEFT', 2, 2)
-		if infoBar.SpeedIcon then
-			infoBar.SpeedIcon:ClearAllPoints()
-			infoBar.SpeedIcon:SetPoint("CENTER") -- to set
-			infoBar.SpeedIcon:SetAlpha(0)
-			infoBar.SpeedUnderlay:SetAlpha(0)
-		end
-	end
+	local a = CreateFrame("Frame", "ActiveAllyHolder", E.UIParent)
+	a:Size(918, 68)
+	a:Point("TOP", PetBattleFrame)

-	-- PETS SPEED INDICATOR UPDATE
-	hooksecurefunc("PetBattleFrame_UpdateSpeedIndicators", function(self)
-		if not f.ActiveAlly.SpeedIcon:IsShown() and not f.ActiveEnemy.SpeedIcon:IsShown() then
-			f.ActiveAlly.FirstAttack:Hide()
-			f.ActiveEnemy.FirstAttack:Hide()
-			return
-		end
-
-		for i, infoBar in pairs(infoBars) do
-			infoBar.FirstAttack:Show()
-			if infoBar.SpeedIcon:IsShown() then
-				infoBar.FirstAttack:SetVertexColor(0,1,0,1)
-			else
-				infoBar.FirstAttack:SetVertexColor(.8,0,.3,1)
-			end
-		end
-	end)
-
-
-	-- PETS UNITFRAMES PET TYPE UPDATE
-	hooksecurefunc("PetBattleUnitFrame_UpdatePetType", function(self)
-		if self.PetType then
-			local petType = C_PetBattles.GetPetType(self.petOwner, self.petIndex)
-			if self.PetTypeFrame then
-				self.PetTypeFrame.text:SetText(PET_TYPE_SUFFIX[petType])
-			end
-		end
-	end)
-
-	-- PETS UNITFRAMES AURA SKINS
-	hooksecurefunc("PetBattleAuraHolder_Update", function(self)
-		if not self.petOwner or not self.petIndex then return end
-
-		local nextFrame = 1
-		for i=1, C_PetBattles.GetNumAuras(self.petOwner, self.petIndex) do
-			local auraID, instanceID, turnsRemaining, isBuff = C_PetBattles.GetAuraInfo(self.petOwner, self.petIndex, i)
-			if (isBuff and self.displayBuffs) or (not isBuff and self.displayDebuffs) then
-				local frame = self.frames[nextFrame]
-
-				-- always hide the border
-				frame.DebuffBorder:Hide()
-
-				if not frame.isSkinned then
-					frame:CreateBackdrop()
-					frame.backdrop:SetOutside(frame.Icon)
-					frame.Icon:SetTexCoord(unpack(E.TexCoords))
-					frame.Icon:SetParent(frame.backdrop)
-				end
-
-				if isBuff then
-					frame.backdrop:SetBackdropBorderColor(0, 1, 0)
-				else
-					frame.backdrop:SetBackdropBorderColor(1, 0, 0)
-				end
-
-				-- move duration and change font
-				frame.Duration:FontTemplate(E.media.font, 12, "OUTLINE")
-				frame.Duration:ClearAllPoints()
-				frame.Duration:SetPoint("TOP", frame.Icon, "BOTTOM", 1, -4)
-				if turnsRemaining > 0 then
-					frame.Duration:SetText(turnsRemaining)
-				end
-				nextFrame = nextFrame + 1
-			end
-		end
-end)
-
-	-- WEATHER
-	hooksecurefunc("PetBattleWeatherFrame_Update", function(self)
-		local weather = C_PetBattles.GetAuraInfo(LE_BATTLE_PET_WEATHER, PET_BATTLE_PAD_INDEX, 1)
-		if weather then
-			self.Icon:Hide()
-			self.Name:Hide()
-			self.DurationShadow:Hide()
-			self.Label:Hide()
-			self.Duration:SetPoint("CENTER", self, 0, 8)
-			self:ClearAllPoints()
-			self:SetPoint("TOP", E.UIParent, 0, -15)
-		end
-	end)
-
-	hooksecurefunc("PetBattleUnitFrame_UpdateDisplay", function(self)
-		self.Icon:SetTexCoord(unpack(E.TexCoords))
-	end)
-
 	f.TopVersusText:ClearAllPoints()
-	f.TopVersusText:SetPoint("TOP", f, "TOP", 0, -56) --Versus text
-
-	-- TOOLTIPS SKINNING
-	local function SkinPetTooltip(tt)
-		tt.Background:SetTexture(nil)
-		if tt.Delimiter1 then
-			tt.Delimiter1:SetTexture(nil)
-			tt.Delimiter2:SetTexture(nil)
-		end
-		tt.BorderTop:SetTexture(nil)
-		tt.BorderTopLeft:SetTexture(nil)
-		tt.BorderTopRight:SetTexture(nil)
-		tt.BorderLeft:SetTexture(nil)
-		tt.BorderRight:SetTexture(nil)
-		tt.BorderBottom:SetTexture(nil)
-		tt.BorderBottomRight:SetTexture(nil)
-		tt.BorderBottomLeft:SetTexture(nil)
-		tt:SetTemplate("Transparent")
-	end
-
-	SkinPetTooltip(PetBattlePrimaryAbilityTooltip)
-	SkinPetTooltip(PetBattlePrimaryUnitTooltip)
-	SkinPetTooltip(BattlePetTooltip)
-	SkinPetTooltip(FloatingBattlePetTooltip)
-	SkinPetTooltip(FloatingPetBattleAbilityTooltip)
-
-	-- TOOLTIP DEFAULT POSITION
-	hooksecurefunc("PetBattleAbilityTooltip_Show", function()
-		local t = PetBattlePrimaryAbilityTooltip
-		t:ClearAllPoints()
-		t:SetPoint("TOPRIGHT", E.UIParent, "TOPRIGHT", -4, -4)
-	end)
-
-
-	local extraInfoBars = {
-		f.Ally2,
-		f.Ally3,
-		f.Enemy2,
-		f.Enemy3
-	}
-
-	for index, infoBar in pairs(extraInfoBars) do
-		infoBar.BorderAlive:SetAlpha(0)
-		infoBar.HealthBarBG:SetAlpha(0)
-		infoBar.HealthDivider:SetAlpha(0)
-		infoBar:Size(40)
-		infoBar:CreateBackdrop()
-		infoBar:ClearAllPoints()
-
-		infoBar.healthBarWidth = 40
-		infoBar.ActualHealthBar:ClearAllPoints()
-		infoBar.ActualHealthBar:SetPoint("TOPLEFT", infoBar.backdrop, 'BOTTOMLEFT', E.Border, -3)
-
-		infoBar.HealthBarBackdrop = CreateFrame("Frame", nil, infoBar)
-		infoBar.HealthBarBackdrop:SetFrameLevel(infoBar:GetFrameLevel() - 1)
-		infoBar.HealthBarBackdrop:SetTemplate("Default")
-		infoBar.HealthBarBackdrop:Width(infoBar.healthBarWidth + (E.Border*2))
-		infoBar.HealthBarBackdrop:Point('TOPLEFT', infoBar.ActualHealthBar, 'TOPLEFT', -E.Border, E.Border)
-		infoBar.HealthBarBackdrop:Point('BOTTOMLEFT', infoBar.ActualHealthBar, 'BOTTOMLEFT', -E.Border, -E.Spacing)
-	end
-
-	f.Ally2:SetPoint("TOPRIGHT", f.Ally2.iconPoint, "TOPLEFT", -6, -2)
-	f.Ally3:SetPoint('TOPRIGHT', f.Ally2, 'TOPLEFT', -8, 0)
-	f.Enemy2:SetPoint("TOPLEFT", f.Enemy2.iconPoint, "TOPRIGHT", 6, -2)
-	f.Enemy3:SetPoint('TOPLEFT', f.Enemy2, 'TOPRIGHT', 8, 0)
-
-	---------------------------------
-	-- PET BATTLE ACTION BAR SETUP --
-	---------------------------------
-
-	local bar = CreateFrame("Frame", "ElvUIPetBattleActionBar", f)
-	bar:SetSize (52*6 + 7*10, 52 * 1 + 10*2)
-	bar:EnableMouse(true)
-	bar:SetTemplate()
-	bar:SetPoint("BOTTOM", E.UIParent, "BOTTOM", 0, 4)
-	bar:SetFrameLevel(0)
-	bar:SetFrameStrata('BACKGROUND')
-	bar.backdropTexture:SetDrawLayer('BACKGROUND', 0)
-	ElvUIPetBattleActionBar:Hide()
-	E:CreateMover(bar, "PetBattleABMover", L["Pet Battle AB"], nil, nil, nil, "S&L,S&L M") --Mover
-	bar:SetScript('OnShow', function(self)
-		if not self.initialShow then
-			self.initialShow = true;
-			return;
-		end
-
-		self.backdropTexture:SetDrawLayer('BACKGROUND', 1)
-	end)
-
-	bf:StripTextures()
-	bf.TurnTimer:StripTextures()
-	bf.TurnTimer.SkipButton:SetParent(bar)
-	S:HandleButton(bf.TurnTimer.SkipButton)
-
-	bf.TurnTimer.SkipButton:Width(bar:GetWidth())
-	bf.TurnTimer.SkipButton:ClearAllPoints()
-	bf.TurnTimer.SkipButton:SetPoint("BOTTOM", bar, "TOP", 0, E.PixelMode and -1 or 1)
-	hooksecurefunc(bf.TurnTimer.SkipButton, "SetPoint", function(self, point, attachTo, anchorPoint, xOffset, yOffset)
-		if point ~= "BOTTOM" or anchorPoint ~= "TOP" or xOffset ~= 0 or yOffset ~= (E.PixelMode and -1 or 1) then
-			bf.TurnTimer.SkipButton:ClearAllPoints()
-			bf.TurnTimer.SkipButton:SetPoint("BOTTOM", bar, "TOP", 0, E.PixelMode and -1 or 1)
-		end
-	end)
-
-	bf.TurnTimer:Size(bf.TurnTimer.SkipButton:GetWidth(), bf.TurnTimer.SkipButton:GetHeight())
-	bf.TurnTimer:ClearAllPoints()
-	bf.TurnTimer:SetPoint("TOP", E.UIParent, "TOP", 0, -140)
-	bf.TurnTimer.TimerText:SetPoint("CENTER")
-
-	bf.FlowFrame:StripTextures()
-	bf.MicroButtonFrame:Kill()
-	bf.Delimiter:StripTextures()
-	bf.xpBar:SetParent(bar)
-	bf.xpBar:Width(bar:GetWidth() - (E.Border * 2))
-	bf.xpBar:CreateBackdrop()
-	bf.xpBar:ClearAllPoints()
-	bf.xpBar:SetPoint("BOTTOM", bf.TurnTimer.SkipButton, "TOP", 0, E.PixelMode and 0 or 3)
-	bf.xpBar:SetScript("OnShow", function(self) self:StripTextures() self:SetStatusBarTexture(E.media.normTex) end)
-
-	-- PETS SELECTION SKIN
-	for i = 1, 3 do
-		local pet = bf.PetSelectionFrame["Pet"..i]
-
-		pet.HealthBarBG:SetAlpha(0)
-		pet.HealthDivider:SetAlpha(0)
-		pet.ActualHealthBar:SetAlpha(0)
-		pet.SelectedTexture:SetAlpha(0)
-		pet.MouseoverHighlight:SetAlpha(0)
-		pet.Framing:SetAlpha(0)
-		pet.Icon:SetAlpha(0)
-		pet.Name:SetAlpha(0)
-		pet.DeadOverlay:SetAlpha(0)
-		pet.Level:SetAlpha(0)
-		pet.HealthText:SetAlpha(0)
-	end
-
-	-- MOVE DEFAULT POSITION OF PETS SELECTION
-	hooksecurefunc("PetBattlePetSelectionFrame_Show", function()
-		bf.PetSelectionFrame:ClearAllPoints()
-		bf.PetSelectionFrame:SetPoint("BOTTOM", bf.xpBar, "TOP", 0, 8)
-	end)
-
-
-	local function SkinPetButton(self)
-		if not self.backdrop then
-			self:CreateBackdrop()
-		end
-		self:SetNormalTexture("")
-		self.Icon:SetTexCoord(unpack(E.TexCoords))
-		self.Icon:SetParent(self.backdrop)
-		self.Icon:SetDrawLayer('BORDER')
-		self.checked = true -- avoid create a check
-		self:StyleButton()
-		self.SelectedHighlight:SetAlpha(0)
-		self.pushed:SetInside(self.backdrop)
-		self.hover:SetInside(self.backdrop)
-		self:SetFrameStrata('LOW')
-		self.backdrop:SetFrameStrata('LOW')
-	end
-
-	hooksecurefunc("PetBattleFrame_UpdateActionBarLayout", function(self)
-		for i=1, NUM_BATTLE_PET_ABILITIES do
-			local b = bf.abilityButtons[i]
-			SkinPetButton(b)
-			b:SetParent(bar)
-			b:ClearAllPoints()
-			if i == 1 then
-				b:SetPoint("BOTTOMLEFT", 10, 10)
-			else
-				local previous = bf.abilityButtons[i-1]
-				b:SetPoint("LEFT", previous, "RIGHT", 10, 0)
-			end
-		end
-
-		bf.SwitchPetButton:ClearAllPoints()
-		bf.SwitchPetButton:SetPoint("LEFT", bf.abilityButtons[3], "RIGHT", 10, 0)
-		SkinPetButton(bf.SwitchPetButton)
-		bf.CatchButton:SetParent(bar)
-		bf.CatchButton:ClearAllPoints()
-		bf.CatchButton:SetPoint("LEFT", bf.SwitchPetButton, "RIGHT", 10, 0)
-		SkinPetButton(bf.CatchButton)
-		bf.ForfeitButton:SetParent(bar)
-		bf.ForfeitButton:ClearAllPoints()
-		bf.ForfeitButton:SetPoint("LEFT", bf.CatchButton, "RIGHT", 10, 0)
-		SkinPetButton(bf.ForfeitButton)
-	end)
+	f.TopVersusText:SetPoint("CENTER", a)
+	f.ActiveAlly.Icon:Point("BOTTOMLEFT", a, "BOTTOMLEFT", 0, 0)
+	f.ActiveEnemy.Icon:Point("BOTTOMRIGHT", a, "BOTTOMRIGHT", 0, 0)
+	f.AllyBuffFrame:Point("TOPLEFT", f.ActiveAlly.Icon, "BOTTOMLEFT", 0, -5)
+	f.EnemyBuffFrame:Point("TOPRIGHT", f.ActiveEnemy.Icon, "BOTTOMRIGHT", 0, -5)
+	E:CreateMover(a, "PetBattleStatusMover", L["Pet Battle Status"], nil, nil, nil, "S&L,S&L MISC")
+	E:CreateMover(bar, "PetBattleABMover", L["Pet Battle AB"], nil, nil, nil, "S&L,S&L MISC")
 end

-S:RegisterSkin('ElvUI', LoadSkin)
\ No newline at end of file
+hooksecurefunc(S, "Initialize", PetBattle)
\ No newline at end of file
diff --git a/ElvUI_SLE/skins/load_skins.xml b/ElvUI_SLE/skins/load_skins.xml
old mode 100755
new mode 100644
diff --git a/ToDo.txt b/ToDo.txt
index d22f5a3..f93d5aa 100644
--- a/ToDo.txt
+++ b/ToDo.txt
@@ -5,6 +5,6 @@ Do something with switching between to Darth's from Repocc's settings. Everythin
 ==What we maybe can do==
 Saw an idea about a dot tracker, saw some coding for it will look at it when have time...
 Maybe add the ability to select amount of datatexts on each panel ranging from 1-3 slots
-
+adfas
 ==Testing Git Setup==
-Just a test push b/c I reinstalled Win8 another test.
\ No newline at end of file
+Just a test push b/c I reinstalled Win8 another test.