diff --git a/core/src/main/java/haveno/core/api/XmrConnectionService.java b/core/src/main/java/haveno/core/api/XmrConnectionService.java
index 88d0117f8e..d686d64925 100644
--- a/core/src/main/java/haveno/core/api/XmrConnectionService.java
+++ b/core/src/main/java/haveno/core/api/XmrConnectionService.java
@@ -24,6 +24,7 @@ import haveno.common.UserThread;
 import haveno.common.app.DevEnv;
 import haveno.common.config.BaseCurrencyNetwork;
 import haveno.common.config.Config;
+import haveno.core.locale.Res;
 import haveno.core.trade.HavenoUtils;
 import haveno.core.user.Preferences;
 import haveno.core.xmr.model.EncryptedConnectionList;
@@ -43,7 +44,6 @@ import java.util.Set;
 
 import org.apache.commons.lang3.exception.ExceptionUtils;
 
-import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.IntegerProperty;
 import javafx.beans.property.LongProperty;
 import javafx.beans.property.ObjectProperty;
@@ -51,7 +51,6 @@ import javafx.beans.property.ReadOnlyDoubleProperty;
 import javafx.beans.property.ReadOnlyIntegerProperty;
 import javafx.beans.property.ReadOnlyLongProperty;
 import javafx.beans.property.ReadOnlyObjectProperty;
-import javafx.beans.property.SimpleBooleanProperty;
 import javafx.beans.property.SimpleIntegerProperty;
 import javafx.beans.property.SimpleLongProperty;
 import javafx.beans.property.SimpleObjectProperty;
