diff --git a/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java b/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java
index 2abe6a8d..041db70a 100644
--- a/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java
+++ b/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java
@@ -840,8 +840,10 @@ public class XmrWalletService {
         if (wallet == null) maybeInitMainWallet();
         else if (wallet instanceof MoneroWalletRpc && !StringUtils.equals(oldProxyUri, newProxyUri)) {
             log.info("Restarting main wallet since proxy URI has changed");
-            closeMainWallet(true);
-            maybeInitMainWallet();
+            synchronized (wallet) {
+                closeMainWallet(true);
+                maybeInitMainWallet();
+            }
         } else {
             wallet.setDaemonConnection(connection);
             if (connection != null) {
@@ -1126,19 +1128,29 @@ public class XmrWalletService {
     }
 
     public BigInteger getBalanceForSubaddress(int subaddressIndex) {
-        return wallet.getBalance(0, subaddressIndex);
+        synchronized (wallet) {
+            return wallet.getBalance(0, subaddressIndex);
+        }
     }
 
     public BigInteger getAvailableBalanceForSubaddress(int subaddressIndex) {
-        return wallet.getUnlockedBalance(0, subaddressIndex);
+        synchronized (wallet) {
+            return wallet.getUnlockedBalance(0, subaddressIndex);
+        }
     }
 
     public BigInteger getBalance() {
-        return wallet != null ? wallet.getBalance(0) : BigInteger.valueOf(0);
+        if (wallet == null) return BigInteger.valueOf(0);
+        synchronized (wallet) {
+            return wallet.getBalance(0);
+        }
     }
 
     public BigInteger getAvailableBalance() {
-        return wallet != null ? wallet.getUnlockedBalance(0) : BigInteger.valueOf(0);
+        if (wallet == null) return BigInteger.valueOf(0);
+        synchronized (wallet) {
+            return wallet.getUnlockedBalance(0);
+        }
     }
 
     public Stream<XmrAddressEntry> getAddressEntriesForAvailableBalanceStream() {