diff --git a/briar-gtk/briar_gtk/controllers/main_window.py b/briar-gtk/briar_gtk/controllers/main_window.py
index 4a42ebe1d06714a6dc96e7655defb3180210cc3f..11dca81046025da977981baaefd2a2aa4768bc7d 100644
--- a/briar-gtk/briar_gtk/controllers/main_window.py
+++ b/briar-gtk/briar_gtk/controllers/main_window.py
@@ -2,8 +2,32 @@
 # SPDX-License-Identifier: AGPL-3.0-only
 # License-Filename: LICENSE.md
 
+from briar_gtk.controllers.main_menu import MainMenuController
+from briar_gtk.controllers.private_chat import PrivateChatController
+from briar_gtk.controllers.sidebar import SidebarController
+from briar_gtk.define import APP
+from briar_gtk.views.main_menu import MainMenuView
+from briar_gtk.views.private_chat import PrivateChatView
+from briar_gtk.views.sidebar import SidebarView
+
 
 class MainWindowController():
 
-    def __init__(self):
-        pass
+    def __init__(self, main_window_view, builder):
+        self._main_window_view = main_window_view
+        self._builder = builder
+
+        self._setup_children()
+
+    def _setup_children(self):
+        self._sidebar_view = SidebarView(self._builder)
+        self._sidebar_controller = SidebarController(
+            self._sidebar_view, APP().api)
+
+        self._private_chat_view = PrivateChatView(self._builder)
+        self._private_chat_controller = PrivateChatController(
+            self._private_chat_view, APP().api)
+
+        self._main_menu_view = MainMenuView()
+        self._main_menu_controller = MainMenuController(
+            self._main_menu_view, APP().api)
diff --git a/briar-gtk/briar_gtk/views/main_window.py b/briar-gtk/briar_gtk/views/main_window.py
index 8019f0d59c55c0d95f46b3de9da023e8187f0cd0..88489bb79bf06e1c70399b74eaba7fb29ba29ad7 100644
--- a/briar-gtk/briar_gtk/views/main_window.py
+++ b/briar-gtk/briar_gtk/views/main_window.py
@@ -5,8 +5,6 @@
 # Initial version based on GNOME Fractal
 # https://gitlab.gnome.org/GNOME/fractal/-/tags/4.2.2
 
-import os
-
 from gettext import gettext as _
 from gi.repository import Gio, GLib, Gtk
 
@@ -17,7 +15,7 @@ from briar_gtk.containers.private_chat import PrivateChatContainer
 from briar_gtk.controllers.main_menu import MainMenuController
 from briar_gtk.controllers.private_chat import PrivateChatController
 from briar_gtk.controllers.sidebar import SidebarController
-from briar_gtk.define import APP, NOTIFICATION_CONTACT_ADDED, RESOURCES_DIR
+from briar_gtk.define import APP, NOTIFICATION_CONTACT_ADDED
 from briar_gtk.define import NOTIFICATION_PRIVATE_MESSAGE
 from briar_gtk.views.main_menu import MainMenuView
 from briar_gtk.views.private_chat import PrivateChatView
@@ -29,42 +27,17 @@ from briar_gtk.widgets.edit_dialog import EditDialog
 
 class MainWindowView(Gtk.Overlay):
 
-    MAIN_MENU_UI = "main_menu.ui"
-    CHAT_MENU_UI = "chat_menu.ui"
-    MAIN_WINDOW_UI = "main_window.ui"
-
     _current_contact_id = 0
     _current_private_chat_widget = None
 
-    def __init__(self):
+    def __init__(self, builder):
         super().__init__()
-        self._builder = Gtk.Builder()
-        self._add_from_resource(self.MAIN_MENU_UI)
-        self._add_from_resource(self.CHAT_MENU_UI)
-        self._add_from_resource(self.MAIN_WINDOW_UI)
-        self._builder.connect_signals(self)
-
-        self._sidebar_view = SidebarView(self._builder)
-        self._sidebar_controller = SidebarController(
-            self._sidebar_view, APP().api)
-
-        self._private_chat_view = PrivateChatView(self._builder)
-        self._private_chat_controller = PrivateChatController(
-            self._private_chat_view, APP().api)
-
-        self._main_menu_view = MainMenuView()
-        self._main_menu_controller = MainMenuController(
-            self._main_menu_view, APP().api)
-
+        self._builder = builder
         self._signals = list()
+
         self._setup_view()
         self._load_content()
 
-    def _add_from_resource(self, ui_filename):
-        self._builder.add_from_resource(
-            os.path.join(RESOURCES_DIR, ui_filename)
-        )
-
     @property
     def main_window_leaflet(self):
         return self._builder.get_object("main_window_leaflet")
diff --git a/briar-gtk/briar_gtk/views/sidebar.py b/briar-gtk/briar_gtk/views/sidebar.py
index 5fb2372374ba90f3e5cf521cdcc45de7006d8ab7..36672cc6030bf5e08860f2d73648da404b50f54b 100644
--- a/briar-gtk/briar_gtk/views/sidebar.py
+++ b/briar-gtk/briar_gtk/views/sidebar.py
@@ -19,6 +19,7 @@ class SidebarView():
         self._clear_contact_list()
 
         for contact in contact_list:
+            print(contact)
             contact_row = ContactRowWidget(contact)
             contacts_list_box = self._builder.get_object("contacts_list_box")
             contacts_list_box.add(contact_row)
diff --git a/briar-gtk/briar_gtk/window.py b/briar-gtk/briar_gtk/window.py
index 54c868d01a2b88238907fb1ef0c19734209416c0..e642a76f6643984b7eb5d453dfcab5efb36c984d 100644
--- a/briar-gtk/briar_gtk/window.py
+++ b/briar-gtk/briar_gtk/window.py
@@ -2,16 +2,19 @@
 # SPDX-License-Identifier: AGPL-3.0-only
 # License-Filename: LICENSE.md
 
+import os
+
 from gettext import gettext as _
 from gi.repository import Gio, Gtk
 
 from briar_gtk.actions.window import WindowActions
 from briar_gtk.containers.add_contact import AddContactContainer
+from briar_gtk.controllers.main_window import MainWindowController
 from briar_gtk.views.main_window import MainWindowView
 from briar_gtk.containers.startup import StartupContainer
 from briar_gtk.define import APP, APPLICATION_ID, APPLICATION_NAME
 from briar_gtk.define import NOTIFICATION_CONTACT_ADDED
-from briar_gtk.define import NOTIFICATION_PRIVATE_MESSAGE
+from briar_gtk.define import NOTIFICATION_PRIVATE_MESSAGE, RESOURCES_DIR
 
 
 class Window(Gtk.ApplicationWindow):
@@ -99,7 +102,25 @@ class Window(Gtk.ApplicationWindow):
         self._setup_container(StartupContainer(self))
 
     def _setup_main_container(self):
-        self._setup_container(MainWindowView())
+        builder = self._setup_builder()
+        main_window_view = MainWindowView(builder)
+        main_window_controller = MainWindowController(
+            main_window_view, builder)
+        self._setup_container(main_window_view)
 
     def _setup_add_contact_container(self):
         self._setup_container(AddContactContainer())
+
+    def _setup_builder(self):
+        builder = Gtk.Builder.new()
+        builder.add_from_resource(
+            os.path.join(RESOURCES_DIR, "main_menu.ui")
+        )
+        builder.add_from_resource(
+            os.path.join(RESOURCES_DIR, "chat_menu.ui")
+        )
+        builder.add_from_resource(
+            os.path.join(RESOURCES_DIR, "main_window.ui")
+        )
+        builder.connect_signals(self)
+        return builder