diff --git a/router/java/src/net/i2p/router/MultiRouter.java b/router/java/src/net/i2p/router/MultiRouter.java
index bee66b258950047a796f2abdd528977da0339e66..0790f48be599e0db6784d2f0ead64599e379d64e 100644
--- a/router/java/src/net/i2p/router/MultiRouter.java
+++ b/router/java/src/net/i2p/router/MultiRouter.java
@@ -83,38 +83,53 @@ public class MultiRouter {
         _defaultContext = new I2PAppContext(buildRouterProps(0));
         _defaultContext.clock().setOffset(0);
         
+        _out.println("RouterConsole for Router 0 is listening on: 127.0.0.1:" + (BASE_PORT-1));
+
         Runtime.getRuntime().addShutdownHook(new Thread() {
             @Override
             public void run() {
             	_out.println("Shutting down in a few moments..");
             	for(Router r : _routers) {
-            		r.shutdown(-1);
+            		r.shutdown(0);
             	}
                 try { Thread.sleep(1500); } catch (InterruptedException ie) {}
                 Runtime.getRuntime().halt(0);
             }
         });
-        
+
         for (int i = 0; i < nbrRouters; i++) {
             Router router = new Router(buildRouterProps(i));
             router.setKillVMOnEnd(false);
             _routers.add(router);
             _out.println("Router " + i + " was created");
+            try { Thread.sleep(100); } catch (InterruptedException ie) {}
         }
         
         for (int i = 0; i < nbrRouters; i++) {
-        	Router r = _routers.get(i);
+        	final Router r = _routers.get(i);
             long offset = r.getContext().random().nextLong(Router.CLOCK_FUDGE_FACTOR/2);
             if (r.getContext().random().nextBoolean())
                 offset = 0 - offset;
             r.getContext().clock().setOffset(offset, true);
-            r.runRouter();
+            
+            /* Start the routers in separate threads since it takes some time. */
+            (new Thread() {
+            	  public void run() {
+            		  r.runRouter();
+            	  }
+            }).start();
+            try { Thread.sleep(100); } catch (InterruptedException ie) {}
+            
             _out.println("Router " + i + " was started with time offset " + offset);
         }
         _out.println("All routers have been started");
         
-        /* Wait for routers to start services and generate keys.. */
-        try { Thread.sleep(1000); } catch (InterruptedException ie) {}   
+        /* Wait for routers to start services and generate keys
+         * before doing the internal reseed. */
+        int waitForRouters = (nbrRouters/10)*1000;
+        _out.println("Waiting " + waitForRouters/1000 +  " seconds for routers to start" + 
+                     "before doing the internal reseed");
+        try { Thread.sleep(waitForRouters); } catch (InterruptedException ie) {}   
         internalReseed();
         
         waitForCompletion();
@@ -137,8 +152,8 @@ public class MultiRouter {
     private static Properties buildRouterProps(int id) {
         Properties props = getRouterProps(id);
         File f = new File(props.getProperty("router.configLocation"));
-        f.getParentFile().mkdirs();
         if (!f.exists()) {
+        	f.getParentFile().mkdirs();
             try {
 				DataHelper.storeProps(props, f);
 			} catch (IOException e) {
@@ -189,8 +204,8 @@ public class MultiRouter {
     	Properties rProps = getRouterProps(id);
         Properties props = getClientProps();
         File f = new File(rProps.getProperty("router.clientConfigFile"));
-        f.getParentFile().mkdirs();
         if (!f.exists()) {
+        	f.getParentFile().mkdirs();
             try {
 				DataHelper.storeProps(props, f);
 			} catch (IOException e) {