Quantcast

The beginning of a fix for inspect frame... no remote inspection atm

Repooc [10-30-16 - 01:03]
The beginning of a fix for inspect frame... no remote inspection atm
Filename
ElvUI_SLE/modules/Armory/InspectArmory/Communication.lua
ElvUI_SLE/modules/Armory/InspectArmory/InspectArmory.lua
ElvUI_SLE/modules/Armory/InspectArmory/Load_InspectArmory.xml
diff --git a/ElvUI_SLE/modules/Armory/InspectArmory/Communication.lua b/ElvUI_SLE/modules/Armory/InspectArmory/Communication.lua
index 8de4980..290b980 100644
--- a/ElvUI_SLE/modules/Armory/InspectArmory/Communication.lua
+++ b/ElvUI_SLE/modules/Armory/InspectArmory/Communication.lua
@@ -2,7 +2,7 @@
 --<< AISM : Armory Support Module for AddOn Communication Inspecting		>>--
 --------------------------------------------------------------------------------
 local SLE, T, E, L, V, P, G = unpack(select(2, ...))
-local Revision = 1.2
+local Revision = 1.3
 local _G = _G
 local AISM = _G["Armory_InspectSupportModule"] or CreateFrame('Frame', 'Armory_InspectSupportModule', UIParent)
 local gsub = gsub
@@ -33,21 +33,22 @@ if not AISM.Revision or AISM.Revision < Revision then
 	local ProfessionUnlearnKey = ERR_SPELL_UNLEARNED_S:gsub('%%s', '(.+)')
 	local GuildLeaveKey = ERR_GUILD_LEAVE_S:gsub('%%s', '(.+)')
 	local PlayerOfflineKey = ERR_CHAT_PLAYER_NOT_FOUND_S:gsub('%%s', '(.+)')
-
+
 	local playerName = UnitName('player')
 	local playerRealm = gsub(GetRealmName(),'[%s%-]','')
 	local _, playerClass, playerClassID = UnitClass('player')
 	local playerRace, playerRaceID = UnitRace('player')
 	local playerSex = UnitSex('player')
 	local playerNumSpecGroup = GetNumSpecGroups()
-
+	local isHelmDisplayed, isCloakDisplayed
+

 	--<< Create Core >>--
 	AISM.Revision = Revision

-	AISM.Tooltip = _G["AISM_Tooltip"] or AISM.Tooltip or CreateFrame('GameTooltip', 'AISM_Tooltip', nil, 'GameTooltipTemplate')
+	AISM.Tooltip = _G['AISM_Tooltip'] or AISM.Tooltip or CreateFrame('GameTooltip', 'AISM_Tooltip', nil, 'GameTooltipTemplate')
 	AISM.Tooltip:SetOwner(UIParent, 'ANCHOR_NONE')
-	AISM.Updater = _G["AISM_Updater"] or AISM.Updater or CreateFrame('Frame', 'AISM_Updater', UIParent)
+	AISM.Updater = _G['AISM_Updater'] or AISM.Updater or CreateFrame('Frame', 'AISM_Updater', UIParent)
 	AISM.Updater.elapsed = 0

 	AISM.Delay = 2
@@ -127,7 +128,8 @@ if not AISM.Revision or AISM.Revision < Revision then
 		Profession2 = false
 	}
 	for groupNum = 1, MAX_TALENT_GROUPS do
-		AISM.DataTypeTable["SP"..groupNum] = 'Specialization'
+		--AISM.DataTypeTable['GL'..groupNum] = 'Glyph'
+		AISM.DataTypeTable['SP'..groupNum] = 'Specialization'
 	end
 	for slotName, keyName in T.pairs(AISM.GearList) do
 		AISM.DataTypeTable[keyName] = 'Gear'
@@ -154,6 +156,10 @@ if not AISM.Revision or AISM.Revision < Revision then
 				needUpdate = AISM:GetPlayerSpecSetting() or needUpdate
 			end

+			-- if not self.GlyphUpdated then
+			-- 	needUpdate = AISM:GetPlayerGlyphString() or needUpdate
+			-- end
+
 			if self.GearUpdated ~= true then
 				needUpdate = AISM:GetPlayerGearString() or needUpdate
 			end
@@ -204,6 +210,9 @@ if not AISM.Revision or AISM.Revision < Revision then
 		elseif Event == 'ACTIVE_TALENT_GROUP_CHANGED' or Event == 'PLAYER_SPECIALIZATION_CHANGED' then
 			self.SpecUpdated = nil
 			self:Show()
+		--elseif Event == 'GLYPH_ADDED' or Event == 'GLYPH_REMOVED' or Event == 'GLYPH_UPDATED' then
+			--self.GlyphUpdated = nil
+			--self:Show()
 		elseif Event == 'PLAYER_TALENT_UPDATE' then
 			local args = GetNumSpecGroups()

@@ -223,6 +232,21 @@ if not AISM.Revision or AISM.Revision < Revision then
 		AISM.Updater:RegisterEvent('PLAYER_TALENT_UPDATE')
 	end

+	function AISM:UpdateHelmDisplaying(value)
+		isHelmDisplayed = value
+		AISM.Updater.GearUpdated = nil
+		AISM.Updater:Show()
+	end
+	--hooksecurefunc('ShowHelm', function(value) AISM:UpdateHelmDisplaying(value) end)
+
+	function AISM:UpdateCloakDisplaying(value)
+		isCloakDisplayed = value
+		AISM.Updater.GearUpdated = nil
+		AISM.Updater:Show()
+	end
+	--hooksecurefunc('ShowCloak', function(value) AISM:UpdateCloakDisplaying(value) end)
+
+
 	--<< Profession String >>--
 	function AISM:GetPlayerProfessionSetting()
 		local Profession1, Profession2 = T.GetProfessions()
@@ -301,34 +325,33 @@ if not AISM.Revision or AISM.Revision < Revision then
 			Spec = T.GetSpecialization(nil, nil, Group)
 			Spec = Spec and T.GetSpecializationInfo(Spec) or '0'

-			if not SpecTable["Spec"..Step] or SpecTable["Spec"..Step] ~= Spec then
-				SpecTable["Spec"..Step] = Spec
+			if not SpecTable['Spec'..Step] or SpecTable['Spec'..Step] ~= Spec then
+				SpecTable['Spec'..Step] = Spec
 				DataString = Spec
 			end

 			for i = 1, MAX_TALENT_TIERS do
 				for k = 1, NUM_TALENT_COLUMNS do
 					Talent, _, _, isSelected = T.GetTalentInfo(i, k, Group)
-					if Talent then
+
 					Talent = ((i - 1) * NUM_TALENT_COLUMNS + k)..'_'..Talent..(isSelected == true and '_1' or '')
