diff --git a/briar-gtk/briar_gtk/actions/window.py b/briar-gtk/briar_gtk/actions/window.py
index aed217e19fd471938010d08b9b50b2e1cfe05b02..7d3fd36d4be656db6d8b952a6cc1862df2e5806e 100644
--- a/briar-gtk/briar_gtk/actions/window.py
+++ b/briar-gtk/briar_gtk/actions/window.py
@@ -8,7 +8,7 @@
 
 from gi.repository import Gio, GLib
 
-from briar_gtk.containers.main import MainContainer
+from briar_gtk.containers.main_window import MainWindowContainer
 from briar_gtk.define import APP
 
 
@@ -31,6 +31,11 @@ class WindowActions:
         open_add_contact_action.connect("activate", self._open_add_contact)
         self.add_action(open_add_contact_action)
 
+        open_about_page_action = Gio.SimpleAction.new(
+            "open-about-page", None)
+        open_about_page_action.connect("activate", self._open_about_page)
+        self.add_action(open_about_page_action)
+
         open_private_chat_action = Gio.SimpleAction.new(
             "open-private-chat", GLib.VariantType.new("i"))
         open_private_chat_action.connect("activate", self._open_private_chat)
@@ -38,9 +43,13 @@ class WindowActions:
 
     # pylint: disable=unused-argument
     def _back_to_sidebar(self, action, parameter):
-        if isinstance(self.current_container, MainContainer):
+        if isinstance(self.current_container, MainWindowContainer):
             self.current_container.show_sidebar()
 
+    # pylint: disable=unused-argument
+    def _open_about_page(self, action, parameter):
+        self.current_container.open_about_page()
+
     # pylint: disable=unused-argument
     def _open_add_contact(self, action, parameter):
         self.show_add_contact_container()
diff --git a/briar-gtk/briar_gtk/containers/main.py b/briar-gtk/briar_gtk/containers/main_window.py
similarity index 76%
rename from briar-gtk/briar_gtk/containers/main.py
rename to briar-gtk/briar_gtk/containers/main_window.py
index 7e567ec1d8dfe8cfd8890bc97e36afacfd743f73..dada4ac52dbe95911649301a6ff4e5d1dcca0166 100644
--- a/briar-gtk/briar_gtk/containers/main.py
+++ b/briar-gtk/briar_gtk/containers/main_window.py
@@ -5,6 +5,8 @@
 # Initial version based on GNOME Fractal
 # https://gitlab.gnome.org/GNOME/fractal/-/tags/4.2.2
 
+from gettext import gettext as _
+
 from gi.repository import GLib
 
 from briar_wrapper.models.contacts import Contacts
@@ -15,9 +17,11 @@ from briar_gtk.containers.private_chat import PrivateChatContainer
 from briar_gtk.define import APP
 
 
-class MainContainer(Container):
+class MainWindowContainer(Container):
 
-    CONTAINER_UI = "/app/briar/gtk/ui/main.ui"
+    CONTAINER_UI = "/app/briar/gtk/main_window.ui"
+    MENU_UI = "/app/briar/gtk/main_menu.ui"
+    ABOUT_UI = "/app/briar/gtk/about_dialog.ui"
 
     def __init__(self):
         super().__init__()
@@ -60,6 +64,38 @@ class MainContainer(Container):
     def chat_entry(self):
         return self.builder.get_object("chat_entry")
 
+    # pylint: disable=line-too-long
+    def open_about_page(self):
+        self.builder.add_from_resource(self.ABOUT_UI)
+        about_dialog = self.builder.get_object("about_dialog")
+        about_dialog.set_transient_for(APP().window)
+
+        code_use_title = _("Using code by")
+        code_use_list = [
+            "GNOME Fractal https://wiki.gnome.org/Apps/Fractal",
+            "GNOME Lollypop https://wiki.gnome.org/Apps/Lollypop",
+        ]
+        about_dialog.add_credit_section(
+            code_use_title, code_use_list
+        )
+
+        briar_functionality_title = _("Briar functionality by")
+        briar_functionality_list = [
+            "Briar REST API https://code.briarproject.org/briar/briar/tree/master/briar-headless",  # noqa
+            "Briar Python Wrapper https://code.briarproject.org/briar/python-briar-wrapper",  # noqa
+        ]
+        about_dialog.add_credit_section(
+            briar_functionality_title, briar_functionality_list
+        )
+
+        about_dialog.connect("response", self._on_about_response)
+        about_dialog.show()
+
+    @staticmethod
+    # pylint: disable=unused-argument
+    def _on_about_response(dialog, response_id):
+        dialog.destroy()
+
     def open_private_chat(self, contact_id):
         contact_name = self._get_contact_name(contact_id)
         self._prepare_chat_view(contact_name)
