diff --git a/README.md b/README.md
index 6c67d7e4d541450cdd9234a5369e05eb0408882d..ec3883513962007be35aca7fd7df08d0c07c04cd 100644
--- a/README.md
+++ b/README.md
@@ -91,7 +91,8 @@ pip3 install -r requirements.txt
 You also need to build
 [Briar Headless](https://code.briarproject.org/briar/briar/-/tree/master/briar-headless).
 Check its readme to learn how to do it. You can also use
-[builds provided by Nico Alt](https://media.dorfbrunnen.eu/briar/).
+[builds provided by Nico Alt](https://media.dorfbrunnen.eu/briar/)
+and put the .jar file at _~/.local/share/java/briar-headless.jar_.
 Make sure to have _java_ (e.g. `openjdk-11-jdk`) installed.
 
 Once you've done this, change the path to the Briar headless
diff --git a/app.briar.gtk.json b/app.briar.gtk.json
index 1568c2aa4ed3b7de1092e174ac0ca815599dd4cf..831bd84b3a65bc6b3b388737815ba20e5ef0310b 100644
--- a/app.briar.gtk.json
+++ b/app.briar.gtk.json
@@ -107,8 +107,8 @@
             "name": "briar-headless",
             "buildsystem": "simple",
             "build-commands": [
-                "mkdir -p /app/briar",
-                "install -Dm644 briar-headless.jar /app/briar/briar-headless.jar"
+                "mkdir -p /app/share/java",
+                "install -Dm644 briar-headless.jar /app/share/java/briar-headless.jar"
             ],
             "sources": [
                 {
diff --git a/briar-gtk/briar_gtk/application.py b/briar-gtk/briar_gtk/application.py
index 1dc959d37a4407c44d6a71f89f42a4249a4c2ef3..76040bdfded784ce9f0f7303ab498b029da1ebd0 100644
--- a/briar-gtk/briar_gtk/application.py
+++ b/briar-gtk/briar_gtk/application.py
@@ -16,7 +16,7 @@ from briar_wrapper.api import Api
 
 from briar_gtk.actions.application import ApplicationActions
 from briar_gtk.define import APPLICATION_ID, APPLICATION_NAME
-from briar_gtk.define import APPLICATION_STYLING_PATH, BRIAR_HEADLESS_JAR
+from briar_gtk.define import APPLICATION_STYLING_PATH, get_briar_headless_jar
 from briar_gtk.window import Window
 
 
@@ -61,7 +61,7 @@ class Application(Gtk.Application):
                                               Gtk.STYLE_PROVIDER_PRIORITY_USER)
 
     def _setup_api(self):
-        self.api = Api(BRIAR_HEADLESS_JAR)
+        self.api = Api(get_briar_headless_jar())
 
     # pylint: disable=access-member-before-definition
     def _setup_window(self):
diff --git a/briar-gtk/briar_gtk/define.py b/briar-gtk/briar_gtk/define.py
index 5a9811a40c2da1570218a69a47dc83316e7e53e1..6b323f6ed28b676c44037dda4b12239e48e97475 100644
--- a/briar-gtk/briar_gtk/define.py
+++ b/briar-gtk/briar_gtk/define.py
@@ -7,6 +7,7 @@
 # https://gitlab.gnome.org/World/lollypop/blob/1.0.2/lollypop/define.py
 
 import os
+import pathlib
 
 from gi.repository import Gio
 
@@ -14,6 +15,25 @@ APPLICATION_ID = "app.briar.gtk"
 APPLICATION_NAME = "Briar"
 RESOURCES_DIR = os.path.join("/app", "briar", "gtk")
 APPLICATION_STYLING_PATH = "resource:///app/briar/gtk/application.css"
-BRIAR_HEADLESS_JAR = os.path.join("/app", "briar", "briar-headless.jar")
 
 APP = Gio.Application.get_default
+
+
+def get_briar_headless_jar():
+    flatpak_path = "/app/share/java/briar-headless.jar"
+    if os.path.isfile(flatpak_path):
+        return flatpak_path
+
+    debian_path = "/usr/share/java/briar-headless.jar"
+    if os.path.isfile(debian_path):
+        return debian_path
+
+    local_path = os.path.join(
+        pathlib.Path.home(),
+        ".local", "share", "java",
+        "briar-headless.jar"
+    )
+    if os.path.isfile(local_path):
+        return local_path
+
+    raise FileNotFoundError("Couldn't find briar-headless.jar")
diff --git a/briar-gtk/tests/briar_gtk/test_application.py b/briar-gtk/tests/briar_gtk/test_application.py
index b19cbecb5ab4271646be2750dec88f4a546a9317..63eab4714721282a55d24b8235501becfab0e2b2 100644
--- a/briar-gtk/tests/briar_gtk/test_application.py
+++ b/briar-gtk/tests/briar_gtk/test_application.py
@@ -35,7 +35,7 @@ def test_api_at_startup(mocker):
 
     Application().do_startup()
 
-    api_mock.assert_called_once_with("/app/briar/briar-headless.jar")
+    api_mock.assert_called_once_with("/app/share/java/briar-headless.jar")
 
 
 def test_css_provider_at_startup(mocker):
@@ -117,6 +117,14 @@ def test_window_hide_at_shutdown(mocker):
     window_mock.hide.assert_called_once()
 
 
+@pytest.fixture(autouse=True)
+def briar_headless_jar(is_file):
+    flatpak_path = "/app/share/java/briar-headless.jar"
+    return_values = {flatpak_path: True}
+    is_file.side_effect = return_values.get
+    return is_file
+
+
 @pytest.fixture(autouse=True)
 def gi_dependencies(mocker):
     gi_dependencies = ('Gdk', 'Gio', 'GLib', 'Gtk', 'Handy')
diff --git a/briar-gtk/tests/briar_gtk/test_container.py b/briar-gtk/tests/briar_gtk/test_container.py
index 853f7dd9f12a4bca4469519f41604a5c6701957a..8a28b7dfda68bef1d6cf8b842414c56712ef9dec 100644
--- a/briar-gtk/tests/briar_gtk/test_container.py
+++ b/briar-gtk/tests/briar_gtk/test_container.py
@@ -21,6 +21,14 @@ def test_builder_at_init(mocker):
     builder_mock.assert_called_once()
 
 
+@pytest.fixture(autouse=True)
+def briar_headless_jar(is_file):
+    flatpak_path = "/app/share/java/briar-headless.jar"
+    return_values = {flatpak_path: True}
+    is_file.side_effect = return_values.get
+    return is_file
+
+
 @pytest.fixture(autouse=True)
 def gi_dependencies(mocker):
     mocker.patch(MODULE % "Gtk")
diff --git a/briar-gtk/tests/briar_gtk/test_define.py b/briar-gtk/tests/briar_gtk/test_define.py
new file mode 100644
index 0000000000000000000000000000000000000000..83123166026e3defb84e10672e872c72076343ac
--- /dev/null
+++ b/briar-gtk/tests/briar_gtk/test_define.py
@@ -0,0 +1,48 @@
+# Copyright (c) 2020 Nico Alt
+# SPDX-License-Identifier: AGPL-3.0-only
+# License-Filename: LICENSE.md
+
+import pytest
+
+from briar_gtk.define import get_briar_headless_jar
+
+
+def test_headless_flatpak_path(is_file):
+    flatpak_path = "/app/share/java/briar-headless.jar"
+    return_values = {flatpak_path: True}
+    is_file.side_effect = return_values.get
+
+    assert get_briar_headless_jar() == flatpak_path
+    is_file.assert_called_once_with(flatpak_path)
+
+
+def test_headless_debian_path(is_file):
+    debian_path = "/usr/share/java/briar-headless.jar"
+    return_values = {debian_path: True}
+    is_file.side_effect = return_values.get
+
+    assert get_briar_headless_jar() == debian_path
+    is_file.assert_called_with(debian_path)
+
+
+def test_headless_local_path(is_file, mocker):
+    local_path = "/home/alice/.local/share/java/briar-headless.jar"
+
+    home_mock = mocker.patch('pathlib.Path.home')
+    home_mock.return_value = "/home/alice"
+
+    return_values = {local_path: True}
+    is_file.side_effect = return_values.get
+
+    assert get_briar_headless_jar() == local_path
+    is_file.assert_called_with(local_path)
+
+
+def test_headless_no_path(is_file):
+    is_file.return_value = False
+
+    with pytest.raises(FileNotFoundError,
+                       match="Couldn't find briar-headless.jar"):
+        get_briar_headless_jar()
+
+    assert is_file.called is True
diff --git a/briar-gtk/tests/briar_gtk/test_window.py b/briar-gtk/tests/briar_gtk/test_window.py
index 4cef6376fe8af3ac817387966b9821d53929d363..157ca231b8593ce4659f72f28f9fec2139c376ed 100644
--- a/briar-gtk/tests/briar_gtk/test_window.py
+++ b/briar-gtk/tests/briar_gtk/test_window.py
@@ -79,6 +79,14 @@ def test_show_main_destroy_old(main_window_container, mocker,
     current_container_mock.destroy.assert_called_once()
 
 
+@pytest.fixture(autouse=True)
+def briar_headless_jar(is_file):
+    flatpak_path = "/app/share/java/briar-headless.jar"
+    return_values = {flatpak_path: True}
+    is_file.side_effect = return_values.get
+    return is_file
+
+
 @pytest.fixture(autouse=True)
 def gi_dependencies(mocker):
     mocker.patch(MODULE % "Gtk")
diff --git a/briar-gtk/tests/conftest.py b/briar-gtk/tests/conftest.py
index bb0bffd0ae3d8ece3a0467e712e8f611728d62b2..874250e6abaef267fda1ae472fda7532d0a28b1a 100644
--- a/briar-gtk/tests/conftest.py
+++ b/briar-gtk/tests/conftest.py
@@ -1,3 +1,10 @@
 # Copyright (c) 2019 Nico Alt
 # SPDX-License-Identifier: AGPL-3.0-only
 # License-Filename: LICENSE.md
+
+import pytest
+
+
+@pytest.fixture()
+def is_file(mocker):
+    return mocker.patch('os.path.isfile')