timer updated and writ layout

Leandro Silva [10-19-18 - 13:51]
timer updated and writ layout
Filename
Lang/de.lua
Lang/en.lua
Lang/fr.lua
Lang/jp.lua
Lang/ru.lua
LeoAltholic.lua
LeoAltholic.txt
LeoAltholic.xml
LeoAltholicInit.lua
LeoAltholicUI.lua
ui/bio.lua
ui/research.lua
ui/tracked.lua
ui/writs.lua
diff --git a/Lang/de.lua b/Lang/de.lua
index 97eec83..23b8ffd 100644
--- a/Lang/de.lua
+++ b/Lang/de.lua
@@ -1,14 +1,7 @@

-ZO_CreateStringId("LEOALT_D",      "T") -- Tag
-ZO_CreateStringId("LEOALT_H",      "S") -- Stunde
-ZO_CreateStringId("LEOALT_M",      "M") -- Minute
-ZO_CreateStringId("LEOALT_S",      "s") -- Sekunde
 ZO_CreateStringId("LEOALT_FINISHED",      "abgeschlossen")
 ZO_CreateStringId("LEOALT_UNLOCKED",      "freigeschaltet")
 ZO_CreateStringId("LEOALT_REMOVED_FROM",      "<<1>> wurde von <<2>> entfernt.")
-ZO_CreateStringId("LEOALT_MINUTES_AGO",      "<<1[%d Minute her/%d Minuten her]>>")
-ZO_CreateStringId("LEOALT_HOURS_AGO",      "<<1[%d Stunde her/%d Stunden her]>>")
-ZO_CreateStringId("LEOALT_DAYS_AGO",      "<<1[Gestern/%d Tage her]>>")
 ZO_CreateStringId("LEOALT_NOT_DONE_TODAY",      "heute  nicht erledigt")
 ZO_CreateStringId("LEOALT_MOUNT_FINISHED",      "<<C:1>> hat das Reittraining beendet.")
 ZO_CreateStringId("LEOALT_RESEARCH_FINISHED",      "<<C:1>> hat eine Analyse beendet.")
diff --git a/Lang/en.lua b/Lang/en.lua
index 920bd7e..21bde02 100644
--- a/Lang/en.lua
+++ b/Lang/en.lua
@@ -1,14 +1,7 @@

-ZO_CreateStringId("LEOALT_D",      "d") -- day
-ZO_CreateStringId("LEOALT_H",      "h") -- hour
-ZO_CreateStringId("LEOALT_M",      "m") -- minute
-ZO_CreateStringId("LEOALT_S",      "s") -- second
 ZO_CreateStringId("LEOALT_FINISHED",      "finished")
 ZO_CreateStringId("LEOALT_UNLOCKED",      "unlocked")
 ZO_CreateStringId("LEOALT_REMOVED_FROM",      "Removed <<1>> from <<2>>.")
-ZO_CreateStringId("LEOALT_MINUTES_AGO",      "<<1[%d minute ago/%d minutes ago]>>")
-ZO_CreateStringId("LEOALT_HOURS_AGO",      "<<1[%d hour ago/%d hours ago]>>")
-ZO_CreateStringId("LEOALT_DAYS_AGO",      "<<1[Yesterday/%d days ago]>>")
 ZO_CreateStringId("LEOALT_NOT_DONE_TODAY",      "not done today")
 ZO_CreateStringId("LEOALT_MOUNT_FINISHED",      "<<C:1>> has finished a mount training.")
 ZO_CreateStringId("LEOALT_RESEARCH_FINISHED",      "<<C:1>> has finished a research")
diff --git a/Lang/fr.lua b/Lang/fr.lua
index 8f3e881..c5691ce 100644
--- a/Lang/fr.lua
+++ b/Lang/fr.lua
@@ -1,14 +1,7 @@

-ZO_CreateStringId("LEOALT_D",      "d") -- day
-ZO_CreateStringId("LEOALT_H",      "h") -- hour
-ZO_CreateStringId("LEOALT_M",      "m") -- minute
-ZO_CreateStringId("LEOALT_S",      "s") -- second
 ZO_CreateStringId("LEOALT_FINISHED",      "finished")
 ZO_CreateStringId("LEOALT_UNLOCKED",      "unlocked")
 ZO_CreateStringId("LEOALT_REMOVED_FROM",      "Removed <<1>> from <<2>>.")
-ZO_CreateStringId("LEOALT_MINUTES_AGO",      "<<1[%d minute ago/%d minutes ago]>>")
-ZO_CreateStringId("LEOALT_HOURS_AGO",      "<<1[%d hour ago/%d hours ago]>>")
-ZO_CreateStringId("LEOALT_DAYS_AGO",      "<<1[Yesterday/%d days ago]>>")
 ZO_CreateStringId("LEOALT_NOT_DONE_TODAY",      "not done today")
 ZO_CreateStringId("LEOALT_MOUNT_FINISHED",      "<<C:1>> has finished a mount training.")
 ZO_CreateStringId("LEOALT_RESEARCH_FINISHED",      "<<C:1>> has finished a research")
diff --git a/Lang/jp.lua b/Lang/jp.lua
index 51e3602..df0be8d 100644
--- a/Lang/jp.lua
+++ b/Lang/jp.lua
@@ -1,14 +1,7 @@

-ZO_CreateStringId("LEOALT_D",      "日") -- 日
-ZO_CreateStringId("LEOALT_H",      "時間") -- 時間
-ZO_CreateStringId("LEOALT_M",      "分") -- 分
-ZO_CreateStringId("LEOALT_S",      "秒") -- 秒
 ZO_CreateStringId("LEOALT_FINISHED",      "完了")
 ZO_CreateStringId("LEOALT_UNLOCKED",      "ロックを外す")
 ZO_CreateStringId("LEOALT_REMOVED_FROM",      "削除 <<1>> から <<2>>.")
-ZO_CreateStringId("LEOALT_MINUTES_AGO",      "<<1[%d 分 前/%d 分 前]>>")
-ZO_CreateStringId("LEOALT_HOURS_AGO",      "<<1[%d 時間 前/%d 時間 前]>>")
-ZO_CreateStringId("LEOALT_DAYS_AGO",      "<<1[昨日/%d 日 前]>>")
 ZO_CreateStringId("LEOALT_NOT_DONE_TODAY",      "今日は行ってない")
 ZO_CreateStringId("LEOALT_MOUNT_FINISHED",      "<<C:1>> マウントトレーニングを終了しました")
 ZO_CreateStringId("LEOALT_RESEARCH_FINISHED",      "<<C:1>> 研究を終了しました")
diff --git a/Lang/ru.lua b/Lang/ru.lua
index 920bd7e..21bde02 100644
--- a/Lang/ru.lua
+++ b/Lang/ru.lua
@@ -1,14 +1,7 @@

-ZO_CreateStringId("LEOALT_D",      "d") -- day
-ZO_CreateStringId("LEOALT_H",      "h") -- hour
-ZO_CreateStringId("LEOALT_M",      "m") -- minute
-ZO_CreateStringId("LEOALT_S",      "s") -- second
 ZO_CreateStringId("LEOALT_FINISHED",      "finished")
 ZO_CreateStringId("LEOALT_UNLOCKED",      "unlocked")
 ZO_CreateStringId("LEOALT_REMOVED_FROM",      "Removed <<1>> from <<2>>.")
