diff --git a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java
index 8533a48bca4e470fd10862532435edca22882578..4a9c48dc22ab1c0ce3e15b0c7316638b139feba5 100644
--- a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java
+++ b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java
@@ -66,6 +66,16 @@ public class InboundMessageDistributor implements GarlicMessageReceiver.CloveRec
             newMsg.setFromHash(orig.getFromHash());
             newMsg.setSearchKey(orig.getSearchKey());
             msg = newMsg;
+        } else if ( (_client != null) && 
+             (msg.getType() == DatabaseStoreMessage.MESSAGE_TYPE) &&
+             (((DatabaseStoreMessage)msg).getValueType() == DatabaseStoreMessage.KEY_TYPE_ROUTERINFO)) {
+            // FVSJ may result in an unsolicited RI store if the peer went non-ff.
+            // Maybe we can figure out a way to handle this safely, so we don't ask him again.
+            // For now, just hope we eventually find out through other means.
+            // Todo: if peer was ff and RI is not ff, queue for exploration in netdb (but that isn't part of the facade now)
+            if (_log.shouldLog(Log.WARN))
+                _log.warn("Dropping DSM down a tunnel for " + _client.toBase64() + ": " + msg);
+            return;
         } else if ( (_client != null) && 
              (msg.getType() != DeliveryStatusMessage.MESSAGE_TYPE) &&
              (msg.getType() != GarlicMessage.MESSAGE_TYPE) &&