@@ -101,6 +137,7 @@ class MainContainer(Container):
             self.history_container.remove(child)
 
     def _setup_view(self):
+        self.builder.add_from_resource(self.MENU_UI)
         self.builder.add_from_resource(self.CONTAINER_UI)
         self.builder.connect_signals(self)
 
diff --git a/briar-gtk/briar_gtk/window.py b/briar-gtk/briar_gtk/window.py
index d54cf4552af16435b0afb21272a985b93d1e3c9f..f45998ab4fce2ee2c0ba9212e4dcbf68e682f5cf 100644
--- a/briar-gtk/briar_gtk/window.py
+++ b/briar-gtk/briar_gtk/window.py
@@ -6,7 +6,7 @@ from gi.repository import Gtk
 
 from briar_gtk.actions.window import WindowActions
 from briar_gtk.containers.add_contact import AddContactContainer
-from briar_gtk.containers.main import MainContainer
+from briar_gtk.containers.main_window import MainWindowContainer
 from briar_gtk.containers.startup import StartupContainer
 from briar_gtk.define import APP, APPLICATION_ID, APPLICATION_NAME
 
@@ -57,7 +57,7 @@ class Window(Gtk.ApplicationWindow, WindowActions):
         self._setup_container(StartupContainer(self))
 
     def _setup_main_container(self):
-        self._setup_container(MainContainer())
+        self._setup_container(MainWindowContainer())
 
     def _setup_add_contact_container(self):
         self._setup_container(AddContactContainer())
diff --git a/briar-gtk/data/meson.build b/briar-gtk/data/meson.build
index 00ec5c11a9a1f72d8a7300817ccc639fc521a369..48a1f7fa8d3c240f1a7b503e4ce061ff984b5679 100644
--- a/briar-gtk/data/meson.build
+++ b/briar-gtk/data/meson.build
@@ -52,6 +52,12 @@ gnome.compile_resources('briar-gtk',
   gresource_bundle: true,
   install: true,
   install_dir: pkgdatadir,
+  dependencies: configure_file(
+    input: 'ui/about_dialog.ui.in',
+    output: 'about_dialog.ui',
+    configuration: conf
+  )
+
 )
 
 subdir('icons')
diff --git a/briar-gtk/data/ui/about_dialog.ui.in b/briar-gtk/data/ui/about_dialog.ui.in
new file mode 100644
index 0000000000000000000000000000000000000000..43df4f516a9e26a1082fc7ace30e1c40d74af854
--- /dev/null
+++ b/briar-gtk/data/ui/about_dialog.ui.in
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2019 Nico Alt
+  SPDX-License-Identifier: AGPL-3.0-only
+  License-Filename: LICENSE.md
+
+  Based on parts of GNOME Lollypop
+  https://gitlab.gnome.org/World/lollypop/raw/1.2.16/data/AboutDialog.ui.in
+-->
+<interface>
+  <requires lib="gtk+" version="3.12"/>
+  <object class="GtkAboutDialog" id="about_dialog">
+    <property name="can_focus">False</property>
+    <property name="modal">True</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="type_hint">normal</property>
+    <property name="program_name">Briar GTK</property>
+    <property name="version">@VERSION@</property>
+    <property name="copyright">Copyright © 2019-2020 Nico Alt, et al.</property>
+    <property name="comments" translatable="yes">A Briar client for GTK desktop and mobile devices</property>
+    <property name="website">@PACKAGE_URL@</property>
+    <property name="website_label" translatable="yes">Visit Briar GTK website</property>
+    <property name="authors"> Nico Alt https://nico.dorfbrunnen.eu</property>
+    <property name="translator_credits" translatable="yes" context="Translation credits here, put your name here!" comments="Replace me with your names">Nico Alt https://nico.dorfbrunnen.eu</property>
+    <property name="logo_icon_name">app.briar.gtk</property>
+    <property name="license_type">agpl-3-0-only</property>
+  </object>
+</interface>
diff --git a/briar-gtk/data/ui/app.briar.gtk.gresource.xml b/briar-gtk/data/ui/app.briar.gtk.gresource.xml
index 5203c52d90d8787a3f725e45575c0d505ad1848b..4efc986a36d79bfee8e43ca91d83c7cbec1dfb38 100644
--- a/briar-gtk/data/ui/app.briar.gtk.gresource.xml
+++ b/briar-gtk/data/ui/app.briar.gtk.gresource.xml
@@ -4,7 +4,7 @@
     <file compressed="true">ui/application.css</file>
     <file compressed="true" preprocess="xml-stripblanks">ui/add_contact.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">ui/login.ui</file>
