diff --git a/router/java/test/junit/net/i2p/router/tunnel/InboundGatewayTest.java b/router/java/test/junit/net/i2p/router/tunnel/InboundGatewayTest.java
index 087e0ef496ceadf7d3286c81391a5c5a52cc750d..8c2bdaabe42960113e501819e4ca41818e259143 100644
--- a/router/java/test/junit/net/i2p/router/tunnel/InboundGatewayTest.java
+++ b/router/java/test/junit/net/i2p/router/tunnel/InboundGatewayTest.java
@@ -11,37 +11,58 @@ package net.i2p.router.tunnel;
 import java.util.ArrayList;
 import java.util.List;
 
-import junit.framework.TestCase;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static junit.framework.TestCase.*;
 import net.i2p.data.Hash;
+import net.i2p.data.RouterIdentity;
+import net.i2p.data.RouterInfo;
 import net.i2p.data.TunnelId;
 import net.i2p.data.i2np.DataMessage;
 import net.i2p.data.i2np.I2NPMessage;
+import net.i2p.router.Router;
 import net.i2p.router.RouterContext;
-import net.i2p.util.Log;
 
 /**
  * Quick unit test for base functionality of inbound tunnel 
  * operation
  */
-public class InboundGatewayTest extends TestCase{
-    private RouterContext _context;
-    private Log _log;
+public class InboundGatewayTest {
+    private static RouterContext _context;
+    private static TunnelGatewayPumper _pumper;
     private TunnelCreatorConfig _config;
     private TunnelGateway.QueuePreprocessor _preprocessor;
     private TunnelGateway.Sender _sender;
     private TestReceiver _receiver;
     private TunnelGateway _gw;
     
+    @BeforeClass
+    public static void globalSetUp() {
+        // order of these matters
+        Router r = new Router();
+        _context = new RouterContext(r);
+        _context.initAll();
+        r.runRouter();
+        RouterIdentity rIdentity = new TestRouterIdentity();
+        RouterInfo rInfo = new RouterInfo();
+        rInfo.setIdentity(rIdentity);
+        r.setRouterInfo(rInfo);
+        _pumper = new TunnelGatewayPumper(_context);
+    }
+    
+    @Before
     public void setUp() {
-        _context = new RouterContext(null);
         _config = prepareConfig(8);
-        _preprocessor = new TrivialPreprocessor(_context);
+        _preprocessor = new BatchedPreprocessor(_context,"test pre-processor");
         _sender = new InboundSender(_context, _config.getConfig(0));
         _receiver = new TestReceiver(_config);
-        _gw = new TunnelGateway(_context, _preprocessor, _sender, _receiver);
+        _gw = new PumpedTunnelGateway(_context, _preprocessor, _sender, _receiver, _pumper);
     }
     
-    public void testSmall() {
+    @Test
+    public void testSmall() throws Exception {
     	int runCount = 1;
     	
         List messages = new ArrayList(runCount);
@@ -57,8 +78,8 @@ public class InboundGatewayTest extends TestCase{
             messages.add(m);
             _gw.add(m, null, null);
         }
-        
-        long time = _context.clock().now() - start;
+
+        Thread.sleep(1000);
         
         List received = _receiver.clearReceived();
         for (int i = 0; i < messages.size(); i++) {
@@ -66,7 +87,8 @@ public class InboundGatewayTest extends TestCase{
         }
     }
     
-    public void testRouter() {
+    @Test
+    public void testRouter() throws Exception{
     	int runCount = 1;
     	
         List messages = new ArrayList(runCount);
@@ -85,7 +107,7 @@ public class InboundGatewayTest extends TestCase{
             _gw.add(m, to, null);
         }
         
-        long time = _context.clock().now() - start;
+        Thread.sleep(1000);
         
         List received = _receiver.clearReceived();
         for (int i = 0; i < messages.size(); i++) {
@@ -93,7 +115,8 @@ public class InboundGatewayTest extends TestCase{
         }
     }
     
-    public void testTunnel() {
+    @Test
+    public void testTunnel() throws Exception {
     	int runCount = 1;
     	
         List messages = new ArrayList(runCount);
@@ -113,7 +136,7 @@ public class InboundGatewayTest extends TestCase{
             _gw.add(m, to, tunnel);
         }
         
-        long time = _context.clock().now() - start;
+        Thread.sleep(1000);
         
         List received = _receiver.clearReceived();
         for (int i = 0; i < messages.size(); i++) {
@@ -121,7 +144,8 @@ public class InboundGatewayTest extends TestCase{
         }
     }
     
-    public void testLarge() {
+    @Test
+    public void testLarge() throws Exception {
     	int runCount = 1;
     	
         List messages = new ArrayList(runCount);
@@ -138,8 +162,7 @@ public class InboundGatewayTest extends TestCase{
             _gw.add(m, null, null);
         }
         
-        long time = _context.clock().now() - start;
-        //try { Thread.sleep(60*1000); } catch (Exception e) {}
+        Thread.sleep(1000);
         
         List received = _receiver.clearReceived();
         for (int i = 0; i < messages.size(); i++) {
@@ -147,10 +170,17 @@ public class InboundGatewayTest extends TestCase{
         }
     }
     
+    private static class TestRouterIdentity extends RouterIdentity {
+        @Override
+        public Hash getHash() {
+            return Hash.FAKE_HASH;
+        }
+    }
+    
     private class TestReceiver implements TunnelGateway.Receiver, FragmentHandler.DefragmentedReceiver {
         private TunnelCreatorConfig _config;
         private FragmentHandler _handler;
-        private List _received;
+        private volatile List _received;
         public TestReceiver(TunnelCreatorConfig config) {
             _config = config;
             _handler = new FragmentHandler(_context, TestReceiver.this);
@@ -173,6 +203,7 @@ public class InboundGatewayTest extends TestCase{
             return -1; // or do we need to return the real message ID?
         }        
         public void receiveComplete(I2NPMessage msg, Hash toRouter, TunnelId toTunnel) {
+            System.out.println("got something");
             _received.add(msg);
         }
         public List clearReceived() {