-
-						Spec = Spec..'/'..Talent
-
-						if not SpecTable["Spec"..Step..'_Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)] or SpecTable["Spec"..Step..'_Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)] ~= Talent then
-							SpecTable["Spec"..Step..'_Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)] = Talent
-							DataString = (DataString and DataString..'/' or '')..Talent
-						end
+
+					Spec = Spec..'/'..Talent
+
+					if not SpecTable['Spec'..Step..'_Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)] or SpecTable['Spec'..Step..'_Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)] ~= Talent then
+						SpecTable['Spec'..Step..'_Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)] = Talent
+						DataString = (DataString and DataString..'/' or '')..Talent
 					end
 				end
 			end

-			if not self.PlayerData["Spec"..Step] or self.PlayerData["Spec"..Step] ~= Spec then
-				self.PlayerData["Spec"..Step] = Spec
-				self.PlayerData_ShortString["Spec"..Step] = Spec
-				self.UpdatedData["Spec"..Step] = DataString
+			if not self.PlayerData['Spec'..Step] or self.PlayerData['Spec'..Step] ~= Spec then
+				self.PlayerData['Spec'..Step] = Spec
+				self.PlayerData_ShortString['Spec'..Step] = Spec
+				self.UpdatedData['Spec'..Step] = DataString

 				if Step > 1 then
-					self.UncheckableDataList["Spec"..Step] = Spec
+					self.UncheckableDataList['Spec'..Step] = Spec
 				end
 			end
 		end
@@ -338,12 +361,48 @@ if not AISM.Revision or AISM.Revision < Revision then
 	AISM.Updater:RegisterEvent('ACTIVE_TALENT_GROUP_CHANGED')
 	AISM.Updater:RegisterEvent('PLAYER_SPECIALIZATION_CHANGED')

+
+	--<< Glyph String >>--
+	-- function AISM:GetPlayerGlyphString()
+	-- 	local ShortString, FullString, SpellID, GlyphID
+
+	-- 	for Step, Group in pairs(GroupArray) do
+	-- 		ShortString, FullString = '', ''
+
+	-- 		for SlotNum = 1, NUM_GLYPH_SLOTS do
+	-- 			print(SlotNum)
+	-- 			_, _, _, SpellID, _, GlyphID = GetGlyphSocketInfo(SlotNum, Group)
+
+	-- 			ShortString = ShortString..(SpellID or '0')..(SlotNum ~= NUM_GLYPH_SLOTS and '/' or '')
+	-- 			FullString = FullString..(SpellID or '0')..'_'..(GlyphID or '0')..(SlotNum ~= NUM_GLYPH_SLOTS and '/' or '')
+	-- 		end
+
+	-- 		if self.PlayerData['Glyph'..Step] ~= FullString then
+	-- 			self.PlayerData['Glyph'..Step] = FullString
+
+	-- 			if Step > 1 then
+	-- 				self.UncheckableDataList['Glyph'..Step] = FullString
+	-- 			end
+	-- 		end
+
+	-- 		if Step == 1 and self.PlayerData_ShortString.Glyph1 ~= ShortString then
+	-- 			self.PlayerData_ShortString.Glyph1 = ShortString
+	-- 			self.UpdatedData.Glyph1 = ShortString
+	-- 		end
+	-- 	end
+
+	-- 	self.Updater.GlyphUpdated = true
+	-- end
+	-- AISM.Updater:RegisterEvent('GLYPH_ADDED')
+	-- AISM.Updater:RegisterEvent('GLYPH_REMOVED')
+	-- AISM.Updater:RegisterEvent('GLYPH_UPDATED')
+
 	--<< Gear String >>--
 	function AISM:GetPlayerGearString()
 		local ShortString, FullString, needUpdate, needUpdateList
 		local CurrentSetItem, GearSetIDList = {}, {}

-		local slotID, slotLink, isTransmogrified, transmogrifiedItemID, SetName, SetItemCount, SetItemMax, SetOptionCount, colorR, colorG, colorB, checkSpace, tooltipText
+		local slotID, slotLink, isTransmogrified, transmogrifiedItemID, SetName, GeatSetCount, SetItemMax, SetOptionCount, colorR, colorG, colorB, checkSpace, tooltipText
 		for slotName in T.pairs(T.type(self.Updater.GearUpdated) == 'table' and self.Updater.GearUpdated or self.GearList) do
 			needUpdate = nil

@@ -399,7 +458,7 @@ if not AISM.Revision or AISM.Revision < Revision then
 					SetOptionCount = 1

 					for i = 1, self.Tooltip:NumLines() do
-						SetName, SetItemCount, SetItemMax = _G["AISM_TooltipTextLeft"..i]:GetText():match('^(.+) %((%d)/(%d)%)$') -- find string likes 'SetName (0/5)'
+						SetName, SetItemCount, SetItemMax = _G['AISM_TooltipTextLeft'..i]:GetText():match('^(.+) %((%d)/(%d)%)$') -- find string likes 'SetName (0/5)'

 						if SetName then
 							SetItemCount = T.tonumber(SetItemCount)
@@ -419,14 +478,14 @@ if not AISM.Revision or AISM.Revision < Revision then
 								FullString = ''

 								for k = 1, self.Tooltip:NumLines() do
-									tooltipText = _G["AISM_TooltipTextLeft"..(i+k)]:GetText()
+									tooltipText = _G['AISM_TooltipTextLeft'..(i+k)]:GetText()

 									if tooltipText == ' ' then
 										checkSpace = checkSpace - 1

 										if checkSpace == 0 then break end
 									elseif checkSpace == 2 then
-										colorR, colorG, colorB = _G["AISM_TooltipTextLeft"..(i+k)]:GetTextColor()
+										colorR, colorG, colorB = _G['AISM_TooltipTextLeft'..(i+k)]:GetTextColor()

 										if colorR > LIGHTYELLOW_FONT_COLOR.r - .01 and colorR < LIGHTYELLOW_FONT_COLOR.r + .01 and colorG > LIGHTYELLOW_FONT_COLOR.g - .01 and colorG < LIGHTYELLOW_FONT_COLOR.g + .01 and colorB > LIGHTYELLOW_FONT_COLOR.b - .01 and colorB < LIGHTYELLOW_FONT_COLOR.b + .01 then
 											ShortString = ShortString + 1
@@ -444,11 +503,11 @@ if not AISM.Revision or AISM.Revision < Revision then
 									elseif tooltipText:find(ItemSetBonusKey) then
 										tooltipText = tooltipText:match("^%((%d)%)%s.+:%s.+$") or 'T'

-										if CurrentSetItem[SetName]["SetOption"..SetOptionCount] and CurrentSetItem[SetName]["SetOption"..SetOptionCount] ~= tooltipText then
+										if CurrentSetItem[SetName]['SetOption'..SetOptionCount] and CurrentSetItem[SetName]['SetOption'..SetOptionCount] ~= tooltipText then
 											needUpdate = true
 										end

-										CurrentSetItem[SetName]["SetOption"..SetOptionCount] = tooltipText
+										CurrentSetItem[SetName]['SetOption'..SetOptionCount] = tooltipText
 										FullString = FullString..'/'..tooltipText

 										SetOptionCount = SetOptionCount + 1
@@ -565,9 +624,13 @@ if not AISM.Revision or AISM.Revision < Revision then
 		end

 		for groupNum = 1, MAX_TALENT_GROUPS do
-			if InputData["Spec"..groupNum] then
-				Data[#Data + 1] = 'SP'..groupNum..':'..InputData["Spec"..groupNum]
+			if InputData['Spec'..groupNum] then
+				Data[#Data + 1] = 'SP'..groupNum..':'..InputData['Spec'..groupNum]
 			end
+
+			--if InputData['Glyph'..groupNum] then
+				--Data[#Data + 1] = 'GL'..groupNum..':'..InputData['Glyph'..groupNum]
+			--end
 		end

 		for slotName, keyName in T.pairs(self.GearList) do
@@ -817,12 +880,20 @@ if not AISM.Revision or AISM.Revision < Revision then
 								if not Talent then
 									TableToSave.Specialization[Group].SpecializationID = stringTable[1]
 								else
-									TableToSave.Specialization[Group]["Talent"..Spec] = { Talent, isSelected and true or false }
+									TableToSave.Specialization[Group]['Talent'..Spec] = { Talent, isSelected and true or false }
 								end
 							end
 						elseif self.DataTypeTable[DataType] == 'ActiveSpec' then
 							TableToSave.Specialization = TableToSave.Specialization or {}
 							TableToSave.Specialization.ActiveSpec = T.tonumber(DataString)
+						-- elseif self.DataTypeTable[DataType] == 'Glyph' then
+						-- 	local SpellID, GlyphID
+						-- 	for i = 1, #stringTable do
+						-- 		SpellID, GlyphID = T.split('_', stringTable[i])
+
+						-- 		TableToSave.Glyph[Group]['Glyph'..i..'SpellID'] = tonumber(SpellID)
+						-- 		TableToSave.Glyph[Group]['Glyph'..i..'ID'] = tonumber(GlyphID)
+						-- 	end
 						elseif self.DataTypeTable[DataType] == 'Gear' then
 							TableToSave.Gear = TableToSave.Gear or {}

@@ -840,7 +911,7 @@ if not AISM.Revision or AISM.Revision < Revision then
 								}

 								for i = 1, MAX_NUM_SOCKETS do
-									TableToSave.Gear[DataType]["Gem"..i] = stringTable[i + 2] ~= 0 and stringTable[i + 2] or nil
+									TableToSave.Gear[DataType]['Gem'..i] = stringTable[i + 2] ~= 0 and stringTable[i + 2] or nil
 								end
 							else
 								TableToSave.Gear[DataType] = {
@@ -848,7 +919,7 @@ if not AISM.Revision or AISM.Revision < Revision then
 								}

 								for i = 1, MAX_NUM_SOCKETS do
-									TableToSave.Gear[DataType]["Gem"..i] = stringTable[i + 1] ~= 0 and stringTable[i + 1] or nil
+									TableToSave.Gear[DataType]['Gem'..i] = stringTable[i + 1] ~= 0 and stringTable[i + 1] or nil
 								end
 							end
 						elseif self.DataTypeTable[DataType] == 'SetItemData' then
@@ -865,7 +936,7 @@ if not AISM.Revision or AISM.Revision < Revision then
 											TableToSave.SetItem[(stringTable[1])][i - 1] = stringTable[i]
 										else
 											for k = 1, #stringTable - i + 1 do
-												TableToSave.SetItem[(stringTable[1])]["SetOption"..k] = stringTable[i + k - 1] == 'T' or stringTable[i + k - 1]
+												TableToSave.SetItem[(stringTable[1])]['SetOption'..k] = stringTable[i + k - 1] == 'T' or stringTable[i + k - 1]
 											end
 											break
 										end
@@ -968,6 +1039,11 @@ if not AISM.Revision or AISM.Revision < Revision then
 			self:GetPlayerCurrentGroupMode()
 			self:Show()
 		elseif Event == 'PLAYER_ENTERING_WORLD' or Event == 'ZONE_CHANGED_NEW_AREA' then
+			-- if not (isHelmDisplayed and isCloakDisplayed) then
+			-- 	isHelmDisplayed = ShowingHelm()
+			-- 	isCloakDisplayed = ShowingCloak()
+			-- end
+
 			self:GetCurrentInstanceType()
 			self:Show()
 		end
diff --git a/ElvUI_SLE/modules/Armory/InspectArmory/InspectArmory.lua b/ElvUI_SLE/modules/Armory/InspectArmory/InspectArmory.lua
index c9fe4db..9d9124f 100644
--- a/ElvUI_SLE/modules/Armory/InspectArmory/InspectArmory.lua
+++ b/ElvUI_SLE/modules/Armory/InspectArmory/InspectArmory.lua
@@ -1,35 +1,11 @@
 if select(2, GetAddOnInfo('ElvUI_KnightFrame')) and IsAddOnLoaded('ElvUI_KnightFrame') then return end
+local _G = _G

 local SLE, T, E, L, V, P, G = unpack(select(2, ...))
 local KF, Info, Timer = unpack(ElvUI_KnightFrame)
 --GLOBALS: CreateFrame, SLE_ArmoryDB, NotifyInspect, InspectUnit, UIParent, hooksecurefunc, UIDROPDOWNMENU_MENU_LEVEL
 local format = format
-local gsub = gsub
-local print = print
-local next = next
-
---------------------------------------------------------------------------------
---<< KnightFrame : Upgrade Inspect Frame like Wow-Armory					>>--
---------------------------------------------------------------------------------
-local IA = InspectArmory or CreateFrame('Frame', 'InspectArmory', E.UIParent)
-local _G = _G
-local _
-local ENI = _G["EnhancedNotifyInspect"] or { CancelInspect = function() end }
-local AISM = _G["Armory_InspectSupportModule"]
-local ButtonName = INSPECT --L["Knight Inspect"]
-
-local CORE_FRAME_LEVEL = 10
-local SLOT_SIZE = 37
-local TAB_HEIGHT = 22
-local SIDE_BUTTON_WIDTH = 16
-local SPACING = 3
-local INFO_TAB_SIZE = 22
-local TALENT_SLOT_SIZE = 26
-
-local HeadSlotItem = 99568
-local BackSlotItem = 102246
-local Default_NotifyInspect, Default_InspectUnit
-
+local GetBuildInfo = GetBuildInfo
 local NUM_TALENT_COLUMNS,MAX_TALENT_GROUPS = NUM_TALENT_COLUMNS,MAX_TALENT_GROUPS
 local MAX_TALENT_GROUPS, CLASS_TALENT_LEVELS,  MAX_TALENT_TIERS = MAX_TALENT_GROUPS, CLASS_TALENT_LEVELS,  MAX_TALENT_TIERS
 local LIGHTYELLOW_FONT_COLOR_CODE = LIGHTYELLOW_FONT_COLOR_CODE
@@ -46,7 +22,6 @@ local INSPECT_GUILD_NUM_MEMBERS = INSPECT_GUILD_NUM_MEMBERS
 local STAT_AVERAGE_ITEM_LEVEL = STAT_AVERAGE_ITEM_LEVEL
 local TRADE_SKILLS = TRADE_SKILLS
 local PVP, ARENA_2V2, ARENA_3V3, ARENA_5V5, PVP_RATED_BATTLEGROUNDS, GUILD = PVP, ARENA_2V2, ARENA_3V3, ARENA_5V5, PVP_RATED_BATTLEGROUNDS, GUILD
-
 local SendAddonMessage = SendAddonMessage
 local ShowUIPanel, HideUIPanel = ShowUIPanel, HideUIPanel
 local HandleModifiedItemClick = HandleModifiedItemClick
@@ -65,25 +40,52 @@ local GetInspectSpecialization = GetInspectSpecialization
 local GetInspectArenaData, GetInspectRatedBGData, GetInspectHonorData = GetInspectArenaData, GetInspectRatedBGData, GetInspectHonorData
 local GetGuildLogoInfo, GetInspectGuildInfo = GetGuildLogoInfo, GetInspectGuildInfo
 local GetTalentLink = GetTalentLink
+local next = next
+local NotifyInspect = NotifyInspect
+
+
+--------------------------------------------------------------------------------
+--<< KnightFrame : Upgrade Inspect Frame like Wow-Armory					>>--
+--------------------------------------------------------------------------------
+local IA = InspectArmory or CreateFrame('Frame', 'InspectArmory', E.UIParent)
+local _
+local ClientVersion = select(4, GetBuildInfo())
+local AISM = _G['Armory_InspectSupportModule']
+local ButtonName = INSPECT --L["Knight Inspect"]
+
+local CORE_FRAME_LEVEL = 10
+local SLOT_SIZE = 37
+local TAB_HEIGHT = 22
+local SIDE_BUTTON_WIDTH = 16
+local SPACING = 3
+local INFO_TAB_SIZE = 22
+local TALENT_SLOT_SIZE = 26
+
+local HeadSlotItem = 134110
+local BackSlotItem = 134111
+local InspectorInterval = 0.25
+
+local Default_InspectUnit
+local Default_InspectFrame

 --<< Key Table >>--
 IA.PageList = { Character = 'CHARACTER', Info = 'INFO', Spec = 'TALENTS' }
 IA.InfoPageCategoryList = { 'Profession', 'PvP', 'Guild' }
 IA.UnitPopupList = { FRIEND = true, GUILD = true, RAID = true, FOCUS = true, PLAYER = true, PARTY = true, RAID_PLAYER = true }
 IA.ModelList = {
-	Human = { RaceID = 1, [2] = { x = 0.02, y = -0.025, z = -0.6 }, [3] = { x = -0.01, y = -0.08, z = -0.6 } },
-	Dwarf = { RaceID = 3, [2] = { x = -0.01, y = -0.23, z = -0.9 }, [3] = { x = -0.03, y = -0.15, z = -0.8 } },
-	NightElf = { RaceID = 4, [2] = { z = -0.7 }, [3] = { x = -0.02, y = -0.04, z = -0.7 }},
-	Gnome = { RaceID = 7, [2] = { y = -0.2, z = -1 }, [3] = { x = -0.01, y = -0.19, z = -0.9 } },
-	Draenei = { RaceID = 11, [2] = { x = -0.04, y = -0.08, z = -0.7 }, [3] = { x = -0.02, y = -0.01, z = -0.6 }},
-	Worgen = { RaceID = 22, [2] = { x = -0.09, y = -0.1, z = -0.4 }, [3] = { x = -0.01, y = 0.01, z = 0.06 }},
-	Orc = { RaceID = 2, [2] = { y = -0.06, z = -1 }, [3] = { x = -0.01, y = -0.05, z = -0.7 }},
-	Scourge = { RaceID = 5, [2] = { y = -0.08, z = -0.7 }, [3] = { y = -0.05, z = -0.6 }},
-	Tauren = { RaceID = 6, [2] = { y = -0.09, z = -0.7 }, [3] = { y = -0.16, z = -0.6 } },
-	Troll = { RaceID = 8, [2] = { y = -0.14, z = -1.1 }, [3] = { y = -0.11, z = -0.8 }},
-	BloodElf = { RaceID = 10, [2] = { x = 0.02, y = -0.01, z = -0.5 }, [3] = { x = 0.04, y = -0.01, z = -0.6 }},
-	Goblin = { RaceID = 9, [2] = { y = -0.23, z = -1.3 }, [3] = { x = -0.01, y = -0.25, z = -1.3 } },
-	Pandaren = { RaceID = 24, [2] = { x = 0.02, y = 0.02, z = -0.6 }, [3] = { x = 0, y = -0.05, z = -1 } },
+	Human =		{ RaceID = 1, 	[2] = { x = -.02, y = -.04, r = -5.76 }, 	[3] = { x = -.02, y = -.07, r = -5.74 }},
+	Dwarf = 		{ RaceID = 3, 	[2] = { x = -.02 }, 								[3] = { x = -.05, y = -.09, r = -5.74 }},
+	NightElf = 		{ RaceID = 4, 	[2] = { x = -.04, y = -.02, r = -5.74 }, 	[3] = { y = -.02, r = -5.74 }},
+	Gnome = 		{ RaceID = 7, 	[2] = { y = -.1 },									[3] = { x = -.04, y = -.1 }},
+	Draenei = 	{ RaceID = 11, 	[2] = { x = -.09, r = -5.76 }, 					[3] = { x = -.05, y = -.06, r = -5.7 }},
+	Worgen = 	{ RaceID = 22, 	[2] = { y = .1 }, 									[3] = { x = -.14, r = -5.9 }},
+	Orc = 			{ RaceID = 2, 	[2] = { y = -.02, r = -6.63 }, 					[3] = { x = .03, y = -.04, r = -6.86 }},
+	Scourge = 	{ RaceID = 5, 	[2] = { x = -.01, y = -.06, r = -6.5 }, 		[3] = { y = -.04, r = -6.85 }},
+	Tauren = 		{ RaceID = 6, 	[2] = { x = .08, y = .08, r = -6.79 }, 		[3] = { x = .1, y = -.16, r = -6.70 }},
+	Troll = 			{ RaceID = 8, 	[2] = { r = -6.85 }, 								[3] = { x = .03, y = .03, r = -6.89 }},
+	BloodElf = 	{ RaceID = 10, 	[2] = { x = -.02, y = -.01, r = -6.53 }, 	[3] = { x = .1, y = -.03, r = -6.89 }},
+	Goblin = 		{ RaceID = 9, 	[2] = { x = .01, y = -.03, r = -6.57 }, 		[3] = { y = -.05, r = -6.61 }},
+	Pandaren = 	{ RaceID = 24, 	[2] = { x = .08, r = -6.85 }, 					[3] = { x = .14, y = .06, r = -6.72 }}
 }
 IA.CurrentInspectData = {}
 IA.Default_CurrentInspectData = {
@@ -95,45 +97,52 @@ IA.Default_CurrentInspectData = {
 		Finger1Slot = {}, Trinket0Slot = {}, Trinket1Slot = {}, SecondaryHandSlot = {}
 	},
 	SetItem = {},
-	Specialization = {},
+	Specialization = {
+		[1] = {},	-- Current Specialization
+		[2] = {}	-- PvP Talent
+	},
 	Profession = { [1] = {}, [2] = {} },
-	PvP = {}
+	PvP = {
+		['2vs2'] = {},
+		['3vs3'] = {},
+		RB = {}
+	}
 }
-for i = 1, MAX_TALENT_GROUPS do
-	IA.Default_CurrentInspectData.Specialization[i] = {}
-end
+--for i = 1, MAX_TALENT_GROUPS do
+--	IA.Default_CurrentInspectData.Specialization[i] = {}
+--end


-IA.MainStats = {	-- STR, INT, AGI,
-	WARRIOR = STR,
-	HUNTER = AGI,
-	SHAMAN = {
-		[(L["Spec_Shaman_Elemental"])] = INT,
-		[(L["Spec_Shaman_Enhancement"])] = AGI,
-		[(L["Spec_Shaman_Restoration"])] = INT
-	},
-	MONK = {
-		[(L["Spec_Monk_Brewmaster"])] = AGI,
-		[(L["Spec_Monk_Mistweaver"])] = INT,
-		[(L["Spec_Monk_Windwalker"])] = AGI
-	},
-	ROGUE = AGI,
-	DEATHKNIGHT = STR,
-	MAGE = INT,
-	DRUID = {
-		[(L["Spec_Druid_Balance"])] = INT,
-		[(L["Spec_Druid_Feral"])] = AGI,
-		[(L["Spec_Druid_Guardian"])] = AGI,
-		[(L["Spec_Druid_Restoration"])] = INT
-	},
-	PALADIN = {
-		[(L["Spec_Paladin_Holy"])] = INT,
-		[(L["Spec_Paladin_Protection"])] = STR,
-		[(L["Spec_Paladin_Retribution"])] = STR
-	},
-	PRIEST = INT,
-	WARLOCK = INT
-}
+-- IA.MainStats = {	-- STR, INT, AGI,
+-- 	WARRIOR = STR,
+-- 	HUNTER = AGI,
+-- 	SHAMAN = {
+-- 		[(L["Spec_Shaman_Elemental"])] = INT,
+-- 		[(L["Spec_Shaman_Enhancement"])] = AGI,
+-- 		[(L["Spec_Shaman_Restoration"])] = INT
+-- 	},
+-- 	MONK = {
+-- 		[(L["Spec_Monk_Brewmaster"])] = AGI,
+-- 		[(L["Spec_Monk_Mistweaver"])] = INT,
+-- 		[(L["Spec_Monk_Windwalker"])] = AGI
+-- 	},
+-- 	ROGUE = AGI,
+-- 	DEATHKNIGHT = STR,
+-- 	MAGE = INT,
+-- 	DRUID = {
+-- 		[(L["Spec_Druid_Balance"])] = INT,
+-- 		[(L["Spec_Druid_Feral"])] = AGI,
+-- 		[(L["Spec_Druid_Guardian"])] = AGI,
+-- 		[(L["Spec_Druid_Restoration"])] = INT
+-- 	},
+-- 	PALADIN = {
+-- 		[(L["Spec_Paladin_Holy"])] = INT,
+-- 		[(L["Spec_Paladin_Protection"])] = STR,
+-- 		[(L["Spec_Paladin_Retribution"])] = STR
+-- 	},
+-- 	PRIEST = INT,
+-- 	WARLOCK = INT
+-- }


 do --<< Button Script >>--
@@ -205,50 +214,54 @@ do --<< Button Script >>--
 			_G["GameTooltip"]:SetOwner(self, 'ANCHOR_RIGHT')
 			_G["GameTooltip"]:SetHyperlink(self.Link)

-			local CurrentLineText, SetName
+			local CurrentLineText, SetName, TooltipText, CurrentTextType
+			local CheckSpace = 2
+
 			for i = 1, _G["GameTooltip"]:NumLines() do
 				CurrentLineText = _G["GameTooltipTextLeft"..i]:GetText()

 				SetName = CurrentLineText:match('^(.+) %((%d)/(%d)%)$')

-				if SetName then
-					local SetCount = 0
+				if SetName and type(IA.SetItem[SetName]) == 'table' then
+					local SetCount, SetOptionCount = 0, 0

-					if T.type(IA.SetItem[SetName]) == 'table' then
-						for dataType, Data in T.pairs(IA.SetItem[SetName]) do
-							if T.type(dataType) == 'string' then -- Means SetOption Data
-
-
-								_G["GameTooltipTextLeft"..(i + #IA.SetItem[SetName] + 1 + dataType:match('^.+(%d)$'))]:SetText(Data)
-								--[[
-								local CurrentLineNum = i + #IA.SetItem[SetName] + 1 + dataType:match('^.+(%d)$')
-								local CurrentText = _G["GameTooltipTextLeft'..CurrentLineNum]:GetText()
-								local CurrentTextType = CurrentText:match("^%((%d)%)%s.+:%s.+$") or true
-
-								if Data ~= CurrentTextType then
-									if Data == true and CurrentTextType ~= true then
-										_G["GameTooltipTextLeft'..CurrentLineNum]:SetText(GREEN_FONT_COLOR_CODE..(strsub(CurrentText, (strlen(CurrentTextType) + 4))))
-									else
-										_G["GameTooltipTextLeft'..CurrentLineNum]:SetText(GRAY_FONT_COLOR_CODE..'('..Data..') '..CurrentText)
-									end
-								end
-								]]
-							else
-								if Data:find(LIGHTYELLOW_FONT_COLOR_CODE) then
+					for k = 1, _G["GameTooltip"]:NumLines() do
+						TooltipText = _G['GameTooltipTextLeft'..(i+k)]:GetText()
+
+						if TooltipText == ' ' then
+							CheckSpace = CheckSpace - 1
+
+							if CheckSpace == 0 then break end
+						elseif CheckSpace == 2 then
+							if IA.SetItem[SetName][k] then
+								if IA.SetItem[SetName][k]:find(LIGHTYELLOW_FONT_COLOR_CODE) then
 									SetCount = SetCount + 1
 								end

-								_G["GameTooltipTextLeft"..(i + dataType)]:SetText(Data)
+								_G['GameTooltipTextLeft'..(i + k)]:SetText(IA.SetItem[SetName][k])
+							end
+						elseif TooltipText:find(Info.Armory_Constants.ItemSetBonusKey) then
+							SetOptionCount = SetOptionCount + 1
+							CurrentTextType = TooltipText:match("^%((%d)%)%s.+:%s.+$") or true
+
+							if IA.SetItem[SetName]['SetOption'..SetOptionCount] and  IA.SetItem[SetName]['SetOption'..SetOptionCount] ~= CurrentTextType then
+								if IA.SetItem[SetName]['SetOption'..SetOptionCount] == true and CurrentTextType ~= true then
+									_G['GameTooltipTextLeft'..(i+k)]:SetText(GREEN_FONT_COLOR_CODE..(strsub(TooltipText, (strlen(CurrentTextType) + 4))))
+								else
+									_G['GameTooltipTextLeft'..(i+k)]:SetText(GRAY_FONT_COLOR_CODE..'('..IA.SetItem[SetName]['SetOption'..SetOptionCount]..') '..TooltipText)
+								end
 							end
 						end
-
-						_G["GameTooltipTextLeft"..i]:SetText(gsub(CurrentLineText, ' %(%d/', ' %('..SetCount..'/', 1))
 					end

+					_G['GameTooltipTextLeft'..i]:SetText(string.gsub(CurrentLineText, ' %(%d/', ' %('..SetCount..'/', 1))
+
 					break
 				elseif Info.Armory_Constants.CanTransmogrifySlot[self.SlotName] and Info.Armory_Constants.ItemBindString[CurrentLineText] and self.TransmogrifyAnchor.Link then
 					_G["GameTooltipTextLeft"..i]:SetText(E:RGBToHex(1, .5, 1)..TRANSMOGRIFIED_HEADER..'|n'..(T.GetItemInfo(self.TransmogrifyAnchor.Link) or self.TransmogrifyAnchor.Link)..'|r|n'..CurrentLineText)
 				end
+
+				if CheckSpace == 0 then break end
 			end

 			_G["GameTooltip"]:Show()
@@ -392,24 +405,33 @@ function IA:ChangePage(Type)
 		end
 	end

-	self.MainHandSlot:ClearAllPoints()
-	self.SecondaryHandSlot:ClearAllPoints()
+	--self.MainHandSlot:ClearAllPoints()
+	--self.SecondaryHandSlot:ClearAllPoints()
 	if Type == 'Character' then
 		for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
-			self[SlotName].ItemLevel:Hide()
+			if self[SlotName].ItemLevel then
+				self[SlotName].ItemLevel:Hide()
+				self[SlotName].Gradation:Show()
+			end
 		end
-
-		self.MainHandSlot:Point('BOTTOMRIGHT', self.BP, 'TOP', -2, SPACING)
-		self.SecondaryHandSlot:Point('BOTTOMLEFT', self.BP, 'TOP', 2, SPACING)
+		--self.MainHandSlot:Point('BOTTOMRIGHT', self.BP, 'TOP', -2, SPACING)
+		--self.SecondaryHandSlot:Point('BOTTOMLEFT', self.BP, 'TOP', 2, SPACING)
 	else
 		for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
-			self[SlotName].ItemLevel:Show()
+			if self[SlotName].ItemLevel then
+				self[SlotName].ItemLevel:Show()
+				self[SlotName].Gradation:Hide()
+			end
 		end
-
-		self.MainHandSlot:Point('BOTTOMLEFT', self.BP, 'TOPLEFT', 1, SPACING)
-		self.SecondaryHandSlot:Point('BOTTOMRIGHT', self.BP, 'TOPRIGHT', -1, SPACING)
+		--self.MainHandSlot:Point('BOTTOMLEFT', self.BP, 'TOPLEFT', 1, SPACING)
+		--self.SecondaryHandSlot:Point('BOTTOMRIGHT', self.BP, 'TOPRIGHT', -1, SPACING)
 	end

+	self:DisplayMessage(Type)
+end
+
+
+function IA:DisplayMessage(Type)
 	if self[Type].Message then
 		self.Message:SetText(self[Type].Message)
 		self.MessageFrame.Page:Width(self.Message:GetWidth())
@@ -433,6 +455,7 @@ function IA:CreateInspectFrame()
 		self:SetFrameLevel(CORE_FRAME_LEVEL)
 		self:SetMovable(true)
 		self:SetClampedToScreen(true)
+		self:Point('CENTER', E.UIParent)
 		self:SetScript('OnHide', function()
 			PlaySound('igCharacterInfoClose')

@@ -443,16 +466,20 @@ function IA:CreateInspectFrame()
 					AISM.RegisteredFunction.InspectArmory = nil
 				end

-				ENI.CancelInspect(TableIndex)
+				--ENI.CancelInspect(TableIndex)
 				IA:UnregisterEvent('INSPECT_READY')
 				IA:UnregisterEvent('INSPECT_HONOR_UPDATE')
 			end

 			self.LastDataSetting = nil
-			self.Model:Point('TOPRIGHT', UIParent, 'BOTTOMLEFT')
+
+			self.Model:ClearAllPoints()
+			self.Model:Point('TOPLEFT', UIParent)
+			self.Model:Point('BOTTOMRIGHT', UIParent, 'TOPLEFT')
 		end)
 		self:SetScript('OnShow', function() self.Model:Point('TOPRIGHT', self.HandsSlot) end)
 		self:SetScript('OnEvent', function(self, Event, ...) if self[Event] then self[Event](Event, ...) end end)
+
 		_G["UIPanelWindows"].InspectArmory = { area = 'left', pushable = 1, whileDead = 1 }

 		self.DisplayUpdater = CreateFrame('Frame', nil, self)
@@ -618,15 +645,15 @@ function IA:CreateInspectFrame()

 	do --<< Class, Specialization Icon >>--
 		for _, FrameName in T.pairs({ 'SpecIcon', 'ClassIcon', }) do
-			self[FrameName.."Slot"] = CreateFrame('Frame', nil, self)
-			self[FrameName.."Slot"]:Size(24)
-			self[FrameName.."Slot"]:SetBackdrop({
+			self[FrameName..'Slot'] = CreateFrame('Frame', nil, self)
+			self[FrameName..'Slot']:Size(24)
+			self[FrameName..'Slot']:SetBackdrop({
 				bgFile = E.media.blankTex,
 				edgeFile = E.media.blankTex,
 				tile = false, tileSize = 0, edgeSize = E.mult,
 				insets = { left = 0, right = 0, top = 0, bottom = 0}
 			})
-			self[FrameName] = self[FrameName.."Slot"]:CreateTexture(nil, 'OVERLAY')
+			self[FrameName] = self[FrameName..'Slot']:CreateTexture(nil, 'OVERLAY')
 			self[FrameName]:SetTexCoord(T.unpack(E.TexCoords))
 			self[FrameName]:SetInside()
 		end
@@ -644,6 +671,7 @@ function IA:CreateInspectFrame()
 		self.Model:TryOn(HeadSlotItem)
 		self.Model:TryOn(BackSlotItem)
 		self.Model:Undress()
+		self.Model:SetLight(true, false, 0, 0, 0, 1, 1.0, 1.0, 1.0)
 		self.Model:SetScript('OnMouseDown', function(self, button)
 			self.StartX, self.StartY = GetCursorPosition()

@@ -654,6 +682,7 @@ function IA:CreateInspectFrame()

 					self.rotation = (EndX - self.StartX) / 34 + self:GetFacing()
 					self:SetFacing(self.rotation)
+
 					self.StartX, self.StartY = GetCursorPosition()
 				end)
 			elseif button == 'RightButton' then
@@ -674,7 +703,6 @@ function IA:CreateInspectFrame()
 		end)
 		self.Model:SetScript('OnMouseWheel', function(self, spining)
 			local Z, X, Y = self:GetPosition()
-
 			Z = (spining > 0 and Z + 0.5 or Z - 0.5)

 			self:SetPosition(Z, X, Y)
@@ -712,19 +740,22 @@ function IA:CreateInspectFrame()

 			Slot.Highlight = Slot:CreateTexture('Frame', nil, self)
 			Slot.Highlight:SetInside()
-			Slot.Highlight:SetTexture("Interface\\AddOns\\ElvUI_SLE\\modules\\Armory\\Media\\Textures\\Gradation")
-			if Slot.Direction == 'LEFT' then
-				Slot.Highlight:SetTexCoord(0, 1, 0, 1)
-			else
-				Slot.Highlight:SetTexCoord(1, 0, 0, 1)
-			end
-			Slot.Highlight:SetAlpha(0.8)
+			--Slot.Highlight:SetTexture("Interface\\AddOns\\ElvUI_SLE\\modules\\Armory\\Media\\Textures\\Gradation")
+			--if Slot.Direction == 'LEFT' then
+				--Slot.Highlight:SetTexCoord(0, 1, 0, 1)
+			--else
+				--Slot.Highlight:SetTexCoord(1, 0, 0, 1)
+			--end
+			--Slot.Highlight:SetAlpha(0.8)
+			Slot.Highlight:SetColorTexture(1, 1, 1, 0.3)
 			Slot:SetHighlightTexture(Slot.Highlight)

-			KF:TextSetting(Slot, nil, { Tag = 'ItemLevel', FontSize = 10, FontStyle = 'OUTLINE', }, 'TOP', Slot, 0, -3)
+			if not (SlotName == 'MainHandSlot' or SlotName == 'SecondaryHandSlot') then
+				KF:TextSetting(Slot, nil, { Tag = 'ItemLevel', FontSize = 10, FontStyle = 'OUTLINE', }, 'TOP', Slot, 0, -3)
+			end

 			-- Gradation
-			Slot.Gradation = CreateFrame('Frame', nil, self.Character)
+			Slot.Gradation = CreateFrame('Frame', nil, Slot)
 			Slot.Gradation:Size(130, SLOT_SIZE + 4)
 			Slot.Gradation:SetFrameLevel(CORE_FRAME_LEVEL + 2)
 			Slot.Gradation:Point(Slot.Direction, Slot, Slot.Direction == 'LEFT' and -1 or 1, 0)
@@ -777,34 +808,34 @@ function IA:CreateInspectFrame()

 				-- Gem Socket
 				for i = 1, MAX_NUM_SOCKETS do
-					Slot["Socket"..i] = CreateFrame('Frame', nil, Slot.Gradation)
+					Slot['Socket'..i] = CreateFrame('Frame', nil, Slot.Gradation)
 					Slot["Socket"..i]:Size(E.db.sle.Armory.Inspect.Gem.SocketSize)
-					Slot["Socket"..i]:SetBackdrop({
+					Slot['Socket'..i]:SetBackdrop({
 						bgFile = E.media.blankTex,
 						edgeFile = E.media.blankTex,
 						tile = false, tileSize = 0, edgeSize = E.mult,
 						insets = { left = 0, right = 0, top = 0, bottom = 0}
 					})
-					Slot["Socket"..i]:SetBackdropColor(0, 0, 0, 1)
-					Slot["Socket"..i]:SetBackdropBorderColor(0, 0, 0)
-					Slot["Socket"..i]:SetFrameLevel(CORE_FRAME_LEVEL + 3)
+					Slot['Socket'..i]:SetBackdropColor(0, 0, 0, 1)
+					Slot['Socket'..i]:SetBackdropBorderColor(0, 0, 0)
+					Slot['Socket'..i]:SetFrameLevel(CORE_FRAME_LEVEL + 3)

-					Slot["Socket"..i].Socket = CreateFrame('Button', nil, Slot["Socket"..i])
-					Slot["Socket"..i].Socket:SetBackdrop({
+					Slot['Socket'..i].Socket = CreateFrame('Button', nil, Slot['Socket'..i])
+					Slot['Socket'..i].Socket:SetBackdrop({
 						bgFile = E.media.blankTex,
 						edgeFile = E.media.blankTex,
 						tile = false, tileSize = 0, edgeSize = E.mult,
 						insets = { left = 0, right = 0, top = 0, bottom = 0}
 					})
-					Slot["Socket"..i].Socket:SetInside()
-					Slot["Socket"..i].Socket:SetFrameLevel(CORE_FRAME_LEVEL + 4)
-					Slot["Socket"..i].Socket:SetScript('OnEnter', self.GemSocket_OnEnter)
-					Slot["Socket"..i].Socket:SetScript('OnLeave', self.OnLeave)
-					Slot["Socket"..i].Socket:SetScript('OnClick', self.GemSocket_OnClick)
+					Slot['Socket'..i].Socket:SetInside()
+					Slot['Socket'..i].Socket:SetFrameLevel(CORE_FRAME_LEVEL + 4)
+					Slot['Socket'..i].Socket:SetScript('OnEnter', self.GemSocket_OnEnter)
+					Slot['Socket'..i].Socket:SetScript('OnLeave', self.OnLeave)
+					Slot['Socket'..i].Socket:SetScript('OnClick', self.GemSocket_OnClick)

-					Slot["Socket"..i].Texture = Slot["Socket"..i].Socket:CreateTexture(nil, 'OVERLAY')
-					Slot["Socket"..i].Texture:SetTexCoord(.1, .9, .1, .9)
-					Slot["Socket"..i].Texture:SetInside()
+					Slot['Socket'..i].Texture = Slot['Socket'..i].Socket:CreateTexture(nil, 'OVERLAY')
+					Slot['Socket'..i].Texture:SetTexCoord(.1, .9, .1, .9)
+					Slot['Socket'..i].Texture:SetInside()
 				end
 				Slot.Socket1:Point('BOTTOM'..Slot.Direction, Slot, 'BOTTOM'..(Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 3 or -3, 2)
 				Slot.Socket2:Point(Slot.Direction, Slot.Socket1, Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT', Slot.Direction == 'LEFT' and 1 or -1, 0)
@@ -865,25 +896,27 @@ function IA:CreateInspectFrame()
 		self.Trinket1Slot:Point('RIGHT', self.BP, -1, 0)
 		self.Trinket1Slot:Point('BOTTOM', self.SecondaryHandSlot, 'TOP', 0, SPACING)

+		self.MainHandSlot:Point('BOTTOMRIGHT', self.BP, 'TOP', -2, SPACING)
+		self.SecondaryHandSlot:Point('BOTTOMLEFT', self.BP, 'TOP', 2, SPACING)
+
 		-- ItemLevel
 		KF:TextSetting(self.Character, nil, { Tag = 'AverageItemLevel', FontSize = 12 }, 'TOP', self.Model)
 	end

-	self.Model:Point('TOPLEFT', self.HeadSlot)
-	self.Model:Point('TOPRIGHT', self.HandsSlot)
-	self.Model:Point('BOTTOM', self.BP, 'TOP', 0, SPACING)
-
+	--self.Model:Point('TOPLEFT', self.HeadSlot)
+	--self.Model:Point('TOPRIGHT', self.HandsSlot)
+	--self.Model:Point('BOTTOM', self.BP, 'TOP', 0, SPACING)
 	do --<< Information Page >>--
 		self.Info = CreateFrame('ScrollFrame', nil, self)
-		self.Info:SetFrameLevel(CORE_FRAME_LEVEL + 6)
+		self.Info:SetFrameLevel(CORE_FRAME_LEVEL + 20)
 		self.Info:EnableMouseWheel(1)
 		self.Info:SetScript('OnMouseWheel', self.ScrollFrame_OnMouseWheel)

 		self.Info.BG = CreateFrame('Frame', nil, self.Info)
-		self.Info.BG:SetFrameLevel(CORE_FRAME_LEVEL + 2)
+		self.Info.BG:SetFrameLevel(CORE_FRAME_LEVEL + 10)
 		self.Info.BG:Point('TOPLEFT', self.HeadSlot, 'TOPRIGHT', SPACING, 0)
 		self.Info.BG:Point('RIGHT', self.Trinket1Slot, 'BOTTOMLEFT', -SPACING, 0)
-		self.Info.BG:Point('BOTTOM', self.BP, 'TOP', 0, SPACING)
+		self.Info.BG:Point('BOTTOM', self.MainHandSlot, 'TOP', 0, SPACING)
 		self.Info.BG:SetBackdrop({
 			bgFile = E.media.blankTex,
 			edgeFile = E.media.blankTex,
@@ -897,12 +930,13 @@ function IA:CreateInspectFrame()

 		self.Info.Page = CreateFrame('Frame', nil, self.Info)
 		self.Info:SetScrollChild(self.Info.Page)
-		self.Info.Page:SetFrameLevel(CORE_FRAME_LEVEL + 3)
+		self.Info.Page:SetFrameLevel(CORE_FRAME_LEVEL + 11)
 		self.Info.Page:Point('TOPLEFT', self.Info, 0, 2)
 		self.Info.Page:Point('TOPRIGHT', self.Info, 0, 2)

 		for _, CategoryType in T.pairs(IA.InfoPageCategoryList) do
 			self.Info[CategoryType] = CreateFrame('ScrollFrame', nil, self.Info.Page)
+			self.Info[CategoryType]:SetFrameLevel(CORE_FRAME_LEVEL + 12)
 			self.Info[CategoryType]:SetBackdrop({
 				bgFile = E.media.blankTex,
 				edgeFile = E.media.blankTex,
@@ -941,12 +975,12 @@ function IA:CreateInspectFrame()
 			self.Info[CategoryType].Tooltip = CreateFrame('Button', nil, self.Info[CategoryType])
 			self.Info[CategoryType].Tooltip:Point('TOPLEFT', self.Info[CategoryType].Icon)
 			self.Info[CategoryType].Tooltip:Point('BOTTOMRIGHT', self.Info[CategoryType].Tab)
-			self.Info[CategoryType].Tooltip:SetFrameLevel(CORE_FRAME_LEVEL + 5)
+			self.Info[CategoryType].Tooltip:SetFrameLevel(CORE_FRAME_LEVEL + 19)
 			self.Info[CategoryType].Tooltip:SetScript('OnClick', IA.Category_OnClick)

 			self.Info[CategoryType].Page = CreateFrame('Frame', nil, self.Info[CategoryType])
 			self.Info[CategoryType]:SetScrollChild(self.Info[CategoryType].Page)
-			self.Info[CategoryType].Page:SetFrameLevel(CORE_FRAME_LEVEL + 3)
+			self.Info[CategoryType].Page:SetFrameLevel(CORE_FRAME_LEVEL + 13)
 			self.Info[CategoryType].Page:Point('TOPLEFT', self.Info[CategoryType].IconSlot, 'BOTTOMLEFT', 0, -SPACING)
 			self.Info[CategoryType].Page:Point('BOTTOMRIGHT', self.Info[CategoryType], -SPACING, SPACING)
 		end
@@ -957,43 +991,43 @@ function IA:CreateInspectFrame()
 			self.Info.Profession.Icon:SetTexture('Interface\\Icons\\Trade_BlackSmithing')

 			for i = 1, 2 do
-				self.Info.Profession["Prof"..i] = CreateFrame('Frame', nil, self.Info.Profession.Page)
-				self.Info.Profession["Prof"..i]:Size(20)
-				self.Info.Profession["Prof"..i]:SetBackdrop({
+				self.Info.Profession['Prof'..i] = CreateFrame('Frame', nil, self.Info.Profession.Page)
+				self.Info.Profession['Prof'..i]:Size(20)
+				self.Info.Profession['Prof'..i]:SetBackdrop({
 					bgFile = E.media.blankTex,
 					edgeFile = E.media.blankTex,
 					tile = false, tileSize = 0, edgeSize = E.mult,
 					insets = { left = 0, right = 0, top = 0, bottom = 0}
 				})
-				self.Info.Profession["Prof"..i]:SetBackdropBorderColor(0, 0, 0)
+				self.Info.Profession['Prof'..i]:SetBackdropBorderColor(0, 0, 0)

-				self.Info.Profession["Prof"..i].Icon = self.Info.Profession["Prof"..i]:CreateTexture(nil, 'OVERLAY')
+				self.Info.Profession['Prof'..i].Icon = self.Info.Profession['Prof'..i]:CreateTexture(nil, 'OVERLAY')
 				self.Info.Profession["Prof"..i].Icon:SetTexCoord(T.unpack(E.TexCoords))
-				self.Info.Profession["Prof"..i].Icon:SetInside()
+				self.Info.Profession['Prof'..i].Icon:SetInside()

-				self.Info.Profession["Prof"..i].BarFrame = CreateFrame('Frame', nil, self.Info.Profession["Prof"..i])
-				self.Info.Profession["Prof"..i].BarFrame:Size(136, 5)
-				self.Info.Profession["Prof"..i].BarFrame:SetBackdrop({
+				self.Info.Profession['Prof'..i].BarFrame = CreateFrame('Frame', nil, self.Info.Profession['Prof'..i])
+				self.Info.Profession['Prof'..i].BarFrame:Size(136, 5)
+				self.Info.Profession['Prof'..i].BarFrame:SetBackdrop({
 					bgFile = E.media.blankTex,
 					edgeFile = E.media.blankTex,
 					tile = false, tileSize = 0, edgeSize = E.mult,
 					insets = { left = 0, right = 0, top = 0, bottom = 0}
 				})
-				self.Info.Profession["Prof"..i].BarFrame:SetBackdropColor(0, 0, 0)
-				self.Info.Profession["Prof"..i].BarFrame:SetBackdropBorderColor(0, 0, 0)
-				self.Info.Profession["Prof"..i].BarFrame:Point('BOTTOMLEFT', self.Info.Profession["Prof"..i], 'BOTTOMRIGHT', SPACING, 0)
+				self.Info.Profession['Prof'..i].BarFrame:SetBackdropColor(0, 0, 0)
+				self.Info.Profession['Prof'..i].BarFrame:SetBackdropBorderColor(0, 0, 0)
+				self.Info.Profession['Prof'..i].BarFrame:Point('BOTTOMLEFT', self.Info.Profession['Prof'..i], 'BOTTOMRIGHT', SPACING, 0)

-				self.Info.Profession["Prof"..i].Bar = CreateFrame('StatusBar', nil, self.Info.Profession["Prof"..i].BarFrame)
-				self.Info.Profession["Prof"..i].Bar:SetInside()
-				self.Info.Profession["Prof"..i].Bar:SetStatusBarTexture(E.media.normTex)
-				self.Info.Profession["Prof"..i].Bar:SetMinMaxValues(0, 600)
+				self.Info.Profession['Prof'..i].Bar = CreateFrame('StatusBar', nil, self.Info.Profession['Prof'..i].BarFrame)
+				self.Info.Profession['Prof'..i].Bar:SetInside()
+				self.Info.Profession['Prof'..i].Bar:SetStatusBarTexture(E.media.normTex)
+				self.Info.Profession['Prof'..i].Bar:SetMinMaxValues(0, 800)

-				KF:TextSetting(self.Info.Profession["Prof"..i], nil, { Tag = 'Level', FontSize = 10 }, 'TOP', self.Info.Profession["Prof"..i].Icon)
-				self.Info.Profession["Prof"..i].Level:Point('RIGHT', self.Info.Profession["Prof"..i].Bar)
+				KF:TextSetting(self.Info.Profession['Prof'..i], nil, { Tag = 'Level', FontSize = 10 }, 'TOP', self.Info.Profession['Prof'..i].Icon)
+				self.Info.Profession['Prof'..i].Level:Point('RIGHT', self.Info.Profession['Prof'..i].Bar)

-				KF:TextSetting(self.Info.Profession["Prof"..i], nil, { Tag = 'Name', FontSize = 10, directionH = 'LEFT' }, 'TOP', self.Info.Profession["Prof"..i].Icon)
-				self.Info.Profession["Prof"..i].Name:Point('LEFT', self.Info.Profession["Prof"..i].Bar)
-				self.Info.Profession["Prof"..i].Name:Point('RIGHT', self.Info.Profession["Prof"..i].Level, 'LEFT', -SPACING, 0)
+				KF:TextSetting(self.Info.Profession['Prof'..i], nil, { Tag = 'Name', FontSize = 10, directionH = 'LEFT' }, 'TOP', self.Info.Profession['Prof'..i].Icon)
+				self.Info.Profession['Prof'..i].Name:Point('LEFT', self.Info.Profession['Prof'..i].Bar)
+				self.Info.Profession['Prof'..i].Name:Point('RIGHT', self.Info.Profession['Prof'..i].Level, 'LEFT', -SPACING, 0)
 			end

 			self.Info.Profession.Prof1:Point('TOPLEFT', self.Info.Profession.Page, 6, -7)
@@ -1002,41 +1036,49 @@ function IA:CreateInspectFrame()

 		do -- PvP Category
 			KF:TextSetting(self.Info.PvP.Tab, PVP, { FontSize = 10 }, 'LEFT', 6, 1)
-			self.Info.PvP.CategoryHeight = 90
+			self.Info.PvP.CategoryHeight = 182
 			self.Info.PvP.Icon:SetTexture('Interface\\Icons\\achievement_bg_killxenemies_generalsroom')

-			self.Info.PvP.PageLeft = CreateFrame('Frame', nil, self.Info.PvP.Page)
-			self.Info.PvP.PageLeft:Point('TOP', self.Info.PvP.Page)
-			self.Info.PvP.PageLeft:Point('LEFT', self.Info.PvP.Page)
-			self.Info.PvP.PageLeft:Point('BOTTOMRIGHT', self.Info.PvP.Page, 'BOTTOM')
-			self.Info.PvP.PageLeft:SetFrameLevel(CORE_FRAME_LEVEL + 4)
-			self.Info.PvP.PageRight = CreateFrame('Frame', nil, self.Info.PvP.Page)
-			self.Info.PvP.PageRight:Point('TOP', self.Info.PvP.Page)
-			self.Info.PvP.PageRight:Point('RIGHT', self.Info.PvP.Page)
-			self.Info.PvP.PageRight:Point('BOTTOMLEFT', self.Info.PvP.Page, 'BOTTOM')
-			self.Info.PvP.PageRight:SetFrameLevel(CORE_FRAME_LEVEL + 4)
-
-			for i = 1, 3 do
-				self.Info.PvP["Bar"..i] = self.Info.PvP.Page:CreateTexture(nil, 'OVERLAY')
-				self.Info.PvP["Bar"..i]:SetColorTexture(0, 0, 0)
-				self.Info.PvP["Bar"..i]:Width(2)
-			end
-			self.Info.PvP.Bar1:Point('TOP', self.Info.PvP.PageLeft, 0, -SPACING * 2)
-			self.Info.PvP.Bar1:Point('BOTTOM', self.Info.PvP.PageLeft, 0, SPACING * 2)
-			self.Info.PvP.Bar2:Point('TOP', self.Info.PvP.Page, 0, -SPACING * 2)
-			self.Info.PvP.Bar2:Point('BOTTOM', self.Info.PvP.Page, 0, SPACING * 2)
-			self.Info.PvP.Bar3:Point('TOP', self.Info.PvP.PageRight, 0, -SPACING * 2)
-			self.Info.PvP.Bar3:Point('BOTTOM', self.Info.PvP.PageRight, 0, SPACING * 2)
-
-			for _, Type in T.pairs({ '2vs2', '3vs3', '5vs5', 'RB' }) do
+			self.Info.PvP.Mark = CreateFrame('ScrollFrame', nil, self.Info.PvP.Page)
+			self.Info.PvP.Mark:SetFrameLevel(CORE_FRAME_LEVEL + 11)
+			self.Info.PvP.Mark:SetHeight(82)
+			self.Info.PvP.Mark:Point('TOPLEFT', self.Info.PvP.Icon, 'BOTTOMLEFT', 0, -SPACING * 2)
+			self.Info.PvP.Mark:Point('TOPRIGHT', self.Info.PvP.Tab, 'BOTTOMRIGHT', -SPACING, -SPACING * 2)
+
+			self.Info.PvP.Mark.Display = self.Info.PvP.Mark:CreateTexture(nil, 'BACKGROUND', nil, 1)
+			self.Info.PvP.Mark.Display:SetAtlas('titleprestige-title-bg')
+			self.Info.PvP.Mark.Display:SetInside()
+
+			self.Info.PvP.Mark.Icon = self.Info.PvP.Mark:CreateTexture(nil, 'BACKGROUND', nil, 2)
+
+			self.Info.PvP.Mark.Circle = self.Info.PvP.Mark:CreateTexture(nil, 'BACKGROUND', nil, 3)
+			self.Info.PvP.Mark.Circle:SetAtlas('Talent-RingWithDot')
+			self.Info.PvP.Mark.Circle:Size(60)
+			self.Info.PvP.Mark.Circle:Point('LEFT', self.Info.PvP.Display, 75, 8)
+			self.Info.PvP.Mark.Icon:Point('TOPLEFT', self.Info.PvP.Mark.Circle, 9, -9)
+			self.Info.PvP.Mark.Icon:Point('BOTTOMRIGHT', self.Info.PvP.Mark.Circle, -9, 9)
+
+			self.Info.PvP.Mark.Wreath = self.Info.PvP.Mark:CreateTexture(nil, 'BACKGROUND', nil, 4)
+			self.Info.PvP.Mark.Wreath:SetAtlas('titleprestige-wreath')
+			self.Info.PvP.Mark.Wreath:SetBlendMode('BLEND')
+			self.Info.PvP.Mark.Wreath:Size(80, 48)
+			self.Info.PvP.Mark.Wreath:Point('BOTTOM', self.Info.PvP.Mark.Circle, 0, -10)
+
+			KF:TextSetting(self.Info.PvP.Mark, '', { FontSize = 10, directionH = 'LEFT' }, 'LEFT', self.Info.PvP.Mark.Circle, 'RIGHT', 20, 0)
+			self.Info.PvP.Mark.text:Point('TOPRIGHT', self.Info.PvP.Mark.Display, -16, -2)
+			self.Info.PvP.Mark.text:Point('BOTTOMRIGHT', self.Info.PvP.Mark.Display, -16, 10)
+			self.Info.PvP.Mark.text:SetSpacing(6)
+
+			for _, Type in T.pairs({ '2vs2', '3vs3', 'RB' }) do
 				self.Info.PvP[Type] = CreateFrame('Frame', nil, self.Info.PvP.Page)
-				self.Info.PvP[Type]:SetFrameLevel(CORE_FRAME_LEVEL + 5)
+				self.Info.PvP[Type]:SetFrameLevel(CORE_FRAME_LEVEL + 15)
+				self.Info.PvP[Type]:Size(110, 60)

 				self.Info.PvP[Type].Rank = self.Info.PvP.Page:CreateTexture(nil, 'OVERLAY')
 				self.Info.PvP[Type].Rank:SetTexture('Interface\\ACHIEVEMENTFRAME\\UI-ACHIEVEMENT-SHIELDS')
 				self.Info.PvP[Type].Rank:SetTexCoord(0, .5, 0, .5)
 				self.Info.PvP[Type].Rank:Size(83, 57)
-				self.Info.PvP[Type].Rank:Point('TOP', self.Info.PvP[Type], 0, -10)
+				self.Info.PvP[Type].Rank:Point('CENTER', self.Info.PvP[Type])
 				self.Info.PvP[Type].Rank:Hide()
 				self.Info.PvP[Type].RankGlow = self.Info.PvP.Page:CreateTexture(nil, 'OVERLAY')
 				self.Info.PvP[Type].RankGlow:SetTexture('Interface\\ACHIEVEMENTFRAME\\UI-ACHIEVEMENT-SHIELDS')
@@ -1058,22 +1100,13 @@ function IA:CreateInspectFrame()
 				KF:TextSetting(self.Info.PvP[Type], nil, { Tag = 'Rating', FontSize = 22, FontStyle = 'OUTLINE' }, 'CENTER', self.Info.PvP[Type].Rank, 0, 3)
 				KF:TextSetting(self.Info.PvP[Type], nil, { Tag = 'Record', FontSize = 10, FontStyle = 'OUTLINE' }, 'TOP', self.Info.PvP[Type].Rank, 'BOTTOM', 0, 12)
 			end
-			self.Info.PvP["2vs2"]:Point('TOP', self.Info.PvP.Bar1)
-			self.Info.PvP["2vs2"]:Point('LEFT', self.Info.PvP.Page)
-			self.Info.PvP["2vs2"]:Point('BOTTOMRIGHT', self.Info.PvP.Bar1, 'BOTTOMLEFT', -SPACING, 0)
-			self.Info.PvP["2vs2"].Type:SetText(ARENA_2V2)
-
-			self.Info.PvP["3vs3"]:Point('TOPLEFT', self.Info.PvP.Bar1, 'TOPRIGHT', SPACING, 0)
-			self.Info.PvP["3vs3"]:Point('BOTTOMRIGHT', self.Info.PvP.Bar2, 'BOTTOMLEFT', -SPACING, 0)
-			self.Info.PvP["3vs3"].Type:SetText(ARENA_3V3)
-
-			self.Info.PvP["5vs5"]:Point('TOPLEFT', self.Info.PvP.Bar2, 'TOPRIGHT', SPACING, 0)
-			self.Info.PvP["5vs5"]:Point('BOTTOMRIGHT', self.Info.PvP.Bar3, 'BOTTOMLEFT', -SPACING, 0)
-			self.Info.PvP["5vs5"].Type:SetText(ARENA_5V5)
-
-			self.Info.PvP.RB:Point('TOP', self.Info.PvP.Bar3)
-			self.Info.PvP.RB:Point('RIGHT', self.Info.PvP.Page)
-			self.Info.PvP.RB:Point('BOTTOMLEFT', self.Info.PvP.Bar3, 'BOTTOMRIGHT', SPACING, 0)
+			self.Info.PvP['2vs2']:Point('RIGHT', self.Info.PvP['3vs3'], 'LEFT', SPACING, 0)
+			self.Info.PvP['2vs2'].Type:SetText(ARENA_2V2)
+
+			self.Info.PvP['3vs3']:Point('TOP', self.Info.PvP.Mark, 'BOTTOM', 0, -SPACING)
+			self.Info.PvP['3vs3'].Type:SetText(ARENA_3V3)
+
+			self.Info.PvP.RB:Point('LEFT', self.Info.PvP['3vs3'], 'RIGHT', -SPACING, 0)
 			self.Info.PvP.RB.Type:SetText(PVP_RATED_BATTLEGROUNDS)
 		end

@@ -1084,7 +1117,7 @@ function IA:CreateInspectFrame()

 			self.Info.Guild.Banner = CreateFrame('Frame', nil, self.Info.Guild.Page)
 			self.Info.Guild.Banner:SetInside()
-			self.Info.Guild.Banner:SetFrameLevel(CORE_FRAME_LEVEL + 4)
+			self.Info.Guild.Banner:SetFrameLevel(CORE_FRAME_LEVEL + 13)

 			self.Info.Guild.BG = self.Info.Guild.Banner:CreateTexture(nil, 'BACKGROUND')
 			self.Info.Guild.BG:Size(33, 44)
@@ -1110,17 +1143,17 @@ function IA:CreateInspectFrame()

 	do --<< Specialization Page >>--
 		self.Spec = CreateFrame('ScrollFrame', nil, self)
-		self.Spec:SetFrameLevel(CORE_FRAME_LEVEL + 6)
+		self.Spec:SetFrameLevel(CORE_FRAME_LEVEL + 16)
 		self.Spec:EnableMouseWheel(1)
 		self.Spec:SetScript('OnMouseWheel', self.ScrollFrame_OnMouseWheel)

 		self.Spec.BGFrame = CreateFrame('Frame', nil, self.Spec)
-		self.Spec.BGFrame:SetFrameLevel(CORE_FRAME_LEVEL + 2)
+		self.Spec.BGFrame:SetFrameLevel(CORE_FRAME_LEVEL + 12)
 		self.Spec.BG = self.Spec.BGFrame:CreateTexture(nil, 'BACKGROUND')
-		self.Spec.BG:Point('TOP', self.HeadSlot, 'TOPRIGHT', 0, -28)
+		self.Spec.BG:Point('TOP', self.HeadSlot, 'TOPRIGHT', 0, -48-SPACING)
 		self.Spec.BG:Point('LEFT', self.WristSlot, 'TOPRIGHT', SPACING, 0)
 		self.Spec.BG:Point('RIGHT', self.Trinket1Slot, 'BOTTOMLEFT', -SPACING, 0)
-		self.Spec.BG:Point('BOTTOM', self.BP, 'TOP', 0, SPACING)
+		self.Spec.BG:Point('BOTTOM', self.MainHandSlot, 'TOP', 0, SPACING)
 		self.Spec.BG:SetColorTexture(0, 0, 0, .7)

 		self.Spec:Point('TOPLEFT', self.Spec.BG, 4, -4)
@@ -1128,7 +1161,7 @@ function IA:CreateInspectFrame()

 		self.Spec.Page = CreateFrame('Frame', nil, self.Spec)
 		self.Spec:SetScrollChild(self.Spec.Page)
-		self.Spec.Page:SetFrameLevel(CORE_FRAME_LEVEL + 3)
+		self.Spec.Page:SetFrameLevel(CORE_FRAME_LEVEL + 13)
 		self.Spec.Page:Point('TOPLEFT', self.Spec)
 		self.Spec.Page:Point('TOPRIGHT', self.Spec)
 		self.Spec.Page:Height((TALENT_SLOT_SIZE + SPACING * 3) * MAX_TALENT_TIERS + 18)
@@ -1146,127 +1179,123 @@ function IA:CreateInspectFrame()
 		self.Spec.RightBorder:Width(E.mult)

 		do -- Specialization Tab
-			for i = 1, MAX_TALENT_GROUPS do
-				self.Spec["Spec"..i] = CreateFrame('Button', nil, self.Spec)
-				self.Spec["Spec"..i]:Size(150, 28)
-				self.Spec["Spec"..i]:SetScript('OnClick', function() self:ToggleSpecializationTab(i, self.CurrentInspectData) end)
-
-				self.Spec["Spec"..i].Tab = CreateFrame('Frame', nil, self.Spec["Spec"..i])
-				self.Spec["Spec"..i].Tab:Size(120, 28)
-				self.Spec["Spec"..i].Tab:SetBackdrop({
+			for i in pairs(IA.Default_CurrentInspectData.Specialization) do
+				self.Spec['Spec'..i] = CreateFrame('Button', nil, self.Spec)
+				self.Spec['Spec'..i]:Size(120, 40)
+				self.Spec['Spec'..i]:SetBackdrop({
 					bgFile = E.media.blankTex,
 					edgeFile = E.media.blankTex,
 					tile = false, tileSize = 0, edgeSize = 0,
 					insets = { left = 0, right = 0, top = 0, bottom = 0}
 				})
-				self.Spec["Spec"..i].Tab:SetBackdropColor(0, 0, 0, .7)
-				self.Spec["Spec"..i].Tab:SetBackdropBorderColor(0, 0, 0, 0)
-				self.Spec["Spec"..i].Tab:Point('TOPRIGHT', self.Spec["Spec"..i])
-				KF:TextSetting(self.Spec["Spec"..i].Tab, nil, { FontSize = 10, FontStyle = 'OUTLINE' }, 'TOPLEFT', 0, 0)
-				self.Spec["Spec"..i].Tab.text:Point('BOTTOMRIGHT', 0, -4)
-
-				self.Spec["Spec"..i].Icon = CreateFrame('Frame', nil, self.Spec["Spec"..i].Tab)
-				self.Spec["Spec"..i].Icon:Size(27, 24)
-				self.Spec["Spec"..i].Icon:SetBackdrop({
+				self.Spec['Spec'..i]:SetBackdropColor(0, 0, 0, .7)
+				self.Spec['Spec'..i]:SetBackdropBorderColor(0, 0, 0, 0)
+
+				self.Spec['Spec'..i].Icon = CreateFrame('Frame', nil, self.Spec['Spec'..i])
+				self.Spec['Spec'..i].Icon:Size(43, 37)
+				self.Spec['Spec'..i].Icon:SetBackdrop({
 					bgFile = E.media.blankTex,
 					edgeFile = E.media.blankTex,
 					tile = false, tileSize = 0, edgeSize = E.mult,
 					insets = { left = 0, right = 0, top = 0, bottom = 0}
 				})
-				self.Spec["Spec"..i].Icon:SetBackdropColor(0, 0, 0, .7)
-				self.Spec["Spec"..i].Icon:Point('TOPLEFT', self.Spec["Spec"..i])
+				self.Spec['Spec'..i].Icon:SetBackdropColor(0, 0, 0, .7)
+				self.Spec['Spec'..i].Icon:Point('TOPRIGHT', self.Spec['Spec'..i], 'TOPLEFT', -SPACING, 0)
+
+				self.Spec['Spec'..i].Click = CreateFrame('Button', nil, self.Spec)
+				self.Spec['Spec'..i].Click:SetScript('OnClick', function() self:ToggleSpecializationTab(i, self.CurrentInspectData) end)
+				self.Spec['Spec'..i].Click:Point('TOPLEFT', self.Spec['Spec'..i].Icon)
+				self.Spec['Spec'..i].Click:Point('BOTTOMRIGHT', self.Spec['Spec'..i])
+				self.Spec['Spec'..i].Click:SetFrameLevel(CORE_FRAME_LEVEL + 14)
+
+				KF:TextSetting(self.Spec['Spec'..i], nil, { FontSize = 10, FontStyle = 'OUTLINE' }, 'TOPLEFT', self.Spec['Spec'..i].Icon, 'TOPRIGHT', SPACING, 0)
+				self.Spec['Spec'..i].text:Point('BOTTOMRIGHT', 0, -4)

-				self.Spec["Spec"..i].Texture = self.Spec["Spec"..i].Icon:CreateTexture(nil, 'OVERLAY')
-				self.Spec["Spec"..i].Texture:SetTexCoord(.08, .92, .16, .84)
-				self.Spec["Spec"..i].Texture:SetInside()
+				self.Spec['Spec'..i].Texture = self.Spec['Spec'..i].Icon:CreateTexture(nil, 'OVERLAY')
+				self.Spec['Spec'..i].Texture:SetTexCoord(.08, .92, .16, .84)
+				self.Spec['Spec'..i].Texture:SetInside()

-				self.Spec["Spec"..i].TopBorder = self.Spec["Spec"..i].Tab:CreateTexture(nil, 'OVERLAY')
-				self.Spec["Spec"..i].TopBorder:Point('TOPLEFT', self.Spec["Spec"..i].Tab)
-				self.Spec["Spec"..i].TopBorder:Point('BOTTOMRIGHT', self.Spec["Spec"..i].Tab, 'TOPRIGHT', 0, -E.mult)
+				self.Spec['Spec'..i].TopBorder = self.Spec['Spec'..i]:CreateTexture(nil, 'OVERLAY')
+				self.Spec['Spec'..i].TopBorder:Point('TOPLEFT', self.Spec['Spec'..i])
+				self.Spec['Spec'..i].TopBorder:Point('BOTTOMRIGHT', self.Spec['Spec'..i], 'TOPRIGHT', 0, -E.mult)

-				self.Spec["Spec"..i].LeftBorder = self.Spec["Spec"..i].Tab:CreateTexture(nil, 'OVERLAY')
-				self.Spec["Spec"..i].LeftBorder:Point('TOPLEFT', self.Spec["Spec"..i].TopBorder, 'BOTTOMLEFT')
-				self.Spec["Spec"..i].LeftBorder:Point('BOTTOMRIGHT', self.Spec["Spec"..i].Tab, 'BOTTOMLEFT', E.mult, 0)
+				self.Spec['Spec'..i].LeftBorder = self.Spec['Spec'..i]:CreateTexture(nil, 'OVERLAY')
+				self.Spec['Spec'..i].LeftBorder:Point('TOPLEFT', self.Spec['Spec'..i].TopBorder, 'BOTTOMLEFT')
+				self.Spec['Spec'..i].LeftBorder:Point('BOTTOMRIGHT', self.Spec['Spec'..i], 'BOTTOMLEFT', E.mult, 0)

-				self.Spec["Spec"..i].RightBorder = self.Spec["Spec"..i].Tab:CreateTexture(nil, 'OVERLAY')
-				self.Spec["Spec"..i].RightBorder:Point('TOPLEFT', self.Spec["Spec"..i].TopBorder, 'BOTTOMRIGHT', -E.mult, 0)
-				self.Spec["Spec"..i].RightBorder:Point('BOTTOMRIGHT', self.Spec["Spec"..i].Tab)
+				self.Spec['Spec'..i].RightBorder = self.Spec['Spec'..i]:CreateTexture(nil, 'OVERLAY')
+				self.Spec['Spec'..i].RightBorder:Point('TOPLEFT', self.Spec['Spec'..i].TopBorder, 'BOTTOMRIGHT', -E.mult, 0)
+				self.Spec['Spec'..i].RightBorder:Point('BOTTOMRIGHT', self.Spec['Spec'..i])

-				self.Spec["Spec"..i].BottomLeftBorder = self.Spec["Spec"..i].Tab:CreateTexture(nil, 'OVERLAY')
-				self.Spec["Spec"..i].BottomLeftBorder:Point('TOPLEFT', self.Spec.BG, 0, E.mult)
-				self.Spec["Spec"..i].BottomLeftBorder:Point('BOTTOMRIGHT', self.Spec["Spec"..i].LeftBorder, 'BOTTOMLEFT')
+				self.Spec['Spec'..i].BottomLeftBorder = self.Spec['Spec'..i]:CreateTexture(nil, 'OVERLAY')
+				self.Spec['Spec'..i].BottomLeftBorder:Point('TOPLEFT', self.Spec.BG, 0, E.mult)
+				self.Spec['Spec'..i].BottomLeftBorder:Point('BOTTOMRIGHT', self.Spec['Spec'..i].LeftBorder, 'BOTTOMLEFT')

-				self.Spec["Spec"..i].BottomRightBorder = self.Spec["Spec"..i].Tab:CreateTexture(nil, 'OVERLAY')
-				self.Spec["Spec"..i].BottomRightBorder:Point('TOPRIGHT', self.Spec.BG, 0, E.mult)
-				self.Spec["Spec"..i].BottomRightBorder:Point('BOTTOMLEFT', self.Spec["Spec"..i].RightBorder, 'BOTTOMRIGHT')
+				self.Spec['Spec'..i].BottomRightBorder = self.Spec['Spec'..i]:CreateTexture(nil, 'OVERLAY')
+				self.Spec['Spec'..i].BottomRightBorder:Point('TOPRIGHT', self.Spec.BG, 0, E.mult)
+				self.Spec['Spec'..i].BottomRightBorder:Point('BOTTOMLEFT', self.Spec['Spec'..i].RightBorder, 'BOTTOMRIGHT')
 			end
-			self.Spec.Spec1:Point('BOTTOMLEFT', self.Spec.BG, 'TOPLEFT', 20, 0)
-			self.Spec.Spec2:Point('BOTTOMRIGHT', self.Spec.BG, 'TOPRIGHT', -20, 0)
+			self.Spec.Spec1:Point('BOTTOMRIGHT', self.Spec.BG, 'TOP', -4, 0)
+			self.Spec.Spec2:Point('BOTTOMRIGHT', self.Spec.BG, 'TOPRIGHT', -8, 0)
 		end

 		for i = 1, MAX_TALENT_TIERS do
-			self.Spec["TalentTier"..i] = CreateFrame('Frame', nil, self.Spec.Page)
-			self.Spec["TalentTier"..i]:SetBackdrop({
+			self.Spec['TalentTier'..i] = CreateFrame('Frame', nil, self.Spec.Page)
+			self.Spec['TalentTier'..i]:SetBackdrop({
 				bgFile = E.media.blankTex,
 				edgeFile = E.media.blankTex,
 				tile = false, tileSize = 0, edgeSize = E.mult,
 				insets = { left = 0, right = 0, top = 0, bottom = 0}
 			})
-			self.Spec["TalentTier"..i]:SetBackdropColor(.08, .08, .08)
-			self.Spec["TalentTier"..i]:SetBackdropBorderColor(0, 0, 0)
-			self.Spec["TalentTier"..i]:SetFrameLevel(CORE_FRAME_LEVEL + 3)
-			self.Spec["TalentTier"..i]:Size(352, TALENT_SLOT_SIZE + SPACING * 2)
+			self.Spec['TalentTier'..i]:SetBackdropColor(.08, .08, .08)
+			self.Spec['TalentTier'..i]:SetBackdropBorderColor(0, 0, 0)
+			self.Spec['TalentTier'..i]:SetFrameLevel(CORE_FRAME_LEVEL + 13)
+			self.Spec['TalentTier'..i]:Size(352, TALENT_SLOT_SIZE + SPACING * 2)

 			for k = 1, NUM_TALENT_COLUMNS do
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)] = CreateFrame('Frame', nil, self.Spec["TalentTier"..i])
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetBackdrop({
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)] = CreateFrame('Frame', nil, self.Spec['TalentTier'..i])
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetBackdrop({
 					bgFile = E.media.blankTex,
 					edgeFile = E.media.blankTex,
 					tile = false, tileSize = 0, edgeSize = E.mult,
 					insets = { left = 0, right = 0, top = 0, bottom = 0}
 				})
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetFrameLevel(CORE_FRAME_LEVEL + 4)
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)]:Size(114, TALENT_SLOT_SIZE)
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon = CreateFrame('Frame', nil, self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)])
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:Size(20)
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:SetBackdrop({
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetFrameLevel(CORE_FRAME_LEVEL + 14)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)]:Size(114, TALENT_SLOT_SIZE)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon = CreateFrame('Frame', nil, self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)])
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:Size(20)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:SetBackdrop({
 					bgFile = E.media.blankTex,
 					edgeFile = E.media.blankTex,
 					tile = false, tileSize = 0, edgeSize = E.mult,
 					insets = { left = 0, right = 0, top = 0, bottom = 0}
 				})
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon.Texture = self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:CreateTexture(nil, 'OVERLAY')
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon.Texture = self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:CreateTexture(nil, 'OVERLAY')
 				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon.Texture:SetTexCoord(T.unpack(E.TexCoords))
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon.Texture:SetInside()
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:Point('LEFT', self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)], SPACING, 0)
-				KF:TextSetting(self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)], nil, { FontSize = 9, directionH = 'LEFT' }, 'TOPLEFT', self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon, 'TOPRIGHT', SPACING, SPACING)
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].text:Point('BOTTOMLEFT', self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon, 'BOTTOMRIGHT', SPACING, -SPACING)
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].text:Point('RIGHT', -SPACING, 0)
-
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip = CreateFrame('Button', nil, self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)])
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip:SetFrameLevel(CORE_FRAME_LEVEL + 5)
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip:SetInside()
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip:SetScript('OnClick', self.OnClick)
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip:SetScript('OnEnter', self.OnEnter)
-				self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip:SetScript('OnLeave', self.OnLeave)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon.Texture:SetInside()
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:Point('LEFT', self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)], SPACING, 0)
+				KF:TextSetting(self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)], nil, { FontSize = 9, directionH = 'LEFT' }, 'TOPLEFT', self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon, 'TOPRIGHT', SPACING, SPACING)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].text:Point('BOTTOMLEFT', self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon, 'BOTTOMRIGHT', SPACING, -SPACING)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].text:Point('RIGHT', -SPACING, 0)
+
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip = CreateFrame('Button', nil, self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)])
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip:SetFrameLevel(CORE_FRAME_LEVEL + 15)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip:SetInside()
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip:SetScript('OnClick', self.OnClick)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip:SetScript('OnEnter', self.OnEnter)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip:SetScript('OnLeave', self.OnLeave)
 			end

-			self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + 1)]:Point('RIGHT', self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + 2)], 'LEFT', -2, 0)
-			self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + 2)]:Point('CENTER', self.Spec["TalentTier"..i])
-			self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + 3)]:Point('LEFT', self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + 2)], 'RIGHT', 2, 0)
-
-			if i > 1 then
-				self.Spec["TalentTier"..i]:Point('TOP', self.Spec["TalentTier"..(i - 1)], 'BOTTOM', 0, -SPACING)
-			end
+			self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + 1)]:Point('RIGHT', self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + 2)], 'LEFT', -2, 0)
+			self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + 2)]:Point('CENTER', self.Spec['TalentTier'..i])
+			self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + 3)]:Point('LEFT', self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + 2)], 'RIGHT', 2, 0)
 		end
