diff --git a/java/com/jcraft/jsch/Channel.java b/java/com/jcraft/jsch/Channel.java
index 669b575..73cc4db 100644
--- a/java/com/jcraft/jsch/Channel.java
+++ b/java/com/jcraft/jsch/Channel.java
@@ -35,7 +35,7 @@
 import java.io.OutputStream;
 import java.io.IOException;
 
-
+@SuppressWarnings({"rawtypes","unchecked"})
 public abstract class Channel implements Runnable{
 
   static final int SSH_MSG_CHANNEL_OPEN_CONFIRMATION=      91;
diff --git a/java/com/jcraft/jsch/ChannelAgentForwarding.java b/java/com/jcraft/jsch/ChannelAgentForwarding.java
index 9788d90..52e2db1 100644
--- a/java/com/jcraft/jsch/ChannelAgentForwarding.java
+++ b/java/com/jcraft/jsch/ChannelAgentForwarding.java
@@ -32,6 +32,7 @@
 import java.net.*;
 import java.util.Vector;
 
+@SuppressWarnings({"rawtypes"})
 class ChannelAgentForwarding extends Channel{
 
   static private final int LOCAL_WINDOW_SIZE_MAX=0x20000;
diff --git a/java/com/jcraft/jsch/ChannelForwardedTCPIP.java b/java/com/jcraft/jsch/ChannelForwardedTCPIP.java
index 912f1d8..39972e1 100644
--- a/java/com/jcraft/jsch/ChannelForwardedTCPIP.java
+++ b/java/com/jcraft/jsch/ChannelForwardedTCPIP.java
@@ -32,6 +32,7 @@
 import java.net.*;
 import java.io.*;
 
+@SuppressWarnings({"rawtypes","unchecked"})
 public class ChannelForwardedTCPIP extends Channel{
 
   static java.util.Vector pool=new java.util.Vector();
diff --git a/java/com/jcraft/jsch/ChannelSession.java b/java/com/jcraft/jsch/ChannelSession.java
index ffe217a..70dea2d 100644
--- a/java/com/jcraft/jsch/ChannelSession.java
+++ b/java/com/jcraft/jsch/ChannelSession.java
@@ -31,6 +31,7 @@
 
 import java.util.*;
 
+@SuppressWarnings({"rawtypes","unchecked"})
 class ChannelSession extends Channel{
   private static byte[] _session=Util.str2byte("session");
 
diff --git a/java/com/jcraft/jsch/ChannelSftp.java b/java/com/jcraft/jsch/ChannelSftp.java
index 66aec55..a278ed6 100644
--- a/java/com/jcraft/jsch/ChannelSftp.java
+++ b/java/com/jcraft/jsch/ChannelSftp.java
@@ -33,6 +33,7 @@
 
 import java.util.Vector;
 
+@SuppressWarnings({"rawtypes","unchecked"})
 public class ChannelSftp extends ChannelSession{
 
   static private final int LOCAL_MAXIMUM_PACKET_SIZE=32*1024;
diff --git a/java/com/jcraft/jsch/ChannelX11.java b/java/com/jcraft/jsch/ChannelX11.java
index 393728c..eb66bb6 100644
--- a/java/com/jcraft/jsch/ChannelX11.java
+++ b/java/com/jcraft/jsch/ChannelX11.java
@@ -31,6 +31,7 @@
 
 import java.net.*;
 
+@SuppressWarnings({"rawtypes","unchecked"})
 class ChannelX11 extends Channel{
 
   static private final int LOCAL_WINDOW_SIZE_MAX=0x20000;
diff --git a/java/com/jcraft/jsch/DHG1.java b/java/com/jcraft/jsch/DHG1.java
index 9b9a860..655c196 100644
--- a/java/com/jcraft/jsch/DHG1.java
+++ b/java/com/jcraft/jsch/DHG1.java
@@ -29,6 +29,7 @@
 
 package com.jcraft.jsch;
 
+@SuppressWarnings({"rawtypes"})
 public class DHG1 extends KeyExchange{
 
   static final byte[] g={ 2 };
diff --git a/java/com/jcraft/jsch/DHG14.java b/java/com/jcraft/jsch/DHG14.java
index 8ef5fb7..e46fb6f 100644
--- a/java/com/jcraft/jsch/DHG14.java
+++ b/java/com/jcraft/jsch/DHG14.java
@@ -29,6 +29,7 @@
 
 package com.jcraft.jsch;
 
+@SuppressWarnings({"rawtypes"})
 public class DHG14 extends KeyExchange{
 
   static final byte[] g={ 2 };
diff --git a/java/com/jcraft/jsch/DHGEX.java b/java/com/jcraft/jsch/DHGEX.java
index 23fa9eb..0f0da10 100644
--- a/java/com/jcraft/jsch/DHGEX.java
+++ b/java/com/jcraft/jsch/DHGEX.java
@@ -29,6 +29,7 @@
 
 package com.jcraft.jsch;
 
+@SuppressWarnings({"rawtypes"})
 public class DHGEX extends KeyExchange{
 
   private static final int SSH_MSG_KEX_DH_GEX_GROUP=               31;
diff --git a/java/com/jcraft/jsch/HostKey.java b/java/com/jcraft/jsch/HostKey.java
index 6401ad2..6ed420a 100644
--- a/java/com/jcraft/jsch/HostKey.java
+++ b/java/com/jcraft/jsch/HostKey.java
@@ -29,6 +29,7 @@
 
 package com.jcraft.jsch;
 
+@SuppressWarnings({"rawtypes","static"})
 public class HostKey{
   private static final byte[] sshdss=Util.str2byte("ssh-dss");
   private static final byte[] sshrsa=Util.str2byte("ssh-rsa");
diff --git a/java/com/jcraft/jsch/IdentityFile.java b/java/com/jcraft/jsch/IdentityFile.java
index 0427dab..cc66dfe 100644
--- a/java/com/jcraft/jsch/IdentityFile.java
+++ b/java/com/jcraft/jsch/IdentityFile.java
@@ -31,6 +31,7 @@
 
 import java.io.*;
 
+@SuppressWarnings({"rawtypes","static"})
 class IdentityFile implements Identity{
   String identity;
   byte[] key;
diff --git a/java/com/jcraft/jsch/IdentityRepository.java b/java/com/jcraft/jsch/IdentityRepository.java
index 1f75a01..c6b60d1 100644
--- a/java/com/jcraft/jsch/IdentityRepository.java
+++ b/java/com/jcraft/jsch/IdentityRepository.java
@@ -31,6 +31,7 @@
 
 import java.util.Vector;
 
+@SuppressWarnings({"rawtypes"})
 public interface IdentityRepository {
   public Vector getIdentities();
   public boolean add(byte[] identity);
diff --git a/java/com/jcraft/jsch/JSch.java b/java/com/jcraft/jsch/JSch.java
index 20c39e5..47fa29a 100644
--- a/java/com/jcraft/jsch/JSch.java
+++ b/java/com/jcraft/jsch/JSch.java
@@ -32,6 +32,7 @@
 import java.io.InputStream;
 import java.util.Vector;
 
+@SuppressWarnings({"rawtypes","unchecked"})
 public class JSch{
   public static final String VERSION  = "0.1.46";
 
diff --git a/java/com/jcraft/jsch/KeyExchange.java b/java/com/jcraft/jsch/KeyExchange.java
index ef089ba..77e7b83 100644
--- a/java/com/jcraft/jsch/KeyExchange.java
+++ b/java/com/jcraft/jsch/KeyExchange.java
@@ -29,6 +29,7 @@
 
 package com.jcraft.jsch;
 
+@SuppressWarnings({"rawtypes"})
 public abstract class KeyExchange{
 
   static final int PROPOSAL_KEX_ALGS=0;
diff --git a/java/com/jcraft/jsch/KnownHosts.java b/java/com/jcraft/jsch/KnownHosts.java
index ac76477..342d774 100644
--- a/java/com/jcraft/jsch/KnownHosts.java
+++ b/java/com/jcraft/jsch/KnownHosts.java
@@ -31,6 +31,7 @@
 
 import java.io.*;
 
+@SuppressWarnings({"rawtypes","unchecked","static"})
 public
 class KnownHosts implements HostKeyRepository{
   private static final String _known_hosts="known_hosts";
diff --git a/java/com/jcraft/jsch/LocalIdentityRepository.java b/java/com/jcraft/jsch/LocalIdentityRepository.java
index be81415..7dde42e 100644
--- a/java/com/jcraft/jsch/LocalIdentityRepository.java
+++ b/java/com/jcraft/jsch/LocalIdentityRepository.java
@@ -31,6 +31,7 @@
 
 import java.util.Vector;
 
+@SuppressWarnings({"rawtypes","unchecked"})
 class LocalIdentityRepository implements IdentityRepository {
 
   private Vector identities = new Vector();
diff --git a/java/com/jcraft/jsch/PortWatcher.java b/java/com/jcraft/jsch/PortWatcher.java
index 508e16b..b5fc37b 100644
--- a/java/com/jcraft/jsch/PortWatcher.java
+++ b/java/com/jcraft/jsch/PortWatcher.java
@@ -32,6 +32,7 @@
 import java.net.*;
 import java.io.*;
 
+@SuppressWarnings({"rawtypes","unchecked"})
 class PortWatcher implements Runnable{
   private static java.util.Vector pool=new java.util.Vector();
   private static InetAddress anyLocalAddress=null;
diff --git a/java/com/jcraft/jsch/Session.java b/java/com/jcraft/jsch/Session.java
index 962f52f..900d96d 100644
--- a/java/com/jcraft/jsch/Session.java
+++ b/java/com/jcraft/jsch/Session.java
@@ -32,6 +32,7 @@
 import java.io.*;
 import java.net.*;
 
+@SuppressWarnings({"rawtypes","static","unchecked"})
 public class Session implements Runnable{
 
   // http://ietf.org/internet-drafts/draft-ietf-secsh-assignednumbers-01.txt
diff --git a/java/com/jcraft/jsch/UserAuthPublicKey.java b/java/com/jcraft/jsch/UserAuthPublicKey.java
index 64e8e72..234ad0a 100644
--- a/java/com/jcraft/jsch/UserAuthPublicKey.java
+++ b/java/com/jcraft/jsch/UserAuthPublicKey.java
@@ -31,6 +31,7 @@
 
 import java.util.Vector;
 
+@SuppressWarnings({"rawtypes"})
 class UserAuthPublicKey extends UserAuth{
 
   public boolean start(Session session) throws Exception{
diff --git a/java/com/jcraft/jsch/Util.java b/java/com/jcraft/jsch/Util.java
index df51b2d..8d51fc6 100644
--- a/java/com/jcraft/jsch/Util.java
+++ b/java/com/jcraft/jsch/Util.java
@@ -30,6 +30,7 @@
 package com.jcraft.jsch;
 import java.net.Socket;
 
+@SuppressWarnings({"rawtypes","unchecked"})
 class Util{
 
   private static final byte[] b64 =Util.str2byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=");
diff --git a/java/com/jcraft/jsch/jcraft/Compression.java b/java/com/jcraft/jsch/jcraft/Compression.java
index dddcaed..cb1f317 100644
--- a/java/com/jcraft/jsch/jcraft/Compression.java
+++ b/java/com/jcraft/jsch/jcraft/Compression.java
@@ -31,6 +31,7 @@
 import com.jcraft.jzlib.*;
 import com.jcraft.jsch.*;
 
+@SuppressWarnings({"deprecation"})
 public class Compression implements com.jcraft.jsch.Compression {
   static private final int BUF_SIZE=4096;
   private final int buffer_margin=32+20; // AES256 + HMACSHA1
diff --git a/java/com/tigervnc/network/TcpListener.java b/java/com/tigervnc/network/TcpListener.java
index b7dc438..d56cd06 100644
--- a/java/com/tigervnc/network/TcpListener.java
+++ b/java/com/tigervnc/network/TcpListener.java
@@ -98,8 +98,8 @@
     // Accept an incoming connection
     try {
       if (selector.select(0) > 0) {
-        Set keys = selector.selectedKeys();
-        Iterator iter = keys.iterator();
+        Set<SelectionKey> keys = selector.selectedKeys();
+        Iterator<SelectionKey> iter = keys.iterator();
         while (iter.hasNext()) {
           SelectionKey key = (SelectionKey)iter.next();
           iter.remove();
diff --git a/java/com/tigervnc/rfb/CConnection.java b/java/com/tigervnc/rfb/CConnection.java
index 959f813..a923028 100644
--- a/java/com/tigervnc/rfb/CConnection.java
+++ b/java/com/tigervnc/rfb/CConnection.java
@@ -122,7 +122,7 @@
         throwConnFailedException();
 
       } else if (secType == Security.secTypeNone || secType == Security.secTypeVncAuth) {
-        Iterator i;
+        Iterator<Integer> i;
         for (i = secTypes.iterator(); i.hasNext(); ) {
           int refType = (Integer)i.next();
           if (refType == secType) {
@@ -146,7 +146,7 @@
       if (nServerSecTypes == 0)
         throwConnFailedException();
 
-      Iterator j;
+      Iterator<Integer> j;
 
       for (int i = 0; i < nServerSecTypes; i++) {
         int serverSecType = is.readU8();
diff --git a/java/com/tigervnc/rfb/CMsgWriterV3.java b/java/com/tigervnc/rfb/CMsgWriterV3.java
index 1ac583b..a730698 100644
--- a/java/com/tigervnc/rfb/CMsgWriterV3.java
+++ b/java/com/tigervnc/rfb/CMsgWriterV3.java
@@ -55,7 +55,7 @@
 	  os.writeU8(layout.num_screens());
 	  os.pad(1);
 	
-    for (Iterator iter = layout.screens.iterator(); iter.hasNext(); ) {
+    for (Iterator<Screen> iter = layout.screens.iterator(); iter.hasNext(); ) {
       Screen refScreen = (Screen)iter.next();
 	    os.writeU32(refScreen.id);
 	    os.writeU16(refScreen.dimensions.tl.x);
diff --git a/java/com/tigervnc/rfb/CSecurityVeNCrypt.java b/java/com/tigervnc/rfb/CSecurityVeNCrypt.java
index a1f2231..528158c 100644
--- a/java/com/tigervnc/rfb/CSecurityVeNCrypt.java
+++ b/java/com/tigervnc/rfb/CSecurityVeNCrypt.java
@@ -131,7 +131,7 @@
         if (!haveChosenType) {
           chosenType = Security.secTypeInvalid;
           int i;
-          Iterator j;
+          Iterator<Integer> j;
           List<Integer> secTypes = new ArrayList<Integer>();
 
           secTypes = Security.GetEnabledExtSecTypes();
diff --git a/java/com/tigervnc/rfb/Configuration.java b/java/com/tigervnc/rfb/Configuration.java
index aca8b53..fb635c7 100644
--- a/java/com/tigervnc/rfb/Configuration.java
+++ b/java/com/tigervnc/rfb/Configuration.java
@@ -285,7 +285,7 @@
       return;
     }
 
-    for (Iterator i = props.stringPropertyNames().iterator(); i.hasNext();) {
+    for (Iterator<String> i = props.stringPropertyNames().iterator(); i.hasNext();) {
       String name = (String)i.next();
       if (name.startsWith("[")) {
         // skip the section delimiters
diff --git a/java/com/tigervnc/rfb/ScreenSet.java b/java/com/tigervnc/rfb/ScreenSet.java
index b848b13..d20374f 100644
--- a/java/com/tigervnc/rfb/ScreenSet.java
+++ b/java/com/tigervnc/rfb/ScreenSet.java
@@ -35,7 +35,7 @@
 
   public final void add_screen(Screen screen) { screens.add(screen); }
   public final void remove_screen(int id) { 
-    for (Iterator iter = screens.iterator(); iter.hasNext(); ) {
+    for (Iterator<Screen> iter = screens.iterator(); iter.hasNext(); ) {
       Screen refScreen = (Screen)iter.next();
       if (refScreen.id == id)
         iter.remove();
@@ -53,7 +53,7 @@
 
       fb_rect.setXYWH(0, 0, fb_width, fb_height);
 
-      for (Iterator iter = screens.iterator(); iter.hasNext(); ) {
+      for (Iterator<Screen> iter = screens.iterator(); iter.hasNext(); ) {
         Screen refScreen = (Screen)iter.next();
         if (refScreen.dimensions.is_empty())
           return false;
@@ -68,7 +68,7 @@
   }
 
   public final void debug_print() {
-    for (Iterator iter = screens.iterator(); iter.hasNext(); ) {
+    for (Iterator<Screen> iter = screens.iterator(); iter.hasNext(); ) {
       Screen refScreen = (Screen)iter.next();
       vlog.error("    "+refScreen.id+" (0x"+refScreen.id+"): "+
                 refScreen.dimensions.width()+"x"+refScreen.dimensions.height()+
diff --git a/java/com/tigervnc/rfb/Security.java b/java/com/tigervnc/rfb/Security.java
index 6d52ede..9df4995 100644
--- a/java/com/tigervnc/rfb/Security.java
+++ b/java/com/tigervnc/rfb/Security.java
@@ -77,7 +77,7 @@
     List<Integer> result = new ArrayList<Integer>();
 
     result.add(secTypeVeNCrypt);
-    for (Iterator i = enabledSecTypes.iterator(); i.hasNext(); ) {
+    for (Iterator<Integer> i = enabledSecTypes.iterator(); i.hasNext(); ) {
       int refType = (Integer)i.next();
       if (refType < 0x100)
         result.add(refType);
@@ -90,7 +90,7 @@
   {
     List<Integer> result = new ArrayList<Integer>();
 
-    for (Iterator i = enabledSecTypes.iterator(); i.hasNext(); ) {
+    for (Iterator<Integer> i = enabledSecTypes.iterator(); i.hasNext(); ) {
       int refType = (Integer)i.next();
       if (refType != secTypeVeNCrypt) /* Do not include VeNCrypt to avoid loops */
         result.add(refType);
@@ -102,7 +102,7 @@
   public static final void EnableSecType(int secType)
   {
 
-    for (Iterator i = enabledSecTypes.iterator(); i.hasNext(); )
+    for (Iterator<Integer> i = enabledSecTypes.iterator(); i.hasNext(); )
       if ((Integer)i.next() == secType)
         return;
 
@@ -111,7 +111,7 @@
 
   public boolean IsSupported(int secType)
   {
-    Iterator i;
+    Iterator<Integer> i;
   
     for (i = enabledSecTypes.iterator(); i.hasNext(); )
      if ((Integer)i.next() == secType)
diff --git a/java/com/tigervnc/vncviewer/CConn.java b/java/com/tigervnc/vncviewer/CConn.java
index 9adb967..e51cb44 100644
--- a/java/com/tigervnc/vncviewer/CConn.java
+++ b/java/com/tigervnc/vncviewer/CConn.java
@@ -297,7 +297,7 @@
       setServerPort(port);
       sock = new TcpSocket(host, port);
       vlog.info("Redirected to "+host+":"+port);
-      viewer.newViewer(viewer, sock, true);
+      VncViewer.newViewer(viewer, sock, true);
     } catch (java.lang.Exception e) {
       throw new Exception(e.toString());
     }
@@ -355,7 +355,7 @@
         else if (layout.num_screens() != 1) {
 
           while (true) {
-            Iterator iter = layout.screens.iterator(); 
+            Iterator<Screen> iter = layout.screens.iterator(); 
             Screen screen = (Screen)iter.next();
         
             if (!iter.hasNext())
@@ -831,7 +831,7 @@
       /* Process non-VeNCrypt sectypes */
       java.util.List<Integer> secTypes = new ArrayList<Integer>();
       secTypes = Security.GetEnabledSecTypes();
-      for (Iterator i = secTypes.iterator(); i.hasNext();) {
+      for (Iterator<Integer> i = secTypes.iterator(); i.hasNext();) {
         switch ((Integer)i.next()) {
         case Security.secTypeVeNCrypt:
           options.secVeNCrypt.setSelected(UserPreferences.getBool("viewer", "secVeNCrypt", true));
@@ -851,7 +851,7 @@
       if (options.secVeNCrypt.isSelected()) {
         java.util.List<Integer> secTypesExt = new ArrayList<Integer>();
         secTypesExt = Security.GetEnabledExtSecTypes();
-        for (Iterator iext = secTypesExt.iterator(); iext.hasNext();) {
+        for (Iterator<Integer> iext = secTypesExt.iterator(); iext.hasNext();) {
           switch ((Integer)iext.next()) {
           case Security.secTypePlain:
             options.encNone.setSelected(UserPreferences.getBool("viewer", "encNone", true));
diff --git a/java/com/tigervnc/vncviewer/MenuKey.java b/java/com/tigervnc/vncviewer/MenuKey.java
index 0a24014..4967708 100644
--- a/java/com/tigervnc/vncviewer/MenuKey.java
+++ b/java/com/tigervnc/vncviewer/MenuKey.java
@@ -78,10 +78,10 @@
   }
   
   static int getMenuKeyCode() {
-    String menuKeyStr;
     int menuKeyCode = KeyEvent.VK_F8;
   
-    menuKeyStr = 
+    @SuppressWarnings({"static"})
+    String menuKeyStr = 
       Configuration.global().getParam("menuKey").getValueStr();
     for(int i = 0; i < getMenuKeySymbolCount(); i++)
       if (menuSymbols[i].name.equals(menuKeyStr))
diff --git a/java/com/tigervnc/vncviewer/OptionsDialog.java b/java/com/tigervnc/vncviewer/OptionsDialog.java
index 80d9f40..cd21341 100644
--- a/java/com/tigervnc/vncviewer/OptionsDialog.java
+++ b/java/com/tigervnc/vncviewer/OptionsDialog.java
@@ -39,6 +39,7 @@
   OptionsDialogCallback cb;
   JPanel FormatPanel, InputsPanel, MiscPanel, DefaultsPanel, SecPanel;
   JCheckBox autoSelect, customCompressLevel, noJpeg;
+  @SuppressWarnings({"rawtypes"})
   JComboBox menuKey, compressLevel, qualityLevel, scalingFactor;
   ButtonGroup encodingGroup, colourGroup;
   JRadioButton zrle, hextile, tight, raw;
@@ -51,6 +52,7 @@
   JButton ca, crl;
   JButton cfLoadButton, cfSaveAsButton, defSaveButton, defReloadButton, defClearButton;
 
+  @SuppressWarnings({"rawtypes","unchecked"})
   public OptionsDialog(OptionsDialogCallback cb_) { 
     super(true);
     cb = cb_;
diff --git a/java/com/tigervnc/vncviewer/ServerDialog.java b/java/com/tigervnc/vncviewer/ServerDialog.java
index 976dc7f..a134585 100644
--- a/java/com/tigervnc/vncviewer/ServerDialog.java
+++ b/java/com/tigervnc/vncviewer/ServerDialog.java
@@ -33,6 +33,7 @@
                            ItemListener
 {
 
+  @SuppressWarnings({"unchecked","rawtypes"})
   public ServerDialog(OptionsDialog options_,
                       String defaultServerName, CConn cc_) {
     
@@ -41,10 +42,10 @@
     setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
     setResizable(false);
     setSize(new Dimension(340, 135));
-    setTitle("VNC Viewer : Connection Details");
+    setTitle("VNC Viewer: Connection Details");
     addWindowListener(new WindowAdapter() {
       public void windowClosing(WindowEvent e) {
-        if (cc.viewer.nViewers == 1) {
+        if (VncViewer.nViewers == 1) {
           cc.viewer.exit(1);
         } else {
           ret = false;
@@ -120,13 +121,14 @@
     return;
   }
 
+  @SuppressWarnings({"unchecked","rawtypes"})
   public void actionPerformed(ActionEvent e) {
     Object s = e.getSource();
     if (s instanceof JButton && (JButton)s == okButton) {
       commit();
       endDialog();
     } else if (s instanceof JButton && (JButton)s == cancelButton) {
-      if (cc.viewer.nViewers == 1)
+      if (VncViewer.nViewers == 1)
         cc.viewer.exit(1);
       ret = false;
       endDialog();
@@ -148,7 +150,7 @@
     String serverName = (String)server.getSelectedItem();
     if (serverName == null || serverName.equals("")) {
       vlog.error("Invalid servername specified");
-      if (cc.viewer.nViewers == 1)
+      if (VncViewer.nViewers == 1)
         cc.viewer.exit(1);
       ret = false;
       endDialog();
@@ -177,6 +179,7 @@
   }
 
   CConn cc;
+  @SuppressWarnings("rawtypes")
   JComboBox server;
   ComboBoxEditor editor;
   JButton aboutButton, optionsButton, okButton, cancelButton;
diff --git a/java/com/tigervnc/vncviewer/Viewport.java b/java/com/tigervnc/vncviewer/Viewport.java
index c148416..95489fa 100644
--- a/java/com/tigervnc/vncviewer/Viewport.java
+++ b/java/com/tigervnc/vncviewer/Viewport.java
@@ -53,7 +53,7 @@
     });
     addWindowListener(new WindowAdapter() {
       public void windowClosing(WindowEvent e) {
-        if (cc.viewer.nViewers == 1) {
+        if (VncViewer.nViewers == 1) {
           cc.viewer.exit(1);
         } else {
           cc.close();
diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java
index 8cc9fc6..cf38760 100644
--- a/java/com/tigervnc/vncviewer/VncViewer.java
+++ b/java/com/tigervnc/vncviewer/VncViewer.java
@@ -40,8 +40,7 @@
 import java.lang.Character;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
-import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.*;
 import javax.swing.*;
 import javax.swing.plaf.FontUIResource;
 import javax.swing.UIManager.*;
@@ -80,7 +79,7 @@
       UIManager.put("TitledBorder.titleColor",Color.blue);
       if (UIManager.getLookAndFeel().getName().equals("Metal")) {
         UIManager.put("swing.boldMetal", Boolean.FALSE);
-        java.util.Enumeration keys = UIManager.getDefaults().keys();
+        Enumeration<Object> keys = UIManager.getDefaults().keys();
         while (keys.hasMoreElements()) {
           Object key = keys.nextElement();
           Object value = UIManager.get(key);
diff --git a/java/com/tigervnc/vncviewer/tunnel.java b/java/com/tigervnc/vncviewer/tunnel.java
index 23da0a9..a66d83a 100644
--- a/java/com/tigervnc/vncviewer/tunnel.java
+++ b/java/com/tigervnc/vncviewer/tunnel.java
@@ -287,7 +287,7 @@
       ArrayList<File> privateKeys = new ArrayList<File>();
       privateKeys.add(new File(homeDir+"/.ssh/id_rsa"));
       privateKeys.add(new File(homeDir+"/.ssh/id_dsa"));
-      for (Iterator i = privateKeys.iterator(); i.hasNext();) {
+      for (Iterator<File> i = privateKeys.iterator(); i.hasNext();) {
         File privateKey = (File)i.next();
         if (privateKey.exists() && privateKey.canRead())
 	        jsch.addIdentity(privateKey.getAbsolutePath());
