diff --git a/src/net/i2p/android/router/receiver/I2PReceiver.java b/src/net/i2p/android/router/receiver/I2PReceiver.java
index 1116cf775f66eb3a61ddf884df4703b5703270f7..e4a5666802a73a18319cee82c9f4b350398a367a 100644
--- a/src/net/i2p/android/router/receiver/I2PReceiver.java
+++ b/src/net/i2p/android/router/receiver/I2PReceiver.java
@@ -46,6 +46,11 @@ public class I2PReceiver extends BroadcastReceiver {
         }
     }
 
+    public boolean isConnected() {
+        NetworkInfo current = getInfo();
+        return current != null && current.isConnected();
+    }
+
     private NetworkInfo getInfo() {
         ConnectivityManager cm = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
         NetworkInfo current = cm.getActiveNetworkInfo();
diff --git a/src/net/i2p/android/router/service/RouterService.java b/src/net/i2p/android/router/service/RouterService.java
index c47e53762e2f0f99e949fd9e041489ba4ce83ed0..2c4cf7e90130ddd594aa3e7a76d9182f81db2bdd 100644
--- a/src/net/i2p/android/router/service/RouterService.java
+++ b/src/net/i2p/android/router/service/RouterService.java
@@ -24,7 +24,7 @@ import net.i2p.util.NativeBigInteger;
  *  Runs the router
  */
 public class RouterService extends Service {
-    private enum State {INIT, STARTING, RUNNING, STOPPING, STOPPED}
+    private enum State {INIT, WAITING, STARTING, RUNNING, STOPPING, STOPPED}
 
     private RouterContext _context;
     private String _myDir;
@@ -33,7 +33,7 @@ public class RouterService extends Service {
     private Thread _starterThread;
     private Thread _statusThread;
     private StatusBar _statusBar;
-    private BroadcastReceiver _receiver;
+    private I2PReceiver _receiver;
     private final Object _stateLock = new Object();
 
     private static final String MARKER = "**************************************  ";
@@ -58,16 +58,50 @@ public class RouterService extends Service {
         synchronized (_stateLock) {
             if (_state != State.INIT)
                 return START_STICKY;
-            _statusBar.update("I2P is starting up");
-            _state = State.STARTING;
-
-            _starterThread = new Thread(new Starter());
-            _starterThread.start();
             _receiver = new I2PReceiver(this);
+            if (_receiver.isConnected()) {
+                _statusBar.update("I2P is starting up");
+                _state = State.STARTING;
+                _starterThread = new Thread(new Starter());
+                _starterThread.start();
+            } else {
+                _statusBar.update("I2P is waiting for a network connection");
+                _state = State.WAITING;
+                _starterThread = new Thread(new Waiter());
+                _starterThread.start();
+            }
         }
         return START_STICKY;
     }
 
+    /** maybe this goes away when the receiver can bind to us */
+    private class Waiter implements Runnable {
+        public void run() {
+            System.err.println(MARKER + this + " waiter thread" +
+                           "Current state is: " + _state);
+            while (_state == State.WAITING) {
+                try {
+                    Thread.sleep(30*1000);
+                } catch (InterruptedException ie) {
+                    break;
+                }
+
+                if (_receiver.isConnected()) {
+                    synchronized (_stateLock) {
+                        if (_state != State.WAITING)
+                            break;
+                        _statusBar.update("Network connected, I2P is starting up");
+                        _state = State.STARTING;
+                        _starterThread = new Thread(new Starter());
+                        _starterThread.start();
+                    }
+                    break;
+                }
+            }
+            System.err.println("waiter finished");
+        }
+    }
+
     private class Starter implements Runnable {
         public void run() {
             System.err.println(MARKER + this + " starter thread" +
@@ -104,7 +138,7 @@ public class RouterService extends Service {
             Router router = _context.router();
             while (_state == State.RUNNING && router.isAlive()) {
                 try {
-                    Thread.sleep(5000);
+                    Thread.sleep(15*1000);
                 } catch (InterruptedException ie) {
                     break;
                 }