-
-		self.Spec.TalentTier1:Point('TOP', self.Spec.Page)
 	end

 	do --<< Scanning Tooltip >>--
-		self.ScanTTForInspecting = CreateFrame("GameTooltip", 'InspectArmoryScanTT_I', nil, 'GameTooltipTemplate')
+		self.ScanTTForInspecting = CreateFrame('GameTooltip', 'InspectArmoryScanTT_I', nil, 'GameTooltipTemplate')
 		self.ScanTTForInspecting:SetOwner(UIParent, 'ANCHOR_NONE')
-		self.ScanTT = CreateFrame("GameTooltip", 'InspectArmoryScanTT', nil, 'GameTooltipTemplate')
+		self.ScanTT = CreateFrame('GameTooltip', 'InspectArmoryScanTT', nil, 'GameTooltipTemplate')
 		self.ScanTT:SetOwner(UIParent, 'ANCHOR_NONE')
 	end

@@ -1294,21 +1323,18 @@ function IA:CreateInspectFrame()
 		end)
 		_G["InspectArmory_UnitPopup"]:SetScript('OnClick', function(self)
 			local SendChannel, InspectWork
+
 			if AISM and AISM.AISMUserList[self.Data.TableIndex] then
 				if self.Data.Realm == Info.MyRealm then
 					SendChannel = 'WHISPER'
 				elseif AISM.AISMUserList[self.Data.TableIndex] == 'GUILD' then
 					SendChannel = 'GUILD'
-				elseif Info.CurrentGroupMode and Info.CurrentGroupMode ~= 'NoGroup' then
+				elseif Info.CurrentGroupMode ~= 'NoGroup' then
 					SendChannel = T.IsInGroup(LE_PARTY_CATEGORY_INSTANCE) and 'INSTANCE_CHAT' or T.upper(Info.CurrentGroupMode)
 				end
 			end

 			if self.Data.Unit then
-				if ENI.HoldInspecting == 'OPENING_DROPDOWN' then
-					ENI.HoldInspecting = nil
-				end
-
 				InspectWork = IA.InspectUnit(self.Data.Unit, { CancelInspectByManual = 'KnightInspect' })
 			end

@@ -1318,7 +1344,6 @@ function IA:CreateInspectFrame()
 				}

 				if not InspectWork then