-ZO_CreateStringId("LEOALT_MINUTES_AGO",      "<<1[%d minute ago/%d minutes ago]>>")
-ZO_CreateStringId("LEOALT_HOURS_AGO",      "<<1[%d hour ago/%d hours ago]>>")
-ZO_CreateStringId("LEOALT_DAYS_AGO",      "<<1[Yesterday/%d days ago]>>")
 ZO_CreateStringId("LEOALT_NOT_DONE_TODAY",      "not done today")
 ZO_CreateStringId("LEOALT_MOUNT_FINISHED",      "<<C:1>> has finished a mount training.")
 ZO_CreateStringId("LEOALT_RESEARCH_FINISHED",      "<<C:1>> has finished a research")
diff --git a/LeoAltholic.lua b/LeoAltholic.lua
index 7c491f3..eef72bc 100644
--- a/LeoAltholic.lua
+++ b/LeoAltholic.lua
@@ -5,6 +5,7 @@ LeoAltholic.lastUpdatedCharList = nil
 LeoAltholic.myself = nil
 LeoAltholic.myselfIndex = 0
 LeoAltholic.initialized = false
+LeoAltholic.numUpdates = 0

 LeoAltholic.maxTraits = select(3,GetSmithingResearchLineInfo(1,1))
 LeoAltholic.jewelryMaxTraits = select(3,GetSmithingResearchLineInfo(7,1))
@@ -716,23 +717,34 @@ end
 local function onUpdate()

     processQueue()
+    LeoAltholic.numUpdates = LeoAltholic.numUpdates + 1

-    if LeoAltholic.isHidden() then return end
-
-    LeoAltholicUI.bioList:RefreshData()
-    LeoAltholicUI.writsList:RefreshData()
-    LeoAltholicUI.invList:RefreshData()
-    LeoAltholicUI.researchList:RefreshData()
-end
-
-local function onUpdate1M()
+    if LeoAltholic.numUpdates >= 1800 then -- 3600 seconds = 1h, forces update every hour
+        LeoAltholic.numUpdates = 1
+        LeoAltholicUI.researchList:RefreshData()
+    end

     if LeoAltholic.isHidden() then return end

-    LeoAltholicUI.statsList:RefreshData()
-    LeoAltholicUI.championList:RefreshData()
-    LeoAltholicUI.skillsList:RefreshData()
-    LeoAltholicUI.skills2List:RefreshData()
+    LeoAltholicUI:updateBio()
+
+    if LeoAltholic.numUpdates >= 30 then -- 60 seconds
+        LeoAltholic.numUpdates = 1
+        LeoAltholicUI.researchList:RefreshData()
+        --[[
+        For reference only!!
+        LeoAltholicUI.bioList:RefreshData()
+        LeoAltholicUI.statsList:RefreshData()
+        LeoAltholicUI.championList:RefreshData()
+        LeoAltholicUI.invList:RefreshData()
+        LeoAltholicUI.skillsList:RefreshData()
+        LeoAltholicUI.skills2List:RefreshData()
+        LeoAltholicUI.researchList:RefreshData()
+        LeoAltholicUI.writsList:RefreshData()
+        ]]
+    else
+        LeoAltholicUI:updateResearch()
+    end
 end

 local function trackQuest(questId, automatically)
@@ -785,7 +797,7 @@ local function onQuestComplete(eventCode, questName, level, previousExperience,
     end
     for i,trackedQuest in pairs(LeoAltholic.savedVariables.CharList[LeoAltholic.CharName].quests.tracked) do
         if (trackedQuest.name == questName) then
-            LeoAltholic.savedVariables.CharList[LeoAltholic.CharName].quests.trackedw[i].lastDone = GetTimeStamp()
+            LeoAltholic.savedVariables.CharList[LeoAltholic.CharName].quests.tracked[i].lastDone = GetTimeStamp()
             LeoAltholic.log(zo_strformat(GetString(LEOALT_QUEST_DONE_TODAY), questName))
             return
         end
@@ -929,7 +941,6 @@ local function onAddOnLoaded(event, addonName)
     EVENT_MANAGER:RegisterForEvent(LeoAltholic.name, EVENT_QUEST_COMPLETE, onQuestComplete)
     EVENT_MANAGER:RegisterForEvent(LeoAltholic.name, EVENT_QUEST_ADDED, onQuestAdded)
     EVENT_MANAGER:RegisterForUpdate(LeoAltholic.name, 2000, onUpdate)
-    EVENT_MANAGER:RegisterForUpdate(LeoAltholic.name, 60000, onUpdate1M)
     EVENT_MANAGER:RegisterForEvent(LeoAltholic.name, EVENT_NEW_MOVEMENT_IN_UI_MODE, onNewMovementInUIMode)
     CHAMPION_PERKS_SCENE:RegisterCallback('StateChange', onChampionPerksSceneStateChange)

diff --git a/LeoAltholic.txt b/LeoAltholic.txt
index c6f6ca1..17aef43 100644
--- a/LeoAltholic.txt
+++ b/LeoAltholic.txt
@@ -1,6 +1,6 @@
 ## Title: Leo's Altholic
 ## APIVersion: 100024 100025
-## Version: 1.3.2
+## Version: 1.3.3
 ## Author: |c39B027@LeandroSilva|r
 ## SavedVariables: LeoAltholicSavedVariables
 ## OptionalDependsOn: LibStub LibFeedback LibAddonMenu-2.0
diff --git a/LeoAltholic.xml b/LeoAltholic.xml
index 1dff50c..47ac34f 100644
--- a/LeoAltholic.xml
+++ b/LeoAltholic.xml
@@ -10,6 +10,8 @@
             <Anchor point="TOP" relativeTo="GuiRoot" relativePoint="CENTER" offsetY="100" />

             <OnMoveStop> LeoAltholic:OnWindowMoveStop() </OnMoveStop>
+            <OnHide> LeoAltholicUI:OnHide(self, hidden) </OnHide>
+            <OnShow> LeoAltholicUI:OnShow(self, hidden) </OnShow>

             <Controls>
                 <Backdrop name="$(parent)BG" centerColor="000000" edgeColor="222222">
@@ -24,7 +26,7 @@
                 <Button name="$(parent)Close" clickSound="Click">
                     <Anchor point="TOPRIGHT" relativePoint="TOPRIGHT" relativeTo="$(parent)" offsetX="-5" offsetY="4"/>
                     <Dimensions x="40" y="40"/>
-                    <OnClicked>LeoAltholic:HideUI()</OnClicked>
+                    <OnClicked>LeoAltholic:CloseUI()</OnClicked>
                     <Controls>
                         <Backdrop name="$(parent)BG" centerColor="101010" edgeColor="202020">
                             <AnchorFill/>
@@ -711,7 +713,7 @@
                                         <Texture name="$(parent)BagIcon" textureFile="esoui/art/mainmenu/menubar_inventory_up.dds" mouseEnabled="true">
                                             <Dimensions y="30" x="30"/>
                                             <Anchor point="TOPLEFT" relativeTo="$(parent)Name" relativePoint="TOPRIGHT" offsetX="14" offsetY="-4"/>
-                                            <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, TOP, GetString(SI_GAMEPAD_INVENTORY_AVAILABLE_FUNDS)) </OnMouseEnter>
+                                            <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, TOP, GetString(SI_GAMEPAD_PLAYER_INVENTORY_CAPACITY_FOOTER_LABEL)) </OnMouseEnter>
                                             <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
                                         </Texture>
                                         <Texture name="$(parent)GoldIcon" textureFile="esoui/art/currency/currency_gold.dds" mouseEnabled="true">
