             NSAnimationContext.endGrouping()
         }
     }
-
-    // MARK: - UserWindowControllerDelegate Functions
+}
+
+// MARK: - UserWindowControllerDelegate Functions
+extension MainViewController: UserWindowControllerDelegate {
     func userWindowControllerDidClose(_ userWindowController: UserWindowController) {
         log.debug("")
         if let index = userWindowControllers.firstIndex(of: userWindowController) {
             userWindowControllers.remove(at: index)
         }
     }
-
-    // MARK: - Public Functions
+}
+
+// MARK: - Public Functions
+extension MainViewController {
     func showHandleNameAddViewController(live: Live, chat: Chat) {
         let handleNameAddViewController =
             StoryboardScene.MainWindowController.handleNameAddViewController.instantiate()

            // Update the view, if already loaded.
        }
    }

    // MARK: Configure Views
    private func buildViews() {
        // use async to properly render border line. if not async, the line sometimes disappears
        DispatchQueue.main.async {
            self.communityImageView.layer?.borderWidth = 0.5

            }
        }
    }
}

// MARK: Speech Handlers
private extension MainViewController {
    func updateSpeechManagerState() {
        guard #available(macOS 10.14, *) else { return }
        let enabled = UserDefaults.standard.bool(forKey: Parameters.enableCommentSpeech)

