diff --git a/src/briar/gtk/containers/startup.py b/src/briar/gtk/containers/startup.py
index f9077985d41d4f9c93e790942dfb7386a8380dc8..c564164160d157e7bb6cec0ffd34ec8d1d4d0439 100644
--- a/src/briar/gtk/containers/startup.py
+++ b/src/briar/gtk/containers/startup.py
@@ -2,7 +2,7 @@
 # SPDX-License-Identifier: AGPL-3.0-only
 # License-Filename: LICENSE.md
 
-from gi.repository import GLib, GObject, Gtk
+from gi.repository import GLib
 
 from briar.gtk.container import Container
 from briar.gtk.define import App
@@ -13,7 +13,6 @@ class StartupContainer(Container):
     def __init__(self):
         super().__init__()
         self._api = App().api
-        StartupContainer._register_signals()
         self._setup_view()
 
     # pylint: disable=unused-argument
@@ -29,18 +28,13 @@ class StartupContainer(Container):
             "password_confirm_entry").get_text()
         if password != password_confirm:
             raise Exception("Passwords do not match")
-        self._api.register((self.username, password), self._startup_finished)
+        self._api.register((self.username, password),
+                           StartupContainer._startup_completed)
 
     # pylint: disable=unused-argument
     def on_login_pressed(self, button):
         password = self.builder.get_object("password_entry").get_text()
-        self._api.login(password, self._startup_finished)
-
-    @staticmethod
-    def _register_signals():
-        GObject.signal_new("briar_startup_completed", Gtk.Overlay,
-                           GObject.SignalFlags.RUN_LAST, GObject.TYPE_BOOLEAN,
-                           (GObject.TYPE_STRING,))
+        self._api.login(password, StartupContainer._startup_completed)
 
     def _setup_view(self):
         self.set_hexpand(True)
@@ -53,8 +47,9 @@ class StartupContainer(Container):
             self.add(self.builder.get_object("login"))
         self.builder.connect_signals(self)
 
-    def _startup_finished(self, succeeded):
+    @staticmethod
+    def _startup_completed(succeeded):
         if succeeded:
-            GLib.idle_add(self.emit, "briar_startup_completed", (succeeded,))
+            GLib.idle_add(App().window.on_startup_completed)
             return
         print("Startup failed")
diff --git a/src/briar/gtk/window.py b/src/briar/gtk/window.py
index d054c2926dfff00fef744b399561373d6b5607b7..2229dc7a36a9ef6b16c9502bcdf81fc3a935fba1 100644
--- a/src/briar/gtk/window.py
+++ b/src/briar/gtk/window.py
@@ -13,10 +13,10 @@ from briar.gtk.toolbar import Toolbar
 
 class Window(Gtk.ApplicationWindow):
 
+    DEFAULT_WINDOW_SIZE = (600, 400)
+
     def __init__(self):
-        Gtk.ApplicationWindow.__init__(self, application=App(),
-                                       title=APPLICATION_NAME,
-                                       icon_name=APPLICATION_ID)
+        self._initialize_gtk_application_window()
         self._setup_content()
 
     @property
@@ -27,18 +27,27 @@ class Window(Gtk.ApplicationWindow):
     def toolbar(self):
         return self._toolbar
 
+    def _initialize_gtk_application_window(self):
+        Gtk.ApplicationWindow.__init__(self, application=App(),
+                                       title=APPLICATION_NAME,
+                                       icon_name=APPLICATION_ID)
+
     def _setup_content(self):
-        self._setup_size((600, 400))  # TODO: do properly (constants, save)
+        self._setup_size(self.DEFAULT_WINDOW_SIZE)
         self._setup_toolbar()
         self._setup_grid()
         self._setup_startup_container()
 
     def _setup_size(self, size):
-        if len(size) == 2 and\
-           isinstance(size[0], int) and\
-           isinstance(size[1], int):
+        if Window._size_is_valid(size):
             self.resize(size[0], size[1])
 
+    @staticmethod
+    def _size_is_valid(size):
+        return len(size) == 2 and\
+               isinstance(size[0], int) and\
+               isinstance(size[1], int)
+
     def _setup_toolbar(self):
         self._toolbar = Toolbar()
         self._toolbar.show()
@@ -47,20 +56,15 @@ class Window(Gtk.ApplicationWindow):
 
     def _setup_grid(self):
         self._grid = Gtk.Grid()
-        self._grid.set_orientation(Gtk.Orientation.HORIZONTAL)
         self._grid.show()
         self.add(self._grid)
 
     def _setup_startup_container(self):
         self._container = StartupContainer()
         self._container.show()
-        self._container.connect("briar_startup_completed",
-                                self._on_startup_completed)
         self._grid.add(self._container)
 
-    # TODO: remove unused arguments
-    # pylint: disable=unused-argument
-    def _on_startup_completed(self, inst, obj):
+    def on_startup_completed(self):
         self._grid.destroy()
         self._setup_grid()
         self._setup_main_container()
@@ -81,6 +85,7 @@ class Window(Gtk.ApplicationWindow):
         self._grid.add(self._container)
         self._toolbar.show_back_button(True, self._back_to_main)
 
+    # pylint: disable=unused-argument
     def _back_to_main(self, widget):
         self._grid.destroy()
         self._setup_grid()