diff --git a/Makefile b/Makefile
index 78f2e9333513c152c5b09034f87b2687f76b8445..a62f2e20378aa8e6a844da38db806e971d877d89 100644
--- a/Makefile
+++ b/Makefile
@@ -58,6 +58,9 @@ dependsCygwin:
 	@choco install -y golang python nssm nsis wget 7zip
 
 build:
+	gui/build.sh
+
+build_old:
 ifeq (${XBUILD}, yes)
 	$(MAKE) build_cross_win
 	$(MAKE) build_cross_osx
diff --git a/bitmask.pro b/bitmask.pro
index 3ab8507943a41cb197cdae16b6d0cbb47159283a..7f4b488a4a2ed81731332a27061cdfcd8f5cb256 100644
--- a/bitmask.pro
+++ b/bitmask.pro
@@ -9,6 +9,7 @@ QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.14
 
 macx {
     LIBS += -framework Security
+    ICON = ./branding/assets/riseup/icon.icns
 }
 
 QT += qml quick widgets
diff --git a/gui/build.sh b/gui/build.sh
index 1ded17ed33923f45d947b54e94dd86dae88f4b0d..91be4fcdbc94febde7845c333d32b9c0d863f9cb 100755
--- a/gui/build.sh
+++ b/gui/build.sh
@@ -20,8 +20,8 @@ fi
 if [ "$XBUILD" == "$WIN64" ]
 then
     # TODO allow to override vars
-    QMAKE="`pwd`/../mxe/usr/x86_64-w64-mingw32.static/qt5/bin/qmake"
-    PATH="`pwd`/../mxe/usr/bin"/:$PATH
+    QMAKE="`pwd`/../../mxe/usr/x86_64-w64-mingw32.static/qt5/bin/qmake"
+    PATH="`pwd`/../../mxe/usr/bin"/:$PATH
     CC=x86_64-w64-mingw32.static-gcc
 else
     if [ "$QMAKE" == "" ]
diff --git a/gui/handlers.h b/gui/handlers.h
index d746524b8bd08f152a9c7d6e2948d77fa1f9c2c8..c342a977dcffebd03672bb017a4030aa764b2c39 100644
--- a/gui/handlers.h
+++ b/gui/handlers.h
@@ -12,8 +12,6 @@ class QJsonWatch : public QObject {
 
     Q_OBJECT
 
-    QJsonModel *model;
-
 public:
 
 signals:
diff --git a/installer/.gitignore b/installer/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..2fdd01e5418833d7fc8812e5930490321f808daf
--- /dev/null
+++ b/installer/.gitignore
@@ -0,0 +1,4 @@
+.qmake.stash
+Makefile
+packages/riseupvpn/data/riseup-vpn
+RiseupVPN-Installer
diff --git a/installer/bitmask-installer.pro b/installer/bitmask-installer.pro
new file mode 100644
index 0000000000000000000000000000000000000000..c526283de206dbd2647556bf53d98aa1e0330a93
--- /dev/null
+++ b/installer/bitmask-installer.pro
@@ -0,0 +1,21 @@
+TEMPLATE = aux
+
+CONFIG -= debug_and_release
+
+INSTALLER = RiseupVPN-Installer
+
+INPUT = $$PWD/config/config.xml $$PWD/packages
+inst.input = INPUT
+inst.output = $$INSTALLER
+inst.commands = binarycreator -c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT}
+inst.CONFIG += target_predeps no_link combine
+
+QMAKE_EXTRA_COMPILERS += inst
+
+OTHER_FILES += \
+# watch out... it chokes with dashes in the path
+    packages/riseupvpn/meta/package.xml \
+    packages/riseupvpn/meta/install.js \
+    packages/riseupvpn/data/README.txt \
+    packages/riseupvpn/data/riseup-vpn
+
diff --git a/installer/config/config.xml b/installer/config/config.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ef0e5e8b95462d3f52a57f3ee53bf1d286c37880
--- /dev/null
+++ b/installer/config/config.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Installer>
+    <Name>RiseupVPN Installer 1.0</Name>
+    <Title>RiseupVPN Installer</Title>
+    <Version>1.0.0</Version>
+    <TargetDir>@ApplicationsDir@/RiseupVPN</TargetDir>
+    <RemoteRepositories>
+        <Repository>
+            <Url>http://localhost/repository/</Url>
+        </Repository>
+    </RemoteRepositories>
+</Installer>
diff --git a/installer/packages/riseupvpn/data/README.txt b/installer/packages/riseupvpn/data/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..616eb29ec3236f9cac06a4bfcb3d2c2e4d08aa3e
--- /dev/null
+++ b/installer/packages/riseupvpn/data/README.txt
@@ -0,0 +1 @@
+RiseupVPN README
diff --git a/installer/packages/riseupvpn/meta/install.js b/installer/packages/riseupvpn/meta/install.js
new file mode 100644
index 0000000000000000000000000000000000000000..e5174e171aa305f11406a4fe0793db5e477378e6
--- /dev/null
+++ b/installer/packages/riseupvpn/meta/install.js
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 LEAP
+**
+****************************************************************************/
+
+function Component() {
+}
+
+Component.prototype.createOperations = function ()
+{
+    // This will actually install the files
+    component.createOperations();
+
+    // And now our custom actions.
+    // See https://doc.qt.io/qtinstallerframework/operations.html for reference
+    //
+    // We can also use this to register different components (different architecture for instance)
+    // See https://doc.qt.io/qtinstallerframework/qt-installer-framework-systeminfo-packages-root-meta-installscript-qs.html
+
+    console.log("Post installation. Checking platform...")
+    if (systemInfo.productType === "windows") {
+        console.log("Platform: windows");
+        postInstallWindows();
+    } else if (systemInfo.productType === "osx") {
+        console.log("Platform: osx");
+        postInstallOSX();
+    } else {
+        console.log("Platform: linux");
+        postInstallLinux();
+    }
+}
+
+function postInstallWindows() {
+    component.addOperation("CreateShortcut",
+                   "@TargetDir@/README.txt",
+                   "@StartMenuDir@/README.lnk",
+                   "workingDirectory=@TargetDir@",
+                   "iconPath=%SystemRoot%/system32/SHELL32.dll",
+                   "iconId=2");
+}
+
+function postInstallOSX() {
+    console.log("TODO: should do osx post-installation");
+}
+
+function postInstallLinux() {
+    console.log("TODO: should do linux post-installation");
+    console.log("Maybe you want to use your package manager instead?");
+    component.addOperation("AppendFile", "/tmp/riseupvpn.log", "this is a test - written from the installer");
+}
diff --git a/installer/packages/riseupvpn/meta/package.xml b/installer/packages/riseupvpn/meta/package.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4dd7ae9ecb61349c6687e672cf3f12fc2d3db218
--- /dev/null
+++ b/installer/packages/riseupvpn/meta/package.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Package>
+    <DisplayName>RiseupVPN</DisplayName>
+    <Description>RiseupVPN</Description>
+    <Version>0.20.6-1</Version>
+    <ReleaseDate>2020-07-01</ReleaseDate>
+    <Default>false</Default>
+    <RequiresAdminRights>true</RequiresAdminRights>
+    <Script>install.js</Script>
+    <ForcedInstallation>true</ForcedInstallation>
+</Package>