diff --git a/router/java/src/net/i2p/router/message/OutboundClientMessageJobHelper.java b/router/java/src/net/i2p/router/message/OutboundClientMessageJobHelper.java
index 544576f35c5fe5b57e48f4f14300532ed9a94020..57de2924d57b55e4e038b2cf3a8aeafc45a7da6c 100644
--- a/router/java/src/net/i2p/router/message/OutboundClientMessageJobHelper.java
+++ b/router/java/src/net/i2p/router/message/OutboundClientMessageJobHelper.java
@@ -27,6 +27,7 @@ import net.i2p.data.i2np.DeliveryInstructions;
 import net.i2p.data.i2np.DeliveryStatusMessage;
 import net.i2p.data.i2np.GarlicMessage;
 import net.i2p.data.i2np.I2NPMessage;
+import net.i2p.router.LeaseSetKeys;
 import net.i2p.router.RouterContext;
 import net.i2p.router.TunnelInfo;
 import net.i2p.router.networkdb.kademlia.MessageWrapper;
@@ -156,8 +157,8 @@ class OutboundClientMessageJobHelper {
                                                ctx.random().nextLong(I2NPMessage.MAX_ID_VALUE),
                                                expiration, DeliveryInstructions.LOCAL);
         
-        // for now, skip this for ratchet
-        if (requireAck && recipientPK.getType() == EncType.ELGAMAL_2048) {
+        // for now, skip this for ratchet if there's no LS to bundle
+        if (requireAck && (bundledReplyLeaseSet != null || recipientPK.getType() == EncType.ELGAMAL_2048)) {
             // extend the expiration of the return message
             PayloadGarlicConfig ackClove = buildAckClove(ctx, from, replyTunnel, replyToken,
                                                          expiration + ACK_EXTRA_EXPIRATION, skm);
@@ -219,11 +220,18 @@ class OutboundClientMessageJobHelper {
         //ackInstructions.setEncrypted(false);
         
         DeliveryStatusMessage dsm = buildDSM(ctx, replyToken);
-        GarlicMessage msg = wrapDSM(ctx, skm, dsm);
-        if (msg == null) {
-            if (log.shouldLog(Log.WARN))
-                log.warn("Failed to wrap ack clove");
-            return null;
+        // wrap the DSM if we can
+        LeaseSetKeys lsk = ctx.keyManager().getKeys(from);
+        I2NPMessage msg;
+        if (lsk == null || lsk.isSupported(EncType.ELGAMAL_2048)) {
+            msg = wrapDSM(ctx, skm, dsm);
+            if (msg == null) {
+                if (log.shouldLog(Log.WARN))
+                    log.warn("Failed to wrap ack clove");
+                return null;
+            }
+        } else {
+            msg = dsm;
         }
         PayloadGarlicConfig ackClove = new PayloadGarlicConfig(Certificate.NULL_CERT,
                                                                ctx.random().nextLong(I2NPMessage.MAX_ID_VALUE),