diff --git a/esoui/ingame/keep/keepwindow.lua b/esoui/ingame/keep/keepwindow.lua
deleted file mode 100755
index f079ef3..0000000
--- a/esoui/ingame/keep/keepwindow.lua
+++ /dev/null
@@ -1,937 +0,0 @@
-local NUM_KEEP_UPGRADE_LEVELS = 6
-
---Multi-Level Status Bar
----------------------------
-
-local ZO_MultiLevelStatusBar = ZO_Object:Subclass()
-
-function ZO_MultiLevelStatusBar:New(control, numLevels, color, projectedColor, width)
-    local manager = ZO_Object.New(self)
-
-    manager.numLevels = numLevels
-    manager.control = control
-    control:SetWidth(width)
-
-    manager.progress = GetControl(control, "Progress")
-    manager.progress:SetMinMax(0,1)
-    manager.progress:SetColor(color:UnpackRGBA())
-    manager.projected = GetControl(control, "Projected")
-    manager.projected:SetMinMax(0,1)
-    if(projectedColor) then
-        manager.projected:SetColor(projectedColor:UnpackRGBA())
-    else
-        manager.projected:SetHidden(true)
-    end
-    manager.projected:SetValue(0)
-
-    manager.sections = {}
-
-    local sectionWidth = width / numLevels
-    local sectionsContainer = GetControl(control, "Sections")
-    local prevControl = nil
-    for i = 0, numLevels-1 do
-        local control = CreateControlFromVirtual(control:GetName().."Section",  sectionsContainer, "ZO_MultiLevelStatusBarSection", i)
-        GetControl(control, "Label"):SetText(i)
-        control.index = i
-        control.manager = manager
-        control:SetWidth(sectionWidth)
-        if(not prevControl) then
-            control:SetAnchor(TOPLEFT, nil, TOPLEFT, 0, 0)
-            control:SetAnchor(BOTTOMLEFT, nil, BOTTOMLEFT, 0, 0)
-        else
-            control:SetAnchor(TOPLEFT, prevControl, TOPRIGHT, 0, 0)
-            control:SetAnchor(BOTTOMLEFT, prevControl, BOTTOMRIGHT, 0, 0)
-        end
-        
-        manager.sections[i] = control
-
-        prevControl = control
-    end
-
-    return manager
-end
-
-function ZO_MultiLevelStatusBar:UpdateSections()
-    for i = 0, self.numLevels-1 do
-        local section = self.sections[i]
-        local color
-        local achieved = true
-        if(self.progressLevel and i <= self.progressLevel) then
-            color = ZO_NORMAL_TEXT
-        elseif(self.projectedLevel and i <= self.projectedLevel) then
-            color = ZO_NORMAL_TEXT
-        else
-            achieved = false
-            color = ZO_SELECTED_TEXT            
-        end
-        GetControl(section, "Label"):SetColor(color:UnpackRGBA())
-        if(achieved) then
-            section:SetTexture("EsoUI/Art/AvA/AvA_resourceStatus_progBar_achieved_overlay_up.dds")
-        else
-            section:SetTexture("EsoUI/Art/AvA/AvA_resourceStatus_progBar_unachieved_overlay_up.dds")
-        end
-    end
-end
-
-function ZO_MultiLevelStatusBar:SetProgress(level)
-    local value = level / (self.numLevels)
-    self.progress:SetValue(value)
-    
-    local highestAchievedLevel = zo_floor(level)
-    self.progressLevel = highestAchievedLevel
-    
-    self:UpdateSections()
-end
-
-function ZO_MultiLevelStatusBar:ProjectProgress(level)
-    local value = level / (self.numLevels)
-    self.projectedLevel = zo_floor(level)
-    self.projected:SetValue(value)
-
-    self:UpdateSections()
-end
-
---Keep Upgrade
-----------------
-
-local ZO_KeepUpgradeManager = ZO_Object:Subclass()
-local UPGRADE_TYPE_RESOURCE_KEEP = 1
-local UPGRADE_TYPE_MAIN_KEEP = 2
-
-local RESOURCE_TYPE_TO_UPKEEP_FORMAT =
-{
-    [RESOURCETYPE_FOOD] = GetString(SI_KEEP_FOOD_UPKEEP_COST_FORMAT),
-    [RESOURCETYPE_ORE] = GetString(SI_KEEP_ORE_UPKEEP_COST_FORMAT),
-    [RESOURCETYPE_WOOD] = GetString(SI_KEEP_WOOD_UPKEEP_COST_FORMAT),
-}
-
-function ZO_KeepUpgradeManager:New(control, numLevels, color, projectedColor, upgradeType, upgradePath, owningWindow, width)
-    local manager = ZO_Object.New(self)
-
-    manager.control = control
-    manager.owningWindow = owningWindow
-    manager.upgradeType = upgradeType
-    manager.upgradePath = upgradePath
-    manager.upkeepCostHeader = GetControl(control, "UpkeepCostHeader")
-    manager.upkeepCost = GetControl(control, "UpkeepCost")
-    manager.name = GetControl(control, "Name")
-    manager.level = GetControl(control, "Level")
-    manager.additionalTokens = 0
-
-    manager.indent = 15
-    manager.headerSpacingY = 16
-    manager.lineSpacingY = 8
-    manager.topOffsetY = 0
-
-    manager.status = ZO_MultiLevelStatusBar:New(GetControl(control, "Status"), numLevels, color, projectedColor, width)
-
-    manager.scrollPane = GetControl(control, "Pane")
-    manager.scrollChild = GetControl(manager.scrollPane, "ScrollChild")
-    manager.levelHeader = GetControl(control, "LevelHeader")
-
-    manager.bonusLines = ZO_ControlPool:New("ZO_KeepWindowBonusLine", manager.scrollChild, "BonusLine")
-    manager.bonusLines:SetCustomResetBehavior(  function(control)
-                                                    control:SetHeight(0)
-                                                end)
-
-    manager.control:SetHandler("OnUpdate", function() manager:OnUpdate() end)
-
-    return manager
-end
-
-function ZO_KeepUpgradeManager:OnUpdate()
-    if(self.pendingScrollToHeader) then
-        if(not self.delay) then
-            self.delay = true
-        else
-            self.delay = nil
-            ZO_Scroll_ScrollControlToTop(self.scrollPane, self.pendingScrollToHeader)
-            self.pendingScrollToHeader = nil
-        end
-    end
-end
-
-function ZO_KeepUpgradeManager:Initialize()
-    self:UpdateProgress()
-    self:ProjectProgress(0)
-    self:UpdateLevels()
-    self:ScrollToLevel(self:GetUpgradeLevel())
-end
-
-function ZO_KeepUpgradeManager:Refresh()
-    self:UpdateProgress()
-    self:UpdateLevels()
-    self:ProjectProgress(self.additionalTokens)
-end
-
-function ZO_KeepUpgradeManager:SetName(name)
-    self.name:SetText(name)
-end
-
-function ZO_KeepUpgradeManager:SetUpgradePath(upgradePath)
-    self.upgradePath = upgradePath
-end
-
-function ZO_KeepUpgradeManager:GetUpgradeLevel()
-    local keepId = self.owningWindow:GetKeepId()
-    local battlegroundContext = self.owningWindow:GetBattlegroundContext()
-
-    if(self.upgradeType == UPGRADE_TYPE_RESOURCE_KEEP) then
-        if(self.upgradePath == UPGRADEPATH_DEFENSIVE) then
-            return GetKeepDefensiveLevel(keepId, battlegroundContext)
-        else
-            return GetKeepProductionLevel(keepId, battlegroundContext)
-        end
-    else
-        return GetKeepResourceLevel(keepId, battlegroundContext, self.upgradePath)
-    end
-
-    return 0
-end
-
-function ZO_KeepUpgradeManager:GetUpgradeInfo(level)
-    local keepId = self.owningWindow:GetKeepId()
-    local battlegroundContext = self.owningWindow:GetBattlegroundContext()
-    local path = self.upgradePath
-    
-    if(self.upgradeType == UPGRADE_TYPE_MAIN_KEEP) then
-        return GetKeepResourceInfo(keepId, battlegroundContext, path, level)
-    else
-        return GetKeepUpgradeInfo(keepId, battlegroundContext, path, level)
-    end
-end
-
-function ZO_KeepUpgradeManager:GetNumLevelUpgrades(level)
-    local keepId = self.owningWindow:GetKeepId()
-    local battlegroundContext = self.owningWindow:GetBattlegroundContext()
-    local path = self.upgradePath
-
-    if(self.upgradeType == UPGRADE_TYPE_MAIN_KEEP) then
-        return GetNumUpgradesForKeepAtResourceLevel(keepId, battlegroundContext, path, level)
-    else
-        return GetNumUpgradesForKeepAtPathLevel(keepId, battlegroundContext, path, level)
-    end   
-end
-
-function ZO_KeepUpgradeManager:GetLevelUpgradeInfo(level, index)
-    local keepId = self.owningWindow:GetKeepId()
-    local battlegroundContext = self.owningWindow:GetBattlegroundContext()
-    local path = self.upgradePath
-
-    if(self.upgradeType == UPGRADE_TYPE_MAIN_KEEP) then
-        return GetKeepUpgradeDetails(keepId, battlegroundContext, path, level, index)
-    else
-        return GetKeepUpgradePathDetails(keepId, battlegroundContext, path, level, index)
-    end
-end
-
-function ZO_KeepUpgradeManager:UpdateProgress()
-    local keepId = self.owningWindow:GetKeepId()
-    local path = self.upgradePath
-    local progressLevel = self:GetUpgradeLevel()
-        
-    local levelCurrentPoints, levelMaxPoints = self:GetUpgradeInfo(progressLevel)
-
-    if(levelMaxPoints > 0) then
-        self.status:SetProgress(progressLevel + (levelCurrentPoints / levelMaxPoints))
-    else
-        self.status:SetProgress(progressLevel)
-    end
-end
-
-function ZO_KeepUpgradeManager:ScrollToLevel(level)
-    local activeLines = self.bonusLines:GetActiveObjects()
-    for _, line in pairs(activeLines) do
-        if(line.headerLevel == level) then
-            self.pendingScrollToHeader = line
-            return
-        end
-    end
-end
-
-local LABEL_HEADER = true
-local LABEL_NOT_HEADER = false
-
-function ZO_KeepUpgradeManager:GetUpgradeLabel(isHeader)
-    local label = self.bonusLines:AcquireObject()
-    label.headerLevel = nil
-
-    if(isHeader) then
-        label:SetColor(ZO_HIGHLIGHT_TEXT:UnpackRGBA())
-    end
-
-    label:SetHidden(false)
-    return label
-end
-
-function ZO_KeepUpgradeManager:AnchorUpgradeLabel(label, prevLabel, isHeader)
-    local offsetX = 0
-    local offsetY = 0
-
-    if(not prevLabel) then
-        label:SetAnchor(TOPLEFT, nil, TOPLEFT, 0, self.topOffsetY)
-        label:SetWidth(GetControl(self.scrollPane, "Scroll"):GetWidth())
-    else
-        local prevIsHeader = (prevLabel.headerLevel ~= nil)
-        if(isHeader) then
-            if(not prevIsHeader) then
-                offsetX = -self.indent
-            end
-            offsetY = self.headerSpacingY
-        else
-            if(prevIsHeader) then
-                offsetX = self.indent
-            end
-            offsetY = self.lineSpacingY
-        end
-        label:SetAnchor(TOPLEFT, prevLabel, TOPLEFT, offsetX, offsetY)
-        label:SetAnchor(TOPRIGHT, prevLabel, BOTTOMRIGHT, 0, offsetY)   
-    end   
-end
-
-function ZO_KeepUpgradeManager:UpdateLevels()
-    local path = self.upgradePath
-    local keepId = self.owningWindow:GetKeepId()
-    local activeLevel = self:GetUpgradeLevel()
-    
-    self.level:SetText(zo_strformat(SI_KEEP_CURRENT_LEVEL, activeLevel))
-
-    self.bonusLines:ReleaseAllObjects()    
-    local prevLabel = nil
-    for currentLevel = 0, NUM_KEEP_UPGRADE_LEVELS-1 do
-        local numUpgrades = self:GetNumLevelUpgrades(currentLevel)
-        if(numUpgrades > 0) then
-            local label = self:GetUpgradeLabel(LABEL_HEADER)
-            label:SetText(zo_strformat(SI_KEEP_UPGRADE_LEVEL_HEADER, currentLevel))
-            label.headerLevel = currentLevel
-            self:AnchorUpgradeLabel(label, prevLabel, LABEL_HEADER)
-            prevLabel = label
-                
-            for i = 0, numUpgrades - 1 do
-                local name, description, atPercent, isActive = self:GetLevelUpgradeInfo(currentLevel, i)
-                local label = self:GetUpgradeLabel(LABEL_NOT_HEADER)
-
-                if(atPercent == 0 or isActive) then
-                    label:SetText(zo_strformat(SI_KEEP_UPGRADE_NAME_DESCRIPTION, name, description))
-                else
-                    label:SetText(zo_strformat(SI_KEEP_UPGRADE_NAME_PERCENT_DESCRIPTION, name, atPercent, description))
-                end
-            
-                if(isActive) then
-                    label:SetColor(ZO_NORMAL_TEXT:UnpackRGBA())
-                else
-                    label:SetColor(ZO_DISABLED_TEXT:UnpackRGBA())
-                end          
-            
-                self:AnchorUpgradeLabel(label, prevLabel, LABEL_NOT_HEADER)
-                prevLabel = label
-            end
-        end
-    end
-end
-
-function ZO_KeepUpgradeManager:ProjectProgress(additionalTokens)
-    self.additionalTokens = additionalTokens
-
-    local keepId = self.owningWindow:GetKeepId()
-    local path = self.upgradePath
-    local level = self:GetUpgradeLevel()
-    
-    while(level < NUM_KEEP_UPGRADE_LEVELS) do
-        local levelCurrentPoints, levelMaxPoints = self:GetUpgradeInfo(level)
-        local pointsToGo = levelMaxPoints - levelCurrentPoints
-        if(pointsToGo > additionalTokens) then
-            self.status:ProjectProgress(level + ((levelCurrentPoints + additionalTokens) / levelMaxPoints))
-            return
-        else
-            additionalTokens = additionalTokens - pointsToGo
-            level = level + 1
-        end
-    end
-
-    self.status:ProjectProgress(NUM_KEEP_UPGRADE_LEVELS)
-end
-
-function ZO_KeepUpgradeManager:GetStatus()
-    return self.status
-end
-
---Keep Window Manager
-------------------
-
-local ZO_KeepWindowManager = ZO_Object:Subclass()
-KEEP_WINDOW = nil
-
-local MAIN_KEEP_MODE = 1
-local RESOURCE_KEEP_MODE = 2
-
-local MAIN_KEEP_TAB_SUMMARY = 1
-local MAIN_KEEP_TAB_WOOD = 2
-local MAIN_KEEP_TAB_FOOD = 3
-local MAIN_KEEP_TAB_ORE = 4
-
-local RESOURCE_KEEP_TAB_DEFENSIVE = 1
-local RESOURCE_KEEP_TAB_PRODUCTION = 2
-
-local NUM_UPGRADE_LEVELS = 6
-local MAIN_UPGRADE_BAR_WIDTH = 630
-local RESOURCE_UPGRADE_BAR_WIDTH = 634
-local PROJECTED_COLOR = ZO_ColorDef:New(0.224, 0.392, 0.722, 1.000)
-local DEFENSIVE_COLOR = ZO_ColorDef:New(0.561, 0.208, 0.298, 1.000)
-local PRODUCTION_COLOR = ZO_ColorDef:New(0.388, 0.537, 0.220, 1.000)
-local RESOURCE_COLOR = ZO_ColorDef:New(0.647, 0.352, 0.647, 1.000)
-local RESOURCE_UPDATE_TIMER = 2
-
-local RESOURCE_OWNER_TO_ICON =
-{
-    [RESOURCETYPE_WOOD] =
-    {
-        [ALLIANCE_NONE] = "EsoUI/Art/AvA/AvA_keepStatus_icon_wood_neutral.dds",
-        [ALLIANCE_ALDMERI_DOMINION] = "EsoUI/Art/AvA/AvA_keepStatus_icon_wood_aldmeri.dds",
-        [ALLIANCE_EBONHEART_PACT] = "EsoUI/Art/AvA/AvA_keepStatus_icon_wood_ebonheart.dds",
-        [ALLIANCE_DAGGERFALL_COVENANT] = "EsoUI/Art/AvA/AvA_keepStatus_icon_wood_daggerfall.dds",
-    },
-    [RESOURCETYPE_FOOD] =
-    {
-        [ALLIANCE_NONE] = "EsoUI/Art/AvA/AvA_keepStatus_icon_food_neutral.dds",
-        [ALLIANCE_ALDMERI_DOMINION] = "EsoUI/Art/AvA/AvA_keepStatus_icon_food_aldmeri.dds",
-        [ALLIANCE_EBONHEART_PACT] = "EsoUI/Art/AvA/AvA_keepStatus_icon_food_ebonheart.dds",
-        [ALLIANCE_DAGGERFALL_COVENANT] = "EsoUI/Art/AvA/AvA_keepStatus_icon_food_daggerfall.dds",
-    },
-    [RESOURCETYPE_ORE] =
-    {
-        [ALLIANCE_NONE] = "EsoUI/Art/AvA/AvA_keepStatus_icon_ore_neutral.dds",
-        [ALLIANCE_ALDMERI_DOMINION] = "EsoUI/Art/AvA/AvA_keepStatus_icon_ore_aldmeri.dds",
-        [ALLIANCE_EBONHEART_PACT] = "EsoUI/Art/AvA/AvA_keepStatus_icon_ore_ebonheart.dds",
-        [ALLIANCE_DAGGERFALL_COVENANT] = "EsoUI/Art/AvA/AvA_keepStatus_icon_ore_daggerfall.dds",
-    },
-}
-
-local TAB_TO_RESOURCE_TYPE =
-{
-    [MAIN_KEEP_TAB_WOOD] = RESOURCETYPE_WOOD,
-    [MAIN_KEEP_TAB_FOOD] = RESOURCETYPE_FOOD,
-    [MAIN_KEEP_TAB_ORE] = RESOURCETYPE_ORE,
-}
-
---Public
-
-function ZO_KeepWindowManager:New(window)
-    local manager = ZO_Object.New(self)
-
-    manager.window = window
-    manager.title = GetControl(window, "Title")
-    manager.allianceOwner = GetControl(window, "AllianceOwner")
-    manager.guildOwner = GetControl(window, "GuildOwner")
-    manager.allianceOwnerIcon = GetControl(window, "AllianceOwnerIcon")
-    manager.mainSummary = GetControl(window, "MainSummary")
-    manager.mainResource = GetControl(window, "MainResource")
-    manager.resourceDefensive = GetControl(window, "ResourceDefensive")
-    manager.resourceProduction = GetControl(window, "ResourceProduction")
-
-    --resource keep
-    manager.defensiveUpgrades = ZO_KeepUpgradeManager:New(  GetControl(manager.resourceDefensive, "Upgrade"), 
-                                                            NUM_UPGRADE_LEVELS,
-                                                            DEFENSIVE_COLOR,
-                                                            PROJECTED_COLOR,
-                                                            UPGRADE_TYPE_RESOURCE_KEEP,
-                                                            UPGRADEPATH_DEFENSIVE,
-                                                            manager,
-                                                            RESOURCE_UPGRADE_BAR_WIDTH
-                                                          )
-    manager.defensiveUpgrades:SetName(GetString(SI_KEEP_DEFENSIVE_TITLE))
-
-    manager.productionUpgrades = ZO_KeepUpgradeManager:New( GetControl(manager.resourceProduction, "Upgrade"), 
-                                                            NUM_UPGRADE_LEVELS,
-                                                            PRODUCTION_COLOR,
-                                                            PROJECTED_COLOR,
-                                                            UPGRADE_TYPE_RESOURCE_KEEP,
-                                                            UPGRADEPATH_PRODUCTION,
-                                                            manager,
-                                                            RESOURCE_UPGRADE_BAR_WIDTH
-                                                           )
-    manager.productionUpgrades:SetName(GetString(SI_KEEP_PRODUCTION_TITLE))
-
-    --main keep
-
-    manager.tabControlToTab =
-    {
-        [ZO_KeepWindowMainSummaryTab] = MAIN_KEEP_TAB_SUMMARY,
-        [ZO_KeepWindowMainWoodTab] = MAIN_KEEP_TAB_WOOD,
-        [ZO_KeepWindowMainFoodTab] = MAIN_KEEP_TAB_FOOD,
-        [ZO_KeepWindowMainOreTab] = MAIN_KEEP_TAB_ORE,
-        [ZO_KeepWindowResourceDefensiveTab] = RESOURCE_KEEP_TAB_DEFENSIVE,
-        [ZO_KeepWindowResourceProductionTab] = RESOURCE_KEEP_TAB_PRODUCTION,
-    }
-
-    manager.rateIconToResourceType =
-    {
-        [ZO_KeepWindowMainSummaryWoodRateIcon] = RESOURCETYPE_WOOD,
-        [ZO_KeepWindowMainSummaryFoodRateIcon] = RESOURCETYPE_FOOD,
-        [ZO_KeepWindowMainSummaryOreRateIcon] = RESOURCETYPE_ORE,
-    }
-
-    local handleTabClick = function(tabControl) manager:OnTabClicked(tabControl) end
-    local visualData = {}
-    ZO_CreateUniformIconTabData(visualData, nil, nil, nil, "EsoUI/Art/AvA/AvA_keepStatus_tabIcon_keep.dds", "EsoUI/Art/AvA/AvA_keepStatus_tabIcon_keep_inactive.dds")
-    ZO_TabButton_Icon_Initialize(ZO_KeepWindowMainSummaryTab, "FancyBottomEdgeImage", visualData, handleTabClick)
-    ZO_TabButton_SetTooltipText(ZO_KeepWindowMainSummaryTab, GetString(SI_KEEP_WINDOW_SUMMARY_TAB))
-
-    ZO_CreateUniformIconTabData(visualData, nil, nil, nil, "EsoUI/Art/AvA/AvA_keepStatus_tabIcon_wood.dds", "EsoUI/Art/AvA/AvA_keepStatus_tabIcon_wood_inactive.dds")
-    ZO_TabButton_Icon_Initialize(ZO_KeepWindowMainWoodTab, "FancyBottomEdgeImage", visualData, handleTabClick)
-    ZO_TabButton_SetTooltipText(ZO_KeepWindowMainWoodTab, GetString("SI_KEEPRESOURCETYPE", RESOURCETYPE_WOOD))
-
-    ZO_CreateUniformIconTabData(visualData, nil, nil, nil, "EsoUI/Art/AvA/AvA_keepStatus_tabIcon_food.dds", "EsoUI/Art/AvA/AvA_keepStatus_tabIcon_food_inactive.dds")
-    ZO_TabButton_Icon_Initialize(ZO_KeepWindowMainFoodTab, "FancyBottomEdgeImage", visualData, handleTabClick)
-    ZO_TabButton_SetTooltipText(ZO_KeepWindowMainFoodTab, GetString("SI_KEEPRESOURCETYPE", RESOURCETYPE_FOOD))
-
-    ZO_CreateUniformIconTabData(visualData, nil, nil, nil, "EsoUI/Art/AvA/AvA_keepStatus_tabIcon_ore.dds", "EsoUI/Art/AvA/AvA_keepStatus_tabIcon_ore_inactive.dds")
-    ZO_TabButton_Icon_Initialize(ZO_KeepWindowMainOreTab, "FancyBottomEdgeImage", visualData, handleTabClick)
-    ZO_TabButton_SetTooltipText(ZO_KeepWindowMainOreTab, GetString("SI_KEEPRESOURCETYPE", RESOURCETYPE_ORE))
-
-    manager.mainTabGroup = ZO_TabButtonGroup:New()
-    manager.mainTabGroup:Add(ZO_KeepWindowMainSummaryTab)
-    manager.mainTabGroup:Add(ZO_KeepWindowMainWoodTab)
-    manager.mainTabGroup:Add(ZO_KeepWindowMainFoodTab)
-    manager.mainTabGroup:Add(ZO_KeepWindowMainOreTab)
-
-    ZO_CreateUniformIconTabData(visualData, nil, nil, nil, "EsoUI/Art/AvA/AvA_resourceStatus_tabIcon_defense.dds", "EsoUI/Art/AvA/AvA_resourceStatus_tabIcon_defense_inactive.dds")
-    ZO_TabButton_Icon_Initialize(ZO_KeepWindowResourceDefensiveTab, "FancyBottomEdgeImage", visualData, handleTabClick)
-    ZO_TabButton_SetTooltipText(ZO_KeepWindowResourceDefensiveTab, GetString(SI_KEEP_DEFENSIVE_TAB_TOOLTIP))
-
-    ZO_CreateUniformIconTabData(visualData, nil, nil, nil, "EsoUI/Art/AvA/AvA_resourceStatus_tabIcon_production.dds", "EsoUI/Art/AvA/AvA_resourceStatus_tabIcon_production_inactive.dds")
-    ZO_TabButton_Icon_Initialize(ZO_KeepWindowResourceProductionTab, "FancyBottomEdgeImage", visualData, handleTabClick)
-    ZO_TabButton_SetTooltipText(ZO_KeepWindowResourceProductionTab, GetString(SI_KEEP_PRODUCTION_TAB_TOOLTIP))
-
-    manager.resourceTabGroup = ZO_TabButtonGroup:New()
-    manager.resourceTabGroup:Add(ZO_KeepWindowResourceDefensiveTab)
-    manager.resourceTabGroup:Add(ZO_KeepWindowResourceProductionTab)
-
-    manager.resourceRows = { ZO_KeepWindowMainSummaryWood, ZO_KeepWindowMainSummaryFood, ZO_KeepWindowMainSummaryOre }
-
-    manager.resourceUpgrades = ZO_KeepUpgradeManager:New(   ZO_KeepWindowMainResourceUpgrade, 
-                                                            NUM_UPGRADE_LEVELS,
-                                                            RESOURCE_COLOR,
-                                                            nil,
-                                                            UPGRADE_TYPE_MAIN_KEEP,
-                                                            nil,
-                                                            manager,
-                                                            MAIN_UPGRADE_BAR_WIDTH
-                                                          )
-
-    EVENT_MANAGER:RegisterForEvent("KeepWindow", EVENT_KEEP_ALLIANCE_OWNER_CHANGED, function(_, keepId) manager:OnKeepAllianceOwnerChanged(keepId) end)
-    EVENT_MANAGER:RegisterForEvent("KeepWindow", EVENT_KEEP_GUILD_CLAIM_UPDATE, function(_, keepId) manager:OnKeepGuildClaimUpdate(keepId) end)
-    EVENT_MANAGER:RegisterForEvent("KeepWindow", EVENT_KEEP_BATTLE_TOKENS_UPDATE, function(_, keepId) manager:OnKeepBattleTokensUpdate(keepId) end)
-    EVENT_MANAGER:RegisterForEvent("KeepWindow", EVENT_KEEP_INITIALIZED, function(_, keepId) manager:OnKeepInitialized(keepId) end)
-    EVENT_MANAGER:RegisterForEvent("KeepWindow", EVENT_KEEPS_INITIALIZED, function() manager:OnKeepsInitialized() end)
-
-    EVENT_MANAGER:RegisterForEvent("KeepWindow", EVENT_KEEP_START_INTERACTION, function() manager:OnKeepStartInteraction() end)
-    EVENT_MANAGER:RegisterForEvent("KeepWindow", EVENT_KEEP_END_INTERACTION, function() manager:OnKeepEndInteraction() end)
-
-    manager.updateHandler =    function(_, currentTime)
-                                    manager:OnUpdate(currentTime)
-                                end
-
-    if GetInteractionKeepId() ~= 0 then
-        manager:OnKeepStartInteraction()
-    end
-
-    local KEEP_INSPECT_INTERACTION = 
-    {
-        type = "Keep Inspect",
-        End =   function()
-                    SCENE_MANAGER:Hide("keepWindow")
-                end,
-        interactTypes = { INTERACTION_KEEP_INSPECT },
-    }
-
-    KEEP_WINDOW_SCENE = ZO_InteractScene:New("keepWindow", SCENE_MANAGER, KEEP_INSPECT_INTERACTION)
-    KEEP_WINDOW_SCENE:RegisterCallback("StateChange",   function(oldState, newState)
-                                                            if(newState == SCENE_HIDDEN) then
-                                                                manager.keepId = nil
-                                                            end
-                                                        end)
-
-    return manager
-end
-
-function ZO_KeepWindowManager:GetKeepId()
-    return self.keepId
-end
-
-function ZO_KeepWindowManager:GetBattlegroundContext()
-    return self.battlegroundContext
-end
-
-function ZO_KeepWindowManager:ShowKeep(keepId, battlegroundContext)
-    if(keepId ~= self.keepId or bgContext ~= self.battlegroundContext) then
-        local keepType = GetKeepType(keepId)
-        if(keepType == KEEPTYPE_KEEP or keepType == KEEPTYPE_RESOURCE) then
-            
-            -- currently doesn't do anything
-            if(not self.window:IsHidden()) then
-                RequestKeepInfoForKeep(self.keepId, false)
-                RequestKeepInfoForKeep(keepId, true)    
-            end        
-
-            self.keepId = keepId
-            self.battlegroundContext = battlegroundContext 
-            self:UpdateKeepInfo(keepId, battlegroundContext)
-
-            if(keepType == KEEPTYPE_KEEP) then
-                self:ShowMainKeep(keepId)
-            elseif(keepType == KEEPTYPE_RESOURCE) then
-                self:ShowResourceKeep(keepId)
-            end
-
-            SCENE_MANAGER:Show("keepWindow")
-            return true
-        end 
-    end 
-    
-    return false  
-end
-
-function ZO_KeepWindowManager:ShowClosestKeep()
-    local closestKeep = GetClosestKeep(ZO_WorldMap_GetBattlegroundQueryType())
-    if(closestKeep ~= 0) then
-        return self:ShowKeep(closestKeep, ZO_WorldMap_GetBattlegroundQueryType())
-    end
-end
-
-function ZO_KeepWindowManager:Toggle()
-    if(SCENE_MANAGER:IsShowing("keepWindow")) then
-        SCENE_MANAGER:Hide("keepWindow")
-    else
-        self:ShowClosestKeep()        
-    end
-end
-
---Private
-
-function ZO_KeepWindowManager:UpdateKeepInfo(keepId, battlegroundContext)
-    local keepName = GetKeepName(keepId)
-    self.title:SetText(keepName)
-
-    local allianceOwner = GetKeepAlliance(keepId, battlegroundContext)
-    local allianceName = GetAllianceName(allianceOwner)
-    self.allianceOwner:SetText(allianceName)
-    self.allianceOwnerIcon:SetTexture(GetAllianceTexture(allianceOwner))
-
-    local guildOwnerName = GetClaimedKeepGuildName(keepId, battlegroundContext)
-    if(guildOwnerName == "") then
-        guildOwnerName = GetString(SI_KEEP_UNCLAIMED_GUILD)
-    end
-    self.guildOwner:SetText(guildOwnerName)
-end
-
-function ZO_KeepWindowManager:ChangeMode(mode)
-    if(mode ~= self.mode) then
-       self.mode = mode
-       self.tab = nil
-       self.window:SetHandler("OnUpdate", nil)
-       GetControl(self.window, "Main"):SetHidden(not (mode == MAIN_KEEP_MODE))
-       GetControl(self.window, "Resource"):SetHidden(not (mode == RESOURCE_KEEP_MODE))
-    end
-end
-
-function ZO_KeepWindowManager:ComputeRemainingTime(current, forNextLevel, resourceRate, level)
-    if(forNextLevel <= 0 or resourceRate <= 0 or current > forNextLevel or level >= (NUM_UPGRADE_LEVELS - 1)) then
-        return GetString(SI_KEEP_UPGRADE_INVALID_TIME)
-    else        
-        local timeRemaining = ((forNextLevel - current) / resourceRate) * 60
-        return ZO_FormatCountdownTimer(timeRemaining)    
-    end
-end
-
-function ZO_KeepWindowManager:UpdateResourceSummaryRow(row, keepId, resourceKeepId, battlegroundContext, resourceType)
-    local iconControl = GetControl(row, "Icon")
-    local resourceKeepAlliance = GetKeepAlliance(resourceKeepId, battlegroundContext)
-    local iconFile = RESOURCE_OWNER_TO_ICON[resourceType][resourceKeepAlliance]
-    iconControl:SetTexture(iconFile)
-
-    local resourceLevel = GetKeepResourceLevel(keepId, battlegroundContext, resourceType)
-    local current, forNextLevel = GetKeepResourceInfo(keepId, battlegroundContext, resourceType, resourceLevel)
-
-    local levelLabel = GetControl(row, "Level")
-    levelLabel:SetText(resourceLevel)
-
-    local rateLabel = GetControl(row, "Rate")
-    local resourceRate = GetKeepResourceRate(keepId, battlegroundContext, resourceType)
-    rateLabel:SetText(zo_strformat(SI_KEEP_RATE_FORMAT, resourceRate))
-
-    local timeLabel = GetControl(row, "Time")
-    local timeRemaining = self:ComputeRemainingTime(current, forNextLevel, resourceRate, resourceLevel)
-            
-    timeLabel:SetText(timeRemaining)          
-end
-
-function ZO_KeepWindowManager:UpdateSummaryView()
-    local keepId = self.keepId
-    local battlegroundContext = self.battlegroundContext
-
-    for resourceType = 1, #self.resourceRows do
-        local resourceKeepId = GetResourceKeepForKeep(keepId, resourceType)
-        local row = self.resourceRows[resourceType]
-
-        if(resourceKeepId == 0) then
-            row:SetHidden(true)
-        else
-            row:SetHidden(false)
-            self:UpdateResourceSummaryRow(row, keepId, resourceKeepId, battlegroundContext, resourceType)          
-        end
-    end
-end
-
-function ZO_KeepWindowManager:UpdateResourceView()
-    local keepId = self.keepId
-    local battlegroundContext = self.battlegroundContext
-    local resourceType = TAB_TO_RESOURCE_TYPE[self.tab]
-
-    self.resourceUpgrades:Refresh()
-        
-    local resourceName = GetString("SI_KEEPRESOURCETYPE", resourceType)
-    self.resourceUpgrades:SetName(zo_strformat(SI_KEEP_RESOURCE_TITLE, resourceName))
-
-    self:UpdateResourceSummaryRow(GetControl(self.mainResource, "Summary"), keepId, GetResourceKeepForKeep(keepId, resourceType), battlegroundContext, resourceType)
-end
-
-function ZO_KeepWindowManager:SetMainKeepTab(tab)
-    if(self.mode == MAIN_KEEP_MODE) then
-        if(self.tab ~= tab) then
-            self.tab = tab
-            if(tab) then
-                if(tab == MAIN_KEEP_TAB_SUMMARY) then
-                    self.mainSummary:SetHidden(false)
-                    self.mainResource:SetHidden(true)
-
-                    self:UpdateSummaryView()
-                else
-                    self.mainSummary:SetHidden(true)
-                    self.mainResource:SetHidden(false)
-
-                    local resourceType = TAB_TO_RESOURCE_TYPE[tab]
-                    self.resourceUpgrades:SetUpgradePath(resourceType)
-
-                    self:UpdateResourceView()
-                    self.resourceUpgrades:ScrollToLevel(self.resourceUpgrades:GetUpgradeLevel())
-                end
-            end
-        end
-    end
-end
-
-function ZO_KeepWindowManager:SetResourceKeepTab(tab)
-    if(self.mode == RESOURCE_KEEP_MODE) then
-        if(self.tab ~= tab) then
-            self.tab = tab
-            if(tab) then
-                if(tab == RESOURCE_KEEP_TAB_DEFENSIVE) then
-                    self.resourceDefensive:SetHidden(false)
-                    self.resourceProduction:SetHidden(true)
-                else
-                    self.resourceDefensive:SetHidden(true)
-                    self.resourceProduction:SetHidden(false)
-                end
-            end
-        end
-    end
-end
-
-function ZO_KeepWindowManager:ShowMainKeep(keepId)
-    self:ChangeMode(MAIN_KEEP_MODE)
-    
-    self.mainTabGroup:SetClickedButton(ZO_KeepWindowMainSummaryTab)
-    self:SetMainKeepTab(MAIN_KEEP_TAB_SUMMARY)
-
-    self.nextUpdateTime = GetFrameTimeSeconds()
-    self.window:SetHandler("OnUpdate", self.updateHandler)
-end
-
-function ZO_KeepWindowManager:ShowResourceKeep(keepId)
-    self:ChangeMode(RESOURCE_KEEP_MODE)   
-    
-    self.resourceTabGroup:SetClickedButton(ZO_KeepWindowResourceDefensiveTab)
-    self:SetResourceKeepTab(RESOURCE_KEEP_TAB_DEFENSIVE)
-
-    self.defensiveUpgrades:Initialize()
-    self.productionUpgrades:Initialize()
-end
-
-function ZO_KeepWindowManager:GetUpgradeForPath(path)
-    if(path == UPGRADEPATH_DEFENSIVE) then
-        return self.defensiveUpgrades
-    else
-        return self.productionUpgrades
-    end
-end
-
---gets the keep that this one would switch to (parent keep -> resource keep, or resource keep -> parent keep)
-function ZO_KeepWindowManager:GetKeepSwitchTarget()
-    if(self.mode == RESOURCE_KEEP_MODE) then
-        return GetParentKeepForKeep(self.keepId)
-    else
-        return GetResourceKeepForKeep(self.keepId, TAB_TO_RESOURCE_TYPE[self.tab])
-    end
-end
-
---Event/Callbacks
-
-function ZO_KeepWindowManager:OnShow()    
-    RequestKeepInfoForKeep(self.keepId, true)
-end
-
-function ZO_KeepWindowManager:OnHide()
-    RequestKeepInfoForKeep(self.keepId, false)                
-end
-
-function ZO_KeepWindowManager:OnUpdate(currentTime)
-    if(currentTime > self.nextUpdateTime) then
-        self.nextUpdateTime = currentTime + RESOURCE_UPDATE_TIMER
-        if(self.tab == MAIN_KEEP_TAB_SUMMARY) then
-            self:UpdateSummaryView()
-        else
-            self:UpdateResourceView()
-        end
-    end
-end
-
-function ZO_KeepWindowManager:OnTabClicked(tabControl)
-    if(self.mode == MAIN_KEEP_MODE) then
-        self:SetMainKeepTab(self.tabControlToTab[tabControl])
-    else
-        self:SetResourceKeepTab(self.tabControlToTab[tabControl])
-    end
-end
-
-function ZO_KeepWindowManager:OnKeepStartInteraction()
-    --TODO: GetInteractionKeepQueryType()
-    if(not self:ShowKeep(GetInteractionKeepId(), ZO_WorldMap_GetBattlegroundQueryType())) then
-        EndInteraction(INTERACTION_KEEP_INSPECT)
-    end
-end
-
-function ZO_KeepWindowManager:OnKeepEndInteraction()
-    SCENE_MANAGER:Hide("keepWindow")
-end
-
-function ZO_KeepWindowManager:OnKeepAllianceOwnerChanged(keepId)
-    if(not ZO_KeepWindow:IsHidden() and keepId == self.keepId) then
-        self:UpdateKeepInfo(self.keepId, self.battlegroundContext)
-    end
-end
-
-function ZO_KeepWindowManager:OnKeepGuildClaimUpdate(keepId)
-    if(not ZO_KeepWindow:IsHidden() and keepId == self.keepId) then
-        self:UpdateKeepInfo(self.keepId, self.battlegroundContext)
-    end
-end
-
-function ZO_KeepWindowManager:HandleFullUpdate()
-    self:UpdateKeepInfo(self.keepId, self.battlegroundContext)
-
-    if(self.mode == RESOURCE_KEEP_MODE) then
-        self.defensiveUpgrades:Refresh()
-        self.productionUpgrades:Refresh()           
-    else        
-        if(self.tab == MAIN_KEEP_TAB_SUMMARY) then
-            self:UpdateSummaryView()
-        else
-            self:UpdateResourceView()
-        end
-    end
-end
-
-function ZO_KeepWindowManager:OnKeepInitialized(keepId)
-    if(not ZO_KeepWindow:IsHidden() and keepId == self.keepId) then
-        self:HandleFullUpdate()
-    end
-end
-
-function ZO_KeepWindowManager:OnKeepsInitialized()
-    if(not ZO_KeepWindow:IsHidden()) then
-        self:HandleFullUpdate()
-    end
-end
-
-function ZO_KeepWindowManager:OnKeepBattleTokensUpdate(keepId)
-    if(not ZO_KeepWindow:IsHidden() and keepId == self.keepId) then
-        if(self.mode == RESOURCE_KEEP_MODE) then
-            self.defensiveUpgrades:Refresh()
-            self.productionUpgrades:Refresh()          
-        end
-    end
-end
-
-function ZO_KeepWindowManager:OnTotalChanged(path, total)
-    local upgrade = self:GetUpgradeForPath(path)
-    upgrade:ProjectProgress(total)    
-end
-
-function ZO_KeepWindowManager:OnSwitchEnter(button)
-    local keepTarget = self:GetKeepSwitchTarget()
-    if(keepTarget ~= 0) then
-        local text = zo_strformat(SI_KEEP_SWITCH_TOOLTIP, GetKeepName(keepTarget))
-        ZO_Tooltips_ShowTextTooltip(button, nil, text)
-    end   
-end
-
-function ZO_KeepWindowManager:OnTooltipExit()
-    ClearTooltip(InformationTooltip)
-end
-
-function ZO_KeepWindowManager:OnSwitchClicked()
-    local keepTarget = self:GetKeepSwitchTarget()
-    if(keepTarget ~= 0) then
-        self:ShowKeep(keepTarget, ZO_WorldMap_GetBattlegroundQueryType())
-    end
-end
-
-function ZO_KeepWindowManager:OnSummaryRowRateEnter(texture)
-    local resourceType
-    if(self.tab == MAIN_KEEP_TAB_SUMMARY) then
-        resourceType = self.rateIconToResourceType[texture]
-    else
-        resourceType = TAB_TO_RESOURCE_TYPE[self.tab]
-    end
-
-    local resourceKeepId = GetResourceKeepForKeep(self.keepId, resourceType)
-    if(resourceKeepId ~= 0) then
-        local text = zo_strformat(SI_KEEP_SUMMARY_RATE_TOOLTIP, GetString("SI_KEEPRESOURCETYPE", resourceType), GetKeepName(resourceKeepId))
-        ZO_Tooltips_ShowTextTooltip(texture, LEFT, text)
-    end
-end
-
-
---XML Handlers
-function ZO_KeepWindowSummaryRowRate_OnMouseEnter(texture)
-    KEEP_WINDOW:OnSummaryRowRateEnter(texture)
-end
-
-function ZO_KeepWindowSummaryRowRate_OnMouseExit()
-    KEEP_WINDOW:OnTooltipExit()
-end
-
-function ZO_KeepWindowSwitch_OnMouseEnter(button)
-    KEEP_WINDOW:OnSwitchEnter(button)
-end
-
-function ZO_KeepWindowSwitch_OnMouseExit()
-    KEEP_WINDOW:OnTooltipExit()
-end
-
-function ZO_KeepWindowSwitch_OnClicked()
-   KEEP_WINDOW:OnSwitchClicked() 
-end
-
-function ZO_KeepWindow_OnShow()
-    KEEP_WINDOW:OnShow()
-end
-
-function ZO_KeepWindow_OnHide()
-    KEEP_WINDOW:OnHide()
-end
-
-function ZO_KeepWindow_OnInitialized(window)
-    KEEP_WINDOW = ZO_KeepWindowManager:New(window)
-end