-					ENI.CancelInspect(self.Data.TableIndex)
 					IA:UnregisterEvent('INSPECT_READY')

 					IA.NeedModelSetting = true
@@ -1403,8 +1428,8 @@ function IA:CreateInspectFrame()
 				end

 				for i = 1, _G["DropDownList1"].numButtons do
-					if _G["DropDownList1Button"..i].value == 'INSPECT' then
-						Button = _G["DropDownList1Button"..i]
+					if _G['DropDownList1Button'..i].value == 'INSPECT' then
+						Button = _G['DropDownList1Button'..i]
 						break
 					end
 				end
@@ -1413,15 +1438,18 @@ function IA:CreateInspectFrame()
 					local isSending

 					if DataTable.Unit and not (T.UnitCanAttack('player', DataTable.Unit) or not T.UnitIsConnected(DataTable.Unit) or not T.UnitIsPlayer(DataTable.Unit)) then
-						if DataTable.Realm == Info.MyRealm or (Info.CurrentGroupMode and Info.CurrentGroupMode ~= 'NoGroup') then
-							isSending = 'AISM_CheckResponse'
+						if DataTable.Realm == Info.MyRealm or Info.CurrentGroupMode ~= 'NoGroup' then
+							isSending = 'AISM_Response'
+
 							SendAddonMessage('AISM', 'AISM_Check', DataTable.Realm == Info.MyRealm and 'WHISPER' or T.IsInGroup(LE_PARTY_CATEGORY_INSTANCE) and 'INSTANCE_CHAT' or T.upper(Info.CurrentGroupMode), DataTable.Name)
 						end
 					elseif Menu.which == 'GUILD' then
 						isSending = 'AISM_GUILD_CheckResponse'
