diff --git a/apps/sam/java/src/net/i2p/sam/SAMv1Handler.java b/apps/sam/java/src/net/i2p/sam/SAMv1Handler.java
index 4e6bd5dc788fb49e276c380afa6170a0c43e5a9e..a44c905430768e70d06c00af3d06385f813d33bd 100644
--- a/apps/sam/java/src/net/i2p/sam/SAMv1Handler.java
+++ b/apps/sam/java/src/net/i2p/sam/SAMv1Handler.java
@@ -107,11 +107,26 @@ public class SAMv1Handler extends SAMHandler implements SAMRawReceiver, SAMDatag
                     break;
                 }
 
-                msg = DataHelper.readLine(getClientSocket().socket().getInputStream()).trim();
+                SocketChannel clientSocketChannel = getClientSocket() ;
+                if (clientSocketChannel == null) {
+                	_log.info("Connection closed by client");
+                	break;
+                }
+                if (clientSocketChannel.socket() == null) {
+                	_log.info("Connection closed by client");
+                	break;
+                }
+                java.io.InputStream is = clientSocketChannel.socket().getInputStream();
+                if (is == null) {
+                	_log.info("Connection closed by client");
+                	break;
+                }
+                msg = DataHelper.readLine(is);
                 if (msg == null) {
-                    _log.debug("Connection closed by client");
+                    _log.info("Connection closed by client (line read : null)");
                     break;
                 }
+                msg = msg.trim();
 
                 if (_log.shouldLog(Log.DEBUG)) {
                     _log.debug("New message received: [" + msg + "]");
diff --git a/apps/sam/java/src/net/i2p/sam/SAMv3DatagramSession.java b/apps/sam/java/src/net/i2p/sam/SAMv3DatagramSession.java
index 69f14430df448c734cf5e19db6d32699f77374d7..d7f119377aa5aaa262287eaf3b34779686c8dd57 100644
--- a/apps/sam/java/src/net/i2p/sam/SAMv3DatagramSession.java
+++ b/apps/sam/java/src/net/i2p/sam/SAMv3DatagramSession.java
@@ -38,7 +38,7 @@ public class SAMv3DatagramSession extends SAMDatagramSession implements SAMv3Han
 	 * @throws I2PSessionException
 	 */
 	public SAMv3DatagramSession(String nick) 
-	throws IOException, DataFormatException, I2PSessionException {
+	throws IOException, DataFormatException, I2PSessionException, SAMException {
 		
 		super(SAMv3Handler.sSessionsHash.get(nick).getDest(),
 				SAMv3Handler.sSessionsHash.get(nick).getProps(),
@@ -49,7 +49,7 @@ public class SAMv3DatagramSession extends SAMDatagramSession implements SAMv3Han
 		this.server = SAMv3Handler.DatagramServer.getInstance() ;
 
 		SAMv3Handler.SessionRecord rec = SAMv3Handler.sSessionsHash.get(nick);
-        if ( rec==null ) throw new InterruptedIOException() ;
+        if ( rec==null ) throw new SAMException("Record disappeared for nickname : \""+nick+"\"") ;
 
         this.handler = rec.getHandler();
 		
diff --git a/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java b/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java
index 7a64d84416c76b7a8ec629d434de392838c94579..80fa7cf63cd4514e8899082266691de98b311673 100644
--- a/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java
+++ b/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java
@@ -564,7 +564,7 @@ public class SAMv3Handler extends SAMv1Handler
 			_log.debug("I2P error when instantiating session", e);
 			return writeString("SESSION STATUS RESULT=I2P_ERROR DESTINATION=" + dest + " MESSAGE=\"" + e.getMessage() + "\"\n");
 		} catch (SAMException e) {
-			_log.error("Unexpected SAM error", e);
+			_log.info("Funny SAM error", e);
 			return writeString("SESSION STATUS RESULT=I2P_ERROR DESTINATION=" + dest + " MESSAGE=\"" + e.getMessage() + "\"\n");
 		} catch (IOException e) {
 			_log.error("Unexpected IOException", e);
diff --git a/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java b/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java
index 26d99fa014eb04dcd25a341770e01e9fd5327cb2..699058613c143e885ed84a4e9e4a69f295d43d2f 100644
--- a/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java
+++ b/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java
@@ -197,7 +197,7 @@ public class SAMv3StreamSession  extends SAMStreamSession implements SAMv3Handle
 	    	
 	    	SAMv3Handler.SessionRecord rec = SAMv3Handler.sSessionsHash.get(nick);
 	        
-	        if ( rec==null ) throw new InterruptedIOException() ;
+	        if ( rec==null || i2ps==null ) throw new InterruptedIOException() ;
 	        
 			if (verbose)
 				handler.notifyStreamIncomingConnection(i2ps.getPeerDestination()) ;
diff --git a/history.txt b/history.txt
index ae63f7a8dd5631bf031b5a1e70ad4a8392b26837..79ee79f2e07d6f01585ec5b191d11cac675ebcac 100644
--- a/history.txt
+++ b/history.txt
@@ -1,3 +1,6 @@
+2009-05-24 mkvore
+    * SAM: logging some exceptions at INFO level instead of ERROR
+
 2009-05-24 zzz
     * Connection limits / throttle:
       - Better limits when no inbound TCP
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index e4d51a2bbbc6525a11e0ae2b6866c05bfb2d3470..b54d1de4bcebaa2676a267138f4700e337aabb2f 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -18,7 +18,7 @@ public class RouterVersion {
     /** deprecated */
     public final static String ID = "Monotone";
     public final static String VERSION = CoreVersion.VERSION;
-    public final static long BUILD = 4;
+    public final static long BUILD = 5;
     /** for example "-test" */
     public final static String EXTRA = "";
     public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;