diff --git a/core/java/src/net/i2p/client/DisconnectMessageHandler.java b/core/java/src/net/i2p/client/DisconnectMessageHandler.java
index c7b58a19fa376b56f0e657671c48b1aaea4d1c36..56ad3fa38a8cd7c094214c61cfe2495976edcadd 100644
--- a/core/java/src/net/i2p/client/DisconnectMessageHandler.java
+++ b/core/java/src/net/i2p/client/DisconnectMessageHandler.java
@@ -12,6 +12,7 @@ package net.i2p.client;
 import net.i2p.I2PAppContext;
 import net.i2p.data.i2cp.DisconnectMessage;
 import net.i2p.data.i2cp.I2CPMessage;
+import net.i2p.util.Log;
 
 /**
  * Handle I2CP disconnect messages from the router
@@ -24,7 +25,9 @@ class DisconnectMessageHandler extends HandlerImpl {
     }
     
     public void handleMessage(I2CPMessage message, I2PSessionImpl session) {
-        _log.debug("Handle message " + message);
+        if (_log.shouldLog(Log.DEBUG))
+            _log.debug("Handle message " + message);
+        session.propogateError(((DisconnectMessage)message).getReason(), new I2PSessionException("Disconnect Message received"));
         session.destroySession(false);
     }
-}
\ No newline at end of file
+}
diff --git a/core/java/src/net/i2p/client/I2PSessionListener.java b/core/java/src/net/i2p/client/I2PSessionListener.java
index 740ebeeab34e0116436059df27dc164211ed3af7..6e01d994f124496a60c4d75b8b13fc39e723164c 100644
--- a/core/java/src/net/i2p/client/I2PSessionListener.java
+++ b/core/java/src/net/i2p/client/I2PSessionListener.java
@@ -39,7 +39,7 @@ public interface I2PSessionListener {
 
     /**
      * Notify the client that some error occurred
-     *
+     * @param null can be null? or not?
      */
     void errorOccurred(I2PSession session, String message, Throwable error);
 }
diff --git a/core/java/src/net/i2p/client/SessionStatusMessageHandler.java b/core/java/src/net/i2p/client/SessionStatusMessageHandler.java
index d6f875424efe687c67ed50ccdb50c2f2d9ca5cd3..92bd7db82a8a8c43d0ac3fa9e077c1dc064b4d49 100644
--- a/core/java/src/net/i2p/client/SessionStatusMessageHandler.java
+++ b/core/java/src/net/i2p/client/SessionStatusMessageHandler.java
@@ -12,6 +12,7 @@ package net.i2p.client;
 import net.i2p.I2PAppContext;
 import net.i2p.data.i2cp.I2CPMessage;
 import net.i2p.data.i2cp.SessionStatusMessage;
+import net.i2p.util.Log;
 
 /**
  * Handle I2CP SessionStatusMessagese from the router, updating the session as
@@ -25,7 +26,8 @@ class SessionStatusMessageHandler extends HandlerImpl {
     }
     
     public void handleMessage(I2CPMessage message, I2PSessionImpl session) {
-        _log.debug("Handle message " + message);
+        if (_log.shouldLog(Log.DEBUG))
+            _log.debug("Handle message " + message);
         SessionStatusMessage msg = (SessionStatusMessage) message;
         session.setSessionId(msg.getSessionId());
         switch (msg.getStatus()) {
@@ -33,19 +35,23 @@ class SessionStatusMessageHandler extends HandlerImpl {
             _log.info("Session created successfully");
             break;
         case SessionStatusMessage.STATUS_DESTROYED:
-            _log.info("Session destroyed");
+            _log.warn("Session destroyed");
+            session.propogateError("Destroyed", new I2PSessionException("Session Status Message received"));
             //session.destroySession();
             session.reconnect(); // la la la
             break;
         case SessionStatusMessage.STATUS_INVALID:
+            _log.warn("Session invalid");
+            session.propogateError("Invalid", new I2PSessionException("Session Status Message received"));
             session.destroySession(); // ok, honor this destroy message, because we're b0rked
             break;
         case SessionStatusMessage.STATUS_UPDATED:
             _log.info("Session status updated");
             break;
         default:
-            _log.warn("Unknown session status sent: " + msg.getStatus());
+            if (_log.shouldLog(Log.WARN))
+                _log.warn("Unknown session status sent: " + msg.getStatus());
         }
         return;
     }
-}
\ No newline at end of file
+}