diff --git a/gui/backend.go b/gui/backend.go
index 92fbb9743a7358ab1ee0461eba0eb9f9c9a15798..35f5fd7e0d7a63a9ee41fb8a96bc70ff4c31e2d2 100644
--- a/gui/backend.go
+++ b/gui/backend.go
@@ -17,11 +17,6 @@ func GetVersion() *C.char {
 	return (*C.char)(backend.GetVersion())
 }
 
-//export GetAppName
-func GetAppName() *C.char {
-	return (*C.char)(backend.GetAppName())
-}
-
 //export Login
 func Login(username, password string) {
 	backend.Login(username, password)
diff --git a/gui/handlers.cpp b/gui/handlers.cpp
index 4910aa29577f969ddb50fd25a63796fb7ffcadec..f4fe10b6654c0fc72f3a08f4202b360190a2f7d3 100644
--- a/gui/handlers.cpp
+++ b/gui/handlers.cpp
@@ -8,8 +8,6 @@
 
 GoString toGoStr(QString s)
 {
-    // TODO verify that it's more correct 
-    // char *c = s.toLocal8Bit().data();
     const char *c = s.toUtf8().constData();
     return (GoString){c, (long int)strlen(c)};
 }
@@ -19,11 +17,6 @@ Backend::Backend(QObject *parent) : QObject(parent)
 {
 }
 
-QString Backend::getAppName()
-{
-    return QString(GetAppName());
-}
-
 QString Backend::getVersion()
 {
     return QString(GetVersion());
diff --git a/gui/handlers.h b/gui/handlers.h
index e3d0e2a94e61ec54db2b5dec768eda826fff2564..d746524b8bd08f152a9c7d6e2948d77fa1f9c2c8 100644
--- a/gui/handlers.h
+++ b/gui/handlers.h
@@ -33,7 +33,6 @@ signals:
     void quitDone();
 
 public slots:
-    QString getAppName();
     QString getVersion();
     void switchOn();
     void switchOff();
diff --git a/gui/main.cpp b/gui/main.cpp
index 42123ae3fb05416fb4e833ba5bded2c180e7189a..11c60a44a84d70fde2fa9807cc0a77389cf1a92c 100644
--- a/gui/main.cpp
+++ b/gui/main.cpp
@@ -38,20 +38,40 @@ void signalHandler(int) {
     exit(0);
 }
 
+QString getAppName(QJsonValue info, QString provider) {
+    for (auto p: info.toArray()) {
+        QJsonObject item = p.toObject();
+        if (item["name"] == provider) {
+            return item["applicationName"].toString();
+        }
+    }
+    return "BitmaskVPN";
+}
+
 int main(int argc, char **argv) {
     signal(SIGINT, signalHandler);
 
     Backend backend;
 
     QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
-    QApplication::setApplicationName(backend.getAppName());
     QApplication::setApplicationVersion(backend.getVersion());
     QApplication app(argc, argv);
     app.setQuitOnLastWindowClosed(false);
 
+    /* load providers json */
+    QFile providerJson (":/providers.json");
+    providerJson.open(QIODevice::ReadOnly | QIODevice::Text);
+    QJsonModel *providers = new QJsonModel;
+    providers->loadJson(providerJson.readAll());
+    QJsonValue defaultProvider = providers->json().object().value("default");
+    QJsonValue providersInfo = providers->json().object().value("providers");
+    QString appName = getAppName(providersInfo, defaultProvider.toString());
+
+    QApplication::setApplicationName(appName);
+
     QCommandLineParser parser;
     parser.setApplicationDescription(
-        backend.getAppName() +
+        appName +
         QApplication::translate(
             "main", ": a fast and secure VPN. Powered by Bitmask."));
     parser.addHelpOption();
@@ -80,30 +100,24 @@ int main(int argc, char **argv) {
             {"v", "version"},
             QApplication::translate(
                 "main",
-		"Version of the bitmask-vpn."),
+                "Version of the bitmask-vpn."),
         },
         {
             {"o", "obfs4"},
             QApplication::translate(
                 "main",
-		"Use obfs4 to obfuscate the traffic is available in the provider."),
+                "Use obfs4 to obfuscate the traffic, if available in the provider."),
         },
         {
             {"a", "disable-autostart"},
             QApplication::translate(
                 "main",
-		"Disable the autostart for the next run."),
-        },
-        {
-            {"s", "start-vpn"},
-            QApplication::translate(
-                "main",
-		"Start the vpn in turned 'on' or 'off'."),
+                "Disable autostart for the next run."),
         },
     });
     QCommandLineOption webPortOption("web-port", QApplication::translate("main", "Web api port (default: 8080)"), "port", "8080");
     parser.addOption(webPortOption);
