diff --git a/shell.remote/src/main/java/org/apache/felix/shell/remote/Shell.java b/shell.remote/src/main/java/org/apache/felix/shell/remote/Shell.java
index 43e230c..f706396 100644
--- a/shell.remote/src/main/java/org/apache/felix/shell/remote/Shell.java
+++ b/shell.remote/src/main/java/org/apache/felix/shell/remote/Shell.java
@@ -19,10 +19,10 @@
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.net.Socket;
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
 
 import org.apache.felix.shell.ShellService;
+import org.apache.felix.service.command.CommandProcessor;
+import org.apache.felix.service.command.CommandSession;
 
 /**
  * Implements the shell.
diff --git a/shell.remote/src/main/java/org/apache/felix/shell/remote/TerminalPrintStream.java b/shell.remote/src/main/java/org/apache/felix/shell/remote/TerminalPrintStream.java
index 430e6d9..3cf2099 100644
--- a/shell.remote/src/main/java/org/apache/felix/shell/remote/TerminalPrintStream.java
+++ b/shell.remote/src/main/java/org/apache/felix/shell/remote/TerminalPrintStream.java
@@ -16,10 +16,8 @@
  */
 package org.apache.felix.shell.remote;
 
-import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintStream;
-import java.net.SocketException;
 
 /**
  * Class implementing a <tt>TerminalPrintStream</tt>.
@@ -38,45 +36,54 @@
     {
         super(tout);
         m_services = services;
-    }//constructor
+    }
 
     public void print(String str)
     {
-        try
+        if (out != null)
         {
-            byte[] bytes = str.getBytes();
-            out.write(bytes, 0, bytes.length);
-            flush();
-        }
-        catch (Exception ex)
-        {
-            if (!m_isClosed)
+            try
             {
-                m_services.error("TerminalPrintStream::print()", ex);
+                byte[] bytes = str.getBytes();
+                out.write(bytes, 0, bytes.length);
+                flush();
+            }
+            catch (Exception ex)
+            {
+                if (!m_isClosed)
+                {
+                    m_services.error("TerminalPrintStream::print()", ex);
+                }
             }
         }
-    }//print
+    }
 
     public void println(String str)
     {
         print(str + "\r\n");
-    }//println
+    }
 
     public void flush()
     {
-        try
+        if (out != null)
         {
-            out.flush();
+            try
+            {
+                out.flush();
+            }
+            catch (Exception ex)
+            {
+                if (!m_isClosed)
+                {
+                    m_services.error("TerminalPrintStream::println()", ex);
+                }
+            }
         }
-        catch (IOException ex)
-        {
-            m_services.error("TerminalPrintStream::println()", ex);
-        }
-    }//flush
+    }
 
     public void close()
     {
         m_isClosed = true;
         super.close();
     }
-}//class TerminalPrintStream
+}
\ No newline at end of file
diff --git a/shell.remote/src/main/java/org/apache/felix/shell/remote/TerminalReader.java b/shell.remote/src/main/java/org/apache/felix/shell/remote/TerminalReader.java
index 2ba8dd8..d75406e 100644
--- a/shell.remote/src/main/java/org/apache/felix/shell/remote/TerminalReader.java
+++ b/shell.remote/src/main/java/org/apache/felix/shell/remote/TerminalReader.java
@@ -29,8 +29,8 @@
  */
 class TerminalReader extends Reader
 {
-    protected InputStream m_in;
-    protected PrintStream m_out;
+    protected final InputStream m_in;
+    protected final PrintStream m_out;
     protected boolean m_echo = false;
     protected boolean m_eof = false;
 
@@ -169,6 +169,7 @@
     {
         m_in.close();
     }//close
+
     /**
      * <b>Bell</b><br>
      * The ANSI defined byte code for the NVT bell.