+
 						SendAddonMessage('AISM', 'AISM_GUILD_Check', DataTable.Realm == Info.MyRealm and 'WHISPER' or 'GUILD', DataTable.Name)
 					elseif DataTable.Realm == Info.MyRealm then
-						isSending = 'AISM_CheckResponse'
+						isSending = 'AISM_Response'
+
 						SendAddonMessage('AISM', 'AISM_Check', 'WHISPER', DataTable.Name)
 					end

@@ -1448,13 +1476,45 @@ function IA:CreateInspectFrame()
 		self.Updater:Hide()
 	end

-	HideUIPanel(self)
+	do --<< Inspector >>--
+		self.Inspector = CreateFrame('Frame')
+		self.Inspector:SetScript('OnUpdate', function(_, elapsed)
+			if Info.InspectArmory_Activate then
+				self.Inspector.elapsed = (self.Inspector.elapsed or InspectorInterval) - elapsed
+
+				if self.Inspector.elapsed < 0 then
+					self.Inspector.elapsed = nil
+
+					if self.CurrentInspectData then
+						local UnitID = self.CurrentInspectData.UnitID
+
+						if UnitID then
+							local Name, Realm = UnitFullName(UnitID)
+							Realm = Realm ~= '' and Realm ~= Info.MyRealm and Realm or nil
+
+							if Name and Name == self.CurrentInspectData.Name and Realm == self.CurrentInspectData.Realm then
+								NotifyInspect(UnitID)
+								return
+							else
+								SLE:ErrorPrint(L['Inspect is canceled because target was changed or lost.'])
+							end
+						end
+					end
+
+					self.Inspector:Hide()
+				end
+			else
+				self.Inspector:Hide()
+			end
+		end)
+		self.Inspector:Hide()
+	end

+	HideUIPanel(self)
 	self.CreateInspectFrame = nil
 end


-
 function IA:ClearTooltip(Tooltip)
 	local TooltipName = Tooltip:GetName()

@@ -1468,17 +1528,25 @@ end


 function IA:INSPECT_HONOR_UPDATE()
-	if self == 'INSPECT_HONOR_UPDATE' or HasInspectHonorData() then
-		for i, Type in T.pairs({ '2vs2', '3vs3', '5vs5' }) do
-			IA.CurrentInspectData.PvP[Type] = { GetInspectArenaData(i) }
-			for i = 4, #IA.CurrentInspectData.PvP[Type] do
-				IA.CurrentInspectData.PvP[Type][i] = nil
-			end
-		end
-		IA.CurrentInspectData.PvP.RB = { GetInspectRatedBGData() }
-		IA.CurrentInspectData.PvP.Honor = T.select(5, GetInspectHonorData())
+	local Rating, Played, Won
+
+	for i, Type in pairs({ '2vs2', '3vs3' }) do
+		Rating, Played, Won = GetInspectArenaData(i)
+		IA.CurrentInspectData.PvP[Type] = IA.CurrentInspectData.PvP[Type] or {}
+
+		IA.CurrentInspectData.PvP[Type][1] = Rating
+		IA.CurrentInspectData.PvP[Type][2] = Played
+		IA.CurrentInspectData.PvP[Type][3] = Won
 	end

+	Rating, Played, Won = GetInspectRatedBGData()
+	IA.CurrentInspectData.PvP.RB = IA.CurrentInspectData.PvP.RB or {}
+	IA.CurrentInspectData.PvP.RB[1] = Rating
+	IA.CurrentInspectData.PvP.RB[2] = Played
+	IA.CurrentInspectData.PvP.RB[3] = Won
+
+	IA.CurrentInspectData.PvP.Honor = T.select(5, GetInspectHonorData())
+
 	if not IA.ForbidUpdatePvPInformation then
 		IA:InspectFrame_PvPSetting(IA.CurrentInspectData)
 	end
@@ -1501,7 +1569,8 @@ function IA:INSPECT_READY(InspectedUnitGUID)

 	if not (IA.CurrentInspectData.Name == Name and IA.CurrentInspectData.Realm == Realm) then
 		return
-	elseif HasInspectHonorData() then
+	else
+		RequestInspectHonorData()
 		IA:INSPECT_HONOR_UPDATE()
 	end

@@ -1512,7 +1581,7 @@ function IA:INSPECT_READY(InspectedUnitGUID)
 	local Slot, SlotTexture, SlotLink, CheckSpace, R, G, B, TooltipText, TransmogrifiedItem, SetName, SetItemCount, SetItemMax, SetOptionCount
 	for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
 		Slot = IA[SlotName]
-		IA.CurrentInspectData.Gear[SlotName] = {}
+		IA.CurrentInspectData.Gear[SlotName] = IA.CurrentInspectData.Gear[SlotName] or {}

 		SlotTexture = GetInventoryItemTexture(UnitID, Slot.ID)

@@ -1532,11 +1601,11 @@ function IA:INSPECT_READY(InspectedUnitGUID)
 				SetOptionCount = 1

 				for i = 1, IA.ScanTTForInspecting:NumLines() do
-					TooltipText = _G["InspectArmoryScanTT_ITextLeft"..i]:GetText()
+					TooltipText = _G['InspectArmoryScanTT_ITextLeft'..i]:GetText()

 					if not TransmogrifiedItem and TooltipText:match(TRANSMOGRIFIED_HEADER) then -- TooltipText:match(Info.Armory_Constants.TransmogrifiedKey)
 						if T.type(IA.CurrentInspectData.Gear[SlotName].Transmogrify) ~= 'number' then
-							IA.CurrentInspectData.Gear[SlotName].Transmogrify = _G["InspectArmoryScanTT_ITextLeft"..(i + 1)]:GetText() --TooltipText:match(Info.Armory_Constants.TransmogrifiedKey)
+							IA.CurrentInspectData.Gear[SlotName].Transmogrify = _G['InspectArmoryScanTT_ITextLeft'..(i + 1)]:GetText() --TooltipText:match(Info.Armory_Constants.TransmogrifiedKey)
 						end

 						TransmogrifiedItem = true
@@ -1559,14 +1628,14 @@ function IA:INSPECT_READY(InspectedUnitGUID)
 							CurrentSetItem[SetName] = CurrentSetItem[SetName] or {}

 							for k = 1, IA.ScanTTForInspecting:NumLines() do
-								TooltipText = _G["InspectArmoryScanTT_ITextLeft"..(i+k)]:GetText()
+								TooltipText = _G['InspectArmoryScanTT_ITextLeft'..(i+k)]:GetText()

 								if TooltipText == ' ' then
 									CheckSpace = CheckSpace - 1

 									if CheckSpace == 0 then break end
 								elseif CheckSpace == 2 then
-									R, G, B = _G["InspectArmoryScanTT_ITextLeft"..(i+k)]:GetTextColor()
+									R, G, B = _G['InspectArmoryScanTT_ITextLeft'..(i+k)]:GetTextColor()

 									if R > LIGHTYELLOW_FONT_COLOR.r - .01 and R < LIGHTYELLOW_FONT_COLOR.r + .01 and G > LIGHTYELLOW_FONT_COLOR.g - .01 and G < LIGHTYELLOW_FONT_COLOR.g + .01 and B > LIGHTYELLOW_FONT_COLOR.b - .01 and B < LIGHTYELLOW_FONT_COLOR.b + .01 then
 										TooltipText = LIGHTYELLOW_FONT_COLOR_CODE..TooltipText
@@ -1580,14 +1649,14 @@ function IA:INSPECT_READY(InspectedUnitGUID)

 									CurrentSetItem[SetName][k] = TooltipText
 								elseif TooltipText:find(Info.Armory_Constants.ItemSetBonusKey) then
-									TooltipText = (E:RGBToHex(_G["InspectArmoryScanTT_ITextLeft"..(i+k)]:GetTextColor()))..TooltipText..'|r'
-									--TooltipText = TooltipText:match("^%((%d)%)%s.+:%s.+$") or true
+									--TooltipText = (E:RGBToHex(_G['InspectArmoryScanTT_ITextLeft'..(i+k)]:GetTextColor()))..TooltipText..'|r'
+									TooltipText = TooltipText:match("^%((%d)%)%s.+:%s.+$") or true

-									if CurrentSetItem[SetName]["SetOption"..SetOptionCount] and CurrentSetItem[SetName]["SetOption"..SetOptionCount] ~= TooltipText then
+									if CurrentSetItem[SetName]['SetOption'..SetOptionCount] and CurrentSetItem[SetName]['SetOption'..SetOptionCount] ~= TooltipText then
 										NeedReinspect = true
 									end

-									CurrentSetItem[SetName]["SetOption"..SetOptionCount] = TooltipText
+									CurrentSetItem[SetName]['SetOption'..SetOptionCount] = TooltipText
 									SetOptionCount = SetOptionCount + 1
 								end
 							end
@@ -1604,24 +1673,71 @@ function IA:INSPECT_READY(InspectedUnitGUID)
 	end

 	if IA.CurrentInspectData.SetItem then
+		local SetOptionText
+
 		for SetName in T.pairs(IA.CurrentInspectData.SetItem) do
+			for i = 1, 99 do
+				SetOptionText = IA.CurrentInspectData.SetItem[SetName]['SetOption'..i]
+
+				if SetOptionText then
+					if type(SetOptionText) == 'number' and #IA.CurrentInspectData.SetItem[SetName] < SetOptionText then
+						NeedReinspect = true
+					end
+				else
+					break
+				end
+			end
+
 			if not CurrentSetItem[SetName] then
 				IA.CurrentInspectData.SetItem[SetName] = nil
 			end
 		end
 	end

-	-- Specialization
-	IA.CurrentInspectData.Specialization[1].SpecializationID = GetInspectSpecialization(UnitID)
+	-- Specialization / PvP Talents
+	local CurrentSpec = GetInspectSpecialization(UnitID)
+	IA.CurrentInspectData.Specialization[1].SpecializationID = CurrentSpec
+	SLE_ArmoryDB[ClientVersion] = SLE_ArmoryDB[ClientVersion] or { Specialization = {}, PvPTalent = {} }
+	SLE_ArmoryDB[ClientVersion].Specialization[CurrentSpec] = SLE_ArmoryDB[ClientVersion].Specialization[CurrentSpec] or {}
+
 	local TalentID, isSelected
 	for i = 1, MAX_TALENT_TIERS do
 		for k = 1, NUM_TALENT_COLUMNS do
 			TalentID, _, _, isSelected = T.GetTalentInfo(i, k, 1, true, UnitID)