@@ -91,7 +90,7 @@ public final class XmrConnectionService {
     private final LongProperty chainHeight = new SimpleLongProperty(0);
     private final DownloadListener downloadListener = new DownloadListener();
     @Getter
-    private final BooleanProperty connectionServiceFallbackHandlerActive = new SimpleBooleanProperty();
+    private final SimpleStringProperty connectionServiceFallbackHandler = new SimpleStringProperty();
     @Getter
     private final StringProperty connectionServiceErrorMsg = new SimpleStringProperty();
     private final LongProperty numUpdates = new SimpleLongProperty(0);
@@ -261,6 +260,7 @@ public final class XmrConnectionService {
 
     private MoneroRpcConnection getBestConnection(Collection<MoneroRpcConnection> ignoredConnections) {
         accountService.checkAccountOpen();
+        if (!fallbackApplied && lastUsedLocalSyncingNode() && !xmrLocalNode.isDetected()) return null; // user needs to explicitly allow fallback after syncing local node
         Set<MoneroRpcConnection> ignoredConnectionsSet = new HashSet<>(ignoredConnections);
         addLocalNodeIfIgnored(ignoredConnectionsSet);
         MoneroRpcConnection bestConnection = connectionManager.getBestAvailableConnection(ignoredConnectionsSet.toArray(new MoneroRpcConnection[0])); // checks connections
@@ -604,9 +604,6 @@ public final class XmrConnectionService {
                 if (coreContext.isApiUser()) connectionManager.setAutoSwitch(connectionList.getAutoSwitch());
                 else connectionManager.setAutoSwitch(true); // auto switch is always enabled on desktop ui
 
-                // start local node if applicable
-                maybeStartLocalNode();
-
                 // update connection
                 if (connectionManager.getConnection() == null || connectionManager.getAutoSwitch()) {
                     MoneroRpcConnection bestConnection = getBestConnection();
@@ -619,9 +616,6 @@ public final class XmrConnectionService {
                 MoneroRpcConnection connection = new MoneroRpcConnection(config.xmrNode, config.xmrNodeUsername, config.xmrNodePassword).setPriority(1);
                 if (isProxyApplied(connection)) connection.setProxyUri(getProxyUri());
                 connectionManager.setConnection(connection);
-
-                // start local node if applicable
-                maybeStartLocalNode();
             }
 
             // register connection listener
@@ -634,20 +628,8 @@ public final class XmrConnectionService {
         onConnectionChanged(connectionManager.getConnection());
     }
 
-    private void maybeStartLocalNode() {
-
-        // skip if seed node
-        if (HavenoUtils.isSeedNode()) return;
-
-        // start local node if offline and used as last connection
-        if (connectionManager.getConnection() != null && xmrLocalNode.equalsUri(connectionManager.getConnection().getUri()) && !xmrLocalNode.isDetected() && !xmrLocalNode.shouldBeIgnored()) {
-            try {
-                log.info("Starting local node");
-                xmrLocalNode.start();
-            } catch (Exception e) {
-                log.error("Unable to start local monero node, error={}\n", e.getMessage(), e);
-            }
-        }
+    private boolean lastUsedLocalSyncingNode() {
+        return connectionManager.getConnection() != null && xmrLocalNode.equalsUri(connectionManager.getConnection().getUri()) && !xmrLocalNode.isDetected() && !xmrLocalNode.shouldBeIgnored();
     }
 
     private void onConnectionChanged(MoneroRpcConnection currentConnection) {
@@ -733,12 +715,17 @@ public final class XmrConnectionService {
                     if (isShutDownStarted) return;
 
                     // invoke fallback handling on startup error
-                    boolean canFallback = isFixedConnection() || isCustomConnections();
+                    boolean canFallback = isFixedConnection() || isCustomConnections() || lastUsedLocalSyncingNode();
                     if (lastInfo == null && canFallback) {
-                        if (!connectionServiceFallbackHandlerActive.get() && (lastFallbackInvocation == null || System.currentTimeMillis() - lastFallbackInvocation > FALLBACK_INVOCATION_PERIOD_MS)) {
-                            log.warn("Failed to fetch daemon info from custom connection on startup: " + e.getMessage());
+                        if (connectionServiceFallbackHandler.get() == null || connectionServiceFallbackHandler.equals("") && (lastFallbackInvocation == null || System.currentTimeMillis() - lastFallbackInvocation > FALLBACK_INVOCATION_PERIOD_MS)) {
                             lastFallbackInvocation = System.currentTimeMillis();
-                            connectionServiceFallbackHandlerActive.set(true);
+                            if (lastUsedLocalSyncingNode()) {
+                                log.warn("Failed to fetch daemon info from local connection on startup: " + e.getMessage());
+                                connectionServiceFallbackHandler.set(Res.get("connectionFallback.localNode"));
+                            } else {
+                                log.warn("Failed to fetch daemon info from custom connection on startup: " + e.getMessage());
+                                connectionServiceFallbackHandler.set(Res.get("connectionFallback.customNode"));
+                            }
                         }
                         return;
                     }
diff --git a/core/src/main/java/haveno/core/app/HavenoSetup.java b/core/src/main/java/haveno/core/app/HavenoSetup.java
index 6637511298..4ac7b23512 100644
--- a/core/src/main/java/haveno/core/app/HavenoSetup.java
+++ b/core/src/main/java/haveno/core/app/HavenoSetup.java
@@ -158,7 +158,7 @@ public class HavenoSetup {
             rejectedTxErrorMessageHandler;
     @Setter
     @Nullable
-    private Consumer<Boolean> displayMoneroConnectionFallbackHandler;        
+    private Consumer<String> displayMoneroConnectionFallbackHandler;        
     @Setter
     @Nullable
     private Consumer<Boolean> displayTorNetworkSettingsHandler;
@@ -430,7 +430,7 @@ public class HavenoSetup {
         getXmrWalletSyncProgress().addListener((observable, oldValue, newValue) -> resetStartupTimeout());
 
         // listen for fallback handling
-        getConnectionServiceFallbackHandlerActive().addListener((observable, oldValue, newValue) -> {
+        getConnectionServiceFallbackHandler().addListener((observable, oldValue, newValue) -> {
             if (displayMoneroConnectionFallbackHandler == null) return;
             displayMoneroConnectionFallbackHandler.accept(newValue);
         });
@@ -734,8 +734,8 @@ public class HavenoSetup {
         return xmrConnectionService.getConnectionServiceErrorMsg();
     }
 
-    public BooleanProperty getConnectionServiceFallbackHandlerActive() {
-        return xmrConnectionService.getConnectionServiceFallbackHandlerActive();
+    public StringProperty getConnectionServiceFallbackHandler() {
+        return xmrConnectionService.getConnectionServiceFallbackHandler();
     }
 
     public StringProperty getTopErrorMsg() {
diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties
index 82a09919ba..c434edb6cf 100644
--- a/core/src/main/resources/i18n/displayStrings.properties
+++ b/core/src/main/resources/i18n/displayStrings.properties
@@ -2058,7 +2058,8 @@ closedTradesSummaryWindow.totalTradeFeeInXmr.value={0} ({1} of total trade amoun
 walletPasswordWindow.headline=Enter password to unlock
 
 connectionFallback.headline=Connection error
-connectionFallback.msg=Error connecting to your custom Monero node(s).\n\nDo you want to try the next best available Monero node?
+connectionFallback.customNode=Error connecting to your custom Monero node(s).\n\nDo you want to use the next best available Monero node?
+connectionFallback.localNode=Error connecting to your last used local node.\n\nDo you want to use the next best available Monero node?
 
 torNetworkSettingWindow.header=Tor networks settings
 torNetworkSettingWindow.noBridges=Don't use bridges
diff --git a/core/src/main/resources/i18n/displayStrings_cs.properties b/core/src/main/resources/i18n/displayStrings_cs.properties
index 25b796e403..a009d33060 100644
--- a/core/src/main/resources/i18n/displayStrings_cs.properties
+++ b/core/src/main/resources/i18n/displayStrings_cs.properties
@@ -2057,7 +2057,7 @@ closedTradesSummaryWindow.totalTradeFeeInXmr.value={0} ({1} z celkového objemu
 walletPasswordWindow.headline=Pro odemknutí zadejte heslo
 
 connectionFallback.headline=Chyba připojení
-connectionFallback.msg=Chyba při připojování k vlastním uzlům Monero.\n\nChcete vyzkoušet další nejlepší dostupný uzel Monero?
+connectionFallback.customNode=Chyba při připojování k vlastním uzlům Monero.\n\nChcete vyzkoušet další nejlepší dostupný uzel Monero?
 
 torNetworkSettingWindow.header=Nastavení sítě Tor
 torNetworkSettingWindow.noBridges=Nepoužívat most (bridge)
diff --git a/desktop/src/main/java/haveno/desktop/main/MainViewModel.java b/desktop/src/main/java/haveno/desktop/main/MainViewModel.java
index 670543a7aa..8c36eaf179 100644
--- a/desktop/src/main/java/haveno/desktop/main/MainViewModel.java
+++ b/desktop/src/main/java/haveno/desktop/main/MainViewModel.java
@@ -335,25 +335,23 @@ public class MainViewModel implements ViewModel, HavenoSetup.HavenoSetupListener
             tacWindow.onAction(acceptedHandler::run).show();
         }, 1));
 
-        havenoSetup.setDisplayMoneroConnectionFallbackHandler(show -> {
-            if (moneroConnectionFallbackPopup == null) {
+        havenoSetup.setDisplayMoneroConnectionFallbackHandler(fallbackMsg -> {
+            if (fallbackMsg != null && !fallbackMsg.isEmpty()) {
                 moneroConnectionFallbackPopup = new Popup()
-                    .headLine(Res.get("connectionFallback.headline"))
-                    .warning(Res.get("connectionFallback.msg"))
-                    .closeButtonText(Res.get("shared.no"))
-                    .actionButtonText(Res.get("shared.yes"))
-                    .onAction(() -> {
-                        havenoSetup.getConnectionServiceFallbackHandlerActive().set(false);
-                        new Thread(() -> HavenoUtils.xmrConnectionService.fallbackToBestConnection()).start();
-                    })
-                    .onClose(() -> {
-                        log.warn("User has declined to fallback to the next best available Monero node.");
-                        havenoSetup.getConnectionServiceFallbackHandlerActive().set(false);
-                    });
-            }
-            if (show) {
+                        .headLine(Res.get("connectionFallback.headline"))
+                        .warning(fallbackMsg)
+                        .closeButtonText(Res.get("shared.no"))
+                        .actionButtonText(Res.get("shared.yes"))
+                        .onAction(() -> {
+                            havenoSetup.getConnectionServiceFallbackHandler().set("");
+                            new Thread(() -> HavenoUtils.xmrConnectionService.fallbackToBestConnection()).start();
+                        })
+                        .onClose(() -> {
+                            log.warn("User has declined to fallback to the next best available Monero node.");
+                            havenoSetup.getConnectionServiceFallbackHandler().set("");
+                        });
                 moneroConnectionFallbackPopup.show();
-            } else if (moneroConnectionFallbackPopup.isDisplayed()) {
+            } else if (moneroConnectionFallbackPopup != null && moneroConnectionFallbackPopup.isDisplayed()) {
                 moneroConnectionFallbackPopup.hide();
             }
         });