diff --git a/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java b/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java
index 5692b6df2ee4e2fcd13f27b6e05403f0664b894b..4448122d01d37036e301593c0f91e6be0da284fa 100644
--- a/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java
+++ b/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java
@@ -9,6 +9,7 @@ package net.i2p.client.impl;
  *
  */
 
+import java.util.List;
 import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
@@ -363,15 +364,20 @@ class I2CPMessageProducer {
      *
      */
     public void createLeaseSet(I2PSessionImpl session, LeaseSet leaseSet, SigningPrivateKey signingPriv,
-                               PrivateKey priv) throws I2PSessionException {
+                               List<PrivateKey> privs) throws I2PSessionException {
         CreateLeaseSetMessage msg;
         int type = leaseSet.getType();
-        if (type == DatabaseEntry.KEY_TYPE_LEASESET)
+        if (type == DatabaseEntry.KEY_TYPE_LEASESET) {
             msg = new CreateLeaseSetMessage();
-        else
-            msg = new CreateLeaseSet2Message();
+            msg.setPrivateKey(privs.get(0));
+        } else {
+            CreateLeaseSet2Message msg2 = new CreateLeaseSet2Message();
+            for (PrivateKey priv : privs) {
+                msg2.addPrivateKey(priv);
+            }
+            msg = msg2;
+        }
         msg.setLeaseSet(leaseSet);
-        msg.setPrivateKey(priv);
         msg.setSigningPrivateKey(signingPriv);
         SessionId sid = session.getSessionId();
         if (sid == null) {
diff --git a/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java b/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java
index 9755d7f314595ba44502fbae8a5cbb0acbbee369..f0b9d9e3bc0bbf37f0697e7160d7951df8b0f634 100644
--- a/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java
+++ b/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java
@@ -315,7 +315,7 @@ class RequestLeaseSetMessageHandler extends HandlerImpl {
                 _context.random().nextBytes(dummy);
                 spk = new SigningPrivateKey(dummy);
             }
-            session.getProducer().createLeaseSet(session, leaseSet, spk, li.getPrivateKey());
+            session.getProducer().createLeaseSet(session, leaseSet, spk, li.getPrivateKeys());
             session.setLeaseSet(leaseSet);
             if (_log.shouldDebug())
                 _log.debug("Created and signed LeaseSet: " + leaseSet);
diff --git a/core/java/src/net/i2p/data/i2cp/CreateLeaseSet2Message.java b/core/java/src/net/i2p/data/i2cp/CreateLeaseSet2Message.java
index ae1fb0be9cbacc0abb2c3f8563cc744f2f7ae27f..0149b06bc1d21903f3b1aa7935f6b64a904dc199 100644
--- a/core/java/src/net/i2p/data/i2cp/CreateLeaseSet2Message.java
+++ b/core/java/src/net/i2p/data/i2cp/CreateLeaseSet2Message.java
@@ -138,8 +138,9 @@ public class CreateLeaseSet2Message extends CreateLeaseSetMessage {
 
     @Override
     protected byte[] doWriteMessage() throws I2CPMessageException, IOException {
+        int type = _leaseSet.getType();
         if (_sessionId == null || _leaseSet == null ||
-            (_leaseSet.getType() != DatabaseEntry.KEY_TYPE_META_LS2 && (_signingPrivateKey == null || _privateKey == null)))
+            (type != DatabaseEntry.KEY_TYPE_META_LS2 && (_signingPrivateKey == null || _privateKey == null)))
             throw new I2CPMessageException("Unable to write out the message as there is not enough data");
         int size = 4 // sessionId
                  + 1 // type
@@ -151,9 +152,11 @@ public class CreateLeaseSet2Message extends CreateLeaseSetMessage {
             _sessionId.writeBytes(os);
             os.write(_leaseSet.getType());
             _leaseSet.writeBytes(os);
-            if (_leaseSet.getType() != DatabaseEntry.KEY_TYPE_META_LS2) {
+            if (type != DatabaseEntry.KEY_TYPE_META_LS2) {
                 _signingPrivateKey.writeBytes(os);
-                _privateKey.writeBytes(os);
+                for (PrivateKey pk : getPrivateKeys()) {
+                    pk.writeBytes(os);
+                }
             }
         } catch (DataFormatException dfe) {
             throw new I2CPMessageException("Error writing out the message data", dfe);