diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/MainActivityErrorDialog.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/MainActivityErrorDialog.java
index f036b4119ec04a301c181ef89f05caf5b530f511..4034bd040a6998932ce6154df27a0141a62a34b1 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/MainActivityErrorDialog.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/MainActivityErrorDialog.java
@@ -18,6 +18,7 @@ package se.leap.bitmaskclient.base.fragments;
 
 import android.app.Dialog;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.os.Bundle;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -32,6 +33,8 @@ import se.leap.bitmaskclient.eip.EipCommand;
 import se.leap.bitmaskclient.base.models.Provider;
 import se.leap.bitmaskclient.providersetup.ProviderAPICommand;
 
+import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getPreferredCity;
+import static se.leap.bitmaskclient.base.utils.PreferenceHelper.setPreferredCity;
 import static se.leap.bitmaskclient.providersetup.ProviderAPI.UPDATE_INVALID_VPN_CERTIFICATE;
 import static se.leap.bitmaskclient.R.string.warning_option_try_ovpn;
 import static se.leap.bitmaskclient.R.string.warning_option_try_pt;
@@ -120,7 +123,12 @@ public class MainActivityErrorDialog extends DialogFragment {
                 break;
             case NO_MORE_GATEWAYS:
                 builder.setNegativeButton(R.string.cancel, (dialog, id) -> {});
-                if (provider.supportsPluggableTransports()) {
+                if (getPreferredCity(applicationContext) != null) {
+                    builder.setPositiveButton(R.string.warning_option_try_best, (dialog, which) -> {
+                        setPreferredCity(applicationContext, null);
+                        EipCommand.startVPN(applicationContext, false);
+                    });
+                } else if (provider.supportsPluggableTransports()) {
                     if (getUsePluggableTransports(applicationContext)) {
                         builder.setPositiveButton(warning_option_try_ovpn, ((dialog, which) -> {
                             usePluggableTransports(applicationContext, false);
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java b/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java
index 74226250d6dd1853ac9eb6145f0f960dab601dc9..d632c09e4c1b92c0a57f350e8a721beada1d5758 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java
@@ -84,6 +84,7 @@ import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_PROFILE;
 import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_VPN_CERTIFICATE;
 import static se.leap.bitmaskclient.base.models.Constants.SHARED_PREFERENCES;
 import static se.leap.bitmaskclient.base.utils.ConfigHelper.ensureNotOnMainThread;
+import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getPreferredCity;
 import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getUsePluggableTransports;
 import static se.leap.bitmaskclient.eip.EIP.EIPErrors.ERROR_INVALID_PROFILE;
 import static se.leap.bitmaskclient.eip.EIP.EIPErrors.ERROR_INVALID_VPN_CERTIFICATE;
@@ -317,7 +318,12 @@ public final class EIP extends JobIntentService implements Observer {
         Connection.TransportType transportType = getUsePluggableTransports(this) ? OBFS4 : OPENVPN;
         if (gateway == null ||
                 (profile = gateway.getProfile(transportType)) == null) {
-            setErrorResult(result, NO_MORE_GATEWAYS.toString(), getStringResourceForNoMoreGateways(), getString(R.string.app_name));
+            String preferredLocation = getPreferredCity(getApplicationContext());
+            if (preferredLocation != null) {
+                setErrorResult(result, NO_MORE_GATEWAYS.toString(), getStringResourceForNoMoreGateways(), getString(R.string.app_name), preferredLocation);
+            } else {
+                setErrorResult(result, NO_MORE_GATEWAYS.toString(), getStringResourceForNoMoreGateways(), getString(R.string.app_name));
+            }
             return;
         }
 
@@ -527,7 +533,10 @@ public final class EIP extends JobIntentService implements Observer {
 
 
     private @StringRes int getStringResourceForNoMoreGateways() {
-        if (ProviderObservable.getInstance().getCurrentProvider().supportsPluggableTransports()) {
+        boolean isManualGatewaySelection = PreferenceHelper.getLastConnectedVpnProfile(getApplicationContext()) != null;
+        if (isManualGatewaySelection) {
+            return R.string.warning_no_more_gateways_manual_gw_selection;
+        } else if (ProviderObservable.getInstance().getCurrentProvider().supportsPluggableTransports()) {
             if (PreferenceHelper.getUsePluggableTransports(getApplicationContext())) {
                 return R.string.warning_no_more_gateways_use_ovpn;
             } else {
diff --git a/app/src/main/res/values/untranslatable.xml b/app/src/main/res/values/untranslatable.xml
index 9c6afadd59b32f2e8fbebc6ce76deaea8e15512b..6f989cc82a7a40f6551877fa29cbb7101e219233 100644
--- a/app/src/main/res/values/untranslatable.xml
+++ b/app/src/main/res/values/untranslatable.xml
@@ -44,5 +44,9 @@
     <string name="circleImageView" translatable="false">CircleImageView</string>
     <string name="copyright_circleImageView" translatable="false">Copyright 2014 - 2020 Henning Dodenhof. Licensed under the Apache License, Version 2.0 </string>
 
+   <!-- gateway selector, move to strings.xml, once the wording is clear -->
+    <string name="warning_no_more_gateways_manual_gw_selection" translatable="false">%1$s could not connect to %2$s. Do you want to try to connect automatically with best location?</string>
+    <string name="warning_option_try_best"translatable="false">Try best location</string>
+
 
 </resources>
\ No newline at end of file