diff --git a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java
index fce85e9266d70103a60063c8e87587f029f14bb3..89076f9ce34d48726df5b412e0b1b5b3584a939a 100644
--- a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java
+++ b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java
@@ -850,11 +850,20 @@ class EstablishmentManager {
             if (_log.shouldLog(Log.WARN))
                 _log.warn("Peer " + state + " sent us an invalid DH parameter", ippe);
             _inboundStates.remove(state.getRemoteHostId());
+            state.fail();
             return;
         }
-        _transport.send(_builder.buildSessionCreatedPacket(state,
+        UDPPacket pkt = _builder.buildSessionCreatedPacket(state,
                                                            _transport.getExternalPort(state.getSentIP().length == 16),
-                                                           _transport.getIntroKey()));
+                                                           _transport.getIntroKey());
+        if (pkt == null) {
+            if (_log.shouldLog(Log.WARN))
+                _log.warn("Peer " + state + " sent us an invalid IP?");
+            _inboundStates.remove(state.getRemoteHostId());
+            state.fail();
+            return;
+        }
+        _transport.send(pkt);
         state.createdPacketSent();
     }