diff --git a/esoui/ingame/lfg/gamepad/zo_activityqueuedata_gamepad.lua b/esoui/ingame/lfg/gamepad/zo_activityqueuedata_gamepad.lua
new file mode 100644
index 0000000..a18e883
--- /dev/null
+++ b/esoui/ingame/lfg/gamepad/zo_activityqueuedata_gamepad.lua
@@ -0,0 +1,109 @@
+local ActivityQueueData_Gamepad = ZO_Object:Subclass()
+
+function ActivityQueueData_Gamepad:New(...)
+    local manager = ZO_Object.New(self)
+    manager:Initialize(...)
+    return manager
+end
+
+function ActivityQueueData_Gamepad:Initialize(control)
+    GAMEPAD_ACTIVITY_QUEUE_DATA_FRAGMENT = ZO_FadeSceneFragment:New(control)
+    GAMEPAD_ACTIVITY_QUEUE_DATA_FRAGMENT:RegisterCallback("StateChange",
+        function(oldState, newState)
+            if newState == SCENE_FRAGMENT_SHOWING then
+                self:RefreshQueuedStatus(IsCurrentlySearchingForGroup())
+            end
+        end
+    )
+
+    local function OnGroupingToolsStatusUpdate(event, isSearching)
+        if self:IsShowing() then
+            self:RefreshQueuedStatus(isSearching)
+        end
+    end
+
+    local lastUpdateS = 0
+    local function OnUpdate(control, currentFrameTimeSeconds)
+        if currentFrameTimeSeconds - lastUpdateS > 1 then
+            self:Update()
+            lastUpdateS = currentFrameTimeSeconds
+        end
+    end
+
+    control:RegisterForEvent(EVENT_GROUPING_TOOLS_STATUS_UPDATE, OnGroupingToolsStatusUpdate)
+    control:SetHandler("OnUpdate", OnUpdate)
+
+    self.footerData = { }
+end
+
+do
+    local STATUS_HEADER_TEXT = GetString(SI_LFG_QUEUE_STATUS)
+    local STATUS_QUEUED_TEXT = GetString(SI_LFG_QUEUE_STATUS_QUEUED)
+    local STATUS_NOT_QUEUED_TEXT = GetString(SI_LFG_QUEUE_STATUS_NOT_QUEUED)
+    local ESTIMATED_HEADER_TEXT = GetString(SI_GAMEPAD_LFG_QUEUE_ESTIMATED)
+    local ACTUAL_HEADER_TEXT = GetString(SI_GAMEPAD_LFG_QUEUE_ACTUAL)
+
+    function ActivityQueueData_Gamepad:RefreshQueuedStatus(isSearching)
+        self.isSearching = isSearching
+
+        local footerData = self.footerData
+        footerData.data3ShowLoading = isSearching
+
+        if isSearching then
+            footerData.data1HeaderText = ACTUAL_HEADER_TEXT
+            self:Update()
+        else
+            footerData.data1HeaderText = STATUS_HEADER_TEXT
+            footerData.data1Text = STATUS_NOT_QUEUED_TEXT
+            footerData.data2HeaderText = nil
+            footerData.data2Text = nil
+            footerData.data3HeaderText = nil
+            footerData.data3Text = nil
+            if self:IsShowing() then
+                GAMEPAD_GENERIC_FOOTER:Refresh(GAMEPAD_ACTIVITY_QUEUE_DATA:GetFooterData())
+            end
+        end
+
+        if self:IsShowing() then
+            CALLBACK_MANAGER:FireCallbacks("OnGroupStatusChange")
+        end
+    end
+
+    function ActivityQueueData_Gamepad:Update()
+        if self.isSearching then
+            local footerData = self.footerData
+            local searchStartTimeMs, searchEstimatedCompletionTimeMs = GetLFGSearchTimes()
+
+            local timeSinceSearchStartMs = GetFrameTimeMilliseconds() - searchStartTimeMs
+            local textStartTime = ZO_FormatTimeMilliseconds(timeSinceSearchStartMs, TIME_FORMAT_STYLE_COLONS, TIME_FORMAT_PRECISION_TWELVE_HOUR)
+            footerData.data1Text = textStartTime
+
+            if searchEstimatedCompletionTimeMs > 0 then
+                local textEstimatedTime = ZO_GetSimplifiedTimeEstimateText(searchEstimatedCompletionTimeMs)
+                footerData.data2HeaderText = ESTIMATED_HEADER_TEXT
+                footerData.data2Text = textEstimatedTime
+                footerData.data3HeaderText = STATUS_HEADER_TEXT
+                footerData.data3Text = STATUS_QUEUED_TEXT
+            else
+                footerData.data2HeaderText = STATUS_HEADER_TEXT
+                footerData.data2Text = STATUS_QUEUED_TEXT
+                footerData.data3HeaderText = nil
+                footerData.data3Text = nil
+            end
+
+            GAMEPAD_GENERIC_FOOTER:Refresh(GAMEPAD_ACTIVITY_QUEUE_DATA:GetFooterData())
+        end
+    end
+end
+
+function ActivityQueueData_Gamepad:IsShowing()
+    return GAMEPAD_ACTIVITY_QUEUE_DATA_FRAGMENT:IsShowing()
+end
+
+function ActivityQueueData_Gamepad:GetFooterData()
+    return self.footerData
+end
+
+function ZO_ActivityQueueDataGamepad_OnInitialized(self)
+    GAMEPAD_ACTIVITY_QUEUE_DATA = ActivityQueueData_Gamepad:New(self)
+end
\ No newline at end of file