-			IA.CurrentInspectData.Specialization[1]["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)] = { TalentID, isSelected }
+			TalentID = TalentID or SLE_ArmoryDB[ClientVersion].Specialization[CurrentSpec][((i - 1) * NUM_TALENT_COLUMNS + k)]
+			isSelected = isSelected or false
+
+			if TalentID then
+				SLE_ArmoryDB[ClientVersion].Specialization[CurrentSpec][((i - 1) * NUM_TALENT_COLUMNS + k)] = TalentID
+
+				IA.CurrentInspectData.Specialization[1]['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)] = { TalentID, isSelected }
+			else
+				NeedReinspect = true
+			end
+		end
+	end
+
+	SLE_ArmoryDB[ClientVersion].PvPTalent = SLE_ArmoryDB[ClientVersion].PvPTalent or {}
+	SLE_ArmoryDB[ClientVersion].PvPTalent[CurrentSpec] = SLE_ArmoryDB[ClientVersion].PvPTalent[CurrentSpec] or {}
+	for i = 1, MAX_PVP_TALENT_TIERS do
+		for k = 1, MAX_PVP_TALENT_COLUMNS do
+			TalentID, _, _, isSelected = GetPvpTalentInfo(i, k, 1, true, UnitID)
+
+			TalentID = TalentID or SLE_ArmoryDB[ClientVersion].PvPTalent[CurrentSpec][((i - 1) * MAX_PVP_TALENT_COLUMNS + k)]
+			isSelected = isSelected or false
+
+			if TalentID then
+				SLE_ArmoryDB[ClientVersion].PvPTalent[CurrentSpec][((i - 1) * MAX_PVP_TALENT_COLUMNS + k)] = TalentID
+
+				IA.CurrentInspectData.Specialization[2]['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)] = { TalentID, isSelected }
+			else
+				NeedReinspect = true
+			end
 		end
 	end

+
 	-- Guild
 	IA.CurrentInspectData.guildPoint, IA.CurrentInspectData.guildNumMembers = GetInspectGuildInfo(UnitID)
 	IA.CurrentInspectData.guildEmblem = { GetGuildLogoInfo(UnitID) }
@@ -1636,46 +1752,56 @@ function IA:INSPECT_READY(InspectedUnitGUID)
 	if IA.ReinspectCount > 0 then
 		IA.ReinspectCount = IA.ReinspectCount - 1
 	else
-		ENI.CancelInspect(TableIndex, 'KnightInspect')
 		IA:UnregisterEvent('INSPECT_READY')
 	end
 end


-IA.InspectUnit = function(UnitID, Properties)
-	if UnitID == 'mouseover' and not T.UnitExists('mouseover') and T.UnitExists('target') then
+IA.InspectUnit = function(UnitID)
+	if UnitID == 'mouseover' and not T.UnitExists('mouseover') and T.UnitExists('target') or UnitID ~= 'target' and T.UnitIsUnit(UnitID, 'target') then
 		UnitID = 'target'
 	end

+	if UnitID ~= 'focus' and T.UnitIsUnit(UnitID, 'focus') then
+		UnitID = 'focus'
+	end
+
+	if T.UnitInParty(UnitID) or T.UnitInRaid(UnitID) then
+		UnitID = GetUnitName(UnitID, true)
+	end
+
 	if not T.UnitIsPlayer(UnitID) then
 		return
 	elseif T.UnitIsDeadOrGhost('player') then
-		print(L["KF"]..' : '..L["You can't inspect while dead."])
+		SLE:ErrorPrint(L["You can't inspect while dead."])
 		return
 	elseif not T.UnitIsVisible(UnitID) then

 		return
 	else
-		UnitID = NotifyInspect(UnitID, Properties) or UnitID
-
 		T.twipe(IA.CurrentInspectData)
 		E:CopyTable(IA.CurrentInspectData, IA.Default_CurrentInspectData)

 		IA.CurrentInspectData.UnitID = UnitID
 		IA.CurrentInspectData.Title = T.UnitPVPName(UnitID)
 		IA.CurrentInspectData.Level = T.UnitLevel(UnitID)
+		IA.CurrentInspectData.HonorLevel = T.UnitHonorLevel(UnitID)
+		IA.CurrentInspectData.PrestigeLevel = UnitPrestige(UnitID)
 		IA.CurrentInspectData.Name, IA.CurrentInspectData.Realm = T.UnitFullName(UnitID)
 		_, IA.CurrentInspectData.Class, IA.CurrentInspectData.ClassID = T.UnitClass(UnitID)
 		IA.CurrentInspectData.guildName, IA.CurrentInspectData.guildRankName = T.GetGuildInfo(UnitID)

 		IA.CurrentInspectData.Realm = IA.CurrentInspectData.Realm ~= '' and IA.CurrentInspectData.Realm ~= Info.MyRealm and IA.CurrentInspectData.Realm or nil

-		IA.ReinspectCount = 1
+		IA.ReinspectCount = 0
 		IA.NeedModelSetting = true
 		IA.ForbidUpdatePvPInformation = true
 		IA:RegisterEvent('INSPECT_READY')
 		IA:RegisterEvent('INSPECT_HONOR_UPDATE')

+		SLE:Print(format(L["Try inspecting %s. Sometimes this work will take few second for waiting server's response."], '|c'..RAID_CLASS_COLORS[IA.CurrentInspectData.Class].colorStr..IA.CurrentInspectData.Name..(IA.CurrentInspectData.Realm and '-'..IA.CurrentInspectData.Realm or '')..'|r')..(UnitID == 'mouseover' and ' '..L['Mouseover Inspect must hold your mouse position until inspect is over.'] or ''))
+		IA.Inspector:Show()
+
 		return true
 	end
 end
@@ -1703,6 +1829,7 @@ function IA:ShowFrame(DataTable)
 		if not self:InspectFrame_DataSetting(DataTable) then
 			self.Updater:SetScript('OnUpdate', nil)
 			self.Updater:Hide()
+			self.Inspector:Hide()

 			self:InspectFrame_PvPSetting(DataTable)
 			ShowUIPanel(_G["InspectArmory"])
@@ -1712,11 +1839,38 @@ end


 function IA:InspectFrame_DataSetting(DataTable)
+	local SpecTab = DataTable.Specialization.SpecTab or 1
 	local Slot, ErrorDetected, NeedUpdate, NeedUpdateList, R, G, B
 	local ItemCount, ItemTotal = 0, 0

+	do	--<< Specialization Page Setting >>--
+		local Name, Texture
+
+		if DataTable.Specialization[1].SpecializationID and DataTable.Specialization[1].SpecializationID ~= 0 then
+			_, Name, _, Texture = GetSpecializationInfoByID(DataTable.Specialization[1].SpecializationID)
+
+			if Name then
+				if Info.ClassRole[DataTable.Class][Name] then
+					self.SpecIcon:SetTexture(Texture)
+					self.Spec.Spec1.Texture:SetTexture(Texture)
+				end
+			end
+		end
+
+		if not Name then
+			self.SpecIcon:SetTexture('Interface\\ICONS\\INV_Misc_QuestionMark')
+			self.Spec.Spec1.Texture:SetTexture('Interface\\ICONS\\INV_Misc_QuestionMark')
+		end
+
+		if DataTable.PrestigeLevel > 0 then
+			self.Spec.Spec2.Texture:SetTexture(GetPrestigeInfo(DataTable.PrestigeLevel))
+		else
+			self.Spec.Spec2.Texture:SetTexture('Interface\\Icons\\achievement_bg_killxenemies_generalsroom')
+		end
+	end
+
 	do	--<< Equipment Slot and Enchant, Gem Setting >>--
-		local ItemData, ItemRarity, BasicItemLevel, TrueItemLevel, ItemUpgradeID, ItemType, ItemTexture, CurrentLineText, GemCount_Default, GemCount_Enable, GemCount_Now, GemCount
+		local ItemData, ItemRarity, BasicItemLevel, TrueItemLevel, ItemUpgradeID, CurrentUpgrade, MaxUpgrade, ItemType, ItemTexture, CurrentLineText, GemID, GemCount_Default, GemCount_Enable, GemCount_Now, GemCount

 		-- Setting except shirt and tabard
 		for _, SlotName in T.pairs(T.type(self.GearUpdated) == 'table' and self.GearUpdated or Info.Armory_Constants.GearList) do
@@ -1725,19 +1879,18 @@ function IA:InspectFrame_DataSetting(DataTable)

 			if SlotName ~= 'ShirtSlot' and SlotName ~= 'TabardSlot' then
 				do --<< Clear Setting >>--
-					NeedUpdate, TrueItemLevel, ItemUpgradeID, ItemType = nil, nil, nil, nil
+					NeedUpdate, TrueItemLevel, ItemUpgradeID, CurrentUpgrade, MaxUpgrade, ItemType = nil, nil, nil, nil, nil, nil

 					Slot.Link = nil
 					Slot.ILvL = nil
 					Slot.IsEnchanted = nil
-					Slot.ItemLevel:SetText(nil)
 					Slot.Gradation.ItemLevel:SetText(nil)
 					Slot.Gradation.ItemEnchant:SetText(nil)
 					for i = 1, MAX_NUM_SOCKETS do
-						Slot["Socket"..i].Texture:SetTexture(nil)
-						Slot["Socket"..i].GemItemID = nil
-						Slot["Socket"..i].GemType = nil
-						Slot["Socket"..i]:Hide()
+						Slot['Socket'..i].Texture:SetTexture(nil)
+						Slot['Socket'..i].GemItemID = nil
+						Slot['Socket'..i].GemType = nil
+						Slot['Socket'..i]:Hide()
 					end
 					Slot.EnchantWarning:Hide()
 					Slot.EnchantWarning.Message = nil
@@ -1749,6 +1902,10 @@ function IA:InspectFrame_DataSetting(DataTable)
 						Slot.TransmogrifyAnchor.Link = nil
 						Slot.TransmogrifyAnchor:Hide()
 					end
+
+					if Slot.ItemLevel then
+						Slot.ItemLevel:SetText(nil)
+					end
 				end

 				if DataTable.Gear[SlotName].ItemLink then
@@ -1757,10 +1914,25 @@ function IA:InspectFrame_DataSetting(DataTable)
 					if Slot.Link then
 						do --<< Gem Parts >>--
 							ItemData = { T.split(':', Slot.Link) }
-							ItemData[4], ItemData[5], ItemData[6], ItemData[7] = 0, 0, 0, 0

-							for i = 1, #ItemData do
-								ItemData.FixedLink = (ItemData.FixedLink and ItemData.FixedLink..':' or '')..ItemData[i]
+							if DataTable.Specialization[SpecTab].SpecializationID and DataTable.Specialization[SpecTab].SpecializationID ~= 0 then
+								ItemData[11] = DataTable.Specialization[SpecTab].SpecializationID
+
+								Slot.Link = ItemData[1]
+
+								for i = 2, #ItemData do
+									Slot.Link = Slot.Link..':'..ItemData[i]
+								end
+							end
+
+							ItemData.FixedLink = ItemData[1]
+
+							for i = 2, #ItemData do
+								if i == 4 or i == 5 or i ==6 or i ==7 then
+									ItemData.FixedLink = ItemData.FixedLink..':'..0
+								else
+									ItemData.FixedLink = ItemData.FixedLink..':'..ItemData[i]
+								end
 							end

 							self:ClearTooltip(self.ScanTT)
@@ -1770,7 +1942,7 @@ function IA:InspectFrame_DataSetting(DataTable)

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

 								if ItemTexture and ItemTexture:find('Interface\\ItemSocketingFrame\\') then
 									GemCount_Default = GemCount_Default + 1
@@ -1785,47 +1957,73 @@ function IA:InspectFrame_DataSetting(DataTable)
 								((SlotName == 'WristSlot' or SlotName == 'HandsSlot') and (DataTable.Profession[1].Name == GetSpellInfo(110396) and DataTable.Profession[1].Level >= 550 or DataTable.Profession[2].Name == GetSpellInfo(110396) and DataTable.Profession[2].Level >= 550)) then -- BlackSmith

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

+
 							self:ClearTooltip(self.ScanTT)
 							self.ScanTT:SetHyperlink(Slot.Link)

 							-- Apply current item's gem setting
 							for i = 1, MAX_NUM_SOCKETS do
-								ItemTexture = _G["InspectArmoryScanTTTexture"..i]:GetTexture()
+								ItemTexture = _G['InspectArmoryScanTTTexture'..i]:GetTexture()
+								GemID = ItemData[i + 3] ~= '' and tonumber(ItemData[i + 3]) or 0

-								if Slot["Socket"..i].GemType and Info.Armory_Constants.GemColor[Slot["Socket"..i].GemType] then
-									R, G, B = T.unpack(Info.Armory_Constants.GemColor[Slot["Socket"..i].GemType])
-									Slot["Socket"..i].Socket:SetBackdropColor(R, G, B, 0.5)
-									Slot["Socket"..i].Socket:SetBackdropBorderColor(R, G, B)
+								if Slot['Socket'..i].GemType and Info.Armory_Constants.GemColor[Slot['Socket'..i].GemType] then
+									R, G, B = unpack(Info.Armory_Constants.GemColor[Slot['Socket'..i].GemType])
+									Slot['Socket'..i].Socket:SetBackdropColor(R, G, B, .5)
+									Slot['Socket'..i].Socket:SetBackdropBorderColor(R, G, B)
 								else
-									Slot["Socket"..i].Socket:SetBackdropColor(1, 1, 1, 0.5)
-									Slot["Socket"..i].Socket:SetBackdropBorderColor(1, 1, 1)
+									Slot['Socket'..i].Socket:SetBackdropColor(1, 1, 1, .5)
+									Slot['Socket'..i].Socket:SetBackdropBorderColor(1, 1, 1)
+								end
+
+								if ItemTexture then
+									if E.db.sle.Armory.Inspect.Gem.Display == 'Always' or E.db.sle.Armory.Inspect.Gem.Display == 'MouseoverOnly' and Slot.Mouseovered or E.db.sle.Armory.Inspect.Gem.Display == 'MissingOnly' 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)
+									end
+
+									GemCount_Now = GemCount_Now + 1
+
+									if GemID ~= 0 then
+										GemCount = GemCount + 1
+										Slot['Socket'..i].GemItemID = GemID
+
+										_, Slot['Socket'..i].Socket.Link, _, _, _, _, _, _, _, ItemTexture = T.GetItemInfo(GemID)
+
+										if ItemTexture then
+											Slot['Socket'..i].Texture:SetTexture(ItemTexture)
+										else
+											NeedUpdate = true
+										end
+									end
 								end

-								CurrentLineText = T.select(2, _G["InspectArmoryScanTTTexture"..i]:GetPoint())
-								CurrentLineText = DataTable.Gear[SlotName]["Gem"..i] or CurrentLineText ~= self.ScanTT and CurrentLineText.GetText and CurrentLineText:GetText():gsub('|cff......', ''):gsub('|r', '') or nil
+								--[[
+								CurrentLineText = select(2, _G['InspectArmoryScanTTTexture'..i]:GetPoint())
+								CurrentLineText = DataTable.Gear[SlotName]['Gem'..i] or CurrentLineText ~= self.ScanTT and CurrentLineText.GetText and CurrentLineText:GetText():gsub('|cff......', ''):gsub('|r', '') or nil

 								if CurrentLineText then
-									if E.db.sle.Armory.Inspect.Gem.Display == 'Always' or E.db.sle.Armory.Inspect.Gem.Display == 'MouseoverOnly' and Slot.Mouseovered or E.db.sle.Armory.Inspect.Gem.Display == 'MissingOnly' 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)
+									if KF.db.Modules.Armory.Inspect.Gem.Display == 'Always' or KF.db.Modules.Armory.Inspect.Gem.Display == 'MouseoverOnly' and Slot.Mouseovered or KF.db.Modules.Armory.Inspect.Gem.Display == 'MissingOnly' 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)
 									end

 									GemCount_Now = GemCount_Now + 1

-									ItemTexture = ItemTexture or DataTable.Gear[SlotName]["Gem"..i] and T.select(10, T.GetItemInfo(DataTable.Gear[SlotName]["Gem"..i])) or nil
+									ItemTexture = ItemTexture or DataTable.Gear[SlotName]['Gem'..i] and select(10, GetItemInfo(DataTable.Gear[SlotName]['Gem'..i])) or nil

 									if not ItemTexture then
 										NeedUpdate = true
 									elseif not Info.Armory_Constants.EmptySocketString[CurrentLineText] then
 										GemCount = GemCount + 1
-										Slot["Socket"..i].GemItemID = CurrentLineText
-										Slot["Socket"..i].Texture:SetTexture(ItemTexture)
+										Slot['Socket'..i].GemItemID = CurrentLineText
+										Slot['Socket'..i].Texture:SetTexture(ItemTexture)
 									end
 								end
+								]]
 							end

 							if GemCount_Now < GemCount_Default then -- ItemInfo not loaded
@@ -1833,16 +2031,18 @@ function IA:InspectFrame_DataSetting(DataTable)
 							end
 						end

-						_, _, ItemRarity, _, _, _, _, _, ItemType, ItemTexture = T.GetItemInfo(Slot.Link)
-						TrueItemLevel, _, BasicItemLevel = T.GetDetailedItemLevelInfo(Slot.Link)
-						R, G, B = T.GetItemQualityColor(ItemRarity)
-
-						ItemUpgradeID = Slot.Link:match(":(%d+)\124h%[")
+						_, _, ItemRarity, BasicItemLevel, _, _, _, _, ItemType, ItemTexture = T.GetItemInfo(Slot.Link)
+						R, G, B = GetItemQualityColor(ItemRarity)

 						--<< Enchant Parts >>--
 						for i = 1, self.ScanTT:NumLines() do
-							CurrentLineText = _G["InspectArmoryScanTTTextLeft"..i]:GetText()
-							if CurrentLineText:find(Info.Armory_Constants.EnchantKey) then
+							CurrentLineText = _G['InspectArmoryScanTTTextLeft'..i]:GetText()
+
+							if CurrentLineText:find(Info.Armory_Constants.ItemLevelKey_Alt) then
+								TrueItemLevel = tonumber(CurrentLineText:match(Info.Armory_Constants.ItemLevelKey_Alt))
+							elseif CurrentLineText:find(Info.Armory_Constants.ItemLevelKey) then
+								TrueItemLevel = tonumber(CurrentLineText:match(Info.Armory_Constants.ItemLevelKey))
+							elseif CurrentLineText:find(Info.Armory_Constants.EnchantKey) then
 								if E.db.sle.Armory.Inspect.Enchant.Display ~= 'Hide' then
 									CurrentLineText = CurrentLineText:match(Info.Armory_Constants.EnchantKey) -- Get enchant string
 									CurrentLineText = gsub(CurrentLineText, ITEM_MOD_AGILITY_SHORT, AGI)
@@ -1859,32 +2059,39 @@ function IA:InspectFrame_DataSetting(DataTable)
 										end
 									end

-									for Name, _ in T.pairs(SLE_ArmoryDB.EnchantString) do
-										if SLE_ArmoryDB.EnchantString[Name].original and SLE_ArmoryDB.EnchantString[Name].new then
-											CurrentLineText = gsub(CurrentLineText, SLE_ArmoryDB.EnchantString[Name].original, SLE_ArmoryDB.EnchantString[Name].new)
-										end
+									for Old, New in T.pairs(SLE_ArmoryDB.EnchantString) do
+										CurrentLineText = T.gsub(CurrentLineText, Old, New)
 									end

 									Slot.Gradation.ItemEnchant:SetText('|cffceff00'..CurrentLineText)
 								end

 								Slot.IsEnchanted = true
+							elseif CurrentLineText:find(ITEM_UPGRADE_TOOLTIP_FORMAT) then
+								CurrentUpgrade, MaxUpgrade = CurrentLineText:match(Info.Armory_Constants.ItemUpgradeKey)
 							end
 						end

 						--<< ItemLevel Parts >>--
+						ItemUpgradeID = ItemData[12]
+
 						if BasicItemLevel then
 							if ItemUpgradeID then
-								if ItemUpgradeID == '0' or not E.db.sle.Armory.Inspect.Level.ShowUpgradeLevel and ItemRarity == 7 then
+								if ItemUpgradeID == '' or not E.db.sle.Armory.Inspect.Level.ShowUpgradeLevel and ItemRarity == 7 then
 									ItemUpgradeID = nil
-								else
+								elseif CurrentUpgrade or MaxUpgrade then
 									ItemUpgradeID = TrueItemLevel - BasicItemLevel
+								else
+									ItemUpgradeID = nil
 								end
 							end

 							Slot.ILvL = TrueItemLevel or BasicItemLevel

-							Slot.ItemLevel:SetText((ItemUpgradeID and (Info.Armory_Constants.UpgradeColor[ItemUpgradeID] or '|cffffffff') or '')..(TrueItemLevel or BasicItemLevel))
+							if Slot.ItemLevel then
+								Slot.ItemLevel:SetText((ItemUpgradeID and (Info.Armory_Constants.UpgradeColor[ItemUpgradeID] or '|cffffffff') or '')..TrueItemLevel)
+							end
+
 							Slot.Gradation.ItemLevel:SetText(
 								(not TrueItemLevel or BasicItemLevel == TrueItemLevel) and BasicItemLevel
 								or
@@ -1894,43 +2101,34 @@ function IA:InspectFrame_DataSetting(DataTable)
 							)
 						end

