diff --git a/java/com/tigervnc/network/SocketDescriptor.java b/java/com/tigervnc/network/SocketDescriptor.java
index 3517a99..4c5a23a 100644
--- a/java/com/tigervnc/network/SocketDescriptor.java
+++ b/java/com/tigervnc/network/SocketDescriptor.java
@@ -49,6 +49,15 @@
     }
   }
 
+  public void shutdown() throws IOException {
+    try {
+      channel.socket().shutdownInput();
+      channel.socket().shutdownOutput();
+    } catch(IOException e) {
+      throw new IOException(e.toString());
+    }
+  }
+
   public void close() throws IOException {
     try {
       channel.close();
diff --git a/java/com/tigervnc/network/TcpListener.java b/java/com/tigervnc/network/TcpListener.java
index 959d545..b7dc438 100644
--- a/java/com/tigervnc/network/TcpListener.java
+++ b/java/com/tigervnc/network/TcpListener.java
@@ -62,8 +62,7 @@
         addr = InetAddress.getByName("0.0.0.0");
       }
     } catch (UnknownHostException e) {
-      System.out.println(e.toString());
-      System.exit(-1);
+      throw new Exception(e.toString());
     }
   
     try {
@@ -129,8 +128,7 @@
     try {
       fd = new SocketDescriptor();
     } catch (java.lang.Exception e) {
-      System.out.println(e.toString());
-      System.exit(-1);
+      throw new SocketException(e.toString());
     }
     fd.setChannel(new_sock);
     TcpSocket s = new TcpSocket(fd);
diff --git a/java/com/tigervnc/network/TcpSocket.java b/java/com/tigervnc/network/TcpSocket.java
index ac53aaf..cdc0501 100644
--- a/java/com/tigervnc/network/TcpSocket.java
+++ b/java/com/tigervnc/network/TcpSocket.java
@@ -153,9 +153,9 @@
   }
 
   public void shutdown() throws Exception {
+    super.shutdown();
     try {
-      close();
-      super.shutdown();
+      ((SocketDescriptor)getFd()).shutdown();
     } catch (IOException e) {
       throw new Exception(e.toString());
     }
diff --git a/java/com/tigervnc/rdr/Exception.java b/java/com/tigervnc/rdr/Exception.java
index 627b98d..19977aa 100644
--- a/java/com/tigervnc/rdr/Exception.java
+++ b/java/com/tigervnc/rdr/Exception.java
@@ -22,7 +22,6 @@
 public class Exception extends RuntimeException {
   public Exception(String s) {
     super(s);
-    System.out.println(s);
   }
 }
 
diff --git a/java/com/tigervnc/vncviewer/CConn.java b/java/com/tigervnc/vncviewer/CConn.java
index f4c75a2..e3aea94 100644
--- a/java/com/tigervnc/vncviewer/CConn.java
+++ b/java/com/tigervnc/vncviewer/CConn.java
@@ -116,18 +116,16 @@
       String name = sock.getPeerEndpoint();
       vlog.info("Accepted connection from "+name);
     } else {
-      if (vncServerName != null) {
+      if (vncServerName != null &&
+          !viewer.alwaysShowServerDialog.getValue()) {
         serverHost = Hostname.getHost(vncServerName);
         serverPort = Hostname.getPort(vncServerName);
       } else {
         ServerDialog dlg = new ServerDialog(options, vncServerName, this);
         if (!dlg.showDialog() || dlg.server.getSelectedItem().equals("")) {
-          if (viewer.firstApplet) {
-            System.exit(1);
-          } else {
-            viewer.stop();
-            return;
-          }
+          vlog.info("No server name specified!");
+          close();
+          return;
         }
         vncServerName = (String)dlg.server.getSelectedItem();
         serverHost = Hostname.getHost(vncServerName);
@@ -171,12 +169,6 @@
     if (viewport != null)
       viewport.dispose();
     viewport = null;
-    if (viewer.firstApplet) {
-      System.exit(1);
-    } else {
-      close();
-      viewer.stop();
-    }
   } 
 
   // blockCallback() is called when reading from the socket would block.
@@ -691,11 +683,13 @@
   ////////////////////////////////////////////////////////////////////
   // The following methods are all called from the GUI thread
 
-  // close() closes the socket, thus waking up the RFB thread.
+  // close() shuts down the socket, thus waking up the RFB thread.
   public void close() {
+    deleteWindow();
     shuttingDown = true;
     try {
-      sock.shutdown();
+      if (sock != null)
+        sock.shutdown();
     } catch (java.lang.Exception e) {
       throw new Exception(e.toString());
     }
@@ -1321,7 +1315,7 @@
 
   // shuttingDown is set by the GUI thread and only ever tested by the RFB
   // thread after the window has been destroyed.
-  boolean shuttingDown;
+  boolean shuttingDown = false;
 
   // reading and writing int and boolean is atomic in java, so no
   // synchronization of the following flags is needed:
diff --git a/java/com/tigervnc/vncviewer/F8Menu.java b/java/com/tigervnc/vncviewer/F8Menu.java
index b346db9..5d804b5 100644
--- a/java/com/tigervnc/vncviewer/F8Menu.java
+++ b/java/com/tigervnc/vncviewer/F8Menu.java
@@ -85,7 +85,7 @@
 
   public void actionPerformed(ActionEvent ev) {
     if (actionMatch(ev, exit)) {
-      cc.deleteWindow();
+      cc.close();
     } else if (actionMatch(ev, fullScreen)) {
       cc.toggleFullScreen();
     } else if (actionMatch(ev, restore)) {
diff --git a/java/com/tigervnc/vncviewer/ServerDialog.java b/java/com/tigervnc/vncviewer/ServerDialog.java
index b331d7a..b596dbf 100644
--- a/java/com/tigervnc/vncviewer/ServerDialog.java
+++ b/java/com/tigervnc/vncviewer/ServerDialog.java
@@ -44,8 +44,8 @@
     setTitle("VNC Viewer : Connection Details");
     addWindowListener(new WindowAdapter() {
       public void windowClosing(WindowEvent e) {
-        if (cc.viewer.firstApplet && cc.viewport == null) {
-          System.exit(1);
+        if (cc.viewer.nViewers == 1) {
+          cc.viewer.exit(1);
         } else {
           ok = false;
           endDialog();
diff --git a/java/com/tigervnc/vncviewer/Viewport.java b/java/com/tigervnc/vncviewer/Viewport.java
index 680a02d..de3621c 100644
--- a/java/com/tigervnc/vncviewer/Viewport.java
+++ b/java/com/tigervnc/vncviewer/Viewport.java
@@ -49,7 +49,7 @@
     });
     addWindowListener(new WindowAdapter() {
       public void windowClosing(WindowEvent e) {
-        cc.deleteWindow();
+        cc.close();
       }
     });
     addComponentListener(new ComponentAdapter() {
diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java
index b2fbee5..acbdb7f 100644
--- a/java/com/tigervnc/vncviewer/VncViewer.java
+++ b/java/com/tigervnc/vncviewer/VncViewer.java
@@ -108,8 +108,6 @@
   public static void main(String[] argv) {
     setLookAndFeel();
     VncViewer viewer = new VncViewer(argv);
-    viewer.firstApplet = true;
-    viewer.stop = false;
     viewer.start();
   }
 
@@ -138,7 +136,7 @@
 
       if (argv[i].equalsIgnoreCase("-tunnel") || argv[i].equalsIgnoreCase("-via")) {
         if (!tunnel.createTunnel(argv.length, argv, i))
-          System.exit(1);
+          exit(1);
         if (argv[i].equalsIgnoreCase("-via")) i++;
         continue;
       }
@@ -242,22 +240,22 @@
 "  \t%R     remote TCP port number.\n"+
 "\n");
     System.err.print(propertiesString);
+    // Technically, we shouldn't use System.exit here but if there is a parameter
+    // error then the problem is in the index/html file anyway.
     System.exit(1);
   }
 
   public VncViewer() {
     applet = true;
-    firstApplet = true;
   }
 
   public static void newViewer(VncViewer oldViewer, Socket sock, boolean close) {
     VncViewer viewer = new VncViewer();
     viewer.applet = oldViewer.applet;
-    viewer.firstApplet = (close) ? true : false;
     viewer.sock = sock;
     viewer.start();
     if (close)
-      oldViewer.stop();
+      oldViewer.exit(0);
   }
 
   public static void newViewer(VncViewer oldViewer, Socket sock) {
@@ -295,8 +293,7 @@
   public void start() {
     vlog.debug("start called");
     getTimestamp();
-    nViewers++;
-    if (applet && firstApplet) {
+    if (applet && nViewers == 0) {
       alwaysShowServerDialog.setParam(true);
       Configuration.global().readAppletParams(this);
       String host = getCodeBase().getHost();
@@ -307,12 +304,20 @@
                                        : ("::"+port)));
       }
     }
+    nViewers++;
     thread = new Thread(this);
     thread.start();
   }
 
-  public void stop() {
-    stop = true;
+  public void exit(int n) {
+    nViewers--;
+    if (nViewers > 0)
+      return;
+    if (applet) {
+      destroy();
+    } else {
+      System.exit(n);
+    }
   }
 
   public void paint(Graphics g) {
@@ -337,7 +342,7 @@
         listener = new TcpListener(null, port);
       } catch (java.lang.Exception e) {
         System.out.println(e.toString());
-        System.exit(1);
+        exit(1);
       }
 
       vlog.info("Listening on port "+port);
@@ -351,29 +356,22 @@
 
     try {
       cc = new CConn(this, sock, vncServerName.getValue());
-      while (!stop)
+      while (!cc.shuttingDown)
         cc.processMsg();
-      if (nViewers > 1) {
-        cc = null;
-        return;
-      }
-    } catch (EndOfStream e) {
-      vlog.info(e.toString());
     } catch (java.lang.Exception e) {
-      if (cc != null) cc.deleteWindow();
       if (cc == null || !cc.shuttingDown) {
         e.printStackTrace();
         JOptionPane.showMessageDialog(null,
           e.toString(),
           "VNC Viewer : Error",
           JOptionPane.ERROR_MESSAGE);
+      } else {
+        if (!cc.shuttingDown)
+          vlog.info(e.toString());
+        cc = null;
       }
     }
-    if (cc != null) cc.deleteWindow();
-    nViewers--;
-    if (!applet && nViewers == 0) {
-      System.exit(0);
-    }
+    exit(0);
   }
 
   BoolParameter useLocalCursor
@@ -536,7 +534,7 @@
 
   Thread thread;
   Socket sock;
-  boolean applet, firstApplet, stop;
+  boolean applet;
   Image logo;
   static int nViewers;
   static LogWriter vlog = new LogWriter("main");