-    <file compressed="true" preprocess="xml-stripblanks">ui/main.ui</file>
+    <file compressed="true" preprocess="xml-stripblanks">ui/main_window.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">ui/private_chat.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">ui/registration.ui</file>
   </gresource>
diff --git a/briar-gtk/data/ui/main_menu.ui b/briar-gtk/data/ui/main_menu.ui
new file mode 100644
index 0000000000000000000000000000000000000000..1c7c1fd2d8ad69c036adf6505fe5d34fff699a22
--- /dev/null
+++ b/briar-gtk/data/ui/main_menu.ui
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2020 Nico Alt
+  SPDX-License-Identifier: AGPL-3.0-only
+  License-Filename: LICENSE.md
+
+  Based on parts of GNOME Fractal
+  https://gitlab.gnome.org/GNOME/fractal/-/blob/4.2.2/fractal-gtk/res/ui/main_menu.ui
+-->
+<interface>
+  <requires lib="gtk+" version="3.20"/>
+  <object class="GtkPopoverMenu" id="main_menu_popover">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkBox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_left">6</property>
+        <property name="margin_right">6</property>
+        <property name="margin_top">6</property>
+        <property name="margin_bottom">6</property>
+        <property name="orientation">vertical</property>
+        <property name="width_request">200</property>
+        <child>
+          <object class="GtkModelButton" id="about-menu-entry">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="action_name">win.open-about-page</property>
+            <property name="text" translatable="yes">About Briar GTK</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="submenu">main</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>
+
diff --git a/briar-gtk/data/ui/main.ui b/briar-gtk/data/ui/main_window.ui
similarity index 92%
rename from briar-gtk/data/ui/main.ui
rename to briar-gtk/data/ui/main_window.ui
index 2d1bf36736f5f29e9f9db291535ba853be418693..c5173d5e1bfd65f50ac7e5b2aaed39fa6bf42f95 100644
--- a/briar-gtk/data/ui/main.ui
+++ b/briar-gtk/data/ui/main_window.ui
@@ -228,7 +228,7 @@
                 <property name="halign">fill</property>
                 <property name="show-close-button">True</property>
                 <child>
-                  <object class="GtkMenuButton" id="add_room_menu">
+                  <object class="GtkMenuButton" id="add_contact_menu">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
@@ -244,14 +244,41 @@
 
                     </accessibility>
                     <child internal-child="accessible">
-                      <object class="AtkObject" id="a11y-add_room_menu">
-                        <property name="AtkObject::accessible_name" translatable="yes">Add</property>
+                      <object class="AtkObject" id="a11y-add_contact_menu">
+                        <property name="AtkObject::accessible_name" translatable="yes">Add contact</property>
                       </object>
                     </child>
                   </object>
                   <packing>
                     <property name="pack_type">start</property>
-                    <property name="position">1</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="main_menu_button">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="popover">main_menu_popover</property>
+                    <child>
+                      <object class="GtkImage">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="icon_name">open-menu-symbolic</property>
+                      </object>
+                    </child>
+                    <accessibility>
+
+                    </accessibility>
+                    <child internal-child="accessible">
+                      <object class="AtkObject" id="a11y-main_menu_button">
+                        <property name="AtkObject::accessible_name" translatable="yes">Main menu</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="pack_type">end</property>
+                    <property name="position">0</property>
                   </packing>
                 </child>
               </object>
diff --git a/briar-gtk/meson.build b/briar-gtk/meson.build
index 6702618c8e6cfae821307f7f5bd5aca8a4f98e56..bbb7fd9097ed52df61a3b6889cba2dd31a747453 100644
--- a/briar-gtk/meson.build
+++ b/briar-gtk/meson.build
@@ -4,17 +4,18 @@
 
 PACKAGE_DATA_DIR = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name())
 
-subdir('data')
-subdir('po')
-
 python3 = import('python3')
 
 conf = configuration_data()
+conf.set('PACKAGE_URL', 'https://code.briarproject.org/briar/briar-gtk/blob/master/README.md')
 conf.set('PYTHON', python3.find_python().path())
 conf.set('VERSION', meson.project_version())
 conf.set('LOCALE_DIR', join_paths(get_option('prefix'), get_option('localedir')))
 conf.set('PACKAGE_DATA_DIR', PACKAGE_DATA_DIR)
 
+subdir('data')
+subdir('po')
+
 configure_file(
   input: 'briar-gtk.in',
   output: 'briar-gtk',