-						--print(SlotName..':', Slot.Link, BasicItemLevel, TrueItemLevel)
-
-						--[[
 						-- Check Error
+						--[[
 						if (not Slot.IsEnchanted and Info.Armory_Constants.EnchantableSlots[SlotName]) or ((SlotName == 'Finger0Slot' or SlotName == 'Finger1Slot') and (DataTable.Profession[1].Name == GetSpellInfo(110400) and DataTable.Profession[1].Level >= 550 or DataTable.Profession[2].Name == GetSpellInfo(110400) and DataTable.Profession[2].Level >= 550) and not Slot.IsEnchanted) then
 							ErrorDetected = true
 							Slot.EnchantWarning:Show()
-							Slot.Gradation.ItemEnchant:SetText('|cffff0000'..L["Not Enchanted"])
+							Slot.Gradation.ItemEnchant:SetText('|cffff0000'..L['Not Enchanted'])
 						elseif SlotName == 'ShoulderSlot' and KF.Table.ItemEnchant_Profession_Inscription and (DataTable.Profession[1].Name == GetSpellInfo(110417) and DataTable.Profession[1].Level >= KF.Table.ItemEnchant_Profession_Inscription.NeedLevel or DataTable.Profession[2].Name == GetSpellInfo(110417) and DataTable.Profession[2].Level >= KF.Table.ItemEnchant_Profession_Inscription.NeedLevel) and not KF.Table.ItemEnchant_Profession_Inscription[enchantID] then
 							ErrorDetected = true
 							Slot.EnchantWarning:Show()
-							Slot.EnchantWarning.Message = '|cff71d5ff'..GetSpellInfo(110400)..'|r : '..L["This is not profession only."]
+							Slot.EnchantWarning.Message = '|cff71d5ff'..GetSpellInfo(110400)..'|r : '..L['This is not profession only.']
 						elseif SlotName == 'WristSlot' and KF.Table.ItemEnchant_Profession_LeatherWorking and (DataTable.Profession[1].Name == GetSpellInfo(110423) and DataTable.Profession[1].Level >= KF.Table.ItemEnchant_Profession_LeatherWorking.NeedLevel or DataTable.Profession[2].Name == GetSpellInfo(110423) and DataTable.Profession[2].Level >= KF.Table.ItemEnchant_Profession_LeatherWorking.NeedLevel) and not KF.Table.ItemEnchant_Profession_LeatherWorking[enchantID] then
 							ErrorDetected = true
 							Slot.EnchantWarning:Show()
-							Slot.EnchantWarning.Message = '|cff71d5ff'..GetSpellInfo(110423)..'|r : '..L["This is not profession only."]
+							Slot.EnchantWarning.Message = '|cff71d5ff'..GetSpellInfo(110423)..'|r : '..L['This is not profession only.']
 						elseif SlotName == 'BackSlot' and KF.Table.ItemEnchant_Profession_Tailoring and (DataTable.Profession[1].Name == GetSpellInfo(110426) and DataTable.Profession[1].Level >= KF.Table.ItemEnchant_Profession_Tailoring.NeedLevel or DataTable.Profession[2].Name == GetSpellInfo(110426) and DataTable.Profession[2].Level >= KF.Table.ItemEnchant_Profession_Tailoring.NeedLevel) and not KF.Table.ItemEnchant_Profession_Tailoring[enchantID] then
 							ErrorDetected = true
 							Slot.EnchantWarning:Show()
-							Slot.EnchantWarning.Message = '|cff71d5ff'..GetSpellInfo(110426)..'|r : '..L["This is not profession only."]
+							Slot.EnchantWarning.Message = '|cff71d5ff'..GetSpellInfo(110426)..'|r : '..L['This is not profession only.']
 						end
 						]]
+
 						if E.db.sle.Armory.Inspect.NoticeMissing ~= false then
-							if not Slot.IsEnchanted and Info.Armory_Constants.EnchantableSlots[SlotName] and Slot.Gradation.ItemEnchant then
-								local isValid = false
-								local isWeapon = Info.Armory_Constants.WeaponTypes[ItemType]
-								local isArtifact = (ItemRarity == 6)
-								if (isWeapon and not isArtifact) or (SlotName ~= 'SecondaryHandSlot' and not isWeapon) then
-									isValid = true
-								end
-								if isValid then
-									ErrorDetected = true
-									Slot.EnchantWarning:Show()
-
+							if not Slot.IsEnchanted and Info.Armory_Constants.EnchantableSlots[SlotName] and not (SlotName == 'SecondaryHandSlot' and ItemType ~= 'INVTYPE_WEAPON' and ItemType ~= 'INVTYPE_WEAPONOFFHAND' and ItemType ~= 'INVTYPE_RANGEDRIGHT') then
+								ErrorDetected = true
+								Slot.EnchantWarning:Show()
+
 									if not E.db.sle.Armory.Character.Enchant.WarningIconOnly then
-										Slot.Gradation.ItemEnchant:SetText('|cffff0000'..L["Not Enchanted"])
-									end
+									Slot.Gradation.ItemEnchant:SetText('|cffff0000'..L['Not Enchanted'])
 								end
 							end

@@ -1938,18 +2136,55 @@ function IA:InspectFrame_DataSetting(DataTable)
 								ErrorDetected = true

 								Slot.SocketWarning:Show()
-								Slot.SocketWarning.Message = '|cffff5678'..(GemCount_Now - GemCount)..'|r '..L["Empty Socket"]
-							end
-							if E.db.sle.Armory.Inspect.MissingIcon then
-								Slot.EnchantWarning.Texture:Show()
-								Slot.SocketWarning.Texture:Show()
-							else
-								Slot.EnchantWarning.Texture:Hide()
-								Slot.SocketWarning.Texture:Hide()
+								Slot.SocketWarning.Message = '|cffff5678'..(GemCount_Now - GemCount)..'|r '..L['Empty Socket']
+
+								--[[
+								if GemCount_Enable > GemCount_Now then
+									if SlotName == 'WaistSlot' then
+										if TrueItemLevel < 300 then
+											_, Slot.SocketWarning.Link = GetItemInfo(41611)
+										elseif TrueItemLevel < 417 then
+											_, Slot.SocketWarning.Link = GetItemInfo(55054)
+										else
+											_, Slot.SocketWarning.Link = GetItemInfo(90046)
+										end
+
+										Slot.SocketWarning.Message = L['Missing Buckle']
+
+										Slot.SocketWarning:SetScript('OnClick', function(self)
+											local itemName, itemLink
+
+											if TrueItemLevel < 300 then
+												itemName, itemLink = GetItemInfo(41611)
+											elseif TrueItemLevel < 417 then
+												itemName, itemLink = GetItemInfo(55054)
+											else
+												itemName, itemLink = GetItemInfo(90046)
+											end
+
+											if HandleModifiedItemClick(itemLink) then
+											elseif IsShiftKeyDown() and BrowseName and BrowseName:IsVisible() then
+												AuctionFrameBrowse_Reset(BrowseResetButton)
+												BrowseName:SetText(itemName)
+												BrowseName:SetFocus()
+											end
+										end)
+									elseif SlotName == 'HandsSlot' then
+										Slot.SocketWarning.Link = GetSpellLink(114112)
+										Slot.SocketWarning.Message = '|cff71d5ff'..GetSpellInfo(110396)..'|r : '..L['Missing Socket']
+									elseif SlotName == 'WristSlot' then
+										Slot.SocketWarning.Link = GetSpellLink(113263)
+										Slot.SocketWarning.Message = '|cff71d5ff'..GetSpellInfo(110396)..'|r : '..L['Missing Socket']
+									end
+								else
+									Slot.SocketWarning.Message = '|cffff5678'..(GemCount_Now - GemCount)..'|r '..L['Empty Socket']
+								end
+								]]
 							end
 						end

-						if Slot.TransmogrifyAnchor then --<< Transmogrify Parts >>--
+						--<< Transmogrify Parts >>--
+						if Slot.TransmogrifyAnchor then
 							Slot.TransmogrifyAnchor.Link = DataTable.Gear[SlotName].Transmogrify ~= 'NotDisplayed' and DataTable.Gear[SlotName].Transmogrify or nil

 							if T.type(Slot.TransmogrifyAnchor.Link) == 'number' then
@@ -2011,7 +2246,7 @@ function IA:InspectFrame_DataSetting(DataTable)
 	self.GearUpdated = nil

 	do	--<< Average ItemLevel >>--
-		for _, SlotName in T.pairs(self.GearUpdated or Info.Armory_Constants.GearList) do
+		for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
 			if SlotName ~= 'ShirtSlot' and SlotName ~= 'TabardSlot' then
 				Slot = self[SlotName]

@@ -2039,16 +2274,16 @@ function IA:InspectFrame_DataSetting(DataTable)
 			for i = 1, 2 do
 				if DataTable.Profession[i].Name then
 					self.Info.Profession:Show()
-					self.Info.Profession["Prof"..i].Bar:SetValue(DataTable.Profession[i].Level)
+					self.Info.Profession['Prof'..i].Bar:SetValue(DataTable.Profession[i].Level)

 					if Info.Armory_Constants.ProfessionList[DataTable.Profession[i].Name] then
-						self.Info.Profession["Prof"..i].Name:SetText('|cff77c0ff'..DataTable.Profession[i].Name)
-						self.Info.Profession["Prof"..i].Icon:SetTexture(Info.Armory_Constants.ProfessionList[DataTable.Profession[i].Name].Texture)
-						self.Info.Profession["Prof"..i].Level:SetText(DataTable.Profession[i].Level)
+						self.Info.Profession['Prof'..i].Name:SetText('|cff77c0ff'..DataTable.Profession[i].Name)
+						self.Info.Profession['Prof'..i].Icon:SetTexture(Info.Armory_Constants.ProfessionList[DataTable.Profession[i].Name].Texture)
+						self.Info.Profession['Prof'..i].Level:SetText(DataTable.Profession[i].Level)
 					else
-						self.Info.Profession["Prof"..i].Name:SetText('|cff808080'..DataTable.Profession[i].Name)
-						self.Info.Profession["Prof"..i].Icon:SetTexture('Interface\\ICONS\\INV_Misc_QuestionMark')
-						self.Info.Profession["Prof"..i].Level:SetText(nil)
+						self.Info.Profession['Prof'..i].Name:SetText('|cff808080'..DataTable.Profession[i].Name)
+						self.Info.Profession['Prof'..i].Icon:SetTexture('Interface\\ICONS\\INV_Misc_QuestionMark')
+						self.Info.Profession['Prof'..i].Level:SetText(nil)
 					end
 				else
 					self.Info.Profession:Hide()
@@ -2071,93 +2306,48 @@ function IA:InspectFrame_DataSetting(DataTable)
 		self:ReArrangeCategory()
 	end

-	do	--<< Specialization Page Setting >>--
-		local SpecGroup, TalentID, Name, Color, Texture, SpecRole
-
-		if DataTable.Specialization.ActiveSpec or next(DataTable.Specialization[2]) then
-			SpecGroup = DataTable.Specialization.ActiveSpec or 1
-
-			for i = 2, MAX_TALENT_GROUPS do
-				self.Spec["Spec"..i]:Show()
-			end
-		else
-			SpecGroup = 1
-
-			for i = 2, MAX_TALENT_GROUPS do
-				self.Spec["Spec"..i]:Hide()
-			end
-		end
-
-		self.SpecIcon:SetTexture('Interface\\ICONS\\INV_Misc_QuestionMark')
-		for groupNum = 1, MAX_TALENT_GROUPS do
-			Color = '|cff808080'
-
-			Name = nil
-
-			if DataTable.Specialization[groupNum].SpecializationID and DataTable.Specialization[groupNum].SpecializationID ~= 0 then
-				_, Name, _, Texture = T.GetSpecializationInfoByID(DataTable.Specialization[groupNum].SpecializationID)
-
-				if Name then
-					if Info.ClassRole[DataTable.Class][Name] then
-						SpecRole = Info.ClassRole[DataTable.Class][Name].Role
-
-						if groupNum == SpecGroup then
-							Color = Info.ClassRole[DataTable.Class][Name].Color
-							self.SpecIcon:SetTexture(Texture)
-						end
-
-						Name = (SpecRole == 'Tank' and '|TInterface\\AddOns\\ElvUI\\media\\textures\\tank.tga:16:16:-3:0|t' or SpecRole == 'Healer' and '|TInterface\\AddOns\\ElvUI\\media\\textures\\healer.tga:16:16:-3:-1|t' or '|TInterface\\AddOns\\ElvUI\\media\\textures\\dps.tga:16:16:-2:-1|t')..Name
-					else
-						self.Spec.Message = L["Specialization data seems to be crashed. Please inspect again."]
-					end
-				end
-			end
-
-			if not Name then
-				Texture, SpecRole = 'Interface\\ICONS\\INV_Misc_QuestionMark.blp', nil
-				Name = '|cff808080'..L["No Specialization"]
-			end
-
-			self.Spec["Spec"..groupNum].Tab.text:SetText(Color..Name)
-			self.Spec["Spec"..groupNum].Texture:SetTexture(Texture)
-			self.Spec["Spec"..groupNum].Texture:SetDesaturated(groupNum ~= SpecGroup)
-		end
-	end
-
 	do	--<< Model and Frame Setting When InspectUnit Changed >>--
-		if DataTable.UnitID and T.UnitIsVisible(DataTable.UnitID) and self.NeedModelSetting then
-			self.Model:SetUnit(DataTable.UnitID)
-
-			self.Character.Message = nil
-		elseif self.NeedModelSetting then
-			self.Model:SetUnit('player')
-			self.Model:SetCustomRace(self.ModelList[DataTable.RaceID].RaceID, DataTable.GenderID - 2)
-			self.Model:TryOn(HeadSlotItem)
-			self.Model:TryOn(BackSlotItem)
-			self.Model:Undress()
-
+		if self.NeedModelSetting then
+			self.Model:ClearAllPoints()
+			self.Model:Point('TOPLEFT', self.HeadSlot)
+			self.Model:Point('TOPRIGHT', self.HandsSlot)
+			self.Model:Point('BOTTOM', self.BP, 'TOP', 0, SPACING)
+
+			if DataTable.UnitID and UnitIsVisible(DataTable.UnitID) then
+				self.Model:SetUnit(DataTable.UnitID)
+
+				self.Character.Message = nil
+			else
+				self.Model:SetUnit('player')
+				self.Model:SetCustomRace(self.ModelList[DataTable.RaceID].RaceID, DataTable.GenderID - 2)
+				self.Model:TryOn(HeadSlotItem)
+				self.Model:TryOn(BackSlotItem)
+				self.Model:Undress()
+
 			for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
 				if T.type(DataTable.Gear[SlotName].Transmogrify) == 'number' then
-					self.Model:TryOn(DataTable.Gear[SlotName].Transmogrify)
-				elseif DataTable.Gear[SlotName].ItemLink and not (DataTable.Gear[SlotName].Transmogrify and DataTable.Gear[SlotName].Transmogrify == 'NotDisplayed') then
-					self.Model:TryOn(DataTable.Gear[SlotName].ItemLink)
-				else
-					self.Model:UndressSlot(self[SlotName].ID)
+						self.Model:TryOn(DataTable.Gear[SlotName].Transmogrify)
+					elseif DataTable.Gear[SlotName].ItemLink and not (DataTable.Gear[SlotName].Transmogrify and DataTable.Gear[SlotName].Transmogrify == 'NotDisplayed') then
+						self.Model:TryOn(DataTable.Gear[SlotName].ItemLink)
+					else
+						self.Model:UndressSlot(self[SlotName].ID)
+					end
 				end
+
+				self.Character.Message = L['Character model may differ because it was constructed by the inspect data.']
 			end

-			self.Character.Message = L["Character model may differ because it was constructed by the inspect data."]
+			self.NeedModelSetting = nil
 		end
-		self.NeedModelSetting = nil

-		if not (self.LastDataSetting and self.LastDataSetting == DataTable.Name..(DataTable.Realm and '-'..DataTable.Realm or '')) and DataTable.Level and DataTable.Race then
+		if not (self.LastDataSetting and self.LastDataSetting == DataTable.Name..(DataTable.Realm and '-'..DataTable.Realm or '')) then
 			--<< Initialize Inspect Page >>--
 			self.Name:SetText('|c'..RAID_CLASS_COLORS[DataTable.Class].colorStr..DataTable.Name)
-			self.LevelRace:SetText(format('|cff%02x%02x%02x%s|r '..LEVEL..'|n%s', T.GetQuestDifficultyColor(DataTable.Level).r * 255, T.GetQuestDifficultyColor(DataTable.Level).g * 255, T.GetQuestDifficultyColor(DataTable.Level).b * 255, DataTable.Level, DataTable.Race))
+			self.LevelRace:SetText(format('|cff%02x%02x%02x%s|r '..LEVEL..'|n%s', GetQuestDifficultyColor(DataTable.Level).r * 255, GetQuestDifficultyColor(DataTable.Level).g * 255, GetQuestDifficultyColor(DataTable.Level).b * 255, DataTable.Level, DataTable.Race))
 			self.ClassIcon:SetTexture('Interface\\ICONS\\ClassIcon_'..DataTable.Class)

-			self.Model:SetPosition(self.ModelList[DataTable.RaceID][DataTable.GenderID] and self.ModelList[DataTable.RaceID][DataTable.GenderID].z or 0, self.ModelList[DataTable.RaceID][DataTable.GenderID] and self.ModelList[DataTable.RaceID][DataTable.GenderID].x or 0, self.ModelList[DataTable.RaceID][DataTable.GenderID] and self.ModelList[DataTable.RaceID][DataTable.GenderID].y or 0)
-			self.Model:SetFacing(-5.67)
+			self.Model:SetPosition(-0.5, self.ModelList[DataTable.RaceID][DataTable.GenderID] and self.ModelList[DataTable.RaceID][DataTable.GenderID].x or 0, self.ModelList[DataTable.RaceID][DataTable.GenderID] and self.ModelList[DataTable.RaceID][DataTable.GenderID].y or 0)
+			self.Model:SetFacing(self.ModelList[DataTable.RaceID][DataTable.GenderID] and self.ModelList[DataTable.RaceID][DataTable.GenderID].r or -5.9)
 			self.Model:SetPortraitZoom(1)
 			self.Model:SetPortraitZoom(0)

@@ -2182,11 +2372,15 @@ function IA:InspectFrame_DataSetting(DataTable)
 				self.Info.PvP.IconSlot:SetBackdropBorderColor(R, G, B)
 				self.Info.PvP.Tab:SetBackdropColor(R, G, B, .3)
 				self.Info.PvP.Tab:SetBackdropBorderColor(R, G, B)
+
+				self.Spec.BottomBorder:SetColorTexture(R, G, B)
+				self.Spec.LeftBorder:SetColorTexture(R, G, B)
+				self.Spec.RightBorder:SetColorTexture(R, G, B)
 			end

-			self:ToggleSpecializationTab(DataTable.Specialization.ActiveSpec or 1, DataTable)
-		elseif not (self.LastActiveSpec and self.LastActiveSpec == (DataTable.Specialization.ActiveSpec or 1)) then
-			self:ToggleSpecializationTab(DataTable.Specialization.ActiveSpec or 1, DataTable)
+			self:ToggleSpecializationTab(DataTable.Specialization.SpecTab or 1, DataTable)
+		elseif not (self.LastSpecTab and self.LastSpecTab == (DataTable.Specialization.SpecTab or 1)) then
+			self:ToggleSpecializationTab(DataTable.Specialization.SpecTab or 1, DataTable)
 		end
 	end

@@ -2197,17 +2391,18 @@ end


 function IA:InspectFrame_PvPSetting(DataTable)
-	local Rating, Played, Won
+	local Arg1, Arg2, Arg3
 	local NeedExpand = 0

-	for _, Type in T.pairs({ '2vs2', '3vs3', '5vs5', 'RB' }) do
+	for i, Type in pairs({ '2vs2', '3vs3', 'RB' }) do
 		if DataTable.PvP[Type] and DataTable.PvP[Type][2] > 0 then
-			Rating = DataTable.PvP[Type][1] or 0
-			Played = DataTable.PvP[Type][2] or 0
-			Won = DataTable.PvP[Type][3] or 0
+			--Arg1 = i == 1 and 2000 or i == 2 and 1750 or 1550
+			Arg1 = DataTable.PvP[Type][1] or 0	-- Rating
+			Arg2 = DataTable.PvP[Type][2] or 0	-- Played
+			Arg3 = DataTable.PvP[Type][3] or 0	-- Won

-			if Rating >= 2000 then
-				Rating = '|cffffe65a'..Rating
+			if Arg1 >= 2000 then
+				Arg1 = '|cffffe65a'..Arg1
 				self.Info.PvP[Type].Rank:Show()
 				self.Info.PvP[Type].Rank:SetTexCoord(0, .5, 0, .5)
 				self.Info.PvP[Type].Rank:SetBlendMode('ADD')
@@ -2215,7 +2410,7 @@ function IA:InspectFrame_PvPSetting(DataTable)
 				self.Info.PvP[Type].RankGlow:Show()
 				self.Info.PvP[Type].RankGlow:SetTexCoord(0, .5, 0, .5)
 				self.Info.PvP[Type].RankNoLeaf:Hide()
-			elseif Rating >= 1750 then
+			elseif Arg1 >= 1750 then
 				self.Info.PvP[Type].Rank:Show()
 				self.Info.PvP[Type].Rank:SetTexCoord(.5, 1, 0, .5)
 				self.Info.PvP[Type].Rank:SetBlendMode('ADD')
@@ -2223,8 +2418,8 @@ function IA:InspectFrame_PvPSetting(DataTable)
 				self.Info.PvP[Type].RankGlow:Show()
 				self.Info.PvP[Type].RankGlow:SetTexCoord(.5, 1, 0, .5)
 				self.Info.PvP[Type].RankNoLeaf:Hide()
-			elseif Rating >= 1550 then
-				Rating = '|cffc17611'..Rating
+			elseif Arg1 >= 1550 then
+				Arg1 = '|cffc17611'..Arg1
 				self.Info.PvP[Type].Rank:Show()
 				self.Info.PvP[Type].Rank:SetTexCoord(0, .5, 0, .5)
 				self.Info.PvP[Type].Rank:SetBlendMode('BLEND')
@@ -2232,27 +2427,45 @@ function IA:InspectFrame_PvPSetting(DataTable)
 				self.Info.PvP[Type].RankGlow:Hide()
 				self.Info.PvP[Type].RankNoLeaf:Hide()
 			else
-				Rating = '|cff2eb7e4'..Rating
+				Arg1 = '|cff2eb7e4'..Arg1
 				self.Info.PvP[Type].Rank:Hide()
 				self.Info.PvP[Type].RankGlow:Hide()
 				self.Info.PvP[Type].RankNoLeaf:Show()
 			end
-			NeedExpand = NeedExpand < 106 and 106 or NeedExpand

-			self.Info.PvP[Type].Rating:SetText(Rating)
-			self.Info.PvP[Type].Record:SetText('|cff77c0ff'..Won..'|r / |cffB24C4C'..(Played - Won))
-		else
-			NeedExpand = NeedExpand < 88 and 88 or NeedExpand
+			self.Info.PvP[Type].Rating:SetText(Arg1)
+			self.Info.PvP[Type].Record:SetText('|cff77c0ff'..Arg3..'|r / |cffB24C4C'..(Arg2 - Arg3))

+			NeedExpand = NeedExpand < 182 and 182 or NeedExpand
+		else
 			self.Info.PvP[Type].Rank:Hide()
 			self.Info.PvP[Type].RankGlow:Hide()
 			self.Info.PvP[Type].RankNoLeaf:Hide()

 			self.Info.PvP[Type].Rating:SetText('|cff8080800')
 			self.Info.PvP[Type].Record:SetText(nil)
+
+			NeedExpand = NeedExpand < 164 and 164 or NeedExpand
 		end
 	end

+	-- Arg1 : Prestige Texture
+	-- Arg2 : Prestige Name
+
+	if DataTable.PrestigeLevel > 0 then
+		Arg1, Arg2 = GetPrestigeInfo(DataTable.PrestigeLevel)
+
+		self.Info.PvP.Mark.Icon:SetTexture(Arg1)
+		Arg2 = '* '..KF:Color_Class(DataTable.Class, Arg2)..'|n'
+	else
+		SetPortraitToTexture(self.Info.PvP.Mark.Icon, 'Interface\\Icons\\achievement_bg_killxenemies_generalsroom')
+		Arg2 = ''
+	end
+
+	Arg2 = Arg2..'* '..format(Info.Armory_Constants.HonorLevel, KF:Color_Class(DataTable.Class, DataTable.HonorLevel))..'|n* '..SCORE_HONORABLE_KILLS..' : '..KF:Color_Class(DataTable.Class, DataTable.PvP.Honor)
+
+	self.Info.PvP.Mark.text:SetText(Arg2)
+
 	self.Info.PvP.CategoryHeight = NeedExpand > 0 and NeedExpand or INFO_TAB_SIZE + SPACING * 2
 	self:ReArrangeCategory()
 end
@@ -2290,88 +2503,159 @@ function IA:ReArrangeCategory()
 end


-function IA:ToggleSpecializationTab(Group, DataTable)
-	if not DataTable.Specialization[Group].SpecializationID then return end
-
-	local R, G, B
-	self.LastActiveSpec = DataTable.Specialization.ActiveSpec or 1
-
-	for i = 1, MAX_TALENT_GROUPS do
-		if i == Group then
-			self.Spec["Spec"..i].BottomLeftBorder:Show()
-			self.Spec["Spec"..i].BottomRightBorder:Show()
-			self.Spec["Spec"..i].Tab:SetFrameLevel(CORE_FRAME_LEVEL + 3)
-			self.Spec["Spec"..i].Tab.text:Point('BOTTOMRIGHT', 0, -10)
+function IA:ToggleSpecializationTab(Tab, DataTable)
+	local Name, Arg1, Arg2, R, G, B
+	local LevelTable = CLASS_TALENT_LEVELS[DataTable.Class] or CLASS_TALENT_LEVELS.DEFAULT
+
+	self.Spec.Message = nil
+
+	for i in pairs(IA.Default_CurrentInspectData.Specialization) do
+		if i == 1 then	-- Current Spec
+			if DataTable.Specialization[1].SpecializationID and DataTable.Specialization[1].SpecializationID ~= 0 then
+				_, Name, _, _, _, Arg1 = GetSpecializationInfoByID(DataTable.Specialization[1].SpecializationID)
+
+				if Name then
+					if Info.ClassRole[DataTable.Class][Name] then
+						Name = (i == Tab and Info.ClassRole[DataTable.Class][Name].Color or '')..Name..'|n'
+
+						if Arg1 == 'TANK' then
+							Name = Name..'|TInterface\\AddOns\\ElvUI\\media\\textures\\tank.tga:16:16:-3:0|t'..(i == Tab and '|cffffffff' or '').._G[Arg1]
+						elseif Arg1 == 'HEALER' then
+							Name = Name..'|TInterface\\AddOns\\ElvUI\\media\\textures\\healer.tga:16:16:-3:-1|t'..(i == Tab and '|cffffffff' or '').._G[Arg1]
+						else
+							Name = Name..'|TInterface\\AddOns\\ElvUI\\media\\textures\\dps.tga:16:16:-2:-1|t'..(i == Tab and '|cffffffff' or '').._G[Arg1]
+						end
+					else
+						self.Spec.Message = L['Specialization data seems to be crashed. Please inspect again.']
+					end
+				end
+			end
+
+			if not Name then
+				Name = L['No Specialization']
+			end
+		elseif i == 2 then	-- PvP Talent
+			Name = PVP_TALENTS..'|n'..format(Info.Armory_Constants.HonorLevel, i == Tab and KF:Color_Class(DataTable.Class, DataTable.HonorLevel) or DataTable.HonorLevel)
+		end
+
+		if i == Tab then
+			R, G, B = RAID_CLASS_COLORS[DataTable.Class].r, RAID_CLASS_COLORS[DataTable.Class].g, RAID_CLASS_COLORS[DataTable.Class].b
+
+			self.Spec['Spec'..i].BottomLeftBorder:Show()
+			self.Spec['Spec'..i].BottomRightBorder:Show()
+			self.Spec['Spec'..i]:SetFrameLevel(CORE_FRAME_LEVEL + 13)
+			self.Spec['Spec'..i].text:SetText(Name)
+			self.Spec['Spec'..i].text:Point('BOTTOMRIGHT', 0, -6)
+			self.Spec['Spec'..i].Texture:SetDesaturated(false)
 		else
-			self.Spec["Spec"..i].BottomLeftBorder:Hide()
-			self.Spec["Spec"..i].BottomRightBorder:Hide()
-			self.Spec["Spec"..i].Tab:SetFrameLevel(CORE_FRAME_LEVEL + 2)
-			self.Spec["Spec"..i].Tab.text:Point('BOTTOMRIGHT', 0, 0)
+			R, G, B = .4, .4, .4
+
+			self.Spec['Spec'..i].BottomLeftBorder:Hide()
+			self.Spec['Spec'..i].BottomRightBorder:Hide()
+			self.Spec['Spec'..i]:SetFrameLevel(CORE_FRAME_LEVEL + 12)
+			self.Spec['Spec'..i].text:SetText('|cff808080'..Name)
+			self.Spec['Spec'..i].text:Point('BOTTOMRIGHT', 0, 2)
+			self.Spec['Spec'..i].Texture:SetDesaturated(true)
 		end
+
+		self.Spec['Spec'..i].TopBorder:SetColorTexture(R, G, B)
+		self.Spec['Spec'..i].LeftBorder:SetColorTexture(R, G, B)
+		self.Spec['Spec'..i].RightBorder:SetColorTexture(R, G, B)
+		self.Spec['Spec'..i].BottomLeftBorder:SetColorTexture(R, G, B)
+		self.Spec['Spec'..i].BottomRightBorder:SetColorTexture(R, G, B)
+		self.Spec['Spec'..i].Icon:SetBackdropBorderColor(R, G, B)
 	end

-	if Group == self.LastActiveSpec then
-		R, G, B = RAID_CLASS_COLORS[DataTable.Class].r, RAID_CLASS_COLORS[DataTable.Class].g, RAID_CLASS_COLORS[DataTable.Class].b
-	else
-		R, G, B = .4, .4, .4
-	end
-
-	self.Spec.BottomBorder:SetTexture(R, G, B)
-	self.Spec.LeftBorder:SetTexture(R, G, B)
-	self.Spec.RightBorder:SetTexture(R, G, B)
+	R, G, B = RAID_CLASS_COLORS[DataTable.Class].r, RAID_CLASS_COLORS[DataTable.Class].g, RAID_CLASS_COLORS[DataTable.Class].b

-	local LevelTable = CLASS_TALENT_LEVELS[DataTable.Class] or CLASS_TALENT_LEVELS.DEFAULT
-	local TalentID, Name, Texture
-	for i = 1, MAX_TALENT_TIERS do
-		for k = 1, NUM_TALENT_COLUMNS do
-			if DataTable.Specialization then
-				if DataTable.Specialization[Group]["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)][1] then
-					TalentID, Name, Texture = T.GetTalentInfoByID(DataTable.Specialization[Group]["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)][1], 1)
+	if Tab == 1 then	-- Current Spec
+		for i = 1, MAX_TALENT_TIERS do
+			for k = 1, NUM_TALENT_COLUMNS do
+				Arg1, Name, Arg2 = GetTalentInfoByID(DataTable.Specialization[Tab]['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)][1], 1)
+
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon.Texture:SetTexture(Arg2)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].text:SetText(Name)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip.Link = GetTalentLink(Arg1)
+				self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip.Message = nil
+
+				if DataTable.Specialization[Tab]['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)][2] == true then
+					self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetBackdropColor(R, G, B, .3)
+					self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetBackdropBorderColor(R, G, B)
+					self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:SetBackdropBorderColor(R, G, B)
+					self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon.Texture:SetDesaturated(false)
+					self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].text:SetTextColor(1, 1, 1)
+				else
+					self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetBackdropColor(.1, .1, .1)
+					self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetBackdropBorderColor(0, 0, 0)
+					self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:SetBackdropBorderColor(0, 0, 0)
+					self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon.Texture:SetDesaturated(true)
+
+					if DataTable.Level < LevelTable[i] then
+						self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].text:SetTextColor(.7, .3, .3)
+						self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip.Message = '|cffff0000'..UNLOCKED_AT_LEVEL:format(LevelTable[i])
+					else
+						self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].text:SetTextColor(.5, .5, .5)
+					end
 				end
-				if TalentID and Name and Texture then
-					self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon.Texture:SetTexture(Texture)
-					self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].text:SetText(Name)
-					self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip.Link = GetTalentLink(TalentID)
+			end
+
+			self.Spec['TalentTier'..i]:Point('TOP', self.Spec['TalentTier'..(i - 1)], 'BOTTOM', 0, -SPACING-2)
+			self.Spec['TalentTier'..i]:Show()
+		end
+
+		self.Spec.TalentTier1:Point('TOP', self.Spec.Page, 0, -2)
+	elseif Tab == 2 then	-- PvP Talents
+		for i = 1, MAX_PVP_TALENT_TIERS do
+			for k = 1, MAX_PVP_TALENT_COLUMNS do
+				if self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)] then
+					Arg1, Name, Arg2 = GetPvpTalentInfoByID(DataTable.Specialization[Tab]['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)][1], 1)
+
+					self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)].Icon.Texture:SetTexture(Arg2)
+					self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)].text:SetText(Name)
+					self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)].Tooltip.Link = GetPvpTalentLink(Arg1)
+					self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip.Message = nil

