diff --git a/src/interfaces/wallet.h b/src/interfaces/wallet.h
--- a/src/interfaces/wallet.h
+++ b/src/interfaces/wallet.h
@@ -257,6 +257,9 @@
     // Remove wallet.
     virtual void remove() = 0;
 
+    //! Return whether is a legacy wallet
+    virtual bool isLegacy() = 0;
+
     //! Register handler for unload message.
     using UnloadFn = std::function<void()>;
     virtual std::unique_ptr<Handler> handleUnload(UnloadFn fn) = 0;
diff --git a/src/interfaces/wallet.cpp b/src/interfaces/wallet.cpp
--- a/src/interfaces/wallet.cpp
+++ b/src/interfaces/wallet.cpp
@@ -407,6 +407,7 @@
             return m_wallet->m_default_max_tx_fee;
         }
         void remove() override { RemoveWallet(m_wallet); }
+        bool isLegacy() override { return m_wallet->IsLegacy(); }
         std::unique_ptr<Handler> handleUnload(UnloadFn fn) override {
             return MakeHandler(m_wallet->NotifyUnload.connect(fn));
         }
diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp
--- a/src/qt/overviewpage.cpp
+++ b/src/qt/overviewpage.cpp
@@ -165,22 +165,53 @@
 void OverviewPage::setBalance(const interfaces::WalletBalances &balances) {
     int unit = walletModel->getOptionsModel()->getDisplayUnit();
     m_balances = balances;
-    if (walletModel->wallet().privateKeysDisabled()) {
-        ui->labelBalance->setText(
-            BitcoinUnits::formatWithUnit(unit, balances.watch_only_balance,
-                                         false, BitcoinUnits::separatorAlways));
-        ui->labelUnconfirmed->setText(BitcoinUnits::formatWithUnit(
-            unit, balances.unconfirmed_watch_only_balance, false,
-            BitcoinUnits::separatorAlways));
-        ui->labelImmature->setText(BitcoinUnits::formatWithUnit(
-            unit, balances.immature_watch_only_balance, false,
-            BitcoinUnits::separatorAlways));
-        ui->labelTotal->setText(BitcoinUnits::formatWithUnit(
-            unit,
-            balances.watch_only_balance +
-                balances.unconfirmed_watch_only_balance +
-                balances.immature_watch_only_balance,
-            false, BitcoinUnits::separatorAlways));
+    if (walletModel->wallet().isLegacy()) {
+        if (walletModel->wallet().privateKeysDisabled()) {
+            ui->labelBalance->setText(BitcoinUnits::formatWithUnit(
+                unit, balances.watch_only_balance, false,
+                BitcoinUnits::separatorAlways));
+            ui->labelUnconfirmed->setText(BitcoinUnits::formatWithUnit(
+                unit, balances.unconfirmed_watch_only_balance, false,
+                BitcoinUnits::separatorAlways));
+            ui->labelImmature->setText(BitcoinUnits::formatWithUnit(
+                unit, balances.immature_watch_only_balance, false,
+                BitcoinUnits::separatorAlways));
+            ui->labelTotal->setText(BitcoinUnits::formatWithUnit(
+                unit,
+                balances.watch_only_balance +
+                    balances.unconfirmed_watch_only_balance +
+                    balances.immature_watch_only_balance,
+                false, BitcoinUnits::separatorAlways));
+        } else {
+            ui->labelBalance->setText(BitcoinUnits::formatWithUnit(
+                unit, balances.balance, false, BitcoinUnits::separatorAlways));
+            ui->labelUnconfirmed->setText(BitcoinUnits::formatWithUnit(
+                unit, balances.unconfirmed_balance, false,
+                BitcoinUnits::separatorAlways));
+            ui->labelImmature->setText(BitcoinUnits::formatWithUnit(
+                unit, balances.immature_balance, false,
+                BitcoinUnits::separatorAlways));
+            ui->labelTotal->setText(BitcoinUnits::formatWithUnit(
+                unit,
+                balances.balance + balances.unconfirmed_balance +
+                    balances.immature_balance,
+                false, BitcoinUnits::separatorAlways));
+            ui->labelWatchAvailable->setText(BitcoinUnits::formatWithUnit(
+                unit, balances.watch_only_balance, false,
+                BitcoinUnits::separatorAlways));
+            ui->labelWatchPending->setText(BitcoinUnits::formatWithUnit(
+                unit, balances.unconfirmed_watch_only_balance, false,
+                BitcoinUnits::separatorAlways));
+            ui->labelWatchImmature->setText(BitcoinUnits::formatWithUnit(
+                unit, balances.immature_watch_only_balance, false,
+                BitcoinUnits::separatorAlways));
+            ui->labelWatchTotal->setText(BitcoinUnits::formatWithUnit(
+                unit,
+                balances.watch_only_balance +
+                    balances.unconfirmed_watch_only_balance +
+                    balances.immature_watch_only_balance,
+                false, BitcoinUnits::separatorAlways));
+        }
     } else {
         ui->labelBalance->setText(BitcoinUnits::formatWithUnit(
             unit, balances.balance, false, BitcoinUnits::separatorAlways));
@@ -195,21 +226,6 @@
             balances.balance + balances.unconfirmed_balance +
                 balances.immature_balance,
             false, BitcoinUnits::separatorAlways));
-        ui->labelWatchAvailable->setText(
-            BitcoinUnits::formatWithUnit(unit, balances.watch_only_balance,
-                                         false, BitcoinUnits::separatorAlways));
-        ui->labelWatchPending->setText(BitcoinUnits::formatWithUnit(
-            unit, balances.unconfirmed_watch_only_balance, false,
-            BitcoinUnits::separatorAlways));
-        ui->labelWatchImmature->setText(BitcoinUnits::formatWithUnit(
-            unit, balances.immature_watch_only_balance, false,
-            BitcoinUnits::separatorAlways));
-        ui->labelWatchTotal->setText(BitcoinUnits::formatWithUnit(
-            unit,
-            balances.watch_only_balance +
-                balances.unconfirmed_watch_only_balance +
-                balances.immature_watch_only_balance,
-            false, BitcoinUnits::separatorAlways));
     }
 
     // only show immature (newly mined) balance if it's non-zero, so as not to
diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp
--- a/src/wallet/rpcwallet.cpp
+++ b/src/wallet/rpcwallet.cpp
@@ -2252,7 +2252,8 @@
     }
         .Check(request);
 
-    if (pwallet->IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS)) {
+    if (pwallet->IsLegacy() &&
+        pwallet->IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS)) {
         throw JSONRPCError(RPC_WALLET_ERROR,
                            "Error: Private keys are disabled for this wallet");
     }
diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h
--- a/src/wallet/wallet.h
+++ b/src/wallet/wallet.h
@@ -1416,6 +1416,9 @@
      */
     bool SetWalletFlags(uint64_t overwriteFlags, bool memOnly);
 
+    /** Determine if we are a legacy wallet */
+    bool IsLegacy() const;
+
     /**
      * Returns a bracketed wallet name for displaying in logs, will return
      * [default wallet] if the wallet has no name.
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -4918,3 +4918,12 @@
     }
     NotifyCanGetAddressesChanged();
 }
+
+bool CWallet::IsLegacy() const {
+    if (m_internal_spk_managers.count(OutputType::LEGACY) == 0) {
+        return false;
+    }
+    auto spk_man = dynamic_cast<LegacyScriptPubKeyMan *>(
+        m_internal_spk_managers.at(OutputType::LEGACY));
+    return spk_man != nullptr;
+}
diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp
--- a/src/wallet/walletdb.cpp
+++ b/src/wallet/walletdb.cpp
@@ -773,7 +773,8 @@
                              wss.nKeys + wss.nCKeys, wss.m_unknown_records);
 
     // nTimeFirstKey is only reliable if all keys have metadata
-    if ((wss.nKeys + wss.nCKeys + wss.nWatchKeys) != wss.nKeyMeta) {
+    if (pwallet->IsLegacy() &&
+        (wss.nKeys + wss.nCKeys + wss.nWatchKeys) != wss.nKeyMeta) {
         auto spk_man = pwallet->GetOrCreateLegacyScriptPubKeyMan();
         if (spk_man) {
             LOCK(spk_man->cs_KeyStore);