-    QCommandLineOption startVPNOption("start-vpn", QApplication::translate("main", "Start the vpn in turned 'on' or 'off'."), "status", "");
+    QCommandLineOption startVPNOption("start-vpn", QApplication::translate("main", "Start the vpn, either 'on' or 'off'."), "status", "");
     parser.addOption(startVPNOption);
     parser.process(app);
 
@@ -121,6 +135,11 @@ int main(int argc, char **argv) {
         exit(0);
     }
 
+    if (startVPN != "" && startVPN != "on" && startVPN != "off") {
+        qDebug() << "Error: --start-vpn must be either 'on' or 'off'";
+        exit(0);
+    }
+
     if (hideSystray) {
         qDebug() << "Not showing systray icon because --no-systray option is set.";
     }
@@ -144,12 +163,6 @@ int main(int argc, char **argv) {
 
     QJsonModel *model = new QJsonModel;
 
-    /* load providers json */
-    QFile providerJson (":/providers.json");
-    providerJson.open(QIODevice::ReadOnly | QIODevice::Text);
-    QJsonModel *providers = new QJsonModel;
-    providers->loadJson(providerJson.readAll());
-
     /* the backend handler has slots for calling back to Go when triggered by
        signals in Qml. */
     ctx->setContextProperty("backend", &backend);
@@ -180,7 +193,6 @@ int main(int argc, char **argv) {
     GoString statusChangedEvt = {stCh, (long int)strlen(stCh)};
     SubscribeToEvent(statusChangedEvt, (void *)onStatusChanged);
 
-    QJsonValue defaultProvider = providers->json().object().value("default");
     /* we send json as bytes because it breaks as a simple string */
     QString QProvidersJSON(providers->json().toJson(QJsonDocument::Compact));
 
@@ -188,7 +200,7 @@ int main(int argc, char **argv) {
     InitializeBitmaskContext(
             toGoStr(defaultProvider.toString()),
             (char*)QProvidersJSON.toUtf8().data(), strlen(QProvidersJSON.toUtf8().data()),
-	    obfs4, disAutostart, toGoStr(startVPN));
+            obfs4, disAutostart, toGoStr(startVPN));
 
     /* if requested, enable web api for controlling the VPN */
     if (webAPI) {
diff --git a/pkg/backend/api.go b/pkg/backend/api.go
index a8d16a32bbce544a48fba6e012140b970018986b..d422bf3651563c153d7119a0b4ce93814f221acc 100644
--- a/pkg/backend/api.go
+++ b/pkg/backend/api.go
@@ -145,16 +145,6 @@ func EnableWebAPI(port string) {
 	go enableWebAPI(intPort)
 }
 
-/* these two are a bit redundant since we already add them to ctx. however, we
-   want to have them available before everything else, to be able to parse cli
-   arguments. In the long run, we probably want to move all vendoring to qt, so
-   this probably should not live in the backend, see #326*/
-
 func GetVersion() *C.char {
 	return C.CString(version.VERSION)
 }
-
-func GetAppName() *C.char {
-	p := bitmask.GetConfiguredProvider()
-	return C.CString(p.AppName)
-}