diff --git a/router/java/src/net/i2p/router/peermanager/PeerManager.java b/router/java/src/net/i2p/router/peermanager/PeerManager.java
index 904ca8bdb339c4611cda232d115558e53136b59b..ef7b1de349bbd7578e45aa763c7befca998cbbe4 100644
--- a/router/java/src/net/i2p/router/peermanager/PeerManager.java
+++ b/router/java/src/net/i2p/router/peermanager/PeerManager.java
@@ -25,6 +25,7 @@ import net.i2p.router.Router;
 import net.i2p.router.RouterContext;
 import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
 import net.i2p.util.ConcurrentHashSet;
+import net.i2p.util.I2PThread;
 import net.i2p.util.Log;
 import net.i2p.util.SimpleTimer2;
 
@@ -89,6 +90,24 @@ class PeerManager {
             super(_context.simpleTimer2(), REORGANIZE_TIME);
         }
         public void timeReached() {
+            (new ReorgThread(this)).start();
+        }
+    }
+
+    /**
+     *  This takes too long to run on the SimpleTimer2 queue
+     *  @since 0.9.10
+     */
+    private class ReorgThread extends I2PThread {
+        private SimpleTimer2.TimedEvent _event;
+
+        public ReorgThread(SimpleTimer2.TimedEvent event) {
+            super("PeerManager Reorg");
+            setDaemon(true);
+            _event = event;
+        }
+
+        public void run() {
             long start = System.currentTimeMillis();
             try {
                 _organizer.reorganize(true);
@@ -104,7 +123,7 @@ class PeerManager {
                 delay = REORGANIZE_TIME_MEDIUM;
             else
                 delay = REORGANIZE_TIME;
-            schedule(delay);
+            _event.schedule(delay);
         }
     }