diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
index f0ef33f9ee880a1afc3930268a45d34e6e779db0..1cd207e45400839c335f05c82433f3480594cf2a 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
@@ -491,9 +491,11 @@ public class SummaryHelper extends HelperBase {
         public int compare(Destination lhs, Destination rhs) {
             String lname = getName(lhs);
             String rname = getName(rhs);
-            if (lname.equals(xsc))
+            boolean lshared = lname.startsWith("shared clients") || lname.startsWith(xsc);
+            boolean rshared = rname.startsWith("shared clients") || rname.startsWith(xsc);
+            if (lshared && !rshared)
                 return -1;
-            if (rname.equals(xsc))
+            if (rshared && !lshared)
                 return 1;
             return Collator.getInstance().compare(lname, rname);
         }
diff --git a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java
index b58f06462db4948c3b5cc47f1c5123ff58138671..bc92e33be3a6f0a40e20b0725832c91f405ee16b 100644
--- a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java
+++ b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java
@@ -202,6 +202,8 @@ class ClientConnectionRunner {
             LeaseSet ls = sp.currentLeaseSet;
             if (ls != null)
                 _context.netDb().unpublish(ls);
+            if (!sp.isPrimary)
+                _context.tunnelManager().removeAlias(sp.dest);
         }
         synchronized (_alreadyProcessed) {
             _alreadyProcessed.clear();
@@ -414,15 +416,21 @@ class ClientConnectionRunner {
                 if (ls != null)
                     _context.netDb().unpublish(ls);
                 isPrimary = sp.isPrimary;
+                if (!isPrimary)
+                    _context.tunnelManager().removeAlias(sp.dest);
+                break;
             }
         }
-        if (isPrimary) {
+        if (isPrimary && !_sessions.isEmpty()) {
             // kill all the others also
             for (SessionParams sp : _sessions.values()) {
-                _manager.unregisterSession(id, sp.dest);
+                if (_log.shouldLog(Log.INFO))
+                    _log.info("Destroying remaining client subsession " + sp.sessionId);
+                _manager.unregisterSession(sp.sessionId, sp.dest);
                 LeaseSet ls = sp.currentLeaseSet;
                 if (ls != null)
                     _context.netDb().unpublish(ls);
+                _context.tunnelManager().removeAlias(sp.dest);
             }
         }
     }
diff --git a/router/java/src/net/i2p/router/client/ClientManager.java b/router/java/src/net/i2p/router/client/ClientManager.java
index ea35681f9e3a74369fa40d503c4b6a4d4beb501c..6665409a034c83d76b6d895d97b303a7e71bbfb7 100644
--- a/router/java/src/net/i2p/router/client/ClientManager.java
+++ b/router/java/src/net/i2p/router/client/ClientManager.java
@@ -220,14 +220,14 @@ class ClientManager {
      *  Remove all sessions for this runner.
      */
     public void unregisterConnection(ClientConnectionRunner runner) {
-        if (_log.shouldLog(Log.WARN))
-            _log.warn("Unregistering (dropping) a client connection");
         synchronized (_pendingRunners) {
             _pendingRunners.remove(runner);
         }
 
         List<SessionId> ids = runner.getSessionIds();
         List<Destination> dests = runner.getDestinations();
+        if (_log.shouldLog(Log.WARN))
+            _log.warn("Unregistering (dropping) a client connection with ids: " + ids);
         synchronized (_runners) {
             for (SessionId id : ids) {
                 _runnerSessionIds.remove(id);
diff --git a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java
index 628d8b0a5d7c12bd228ea699a48cae07e9dd600b..7bfd342b147881751846393e1d2a3b2c4fab3002 100644
--- a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java
+++ b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java
@@ -426,8 +426,6 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi
         if (left <= 0) {
             _runner.stopRunning();
         } else {
-            if (cfg != null)
-                _context.tunnelManager().removeAlias(cfg.getDestination());
             if (_log.shouldLog(Log.INFO))
                 _log.info("Still " + left + " sessions left");
         }