@@ -831,51 +833,65 @@
                                                 <Anchor point="TOPLEFT" relativeTo="$(parent)" relativePoint="TOPLEFT" />
                                                 <Dimensions x="180" y="20" />
                                                 <OnInitialized>
-                                                    ZO_SortHeader_Initialize(self, GetString(SI_ADDON_MANAGER_NAME), "name", ZO_SORT_ORDER_DOWN, TEXT_ALIGN_LEFT, "ZoFontGameLargeBold")
+                                                    ZO_SortHeader_Initialize(self, GetString(SI_ADDON_MANAGER_NAME), "name", ZO_SORT_ORDER_DOWN, TEXT_ALIGN_LEFT, "LeoAltholicSmallFont")
                                                 </OnInitialized>
                                             </Control>
-                                            <Texture name="$(parent)1Label" mouseEnabled="true" textureFile="/esoui/art/inventory/inventory_tabicon_craftbag_blacksmithing_up.dds">
-                                                <Dimensions x="38" y="38"/>
-                                                <Anchor point="TOPLEFT" relativeTo="$(parent)Name" relativePoint="TOPRIGHT" offsetX="10" offsetY="-8"/>
-                                                <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, TOP, GetString(SI_ITEMFILTERTYPE13)) </OnMouseEnter>
-                                                <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                                            </Texture>
-                                            <Texture name="$(parent)2Label" mouseEnabled="true" textureFile="/esoui/art/inventory/inventory_tabicon_craftbag_clothing_up.dds">
-                                                <Dimensions x="38" y="38"/>
-                                                <Anchor point="TOPLEFT" relativeTo="$(parent)1Label" relativePoint="TOPLEFT" offsetX="40"/>
-                                                <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, TOP, GetString(SI_ITEMFILTERTYPE14)) </OnMouseEnter>
-                                                <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                                            </Texture>
-                                            <Texture name="$(parent)6Label" mouseEnabled="true" textureFile="/esoui/art/inventory/inventory_tabicon_craftbag_woodworking_up.dds">
-                                                <Dimensions x="38" y="38"/>
-                                                <Anchor point="TOPLEFT" relativeTo="$(parent)2Label" relativePoint="TOPLEFT" offsetX="40"/>
-                                                <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, TOP, GetString(SI_ITEMFILTERTYPE15)) </OnMouseEnter>
-                                                <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                                            </Texture>
-                                            <Texture name="$(parent)7Label" mouseEnabled="true" textureFile="/esoui/art/inventory/inventory_tabicon_craftbag_jewelrycrafting_up.dds">
-                                                <Dimensions x="38" y="38"/>
-                                                <Anchor point="TOPLEFT" relativeTo="$(parent)6Label" relativePoint="TOPLEFT" offsetX="40"/>
-                                                <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, TOP, GetString(SI_ITEMFILTERTYPE24)) </OnMouseEnter>
-                                                <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                                            </Texture>
-                                            <Texture name="$(parent)3Label" mouseEnabled="true" textureFile="/esoui/art/inventory/inventory_tabicon_craftbag_enchanting_up.dds">
-                                                <Dimensions x="38" y="38"/>
-                                                <Anchor point="TOPLEFT" relativeTo="$(parent)7Label" relativePoint="TOPLEFT" offsetX="40"/>
-                                                <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, TOP, GetString(SI_ITEMFILTERTYPE17)) </OnMouseEnter>
-                                                <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                                            </Texture>
-                                            <Texture name="$(parent)4Label" mouseEnabled="true" textureFile="/esoui/art/inventory/inventory_tabicon_craftbag_alchemy_up.dds">
-                                                <Dimensions x="38" y="38"/>
-                                                <Anchor point="TOPLEFT" relativeTo="$(parent)3Label" relativePoint="TOPLEFT" offsetX="40"/>
-                                                <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, TOP, GetString(SI_ITEMFILTERTYPE16)) </OnMouseEnter>
-                                                <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                                            </Texture>
-                                            <Texture name="$(parent)5Label" mouseEnabled="true" textureFile="/esoui/art/inventory/inventory_tabicon_craftbag_provisioning_up.dds">
-                                                <Dimensions x="38" y="38"/>
-                                                <Anchor point="TOPLEFT" relativeTo="$(parent)4Label" relativePoint="TOPLEFT" offsetX="40"/>
-                                                <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, TOP, GetString(SI_ITEMFILTERTYPE18)) </OnMouseEnter>
-                                                <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                                            </Texture>
+                                            <Label name="$(parent)Craft1" font="LeoAltholicSmallFont" color="C4C4A0" horizontalAlignment="CENTER">
+                                                <Anchor point="TOPLEFT" relativeTo="$(parent)Name" relativePoint="TOPRIGHT" offsetX="10" />
+                                                <Dimensions x="100" y="20" />
+                                                <OnInitialized>
+                                                    self:SetText(GetCraftingSkillName(1))
+                                                    self:SetModifyTextType(MODIFY_TEXT_TYPE_UPPERCASE)
+                                                </OnInitialized>
+                                            </Label>
+                                            <Label name="$(parent)Craft2" font="LeoAltholicSmallFont" color="C4C4A0" horizontalAlignment="CENTER">
+                                                <Anchor point="TOPLEFT" relativeTo="$(parent)Craft1" relativePoint="TOPRIGHT" offsetX="10" />
+                                                <Dimensions x="100" y="20" />
+                                                <OnInitialized>
+                                                    self:SetText(GetCraftingSkillName(2))
+                                                    self:SetModifyTextType(MODIFY_TEXT_TYPE_UPPERCASE)
+                                                </OnInitialized>
+                                            </Label>
+                                            <Label name="$(parent)Craft6" font="LeoAltholicSmallFont" color="C4C4A0" horizontalAlignment="CENTER">
+                                                <Anchor point="TOPLEFT" relativeTo="$(parent)Craft2" relativePoint="TOPRIGHT" offsetX="10" />
+                                                <Dimensions x="100" y="20" />
+                                                <OnInitialized>
+                                                    self:SetText(GetCraftingSkillName(6))
+                                                    self:SetModifyTextType(MODIFY_TEXT_TYPE_UPPERCASE)
+                                                </OnInitialized>
+                                            </Label>
+                                            <Label name="$(parent)Craft7" font="LeoAltholicSmallFont" color="C4C4A0" horizontalAlignment="CENTER">
+                                                <Anchor point="TOPLEFT" relativeTo="$(parent)Craft6" relativePoint="TOPRIGHT" offsetX="10" />
+                                                <Dimensions x="100" y="20" />
+                                                <OnInitialized>
+                                                    self:SetText(GetString(SI_ITEMFILTERTYPE25))
+                                                    self:SetModifyTextType(MODIFY_TEXT_TYPE_UPPERCASE)
+                                                </OnInitialized>
+                                            </Label>
+                                            <Label name="$(parent)Craft3" font="LeoAltholicSmallFont" color="C4C4A0" horizontalAlignment="CENTER">
+                                                <Anchor point="TOPLEFT" relativeTo="$(parent)Craft7" relativePoint="TOPRIGHT" offsetX="10" />
+                                                <Dimensions x="100" y="20" />
+                                                <OnInitialized>
+                                                    self:SetText(GetCraftingSkillName(3))
+                                                    self:SetModifyTextType(MODIFY_TEXT_TYPE_UPPERCASE)
+                                                </OnInitialized>
+                                            </Label>
+                                            <Label name="$(parent)Craft4" font="LeoAltholicSmallFont" color="C4C4A0" horizontalAlignment="CENTER">
+                                                <Anchor point="TOPLEFT" relativeTo="$(parent)Craft3" relativePoint="TOPRIGHT" offsetX="10" />
+                                                <Dimensions x="100" y="20" />
+                                                <OnInitialized>
+                                                    self:SetText(GetCraftingSkillName(4))
+                                                    self:SetModifyTextType(MODIFY_TEXT_TYPE_UPPERCASE)
+                                                </OnInitialized>
+                                            </Label>
+                                            <Label name="$(parent)Craft5" font="LeoAltholicSmallFont" color="C4C4A0" horizontalAlignment="CENTER">
+                                                <Anchor point="TOPLEFT" relativeTo="$(parent)Craft4" relativePoint="TOPRIGHT" offsetX="10" />
+                                                <Dimensions x="100" y="20" />
+                                                <OnInitialized>
+                                                    self:SetText(GetCraftingSkillName(5))
+                                                    self:SetModifyTextType(MODIFY_TEXT_TYPE_UPPERCASE)
+                                                </OnInitialized>
+                                            </Label>
                                         </Controls>
                                 </Control>
                                 <Control name="$(parent)List" inherits="ZO_ScrollList">
