diff --git a/esoui/ingame/lfg/activitytracker.lua b/esoui/ingame/lfg/activitytracker.lua
new file mode 100644
index 0000000..df60b2e
--- /dev/null
+++ b/esoui/ingame/lfg/activitytracker.lua
@@ -0,0 +1,121 @@
+local KEYBOARD_STYLE =
+{
+ FONT_HEADER = "ZoFontGameShadow",
+ FONT_STATUS = "ZoFontGameShadow",
+ TEXT_TYPE_HEADER = MODIFY_TEXT_TYPE_NONE,
+
+ HEADER_PRIMARY_ANCHOR_OFFSET_Y = 10,
+ STATUS_PRIMARY_ANCHOR_OFFSET_Y = 2,
+}
+
+local GAMEPAD_STYLE =
+{
+ FONT_HEADER = "ZoFontGamepadBold27",
+ FONT_STATUS = "ZoFontGamepad34",
+ TEXT_TYPE_HEADER = MODIFY_TEXT_TYPE_UPPERCASE,
+
+ HEADER_PRIMARY_ANCHOR_OFFSET_Y = 20,
+ STATUS_PRIMARY_ANCHOR_OFFSET_Y = 16,
+}
+
+local HEADER_MAPPING =
+{
+ [LFG_ACTIVITY_DUNGEON] = GetString(SI_ACTIVITY_FINDER_CATEGORY_DUNGEON_FINDER),
+ [LFG_ACTIVITY_MASTER_DUNGEON] = GetString(SI_ACTIVITY_FINDER_CATEGORY_DUNGEON_FINDER),
+ [LFG_ACTIVITY_AVA] = GetString(SI_ACTIVITY_FINDER_CATEGORY_ALLIANCE_WAR),
+}
+
+------------------
+--Initialization--
+------------------
+
+local ActivityTracker = ZO_Object:Subclass()
+
+function ActivityTracker:New(...)
+ local tracker = ZO_Object.New(self)
+ tracker:Initialize(...)
+ return tracker
+end
+
+function ActivityTracker:Initialize(control)
+ self.control = control
+ control.owner = self
+
+ local container = control:GetNamedChild("Container")
+ self.headerLabel = container:GetNamedChild("Header")
+ self.statusLabel = container:GetNamedChild("Status")
+
+ local allConstants = { KEYBOARD_STYLE, GAMEPAD_STYLE }
+ for _, constants in ipairs(allConstants) do
+ constants.HEADER_PRIMARY_ANCHOR = ZO_Anchor:New(TOPRIGHT, container, TOPRIGHT, 0, constants.HEADER_PRIMARY_ANCHOR_OFFSET_Y)
+ constants.STATUS_PRIMARY_ANCHOR = ZO_Anchor:New(TOPRIGHT, self.headerLabel, BOTTOMRIGHT, 0, constants.STATUS_PRIMARY_ANCHOR_OFFSET_Y)
+ end
+
+ local questTrackerContainerControl = GetControl("ZO_FocusedQuestTrackerPanelContainerQuestContainer")
+ KEYBOARD_STYLE.HEADER_SECONDARY_ANCHOR = ZO_Anchor:New(TOPLEFT, questTrackerContainerControl, BOTTOMLEFT, 0, 10)
+ KEYBOARD_STYLE.STATUS_SECONDARY_ANCHOR = ZO_Anchor:New(TOPLEFT, self.headerLabel, BOTTOMLEFT, 10, 2)
+
+ ZO_PlatformStyle:New(function(style) self:ApplyPlatformStyle(style) end, KEYBOARD_STYLE, GAMEPAD_STYLE)
+
+ self.container = container
+
+ ACTIVITY_TRACKER_FRAGMENT = ZO_HUDFadeSceneFragment:New(control)
+
+ self:RegisterEvents()
+end
+
+function ActivityTracker:RegisterEvents()
+ local function Update()
+ self:Update()
+ end
+
+ ZO_ACTIVITY_FINDER_ROOT_MANAGER:RegisterCallback("OnGroupingToolsStatusUpdate", Update)
+ self.control:RegisterForEvent(EVENT_GROUPING_TOOLS_LFG_JOINED, Update)
+ self.control:RegisterForEvent(EVENT_GROUPING_TOOLS_NO_LONGER_LFG, Update)
+ self.control:RegisterForEvent(EVENT_PLAYER_ACTIVATED, Update)
+end
+
+do
+ local IN_PROGRESS_TEXT = GetString(SI_ACTIVITY_TRACKER_STATUS_IN_PROGRESS)
+ local QUEUED_TEXT = GetString(SI_LFG_QUEUE_STATUS_QUEUED)
+ function ActivityTracker:Update()
+ local activityType
+ if IsInLFGGroup() then
+ activityType = GetCurrentLFGActivity()
+ self.statusLabel:SetText(GetString(SI_ACTIVITY_TRACKER_STATUS_IN_PROGRESS))
+ elseif IsCurrentlySearchingForGroup() then
+ activityType = GetLFGRequestInfo(1)
+ self.statusLabel:SetText(GetString(SI_LFG_QUEUE_STATUS_QUEUED))
+ end
+ if activityType then
+ self.headerLabel:SetText(HEADER_MAPPING[activityType])
+ end
+ self.container:SetHidden(activityType == nil)
+ self.activityType = activityType
+ end
+end
+
+function ActivityTracker:ApplyPlatformStyle(style)
+ self.headerLabel:SetModifyTextType(style.TEXT_TYPE_HEADER)
+ self.headerLabel:SetFont(style.FONT_HEADER)
+ if self.activityType then
+ self.headerLabel:SetText(HEADER_MAPPING[self.activityType])
+ end
+ self.statusLabel:SetFont(style.FONT_STATUS)
+
+ self.headerLabel:ClearAnchors()
+ style.HEADER_PRIMARY_ANCHOR:AddToControl(self.headerLabel)
+ if style.HEADER_SECONDARY_ANCHOR then
+ style.HEADER_SECONDARY_ANCHOR:AddToControl(self.headerLabel)
+ end
+
+ self.statusLabel:ClearAnchors()
+ style.STATUS_PRIMARY_ANCHOR:AddToControl(self.statusLabel)
+ if style.STATUS_SECONDARY_ANCHOR then
+ style.STATUS_SECONDARY_ANCHOR:AddToControl(self.statusLabel)
+ end
+end
+
+function ZO_ActivityTracker_OnInitialized(control)
+ ACTIVITY_TRACKER = ActivityTracker:New(control)
+end
\ No newline at end of file