diff --git a/router/java/test/junit/net/i2p/router/tunnel/GatewayTestBase.java b/router/java/test/junit/net/i2p/router/tunnel/GatewayTestBase.java
index 14fdc0ff05bef10773dbda346e79c8d828b23cba..980e77353d9be012af6161bb04485b0eeb07f90c 100644
--- a/router/java/test/junit/net/i2p/router/tunnel/GatewayTestBase.java
+++ b/router/java/test/junit/net/i2p/router/tunnel/GatewayTestBase.java
@@ -6,23 +6,18 @@ import java.util.ArrayList;
 import java.util.List;
 
 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 org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-public abstract class GatewayTestBase {
+public abstract class GatewayTestBase extends RouterTestBase {
 
-    protected static RouterContext _context;
+    
     private static TunnelGatewayPumper _pumper;
-    protected static TunnelCreatorConfig _config;
     
     private TunnelGateway.QueuePreprocessor _preprocessor;
     protected TunnelGateway.Sender _sender;
@@ -30,18 +25,8 @@ public abstract class GatewayTestBase {
     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);
+    public static void gatewayClassSetup() {
         _pumper = new TunnelGatewayPumper(_context);
-        _config = prepareConfig(8);
     }
     
     @Before
@@ -149,13 +134,6 @@ public abstract class GatewayTestBase {
         }
     }
     
-    private static class TestRouterIdentity extends RouterIdentity {
-        @Override
-        public Hash getHash() {
-            return Hash.FAKE_HASH;
-        }
-    }
-    
     private static DataMessage getTestMessage(int size) {
         DataMessage m = new DataMessage(_context);
         m.setData(new byte[size]);
@@ -207,38 +185,4 @@ public abstract class GatewayTestBase {
             return null;
         }
     }
-    
-    
-    private static TunnelCreatorConfig prepareConfig(int numHops) {
-        Hash peers[] = new Hash[numHops];
-        byte tunnelIds[][] = new byte[numHops][4];
-        for (int i = 0; i < numHops; i++) {
-            peers[i] = new Hash();
-            peers[i].setData(new byte[Hash.HASH_LENGTH]);
-            _context.random().nextBytes(peers[i].getData());
-            _context.random().nextBytes(tunnelIds[i]);
-        }
-        
-        TunnelCreatorConfig config = new TunnelCreatorConfig(_context, numHops, false);
-        for (int i = 0; i < numHops; i++) {
-            config.setPeer(i, peers[i]);
-            HopConfig cfg = config.getConfig(i);
-            cfg.setExpiration(_context.clock().now() + 60000);
-            cfg.setIVKey(_context.keyGenerator().generateSessionKey());
-            cfg.setLayerKey(_context.keyGenerator().generateSessionKey());
-            if (i > 0)
-                cfg.setReceiveFrom(peers[i-1]);
-            else
-                cfg.setReceiveFrom(null);
-            cfg.setReceiveTunnelId(tunnelIds[i]);
-            if (i < numHops - 1) {
-                cfg.setSendTo(peers[i+1]);
-                cfg.setSendTunnelId(tunnelIds[i+1]);
-            } else {
-                cfg.setSendTo(null);
-                cfg.setSendTunnelId(null);
-            }
-        }
-        return config;
-    }
 }
diff --git a/router/java/test/junit/net/i2p/router/tunnel/InboundTest.java b/router/java/test/junit/net/i2p/router/tunnel/InboundTest.java
index b6f60b38f844558281df7c44920771d692bd4aac..c9266b287530dcf5ca50c2363ed7ef5e8cd996cf 100644
--- a/router/java/test/junit/net/i2p/router/tunnel/InboundTest.java
+++ b/router/java/test/junit/net/i2p/router/tunnel/InboundTest.java
@@ -8,78 +8,42 @@ package net.i2p.router.tunnel;
  *
  */
 
-import junit.framework.TestCase;
-import net.i2p.I2PAppContext;
+import org.junit.Test;
+
 import net.i2p.data.DataHelper;
 import net.i2p.data.Hash;
-import net.i2p.router.RouterContext;
+
+import static junit.framework.Assert.assertTrue;
 
 /**
  * Quick unit test for base functionality of inbound tunnel 
  * operation
  *
  */