@@ -1084,48 +1100,34 @@
                     <Dimensions x="180" y="30"/>
                 </Label>

-                <Texture name="$(parent)Craft1Status" mouseEnabled="true">
-                    <Dimensions x="28" y="28"/>
+                <Label name="$(parent)Craft1Status" mouseEnabled="true" font="LeoAltholicLargeFont" verticalAlignment="CENTER" horizontalAlignment="LEFT" resizeToFitDescendents="false">
+                    <Dimensions x="100" y="28"/>
                     <Anchor point="TOPLEFT" relativeTo="$(parent)Name" relativePoint="TOPRIGHT" offsetX="10" offsetY="0"/>
-                    <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, RIGHT, self.data) </OnMouseEnter>
-                    <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                </Texture>
-                <Texture name="$(parent)Craft2Status" mouseEnabled="true">
-                    <Dimensions x="28" y="28"/>
+                </Label>
+                <Label name="$(parent)Craft2Status" mouseEnabled="true" font="LeoAltholicLargeFont" verticalAlignment="CENTER" horizontalAlignment="LEFT" resizeToFitDescendents="false">
+                    <Dimensions x="100" y="28"/>
                     <Anchor point="TOPLEFT" relativeTo="$(parent)Craft1Status" relativePoint="TOPRIGHT" offsetX="12"/>
-                    <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, RIGHT, self.data) </OnMouseEnter>
-                    <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                </Texture>
-                <Texture name="$(parent)Craft6Status" mouseEnabled="true">
-                    <Dimensions x="28" y="28"/>
+                </Label>
+                <Label name="$(parent)Craft6Status" mouseEnabled="true" font="LeoAltholicLargeFont" verticalAlignment="CENTER" horizontalAlignment="LEFT" resizeToFitDescendents="false">
+                    <Dimensions x="100" y="28"/>
                     <Anchor point="TOPLEFT" relativeTo="$(parent)Craft2Status" relativePoint="TOPRIGHT" offsetX="12"/>
-                    <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, RIGHT, self.data) </OnMouseEnter>
-                    <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                </Texture>
-                <Texture name="$(parent)Craft7Status" mouseEnabled="true">
-                    <Dimensions x="28" y="28"/>
+                </Label>
+                <Label name="$(parent)Craft7Status" mouseEnabled="true" font="LeoAltholicLargeFont" verticalAlignment="CENTER" horizontalAlignment="LEFT" resizeToFitDescendents="false">
+                    <Dimensions x="100" y="28"/>
                     <Anchor point="TOPLEFT" relativeTo="$(parent)Craft6Status" relativePoint="TOPRIGHT" offsetX="12"/>
-                    <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, RIGHT, self.data) </OnMouseEnter>
-                    <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                </Texture>
-                <Texture name="$(parent)Craft3Status" mouseEnabled="true">
-                    <Dimensions x="28" y="28"/>
+                </Label>
+                <Label name="$(parent)Craft3Status" mouseEnabled="true" font="LeoAltholicLargeFont" verticalAlignment="CENTER" horizontalAlignment="LEFT" resizeToFitDescendents="false">
+                    <Dimensions x="100" y="28"/>
                     <Anchor point="TOPLEFT" relativeTo="$(parent)Craft7Status" relativePoint="TOPRIGHT" offsetX="12"/>
-                    <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, RIGHT, self.data) </OnMouseEnter>
-                    <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                </Texture>
-                <Texture name="$(parent)Craft4Status" mouseEnabled="true">
-                    <Dimensions x="28" y="28"/>
+                </Label>
+                <Label name="$(parent)Craft4Status" mouseEnabled="true" font="LeoAltholicLargeFont" verticalAlignment="CENTER" horizontalAlignment="LEFT" resizeToFitDescendents="false">
+                    <Dimensions x="100" y="28"/>
                     <Anchor point="TOPLEFT" relativeTo="$(parent)Craft3Status" relativePoint="TOPRIGHT" offsetX="12"/>
-                    <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, RIGHT, self.data) </OnMouseEnter>
-                    <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                </Texture>
-                <Texture name="$(parent)Craft5Status" mouseEnabled="true">
-                    <Dimensions x="28" y="28"/>
+                </Label>
+                <Label name="$(parent)Craft5Status" mouseEnabled="true" font="LeoAltholicLargeFont" verticalAlignment="CENTER" horizontalAlignment="LEFT" resizeToFitDescendents="false">
+                    <Dimensions x="100" y="28"/>
                     <Anchor point="TOPLEFT" relativeTo="$(parent)Craft4Status" relativePoint="TOPRIGHT" offsetX="12"/>
-                    <OnMouseEnter> ZO_Tooltips_ShowTextTooltip(self, RIGHT, self.data) </OnMouseEnter>
-                    <OnMouseExit> ZO_Tooltips_HideTextTooltip() </OnMouseExit>
-                </Texture>
+                </Label>
             </Controls>
         </Control>

