diff --git a/router/java/src/net/i2p/router/transport/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java
index 3029a1ce8c0a5c1e2d8ccb65ce67846182357841..44c6a8970b95d88c600cf9c9eff16e3ff7358fe5 100644
--- a/router/java/src/net/i2p/router/transport/TransportManager.java
+++ b/router/java/src/net/i2p/router/transport/TransportManager.java
@@ -977,7 +977,10 @@ public class TransportManager implements TransportEventListener {
                         _upnpUpdateQueued = true;
                         _context.simpleTimer2().addEvent(new UpdatePorts(), 3250);
                     } else {
-                        _upnpManager.update(getPorts());
+                        // throw onto timer to avoid deadlock
+                        //_upnpManager.update(getPorts());
+                        _upnpUpdateQueued = true;
+                        _context.simpleTimer2().addEvent(new UpdatePorts(), 0);
                     }
                 }
             }
@@ -991,9 +994,10 @@ public class TransportManager implements TransportEventListener {
      */
     private class UpdatePorts implements SimpleTimer.TimedEvent {
         public void timeReached() {
+            Set<Port> ports = getPorts();
             synchronized (_upnpManager) {
                 _upnpUpdateQueued = false;
-                _upnpManager.update(getPorts());
+                _upnpManager.update(ports);
             }
         }
     }