-public class InboundTest extends TestCase{
-    private RouterContext _context;
-    
-    public void setUp() {
-        _context = new RouterContext(null);
-    }
+public class InboundTest extends RouterTestBase {
     
+    @Test
     public void testInbound() {
     	int numHops = 8;
-    	TunnelCreatorConfig config = prepareConfig(numHops);
     	
         byte orig[] = new byte[128];
         byte message[] = new byte[128];
         _context.random().nextBytes(orig); // might as well fill the IV
         System.arraycopy(orig, 0, message, 0, message.length);
         
-        InboundGatewayProcessor p = new InboundGatewayProcessor(_context, config.getConfig(0));
+        InboundGatewayProcessor p = new InboundGatewayProcessor(_context, _config.getConfig(0));
         p.process(message, 0, message.length, null);
         
         for (int i = 1; i < numHops-1; i++) {
-            HopProcessor hop = new HopProcessor(_context, config.getConfig(i));
-            Hash prev = config.getConfig(i).getReceiveFrom();
+            HopProcessor hop = new HopProcessor(_context, _config.getConfig(i));
+            Hash prev = _config.getConfig(i).getReceiveFrom();
             assertTrue(hop.process(message, 0, message.length, prev));
         }
         
-        InboundEndpointProcessor end = new InboundEndpointProcessor(_context, config);
-        assertTrue(end.retrievePreprocessedData(message, 0, message.length, config.getPeer(numHops-2)));
+        InboundEndpointProcessor end = new InboundEndpointProcessor(_context, _config);
+        assertTrue(end.retrievePreprocessedData(message, 0, message.length, _config.getPeer(numHops-2)));
         
         assertTrue(DataHelper.eq(orig, 16, message, 16, orig.length - 16));
     }
     
-    private TunnelCreatorConfig prepareConfig(int numHops) {
-        Hash peers[] = new Hash[numHops];
-        byte tunnelIds[][] = new byte[numHops][4];
-        for (int i = 0; i < numHops; i++) {
-            peers[i] = new Hash();
-            peers[i].setData(new byte[Hash.HASH_LENGTH]);
-            _context.random().nextBytes(peers[i].getData());
-            _context.random().nextBytes(tunnelIds[i]);
-        }
-        
-        TunnelCreatorConfig config = new TunnelCreatorConfig(_context, numHops, false);
-        for (int i = 0; i < numHops; i++) {
-            config.setPeer(i, peers[i]);
-            HopConfig cfg = config.getConfig(i);
-            cfg.setExpiration(_context.clock().now() + 60000);
-            cfg.setIVKey(_context.keyGenerator().generateSessionKey());
-            cfg.setLayerKey(_context.keyGenerator().generateSessionKey());
-            if (i > 0)
-                cfg.setReceiveFrom(peers[i-1]);
-            else
-                cfg.setReceiveFrom(null);
-            cfg.setReceiveTunnelId(tunnelIds[i]);
-            if (i < numHops - 1) {
-                cfg.setSendTo(peers[i+1]);
-                cfg.setSendTunnelId(tunnelIds[i+1]);
-            } else {
-                cfg.setSendTo(null);
-                cfg.setSendTunnelId(null);
-            }
-        }
-        return config;
-    }
 }
diff --git a/router/java/test/junit/net/i2p/router/tunnel/RouterTestBase.java b/router/java/test/junit/net/i2p/router/tunnel/RouterTestBase.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e700d0814ffe688061173bf4f31d20c96ef5f8d
--- /dev/null
+++ b/router/java/test/junit/net/i2p/router/tunnel/RouterTestBase.java
@@ -0,0 +1,74 @@
+package net.i2p.router.tunnel;
+
+import net.i2p.data.Hash;
+import net.i2p.data.RouterIdentity;
+import net.i2p.data.RouterInfo;
+import net.i2p.router.Router;
+import net.i2p.router.RouterContext;
+
+import org.junit.BeforeClass;
+
+/**
+ * Base class for tests that need a functioning router set up.
+ * 
+ * @author zab
+ */
+public abstract class RouterTestBase {
+    
+    protected static RouterContext _context;
+    protected static TunnelCreatorConfig _config;
+
+    @BeforeClass
+    public static void routerClassSetup() {
+     // 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);
+        _config = prepareConfig(8);
+    }
+    
+    private static TunnelCreatorConfig prepareConfig(int numHops) {
+        Hash peers[] = new Hash[numHops];
+        byte tunnelIds[][] = new byte[numHops][4];
+        for (int i = 0; i < numHops; i++) {
+            peers[i] = new Hash();
+            peers[i].setData(new byte[Hash.HASH_LENGTH]);
+            _context.random().nextBytes(peers[i].getData());
+            _context.random().nextBytes(tunnelIds[i]);
+        }
+        
+        TunnelCreatorConfig config = new TunnelCreatorConfig(_context, numHops, false);
+        for (int i = 0; i < numHops; i++) {
+            config.setPeer(i, peers[i]);
+            HopConfig cfg = config.getConfig(i);
+            cfg.setExpiration(_context.clock().now() + 60000);
+            cfg.setIVKey(_context.keyGenerator().generateSessionKey());
+            cfg.setLayerKey(_context.keyGenerator().generateSessionKey());
+            if (i > 0)
+                cfg.setReceiveFrom(peers[i-1]);
+            else
+                cfg.setReceiveFrom(null);
+            cfg.setReceiveTunnelId(tunnelIds[i]);
+            if (i < numHops - 1) {
+                cfg.setSendTo(peers[i+1]);
+                cfg.setSendTunnelId(tunnelIds[i+1]);
+            } else {
+                cfg.setSendTo(null);
+                cfg.setSendTunnelId(null);
+            }
+        }
+        return config;
+    }
+    
+    private static class TestRouterIdentity extends RouterIdentity {
+        @Override
+        public Hash getHash() {
+            return Hash.FAKE_HASH;
+        }
+    }
+}