diff --git a/LeoAltholicInit.lua b/LeoAltholicInit.lua
index ebb938a..c84d26d 100644
--- a/LeoAltholicInit.lua
+++ b/LeoAltholicInit.lua
@@ -4,5 +4,5 @@ LeoAltholicUI = LeoAltholicUI or {}

 LeoAltholic.name = "LeoAltholic"
 LeoAltholic.displayName = "Leo's Altholic"
-LeoAltholic.version = "1.3.2"
+LeoAltholic.version = "1.3.3"
 LeoAltholic.chatPrefix = "|c39B027" .. LeoAltholic.name .. "|r: "
diff --git a/LeoAltholicUI.lua b/LeoAltholicUI.lua
index 89e227e..3f8e7c3 100644
--- a/LeoAltholicUI.lua
+++ b/LeoAltholicUI.lua
@@ -9,6 +9,14 @@ function LeoAltholic:OnWindowMoveStop()
     }
 end

+function LeoAltholicUI:OnHide(control, hidden)
+    if hidden then LeoAltholic.HideUI() end
+end
+
+function LeoAltholicUI:OnShow(control, hidden)
+    if not hidden then LeoAltholic.ShowUI() end
+end
+
 function LeoAltholic:isHidden()
     return LeoAltholic.hidden
 end
@@ -29,7 +37,6 @@ end
 function LeoAltholic.ShowInventoryUI(charName, bagId)
     LeoAltholic.listingInventoryFor = charName
     SCENE_MANAGER:ShowTopLevel(LeoAltholicInventoryWindow)
-    LeoAltholicInventoryWindow:SetHidden(false)
     local char = LeoAltholic.GetCharByName(charName)
     local sc = WINDOW_MANAGER:GetControlByName("LeoAltholicInventoryWindowListScrollChild")
     sc:SetHidden(false)
@@ -70,30 +77,24 @@ end

 function LeoAltholic.HideInventoryUI()
     SCENE_MANAGER:HideTopLevel(LeoAltholicInventoryWindow)
-    LeoAltholicInventoryWindow:SetHidden(true)
+end
+
+function LeoAltholic.CloseUI()
+    SCENE_MANAGER:HideTopLevel(LeoAltholicWindow)
 end

 function LeoAltholic.ShowUI()
-    SCENE_MANAGER:ShowTopLevel(LeoAltholicWindow)
-    LeoAltholicWindow:SetHidden(false)
     LeoAltholic.hidden = false;
     LeoAltholic.ShowTab(LeoAltholic.savedVariables.activeTab or "Bio")
 end

 function LeoAltholic.HideUI()
-    SCENE_MANAGER:HideTopLevel(LeoAltholicWindow)
-    LeoAltholicWindow:SetHidden(true)
-    LeoAltholic.HideInventoryUI()
     LeoAltholic.hidden = true;
+    LeoAltholic.HideInventoryUI()
 end

 function LeoAltholic.ToggleUI()
     SCENE_MANAGER:ToggleTopLevel(LeoAltholicWindow)
-    if LeoAltholic:isHidden() then
-        LeoAltholic.ShowUI()
-    else
-        LeoAltholic.HideUI()
-    end
 end

 function LeoAltholic.ShowTab(tab)
@@ -108,7 +109,20 @@ function LeoAltholic.ShowTab(tab)
     control:SetHidden(false)
 end

-function LeoAltholic.GetTime(seconds)
+function LeoAltholic.GetTime(seconds, short)
+    if short == nil then short = false end
+    local formats = {
+        day = SI_TIME_FORMAT_DDHHMM_DESC_SHORT,
+        hour = SI_TIME_FORMAT_HHMMSS_DESC_SHORT,
+        minute = SI_TIME_FORMAT_MMSS_DESC_SHORT,
+    }
+    if short then
+        formats = {
+            day = SI_TIME_FORMAT_DDHH_DESC_SHORT,
+            hour = SI_TIME_FORMAT_HHMM_DESC_SHORT,
+            minute = SI_TIME_FORMAT_MMSS_DESC_SHORT,
+        }
+    end
     if seconds and seconds > 0 then
         local ss = seconds % 60
         local mm = math.floor(seconds / 60)
@@ -116,22 +130,14 @@ function LeoAltholic.GetTime(seconds)
         mm = mm % 60
         local dn = math.floor(hh / 24)
         local result = ''
-        if dn > 0 then result = tostring(dn) .. GetString(LEOALT_D) .." " .. tostring (hh - (dn*24)) .. GetString(LEOALT_H)
-        elseif hh > 0 then result = tostring (hh) .. GetString(LEOALT_H) .." " .. tostring (mm) .. GetString(LEOALT_M)
-        elseif mm > 0 then result = mm .. GetString(LEOALT_M) .." " .. ss .. GetString(LEOALT_S)
+        if dn > 0 then result = zo_strformat(GetString(formats.day), dn, hh - (dn*24), mm)
+        elseif hh > 0 then result = zo_strformat(GetString(formats.hour), hh, mm, ss)
+        elseif mm > 0 then result = zo_strformat(GetString(formats.minute), mm, ss)
         end
         return result
     else return '|cFF4020'..GetString(LEOALT_FINISHED)..'|r' end
 end

-local function formatNumber(amount)
-    if amount == nil then return nil; end
-    if type(amount) == "string" then amount = tonumber( amount ) end
-    if type(amount) ~= "number" then return amount; end
-    if amount < 1000 then return amount; end
-    return FormatIntegerWithDigitGrouping( amount, GetString( SI_DIGIT_GROUP_SEPARATOR ) )
-end
-
 function LeoAltholicUI.InitPanels()
     LeoAltholicUI.bioList = LeoAltholicBioList:New(LeoAltholicWindowBioPanelListScroll)
     LeoAltholicUI.bioList:RefreshData()
@@ -159,167 +165,3 @@ function LeoAltholicUI.InitPanels()

     LeoAltholicUI.InitTrackedPanel()
 end
