diff --git a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
index 3f9e5acfc4535ab29512d41be748203101fec86c..89c12250c4e4a5d39a517425ba943c8916546f7c 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
@@ -31,7 +31,7 @@ import net.i2p.util.Log;
 public class EventPumper implements Runnable {
     private RouterContext _context;
     private Log _log;
-    private boolean _alive;
+    private volatile boolean _alive;
     private Selector _selector;
     private final List _bufCache;
     private final List _wantsRead = new ArrayList(16);
@@ -64,7 +64,7 @@ public class EventPumper implements Runnable {
         _expireIdleWriteTime = MAX_EXPIRE_IDLE_TIME;
     }
     
-    public void startPumping() {
+    public synchronized void startPumping() {
         if (_log.shouldLog(Log.INFO))
             _log.info("Starting pumper");
 //        _wantsRead = new ArrayList(16);
@@ -83,7 +83,7 @@ public class EventPumper implements Runnable {
         }
     }
     
-    public void stopPumping() {
+    public synchronized void stopPumping() {
         _alive = false;
         if (_selector != null && _selector.isOpen())
             _selector.wakeup();
diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
index 9f6b8e7ca4c10195d1bf607cd638b57fbf1d8362..84cd7673212bbc6395618cadb7479e7160cd35c4 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
@@ -416,7 +416,7 @@ public class NTCPTransport extends TransportImpl {
     private static final int NUM_CONCURRENT_READERS = 3;
     private static final int NUM_CONCURRENT_WRITERS = 3;
 
-    public RouterAddress startListening() {
+    public synchronized RouterAddress startListening() {
         if (_log.shouldLog(Log.DEBUG)) _log.debug("Starting ntcp transport listening");
         _finisher.start();
         _pumper.startPumping();
@@ -428,7 +428,7 @@ public class NTCPTransport extends TransportImpl {
         return bindAddress();
     }
 
-    public RouterAddress restartListening(RouterAddress addr) {
+    public synchronized RouterAddress restartListening(RouterAddress addr) {
         if (_log.shouldLog(Log.DEBUG)) _log.debug("Restarting ntcp transport listening");
         _finisher.start();
         _pumper.startPumping();
@@ -602,7 +602,7 @@ public class NTCPTransport extends TransportImpl {
      *  This doesn't (completely) block, caller should check isAlive()
      *  before calling startListening() or restartListening()
      */
-    public void stopListening() {
+    public synchronized void stopListening() {
         if (_log.shouldLog(Log.DEBUG)) _log.debug("Stopping ntcp transport");
         _pumper.stopPumping();
         _writer.stopWriting();