diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index 28cb8f8..698f17b 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -1388,6 +1388,11 @@ void MainWindow::showAddressChecker() {
         return;
     }
 
+    if (!m_wallet->isAddressTorsionFree(address)) {
+        Utils::showWarning(this, "Address is not torsion-free", "This address is not compatible with reference wallets.\n\nSending to this address MAY RESULT IN A LOSS OF FUNDS.");
+        return;
+    }
+
     SubaddressIndex index = m_wallet->subaddressIndex(address);
     if (!index.isValid()) {
         // TODO: probably mention lookahead here
diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp
index f9fa06a..4fed2ad 100644
--- a/src/libwalletqt/Wallet.cpp
+++ b/src/libwalletqt/Wallet.cpp
@@ -331,6 +331,15 @@ QString Wallet::getSubaddressLookahead() const {
     return QString("%1:%2").arg(QString::number(lookahead.first), QString::number(lookahead.second));
 }
 
+bool Wallet::isAddressTorsionFree(const QString& address) {
+    cryptonote::address_parse_info info;
+    bool r = cryptonote::get_account_address_from_str(info, m_wallet2->nettype(), address.toStdString());
+    if (!r) {
+        return false;
+    }
+    return rct::isInMainSubgroup(rct::pk2rct(info.address.m_spend_public_key)) && rct::isInMainSubgroup(rct::pk2rct(info.address.m_view_public_key));
+}
+
 // #################### Seed ####################
 
 QString Wallet::getSeed(const QString &seedOffset) const {
diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h
index 74838c6..79b1f15 100644
--- a/src/libwalletqt/Wallet.h
+++ b/src/libwalletqt/Wallet.h
@@ -176,6 +176,8 @@ public:
     void deviceShowAddressAsync(quint32 accountIndex, quint32 addressIndex, const QString &paymentId);
     QString getSubaddressLookahead() const;
 
+    bool isAddressTorsionFree(const QString& address);
+
     // ##### Seed #####
 
     //! returns mnemonic seed