diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt
index 86b9627..cf15c80 100644
--- a/java/CMakeLists.txt
+++ b/java/CMakeLists.txt
@@ -7,7 +7,7 @@
 
 find_package(Java)
 
-set(DEFAULT_JAVACFLAGS "-source 1.5 -target 1.5 -Xlint:all,-serial,-cast,-unchecked,-fallthrough,-dep-ann,-deprecation")
+set(DEFAULT_JAVACFLAGS "-source 1.5 -target 1.5 -Xlint:all,-serial,-cast,-fallthrough,-dep-ann,-deprecation")
 set(JAVACFLAGS ${DEFAULT_JAVACFLAGS} CACHE STRING
   "Java compiler flags (Default: ${DEFAULT_JAVACFLAGS})")
 message(STATUS "Java compiler flags = ${JAVACFLAGS}")
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());
