diff --git a/pages/SharedRingDB.qml b/pages/SharedRingDB.qml
index 4235bad2..a88bbe14 100644
--- a/pages/SharedRingDB.qml
+++ b/pages/SharedRingDB.qml
@@ -50,15 +50,6 @@ Rectangle {
         return true
     }
 
-    function validUnsigned(s) {
-        if (s.length == 0)
-            return false
-        for (var i = 0; i < s.length; ++i)
-            if ("0123456789".indexOf(s[i]) == -1)
-                return false
-        return true
-    }
-
     function validRing(str, relative) {
         var outs = str.split(" ");
         if (outs.length == 0)
@@ -109,136 +100,6 @@ Rectangle {
             color: MoneroComponents.Style.defaultFontColor
         }
 
-        MoneroComponents.LabelSubheader {
-            Layout.fillWidth: true
-            textFormat: Text.RichText
-            text: qsTr("Outputs marked as spent") + translationManager.emptyString
-            tooltip: qsTr(
-                    "In order to obscure which inputs in a Monero transaction are being spent, a third party should not be able " +
-                    "to tell which inputs in a ring are already known to be spent. Being able to do so would weaken the protection " +
-                    "afforded by ring signatures. If all but one of the inputs are known to be already spent, then the input being " +
-                    "actually spent becomes apparent, thereby nullifying the effect of ring signatures, one of the three main layers " +
-                    "of privacy protection Monero uses.<br>" +
-                    "To help transactions avoid those inputs, a list of known spent ones can be used to avoid using them in new " +
-                    "transactions. Such a list is maintained by the Monero project and is available on the getmonero.org website, " +
-                    "and you can import this list here.<br>" +
-                    "Alternatively, you can scan the blockchain (and the blockchain of key-reusing Monero clones) yourself " +
-                    "using the monero-blockchain-mark-spent-outputs tool to create a list of known spent outputs.<br>"
-                ) + translationManager.emptyString
-        }
-
-        MoneroComponents.TextPlain {
-            textFormat: Text.RichText
-            font.family: MoneroComponents.Style.fontRegular.name
-            font.pixelSize: 14
-            text: qsTr("This sets which outputs are known to be spent, and thus not to be used as privacy placeholders in ring signatures. ") +
-                  qsTr("You should only have to load a file when you want to refresh the list. Manual adding/removing is possible if needed.") + translationManager.emptyString
-            wrapMode: Text.Wrap
-            Layout.fillWidth: true;
-            color: MoneroComponents.Style.defaultFontColor
-        }
-
-        ColumnLayout {
-            Layout.fillWidth: true
-            Layout.topMargin: 12
-
-            FileDialog {
-                id: loadBlackballFileDialog
-                title: qsTr("Please choose a file from which to load outputs to mark as spent") + translationManager.emptyString;
-                folder: "file://"
-                nameFilters: ["*"]
-
-                onAccepted: {
-                    loadBlackballFileLine.text = walletManager.urlToLocalPath(loadBlackballFileDialog.fileUrl)
-                }
-            }
-
-            MoneroComponents.LineEdit {
-                id: loadBlackballFileLine
-                Layout.fillWidth: true
-                fontSize: 16
-                placeholderFontSize: 16
-                placeholderText: qsTr("Path to file") + "..." + translationManager.emptyString
-                labelFontSize: 14
-                labelText: qsTr("Filename with outputs to mark as spent") + ":" + translationManager.emptyString
-                copyButton: true
-                readOnly: false
-            }
-
-            RowLayout {
-                Layout.fillWidth: true
-                Layout.topMargin: 18
-
-                MoneroComponents.StandardButton {
-                    id: selectBlackballFileButton
-                    text: qsTr("Browse") + translationManager.emptyString
-                    enabled: true
-                    small: true
-                    onClicked: {
-                      loadBlackballFileDialog.open()
-                    }
-                }
-
-                MoneroComponents.StandardButton {
-                    id: loadBlackballFileButton
-                    text: qsTr("Load") + translationManager.emptyString
-                    small: true
-                    enabled: !!appWindow.currentWallet && loadBlackballFileLine.text !== ""
-                    onClicked: appWindow.currentWallet.blackballOutputs(walletManager.urlToLocalPath(loadBlackballFileDialog.fileUrl), true)
-                }
-            }
-        }
-
-        GridLayout {
-            Layout.fillWidth: true
-            columnSpacing: 20
-
-            MoneroComponents.LineEdit {
-                id: blackballOutputAmountLine
-                Layout.fillWidth: true
-                fontSize: 16
-                labelFontSize: 14
-                labelText: qsTr("Or manually mark a single output as spent/unspent:") + translationManager.emptyString
-                placeholderFontSize: 16
-                placeholderText: qsTr("Paste output amount") + "..." + translationManager.emptyString
-                readOnly: false
-                validator: IntValidator { bottom: 0 }
-            }
-
-            MoneroComponents.LineEdit {
-                id: blackballOutputOffsetLine
-                Layout.fillWidth: true
-                fontSize: 16
-                labelFontSize: 14
-                labelText: " "
-                placeholderFontSize: 16
-                placeholderText: qsTr("Paste output offset") + "..." + translationManager.emptyString
-                readOnly: false
-                validator: IntValidator { bottom: 0 }
-            }
-        }
-
-        RowLayout {
-            Layout.fillWidth: true
-            Layout.topMargin: 18
-
-            MoneroComponents.StandardButton {
-                id: blackballButton
-                text: qsTr("Mark as spent") + translationManager.emptyString
-                small: true
-                enabled: !!appWindow.currentWallet && validUnsigned(blackballOutputAmountLine.text) && validUnsigned(blackballOutputOffsetLine.text)
-                onClicked: appWindow.currentWallet.blackballOutput(blackballOutputAmountLine.text, blackballOutputOffsetLine.text)
-            }
-
-            MoneroComponents.StandardButton {
-                id: unblackballButton
-                text: qsTr("Mark as unspent") + translationManager.emptyString
-                small: true
-                enabled: !!appWindow.currentWallet && validUnsigned(blackballOutputAmountLine.text) && validUnsigned(blackballOutputOffsetLine.text)
-                onClicked: appWindow.currentWallet.unblackballOutput(blackballOutputAmountLine.text, blackballOutputOffsetLine.text)
-            }
-        }
-
         MoneroComponents.LabelSubheader {
             Layout.fillWidth: true
             Layout.topMargin: 24
diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp
index 26b5e3ec..df21bb9b 100644
--- a/src/libwalletqt/Wallet.cpp
+++ b/src/libwalletqt/Wallet.cpp
@@ -1013,46 +1013,6 @@ QString Wallet::getDaemonLogPath() const
     return QString::fromStdString(m_walletImpl->getDefaultDataDir()) + "/bitmonero.log";
 }
 
-bool Wallet::blackballOutput(const QString &amount, const QString &offset)
-{
-    return m_walletImpl->blackballOutput(amount.toStdString(), offset.toStdString());
-}
-
-bool Wallet::blackballOutputs(const QList<QString> &pubkeys, bool add)
-{
-    std::vector<std::string> std_pubkeys;
-    foreach (const QString &pubkey, pubkeys) {
-        std_pubkeys.push_back(pubkey.toStdString());
-    }
-    return m_walletImpl->blackballOutputs(std_pubkeys, add);
-}
-
-bool Wallet::blackballOutputs(const QString &filename, bool add)
-{
-    QFile file(filename);
-
-    try {
-        if (!file.open(QIODevice::ReadOnly))
-            return false;
-        QList<QString> outputs;
-        QTextStream in(&file);
-        while (!in.atEnd()) {
-            outputs.push_back(in.readLine());
-        }
-        file.close();
-        return blackballOutputs(outputs, add);
-    }
-    catch (const std::exception &e) {
-        file.close();
-        return false;
-    }
-}
-
-bool Wallet::unblackballOutput(const QString &amount, const QString &offset)
-{
-    return m_walletImpl->unblackballOutput(amount.toStdString(), offset.toStdString());
-}
-
 QString Wallet::getRing(const QString &key_image)
 {
     std::vector<uint64_t> cring;
diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h
index 014d250f..11293b85 100644
--- a/src/libwalletqt/Wallet.h
+++ b/src/libwalletqt/Wallet.h
@@ -341,12 +341,6 @@ public:
     QString getDaemonLogPath() const;
     QString getWalletLogPath() const;
 
-    // Blackalled outputs
-    Q_INVOKABLE bool blackballOutput(const QString &amount, const QString &offset);
-    Q_INVOKABLE bool blackballOutputs(const QList<QString> &outputs, bool add);
-    Q_INVOKABLE bool blackballOutputs(const QString &filename, bool add);
-    Q_INVOKABLE bool unblackballOutput(const QString &amount, const QString &offset);
-
     // Rings
     Q_INVOKABLE QString getRing(const QString &key_image);
     Q_INVOKABLE QString getRings(const QString &txid);