-
-function LeoAltholic.DisplayCharacterFrames()
-    local control
-    for _,panel in ipairs(LeoAltholic.panelList) do
-        if panel ~= "Writs" then
-            control = WINDOW_MANAGER:GetControlByName('LeoAltholicWindow' .. panel .. 'PanelScrollChild')
-            control:SetHeight(#LeoAltholic.GetCharacters() * 109)
-        end
-    end
-    control = WINDOW_MANAGER:GetControlByName('LeoAltholicWindowTrackedPanelScrollChild')
-    control:SetHeight(#LeoAltholic.GetCharacters() * 169)
-    control = WINDOW_MANAGER:GetControlByName('LeoAltholicWindowResearchPanelScrollChild')
-    control:SetHeight(#LeoAltholic.GetCharacters() * 262)
-    control = WINDOW_MANAGER:GetControlByName('LeoAltholicWindowSkillsPanelScrollChild')
-    control:SetHeight(#LeoAltholic.GetCharacters() * 522)
-
-    for x,char in pairs(LeoAltholic.GetCharacters()) do
-
-        for _,panel in ipairs(LeoAltholic.panelList) do
-            local row = WINDOW_MANAGER:GetControlByName('LeoAltholic' .. panel .. 'Row'..x)
-
-            control = row:GetNamedChild("Name")
-            control:SetText(char.bio.name)
-
-            if panel ~= "Writs" then
-                control = row:GetNamedChild("Alliance")
-                local icon = ZO_GetAllianceIcon(char.bio.alliance.id)
-                control:SetText("|cF1FF77|t50:90:" .. icon .. "|t|r ")
-                control.data = char.bio.alliance.name
-
-                control = row:GetNamedChild("RaceClass")
-                control:SetText(char.bio.race .. " " .. char.bio.class)
-            end
-        end
-
-        if char.quests ~= nil and char.quests.tracked ~= nil then
-            row = WINDOW_MANAGER:GetControlByName('LeoAltholicTrackedRow'..x)
-            for i = 1, 10 do
-                if char.quests.tracked[i] ~= nil then
-                    local label = row:GetNamedChild("Quest" .. i .. "Label")
-                    local done = row:GetNamedChild("Quest" .. i .. "Done")
-                    label:SetText(char.quests.tracked[i].name)
-                    label:SetHandler('OnMouseUp', function(control, button, upInside)
-                        if upInside == true and button == MOUSE_BUTTON_INDEX_RIGHT then
-                            LeoAltholic.log(zo_strformat(GetString(LEOALT_REMOVED_FROM), label:GetText(), char.bio.name))
-                            table.remove(LeoAltholic.savedVariables.CharList[char.bio.name].quests.tracked, i)
-                            control:SetHidden(true)
-                            control:GetParent():GetNamedChild("Quest" .. i .. "Done"):SetHidden(true)
-                        end
-                    end)
-                    if char.quests.tracked[i].lastDone ~= nil then
-                        if char.quests.tracked[i].lastDone <= LeoAltholic.TodayReset() then
-                            done:SetText("|cCB110Enot done today|r")
-                        else
-                            local diff = GetTimeStamp() - char.quests.tracked[i].lastDone
-                            if diff < 3600 then
-                                done:SetText(zo_strformat(GetString(LEOALT_MINUTES_AGO),  math.floor(diff / 60)))
-                            elseif diff < 86400 then
-                                done:SetText(zo_strformat(GetString(LEOALT_HOURS_AGO),  math.floor(diff / 3600)))
-                            else
-                                done:SetText(zo_strformat(GetString(LEOALT_DAYS_AGO),  math.floor(diff / 86400)))
-                            end
-                        end
-                    else
-                        done:SetText("|cCB110E"..GetString(LEOALT_NOT_DONE_TODAY).."|r")
-                    end
-                end
-            end
-        end
-
-        row = WINDOW_MANAGER:GetControlByName('LeoAltholicInventoryRow'..x)
-        local color = '|c21A121'
-        if char.inventory.free <= 25 then color = '|c596cfd' end
-        if char.inventory.free <= 10 then color = '|cCB110E' end
-        control = row:GetNamedChild("Bag")
-        control:SetText(color .. char.inventory.used .. "|r / " .. char.inventory.size)
-        control = row:GetNamedChild("SoulGems")
-        control:SetText("|c21A121" .. char.inventory.soulGemFilled .. '|r / ' .. char.inventory.soulGemEmpty)
-        control = row:GetNamedChild("Gold")
-        control:SetText(formatNumber(char.inventory.gold))
-        control = row:GetNamedChild("AP")
-        control:SetText(formatNumber(char.inventory.ap))
-        control = row:GetNamedChild("TelVar")
-        control:SetText(formatNumber(char.inventory.telvar))
-        control = row:GetNamedChild("Writ")
-        control:SetText(formatNumber(char.inventory.writVoucher))
-
-        row = WINDOW_MANAGER:GetControlByName('LeoAltholicResearchRow'..x)
-        for _,craft in pairs(LeoAltholic.craftResearch) do
-            local i = 1
-            local researching = 0
-            for line = 1, GetNumSmithingResearchLines(craft) do
-                local lineName, lineIcon = GetSmithingResearchLineInfo(craft, line)
-                for trait = 1, LeoAltholic.maxTraits do
-                    local traitType = GetSmithingResearchLineTraitInfo(craft, line, trait)
-                    local traitName = GetString('SI_ITEMTRAITTYPE',traitType)
-                    local traitData = char.research[craft][line][trait]
-                    if type(traitData) == 'number' then
-                        control = row:GetNamedChild("Craft"..craft.."Label"..i)
-                        control:SetText(' |t28:28:'..lineIcon..'|t  ' .. traitName)
-                        control:SetHandler('OnMouseEnter', function(self) ZO_Tooltips_ShowTextTooltip(self, TOP, lineName) end)
-                        control:SetHandler("OnMouseExit", function () ZO_Tooltips_HideTextTooltip() end)
-                        control = row:GetNamedChild("Craft"..craft.."Timer"..i)
-                        control:SetText(LeoAltholic.GetTime(traitData - GetTimeStamp()))
-                        if traitData - GetTimeStamp() <= 3600 then
-                            control:SetColor(1, 1, 0, 1)
-                        else
-                            control:SetColor(1, 1, 1, 1)
-                        end
-                        i = i + 1
-                        if traitData - GetTimeStamp() > 0 then
-                            researching = researching + 1
-                        end
-                    end
-                end
-            end
-            control = row:GetNamedChild("Craft"..craft)
-            color = '|c21A121'
-            if researching < char.research[craft].max then
-                color = '|cCB110E'
-            end
-            control:SetText(color .. researching .. '/' .. char.research[craft].max .. '|r')
-        end
-
-    end
-end
-
-function LeoAltholic:OnUpdate()
-    if LeoAltholic:isHidden() then
-        return
-    end
-
-    local control
-    for x,char in pairs(LeoAltholic.GetCharacters()) do
-
-        local riding = '|t20:20:esoui/art/mounts/ridingskill_speed.dds|t ' .. char.attributes.riding.speed .. '%' ..
-                ' |t20:20:esoui/art/mounts/ridingskill_stamina.dds|t ' .. char.attributes.riding.stamina ..
-                ' |t20:20:esoui/art/mounts/ridingskill_capacity.dds|t ' .. char.attributes.riding.capacity ..
-                ' |t22:22:esoui/art/miscellaneous/timer_32.dds|t ' .. LeoAltholic.GetTime(char.attributes.riding.time - GetTimeStamp())
-        local row = WINDOW_MANAGER:GetControlByName('LeoAltholicBioRow'..x)
-        control = row:GetNamedChild('Riding')
-        control:SetText(riding)
-
-        row = WINDOW_MANAGER:GetControlByName('LeoAltholicResearchRow'..x)
-        for _,craft in pairs(LeoAltholic.craftResearch) do
-            local i = 1
-            for line = 1, GetNumSmithingResearchLines(craft) do
-                for trait = 1, LeoAltholic.maxTraits do
-                    local traitData = char.research[craft][line][trait]
-                    if type(traitData) == 'number' then
-                        control = row:GetNamedChild("Craft"..craft.."Timer"..i)
-                        control:SetText(LeoAltholic.GetTime(traitData - GetTimeStamp()))
-                        if traitData - GetTimeStamp() <= 3600 then
-                            control:SetColor(1, 1, 0, 1)
-                        else
-                            control:SetColor(1, 1, 1, 1)
-                        end
-                        i = i + 1
-                    end
-                end
-            end
-        end
-    end
-end
diff --git a/ui/bio.lua b/ui/bio.lua
index 0dd9fa4..b85e1bf 100644
--- a/ui/bio.lua
+++ b/ui/bio.lua
@@ -68,6 +68,7 @@ function LeoAltholicBioList:SetupEntry(control, data)
             ' |t20:20:esoui/art/mounts/ridingskill_capacity.dds|t ' .. data.riding.capacity ..
             ' |t22:22:esoui/art/miscellaneous/timer_32.dds|t ' .. LeoAltholic.GetTime(data.riding.time - GetTimeStamp())
     control.riding:SetText(riding)
+    control.riding.riding = data.riding

     ZO_SortFilterList.SetupRow(self, control, data)
 end
@@ -131,6 +132,18 @@ function LeoAltholicBioList:SortScrollList()
     end
 end

+function LeoAltholicUI:updateBio()
+    local control = LeoAltholicWindowBioPanelListScrollListContents
+    for i = 1, control:GetNumChildren() do
+        local child = control:GetChild(i):GetChild(8)
+        local riding = '|t20:20:esoui/art/mounts/ridingskill_speed.dds|t ' .. child.riding.speed .. '%' ..
+                ' |t20:20:esoui/art/mounts/ridingskill_stamina.dds|t ' .. child.riding.stamina ..
+                ' |t20:20:esoui/art/mounts/ridingskill_capacity.dds|t ' .. child.riding.capacity ..
+                ' |t22:22:esoui/art/miscellaneous/timer_32.dds|t ' .. LeoAltholic.GetTime(child.riding.time - GetTimeStamp(), true)
+        child:SetText(riding)
+    end
+end
+
 function LeoAltholicBioList:FilterScrollList()
     local scrollData = ZO_ScrollList_GetDataList(self.list)
     ZO_ClearNumericallyIndexedTable(scrollData)
diff --git a/ui/research.lua b/ui/research.lua
index 3a1bb2d..5ee0517 100644
--- a/ui/research.lua
+++ b/ui/research.lua
@@ -35,6 +35,7 @@ function LeoAltholicResearchList:SetupEntry(control, data)
         local researching = 0
         control.craft[craft] = GetControl(control, "Craft" .. craft)
         local lowest = -1
+        local lowestTraitData = 0
         local list = {}
         for line = 1, GetNumSmithingResearchLines(craft) do
             local lineName, lineIcon = GetSmithingResearchLineInfo(craft, line)
@@ -46,6 +47,7 @@ function LeoAltholicResearchList:SetupEntry(control, data)
                     local diff = traitData - GetTimeStamp()
                     if lowest == -1 or diff < lowest then
                         lowest = diff
+                        lowestTraitData = traitData
                     end
                     table.insert(list, {
                         craft = craft,
@@ -54,7 +56,8 @@ function LeoAltholicResearchList:SetupEntry(control, data)
                         lineName = lineName,
                         lineIcon = lineIcon,
                         traitName = traitName,
-                        timer = LeoAltholic.GetTime(diff)
+                        timer = LeoAltholic.GetTime(diff),
+                        traitData = traitData
                     })
                     i = i + 1
                     if traitData - GetTimeStamp() > 0 then
@@ -78,6 +81,13 @@ function LeoAltholicResearchList:SetupEntry(control, data)
         end
         control.craft[craft]:SetText(output)
         control.craft[craft].list = list
+        control.craft[craft].timerData = {
+            researching = researching,
+            max = data.research[craft].max,
+            lowest = lowest,
+            showLowest = #list > 0,
+            lowestTraitData = lowestTraitData
+        }
     end

     ZO_SortFilterList.SetupRow(self, control, data)
@@ -156,3 +166,25 @@ function LeoAltholicUI.TooltipResearch(control, visible)
         InformationTooltip:SetHidden(true)
     end
 end
+
+function LeoAltholicUI:updateResearch()
+    local control = LeoAltholicWindowResearchPanelListScrollListContents
+    for i = 1, control:GetNumChildren() do
+        for j = 2, 5 do
+            local child = control:GetChild(i):GetChild(j)
+            local color = '|c21A121'
+            if child.timerData.researching < child.timerData.max then
+                color = '|cCB110E'
+            end
+            local output = color .. child.timerData.researching .. '/' .. child.timerData.max .. '|r'
+            color = '|cFFFFFF'
+            if child.timerData.lowest <= 3600 then
+                color = '|cFFFF00'
+            end
+            if child.timerData.showLowest then
+                output = output .. " " .. color..LeoAltholic.GetTime(child.timerData.lowestTraitData - GetTimeStamp()) .. '|r'
+            end
+            child:SetText(output)
+        end
+    end
+end
diff --git a/ui/tracked.lua b/ui/tracked.lua
index c00fbf1..51316b2 100644
--- a/ui/tracked.lua
+++ b/ui/tracked.lua
@@ -63,11 +63,11 @@ function LeoAltholicUI.InitTrackedPanel()
                             else
                                 local diff = GetTimeStamp() - char.quests.tracked[i].lastDone
                                 if diff < 3600 then
-                                    done:SetText(zo_strformat(GetString(LEOALT_MINUTES_AGO),  math.floor(diff / 60)))
+                                    child.data = zo_strformat(GetString(SI_TIME_DURATION_AGO), zo_strformat(GetString(SI_TIME_FORMAT_MINUTES_DESC), math.floor(diff / 60)))
                                 elseif diff < 86400 then
-                                    done:SetText(zo_strformat(GetString(LEOALT_HOURS_AGO),  math.floor(diff / 3600)))
+                                    child.data = zo_strformat(GetString(SI_TIME_DURATION_AGO), zo_strformat(GetString(SI_TIME_FORMAT_HOURS_DESC), math.floor(diff / 3600)))
                                 else
-                                    done:SetText(zo_strformat(GetString(LEOALT_DAYS_AGO),  math.floor(diff / 86400)))
+                                    child.data = zo_strformat(GetString(SI_TIME_DURATION_AGO), zo_strformat(GetString(SI_TIME_FORMAT_DAYS_DESC), math.floor(diff / 86400)))
                                 end
                             end
                         else
diff --git a/ui/writs.lua b/ui/writs.lua
index 82d814c..d93cf8a 100644
--- a/ui/writs.lua
+++ b/ui/writs.lua
@@ -33,11 +33,11 @@ function LeoAltholicWritsList:SetupEntry(control, data)
     for _, craft in pairs({CRAFTING_TYPE_ALCHEMY,CRAFTING_TYPE_BLACKSMITHING,CRAFTING_TYPE_CLOTHIER,CRAFTING_TYPE_ENCHANTING,CRAFTING_TYPE_JEWELRYCRAFTING,CRAFTING_TYPE_PROVISIONING,CRAFTING_TYPE_WOODWORKING}) do
         child = GetControl(control, "Craft"..craft.."Status")
         local shown = false
-        child:SetTexture("esoui/art/tutorial/menubar_help_up.dds")
-        child:SetColor(unpack({1,1,1,1}))
-        child.data = ""
+        local icon = "esoui/art/tutorial/menubar_help_up.dds"
+        local color = {1,1,1,1}
+        local ago = ""
         if data.writs[craft] ~= nil then
-            local color = {1,0,0,1}
+            color = {1,0,0,1}
             if
             (craft == CRAFTING_TYPE_ALCHEMY and string.find(zo_strformat("<<z:1>>",data.writs[craft].name), zo_strformat("<<z:1>>",GetString(LEOALT_ALCHEMIST)))) or
                     (craft == CRAFTING_TYPE_BLACKSMITHING and string.find(zo_strformat("<<z:1>>",data.writs[craft].name), zo_strformat("<<z:1>>",GetString(LEOALT_BLACKSMITH)))) or
@@ -49,28 +49,30 @@ function LeoAltholicWritsList:SetupEntry(control, data)
                 if data.writs[craft].lastDone ~= nil and data.writs[craft].lastDone > LeoAltholic.TodayReset() then
                     color = {0,1,0,1}
                 end
-                child:SetTexture("esoui/art/buttons/accept_up.dds")
-                child:SetColor(unpack(color))
+                icon = "esoui/art/buttons/accept_up.dds"
+                --child:SetColor(unpack(color))
                 if data.writs[craft].lastDone ~= nil then
                     local diff = GetTimeStamp() - data.writs[craft].lastDone
                     if diff < 3600 then
-                        child.data = zo_strformat(GetString(LEOALT_MINUTES_AGO),  math.floor(diff / 60))
+                        ago = zo_strformat(GetString(SI_TIME_DURATION_AGO), zo_strformat(GetString(SI_TIME_FORMAT_MINUTES), math.floor(diff / 60)))
                     elseif diff < 86400 then
-                        child.data = zo_strformat(GetString(LEOALT_HOURS_AGO),  math.floor(diff / 3600))
+                        ago = zo_strformat(GetString(SI_TIME_DURATION_AGO), zo_strformat(GetString(SI_TIME_FORMAT_HOURS), math.floor(diff / 3600)))
                     else
-                        child.data = zo_strformat(GetString(LEOALT_DAYS_AGO),  math.floor(diff / 86400))
+                        ago = zo_strformat(GetString(SI_TIME_DURATION_AGO), zo_strformat(GetString(SI_TIME_FORMAT_DAYS), math.floor(diff / 86400)))
                     end
                 else
-                    child.data = "|cCB110E"..GetString(LEOALT_NOT_DONE_TODAY).."|r"
+                    ago  = "|cCB110E"..GetString(SI_STR_TIME_UNKNOWN).."|r"
                 end
                 shown = true
             end
         end
         if shown == false then
-            child:SetTexture("esoui/art/tutorial/menubar_help_up.dds")
-            child:SetColor(unpack({1,1,1,1}))
-            child.data = ""
+            icon = "esoui/art/tutorial/menubar_help_up.dds"
+            color = {1,1,1,1}
+            ago = ""
         end
+        child:SetText("|t24:24:"..icon.."|t ".. ago)
+        child:SetColor(unpack(color))
     end

     ZO_SortFilterList.SetupRow(self, control, data)
@@ -116,56 +118,3 @@ function LeoAltholicWritsList:FilterScrollList()
         table.insert(scrollData, ZO_ScrollList_CreateDataEntry(1, data))
     end
 end
-
-
-
-function LeoAltholicUI.InitWritsPanel()
-    local charList = LeoAltholic.ExportCharacters()
-    local control
-    local anchorY = 40;
-    for x,char in pairs(charList) do
-
-        for _, craft in pairs({CRAFTING_TYPE_ALCHEMY,CRAFTING_TYPE_BLACKSMITHING,CRAFTING_TYPE_CLOTHIER,CRAFTING_TYPE_ENCHANTING,CRAFTING_TYPE_JEWELRYCRAFTING,CRAFTING_TYPE_PROVISIONING,CRAFTING_TYPE_WOODWORKING}) do
-            control = row:GetNamedChild("Craft"..craft.."Status")
-            local shown = false
-            control:SetTexture("esoui/art/tutorial/menubar_help_up.dds")
-            control:SetColor(unpack({1,1,1,1}))
-            control.data = ""
-            if char.quests ~= nil and char.quests.writs ~= nil and char.quests.writs[craft] ~= nil then
-                local color = {1,0,0,1}
-                if
-                (craft == CRAFTING_TYPE_ALCHEMY and string.find(zo_strformat("<<z:1>>",char.quests.writs[craft].name), zo_strformat("<<z:1>>",GetString(LEOALT_ALCHEMIST)))) or
-                        (craft == CRAFTING_TYPE_BLACKSMITHING and string.find(zo_strformat("<<z:1>>",char.quests.writs[craft].name), zo_strformat("<<z:1>>",GetString(LEOALT_BLACKSMITH)))) or
-                        (craft == CRAFTING_TYPE_CLOTHIER and string.find(zo_strformat("<<z:1>>",char.quests.writs[craft].name), zo_strformat("<<z:1>>",GetString(LEOALT_CLOTHIER)))) or
-                        (craft == CRAFTING_TYPE_ENCHANTING and string.find(zo_strformat("<<z:1>>",char.quests.writs[craft].name), zo_strformat("<<z:1>>",GetString(LEOALT_ENCHANTER)))) or
-                        (craft == CRAFTING_TYPE_JEWELRYCRAFTING and string.find(zo_strformat("<<z:1>>",char.quests.writs[craft].name), zo_strformat("<<z:1>>",GetString(LEOALT_JEWELRY)))) or
-                        (craft == CRAFTING_TYPE_PROVISIONING and string.find(zo_strformat("<<z:1>>",char.quests.writs[craft].name), zo_strformat("<<z:1>>",GetString(LEOALT_PROVISIONER)))) or
-                        (craft == CRAFTING_TYPE_WOODWORKING and string.find(zo_strformat("<<z:1>>",char.quests.writs[craft].name), zo_strformat("<<z:1>>",GetString(LEOALT_WOODWORKER)))) then
-                    if char.quests.writs[craft].lastDone ~= nil and char.quests.writs[craft].lastDone > LeoAltholic.TodayReset() then
-                        color = {0,1,0,1}
-                    end
-                    control:SetTexture("esoui/art/buttons/accept_up.dds")
-                    control:SetColor(unpack(color))
-                    if char.quests.writs[craft].lastDone ~= nil then
-                        local diff = GetTimeStamp() - char.quests.writs[craft].lastDone
-                        if diff < 3600 then
-                            control.data = zo_strformat(GetString(LEOALT_MINUTES_AGO),  math.floor(diff / 60))
-                        elseif diff < 86400 then
-                            control.data = zo_strformat(GetString(LEOALT_HOURS_AGO),  math.floor(diff / 3600))
-                        else
-                            control.data = zo_strformat(GetString(LEOALT_DAYS_AGO),  math.floor(diff / 86400))
-                        end
-                    else
-                        control.data = "|cCB110E"..GetString(LEOALT_NOT_DONE_TODAY).."|r"
-                    end
-                    shown = true
-                end
-            end
-            if shown == false then
-                control:SetTexture("esoui/art/tutorial/menubar_help_up.dds")
-                control:SetColor(unpack({1,1,1,1}))
-                control.data = ""
-            end
-        end
-    end
-end