diff --git a/esoui/ingame/lfg/searchingforgroup.lua b/esoui/ingame/lfg/searchingforgroup.lua
new file mode 100644
index 0000000..36b6d08
--- /dev/null
+++ b/esoui/ingame/lfg/searchingforgroup.lua
@@ -0,0 +1,93 @@
+local SearchingForGroupManager = ZO_Object:Subclass()
+
+function SearchingForGroupManager:New(...)
+    local manager = ZO_Object.New(self)
+    manager:Initialize(...)
+    return manager
+end
+
+function SearchingForGroupManager:Initialize(control)
+    self.control = control
+    self.leaveQueueButton = control:GetNamedChild("LeaveQueueButton")
+    
+    self.statusLabel = control:GetNamedChild("Status")
+    self.estimatedTimeLabel = control:GetNamedChild("EstimatedTime")
+    self.actualTimeLabel = control:GetNamedChild("ActualTime")
+
+    self.searching = IsCurrentlySearchingForGroup()
+    self:Update()
+
+    local function OnGroupingToolsStatusUpdate(searching)
+        if self.searching ~= searching then
+            self.searching = searching
+            self:Update()
+
+            if searching then
+                PlaySound(SOUNDS.LFG_SEARCH_STARTED)
+            else
+                PlaySound(SOUNDS.LFG_SEARCH_FINISHED)
+            end
+        end
+    end
+
+    local function OnPlayerActivated()
+        OnGroupingToolsStatusUpdate(IsCurrentlySearchingForGroup())
+    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, function(event, ...) OnGroupingToolsStatusUpdate(...) end)
+    control:RegisterForEvent(EVENT_PLAYER_ACTIVATED, function(event, ...) OnPlayerActivated(...) end)
+    control:SetHandler("OnUpdate", OnUpdate)
+end
+
+do
+    local STATUS_HEADER_TEXT = GetString(SI_LFG_QUEUE_STATUS)
+    local ESTIMATED_HEADER_TEXT = GetString(SI_GAMEPAD_LFG_QUEUE_ESTIMATED)
+    local ACTUAL_HEADER_TEXT = GetString(SI_GAMEPAD_LFG_QUEUE_ACTUAL)
+    local NO_ICON = ""
+    local LOADING_ICON = zo_iconFormat(ZO_TIMER_ICON_32, 24, 24)
+    local STATUS_QUEUED_TEXT = zo_strformat(SI_ACTIVITY_QUEUE_STATUS_LABEL_FORMAT, STATUS_HEADER_TEXT, LOADING_ICON, GetString(SI_LFG_QUEUE_STATUS_QUEUED))
+    local STATUS_NOT_QUEUED_TEXT = zo_strformat(SI_ACTIVITY_QUEUE_STATUS_LABEL_FORMAT, STATUS_HEADER_TEXT, NO_ICON, GetString(SI_LFG_QUEUE_STATUS_NOT_QUEUED))
+
+    function SearchingForGroupManager:Update()
+        self.leaveQueueButton:SetEnabled(self.searching)
+
+        if self.searching then
+            self.statusLabel:SetText(STATUS_QUEUED_TEXT)
+
+            local searchStartTimeMs, searchEstimatedCompletionTimeMs = GetLFGSearchTimes()
+
+            local timeSinceSearchStartMs = GetFrameTimeMilliseconds() - searchStartTimeMs
+            local textStartTime = ZO_FormatTimeMilliseconds(timeSinceSearchStartMs, TIME_FORMAT_STYLE_COLONS, TIME_FORMAT_PRECISION_TWELVE_HOUR)
+            self.actualTimeLabel:SetText(zo_strformat(SI_ACTIVITY_QUEUE_STATUS_LABEL_FORMAT, ACTUAL_HEADER_TEXT, NO_ICON, textStartTime))
+
+            if searchEstimatedCompletionTimeMs > 0 then
+                local textEstimatedTime = ZO_GetSimplifiedTimeEstimateText(searchEstimatedCompletionTimeMs)
+                self.estimatedTimeLabel:SetText(zo_strformat(SI_ACTIVITY_QUEUE_STATUS_LABEL_FORMAT, ESTIMATED_HEADER_TEXT, NO_ICON, textEstimatedTime))
+            else
+                self.estimatedTimeLabel:SetText("")
+            end
+        else
+            self.statusLabel:SetText(STATUS_NOT_QUEUED_TEXT)
+            self.actualTimeLabel:SetText("")
+            self.estimatedTimeLabel:SetText("")
+        end
+    end
+end
+
+function ZO_SearchingForGroup_OnInitialized(self)
+    SEARCHING_FOR_GROUP = SearchingForGroupManager:New(self)
+end
+
+function ZO_SearchingForGroupQueueButton_OnClicked(self, button)
+    if button == MOUSE_BUTTON_INDEX_LEFT then
+        ZO_Dialogs_ShowDialog("LFG_LEAVE_QUEUE_CONFIRMATION")
+    end
+end
\ No newline at end of file