diff --git a/router/java/src/net/i2p/router/transport/udp/PeerState2.java b/router/java/src/net/i2p/router/transport/udp/PeerState2.java
index af30b443f9fa4ba3327c0adb67785308af35f4a2..f5d69a6ab59f125299376e8271f6c61b1d35b8d2 100644
--- a/router/java/src/net/i2p/router/transport/udp/PeerState2.java
+++ b/router/java/src/net/i2p/router/transport/udp/PeerState2.java
@@ -129,6 +129,15 @@ public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback
         //    _wantACKSendSince = 0;
     }
 
+    /**
+     *  We received the message specified completely.
+     *  @param bytes if less than or equal to zero, message is a duplicate.
+     */
+    @Override
+    void messageFullyReceived(Long messageId, int bytes) {
+        // TODO
+    }
+
     // SSU 1 unsupported things
 
     @Override
@@ -278,6 +287,7 @@ public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback
     public void gotI2NP(I2NPMessage msg) {
         // 9 byte header
         int size = msg.getMessageSize() - 7;
+        messageFullyReceived(msg.getUniqueId(), size);
         // complete message, skip IMF and MessageReceiver
         _transport.messageReceived(msg, null, _remotePeer, 0, size);
     }
diff --git a/router/java/src/net/i2p/router/transport/udp/SSU2Payload.java b/router/java/src/net/i2p/router/transport/udp/SSU2Payload.java
index f2d3b23368ce1391ea21f9f405e7a11687b23f5f..9cfffac164463f97b493f43f4192421b53630c98 100644
--- a/router/java/src/net/i2p/router/transport/udp/SSU2Payload.java
+++ b/router/java/src/net/i2p/router/transport/udp/SSU2Payload.java
@@ -459,7 +459,7 @@ class SSU2Payload {
             tgt[off++] = b;
             DataHelper.toLong(tgt, off, 4, m.getMessageId());
             off += 4;
-            return off + m.writeFragment(tgt, off, 0);
+            return off + m.writeFragment(tgt, off, f);
         }
     }