-					if DataTable.Specialization[Group]["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)][2] == true then
-						self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetBackdropColor(R, G, B, .3)
-						self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetBackdropBorderColor(R, G, B)
-						self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:SetBackdropBorderColor(R, G, B)
-						self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon.Texture:SetDesaturated(false)
-						self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].text:SetTextColor(1, 1, 1)
+					if DataTable.Specialization[Tab]['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)][2] == true then
+						self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)]:SetBackdropColor(R, G, B, .3)
+						self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)]:SetBackdropBorderColor(R, G, B)
+						self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)].Icon:SetBackdropBorderColor(R, G, B)
+						self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)].Icon.Texture:SetDesaturated(false)
+						self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)].text:SetTextColor(1, 1, 1)
 					else
-						self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetBackdropColor(.1, .1, .1)
-						self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)]:SetBackdropBorderColor(0, 0, 0)
-						self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon:SetBackdropBorderColor(0, 0, 0)
-						self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].Icon.Texture:SetDesaturated(true)
+						self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)]:SetBackdropColor(.1, .1, .1)
+						self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)]:SetBackdropBorderColor(0, 0, 0)
+						self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)].Icon:SetBackdropBorderColor(0, 0, 0)
+						self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)].Icon.Texture:SetDesaturated(true)

-						if DataTable.Level < LevelTable[i] then
-							self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].text:SetTextColor(.7, .3, .3)
+						if DataTable.Level < MAX_PLAYER_LEVEL_TABLE[LE_EXPANSION_LEVEL_CURRENT] or DataTable.HonorLevel < Info.Armory_Constants.PvPTalentRequireLevel[(i - 1) * MAX_PVP_TALENT_COLUMNS + k] then
+							self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)].text:SetTextColor(.7, .3, .3)
+							self.Spec['Talent'..((i - 1) * NUM_TALENT_COLUMNS + k)].Tooltip.Message = '|cffff0000'..UNLOCKED_AT_HONOR_LEVEL:format(Info.Armory_Constants.PvPTalentRequireLevel[(i - 1) * MAX_PVP_TALENT_COLUMNS + k])
 						else
-							self.Spec["Talent"..((i - 1) * NUM_TALENT_COLUMNS + k)].text:SetTextColor(.5, .5, .5)
+							self.Spec['Talent'..((i - 1) * MAX_PVP_TALENT_COLUMNS + k)].text:SetTextColor(.5, .5, .5)
 						end
 					end
 				end
 			end
+
+			self.Spec['TalentTier'..i]:Point('TOP', self.Spec['TalentTier'..(i - 1)], 'BOTTOM', 0, -SPACING-7)
+
+			if DataTable.Level < MAX_PLAYER_LEVEL_TABLE[LE_EXPANSION_LEVEL_CURRENT] then
+				self.Spec.Message = format(L['PvP talents become available at level %s.'], E:RGBToHex(1, .5, .5)..'110|r')
+				IA:ChangePage('SpecButton')
+			end
 		end
-	end
-
-	local Name, Texture
-
-	for i = 1, MAX_TALENT_GROUPS do
-		if i == self.LastActiveSpec then
-			R, G, B = RAID_CLASS_COLORS[DataTable.Class].r, RAID_CLASS_COLORS[DataTable.Class].g, RAID_CLASS_COLORS[DataTable.Class].b
-		else
-			R, G, B = .3, .3, .3
+
+		if MAX_TALENT_TIERS > MAX_PVP_TALENT_TIERS then
+			for i = MAX_PVP_TALENT_TIERS + 1, MAX_TALENT_TIERS do
+				self.Spec['TalentTier'..i]:Hide()
+			end
 		end

-		self.Spec["Spec"..i].TopBorder:SetTexture(R, G, B)
-		self.Spec["Spec"..i].LeftBorder:SetTexture(R, G, B)
-		self.Spec["Spec"..i].RightBorder:SetTexture(R, G, B)
-		self.Spec["Spec"..i].BottomLeftBorder:SetTexture(R, G, B)
-		self.Spec["Spec"..i].BottomRightBorder:SetTexture(R, G, B)
-		self.Spec["Spec"..i].Icon:SetBackdropBorderColor(R, G, B)
+		self.Spec.TalentTier1:Point('TOP', self.Spec.Page, 0, -7)
 	end
+
+	self:DisplayMessage('Spec')
+	self.LastSpecTab = Tab
 end


@@ -2415,8 +2699,8 @@ function IA:Update_Display(Force)
 			if Slot.Socket1 then
 				for i = 1, MAX_NUM_SOCKETS do
 					if E.db.sle.Armory.Inspect.Gem.Display == 'Always' or Mouseover and E.db.sle.Armory.Inspect.Gem.Display == 'MouseoverOnly' then
-						if Slot["Socket"..i].GemType then
-							Slot["Socket"..i]:Show()
+						if Slot['Socket'..i].GemType then
+							Slot['Socket'..i]:Show()
 						end
 					else
 						if SocketVisible == nil then
@@ -2431,14 +2715,14 @@ function IA:Update_Display(Force)

 				if SocketVisible then
 					for i = 1, MAX_NUM_SOCKETS do
-						if Slot["Socket"..i].GemType 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)
+						if Slot['Socket'..i].GemType 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)
 						end
 					end
 				elseif SocketVisible == false then
 					for i = 1, MAX_NUM_SOCKETS do
-						Slot["Socket"..i]:Hide()
+						Slot['Socket'..i]:Hide()
 					end

 					Slot.SocketWarning:Point(Slot.Direction, Slot.Socket1)
@@ -2453,66 +2737,64 @@ function IA:Update_Display(Force)
 	end
 end

-function IA:UpdateSettings(part)
-	local db = E.db.sle.Armory.Inspect
-	if not db.Enable then return end
-	if db.Enable and _G["InspectArmory"].CreateInspectFrame then _G["InspectArmory"]:CreateInspectFrame() end
-	if part == "ilvl" or part == "all" then
-		for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
-			if _G["InspectArmory"][SlotName] and _G["InspectArmory"][SlotName].Gradation and _G["InspectArmory"][SlotName].Gradation.ItemLevel then
-				_G["InspectArmory"][SlotName].Gradation.ItemLevel:FontTemplate(E.LSM:Fetch('font', db.Level.Font),db.Level.FontSize,db.Level.FontStyle)
-			end
-		end
-	end
-	if part == "ench" or part == "all" then
-		for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
-			if _G["InspectArmory"][SlotName] and _G["InspectArmory"][SlotName].Gradation and _G["InspectArmory"][SlotName].Gradation.ItemEnchant then
-				_G["InspectArmory"][SlotName].Gradation.ItemEnchant:FontTemplate(E.LSM:Fetch('font', db.Enchant.Font),db.Enchant.FontSize,db.Enchant.FontStyle)
-			end
-			if _G["InspectArmory"][SlotName] and _G["InspectArmory"][SlotName].EnchantWarning then
-				_G["InspectArmory"][SlotName].EnchantWarning:Size(db.Enchant.WarningSize)
-			end
-		end
-	end
-	if part == "gem" or part == "all" then
-		for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
-			for i = 1, MAX_NUM_SOCKETS do
-				if _G["InspectArmory"][SlotName] and _G["InspectArmory"][SlotName]["Socket"..i] then
-					_G["InspectArmory"][SlotName]["Socket"..i]:Size(db.Gem.SocketSize)
-				else
-					break
-				end
-			end
-			for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
-				if _G["InspectArmory"][SlotName] and _G["InspectArmory"][SlotName].SocketWarning then
-					_G["InspectArmory"][SlotName].SocketWarning:Size(db.Gem.WarningSize)
-				end
-			end
-		end
-	end
-end
-
+-- function IA:UpdateSettings(part)
+-- 	local db = E.db.sle.Armory.Inspect
+-- 	if not db.Enable then return end
+-- 	if db.Enable and _G["InspectArmory"].CreateInspectFrame then _G["InspectArmory"]:CreateInspectFrame() end
+-- 	if part == "ilvl" or part == "all" then
+-- 		for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
+-- 			if _G["InspectArmory"][SlotName] and _G["InspectArmory"][SlotName].Gradation and _G["InspectArmory"][SlotName].Gradation.ItemLevel then
+-- 				_G["InspectArmory"][SlotName].Gradation.ItemLevel:FontTemplate(E.LSM:Fetch('font', db.Level.Font),db.Level.FontSize,db.Level.FontStyle)
+-- 			end
+-- 		end
+-- 	end
+-- 	if part == "ench" or part == "all" then
+-- 		for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
+-- 			if _G["InspectArmory"][SlotName] and _G["InspectArmory"][SlotName].Gradation and _G["InspectArmory"][SlotName].Gradation.ItemEnchant then
+-- 				_G["InspectArmory"][SlotName].Gradation.ItemEnchant:FontTemplate(E.LSM:Fetch('font', db.Enchant.Font),db.Enchant.FontSize,db.Enchant.FontStyle)
+-- 			end
+-- 			if _G["InspectArmory"][SlotName] and _G["InspectArmory"][SlotName].EnchantWarning then
+-- 				_G["InspectArmory"][SlotName].EnchantWarning:Size(db.Enchant.WarningSize)
+-- 			end
+-- 		end
+-- 	end
+-- 	if part == "gem" or part == "all" then
+-- 		for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
+-- 			for i = 1, MAX_NUM_SOCKETS do
+-- 				if _G["InspectArmory"][SlotName] and _G["InspectArmory"][SlotName]["Socket"..i] then
+-- 					_G["InspectArmory"][SlotName]["Socket"..i]:Size(db.Gem.SocketSize)
+-- 				else
+-- 					break
+-- 				end
+-- 			end
+-- 			for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do
+-- 				if _G["InspectArmory"][SlotName] and _G["InspectArmory"][SlotName].SocketWarning then
+-- 					_G["InspectArmory"][SlotName].SocketWarning:Size(db.Gem.WarningSize)
+-- 				end
+-- 			end
+-- 		end
+-- 	end
+-- end

 KF.Modules[#KF.Modules + 1] = 'InspectArmory'
 KF.Modules.InspectArmory = function()
 	if E.db.sle.Armory.Inspect.Enable ~= false and not Info.InspectArmory_Activate then
-		Default_NotifyInspect = NotifyInspect
+		--Default_NotifyInspect = NotifyInspect
 		Default_InspectUnit = InspectUnit
+		Default_InspectFrame = _G.InspectFrame

 		if IA.CreateInspectFrame then
 			IA:CreateInspectFrame()
 		end
 		IA:Update_BG()

-		NotifyInspect = ENI.NotifyInspect or NotifyInspect
 		InspectUnit = IA.InspectUnit
+		InspectFrame = IA.Inspector

 		Info.InspectArmory_Activate = true
 	elseif Info.InspectArmory_Activate then
-		NotifyInspect = Default_NotifyInspect
 		InspectUnit = Default_InspectUnit
-		Default_NotifyInspect = nil
-		Default_InspectUnit = nil
+		InspectFrame = Default_InspectFrame

 		Info.InspectArmory_Activate = nil
 	end
diff --git a/ElvUI_SLE/modules/Armory/InspectArmory/Load_InspectArmory.xml b/ElvUI_SLE/modules/Armory/InspectArmory/Load_InspectArmory.xml
index 6ed24d6..d036cab 100644
--- a/ElvUI_SLE/modules/Armory/InspectArmory/Load_InspectArmory.xml
+++ b/ElvUI_SLE/modules/Armory/InspectArmory/Load_InspectArmory.xml
@@ -1,7 +1,6 @@
 <Ui xmlns="http://www.blizzard.com/wow/ui/">
 	<Script file="Profile.lua"/>
-	<Script file="Communication.lua"/>
-	<Script file="NotifyInspect.lua"/>
+	<!--<Script file="Communication.lua"/>-->
 	<Script file="InspectArmory.lua"/>

 	<Button name="InspectArmory_UnitPopup" hidden="true" toplevel="true">