diff --git a/java/src/com/tigervnc/rfb/CSecurityTLS.java b/java/src/com/tigervnc/rfb/CSecurityTLS.java
index 355d08f..2fbd5aa 100644
--- a/java/src/com/tigervnc/rfb/CSecurityTLS.java
+++ b/java/src/com/tigervnc/rfb/CSecurityTLS.java
@@ -66,7 +66,7 @@
 
       if (anon) {
         String[] supported;
-        ArrayList enabled = new ArrayList();
+        ArrayList<String> enabled = new ArrayList<String>();
 
         supported = ssl.getSupportedCipherSuites();
 
@@ -74,7 +74,7 @@
           if (supported[i].matches("TLS_DH_anon.*"))
 	          enabled.add(supported[i]);
 
-        ssl.setEnabledCipherSuites((String[])enabled.toArray(new String[0]));
+        ssl.setEnabledCipherSuites(enabled.toArray(new String[0]));
       } else {
         ssl.setEnabledCipherSuites(ssl.getSupportedCipherSuites());
       }
diff --git a/java/src/com/tigervnc/rfb/TightDecoder.java b/java/src/com/tigervnc/rfb/TightDecoder.java
index 529b904..5cce3a9 100644
--- a/java/src/com/tigervnc/rfb/TightDecoder.java
+++ b/java/src/com/tigervnc/rfb/TightDecoder.java
@@ -271,7 +271,7 @@
   }
   private static int[] convertByteArrayToIntArray(byte[] bytes) {
     vlog.info("convertByteArrayToIntArray");
-    ArrayList integers = new ArrayList();
+    ArrayList<Integer> integers = new ArrayList<Integer>();
     for (int index = 0; index < bytes.length; index += 4) {
       byte[] fourBytes = new byte[4];
       fourBytes[0] = bytes[index];
@@ -283,7 +283,7 @@
     }
     int[] ints = new int[bytes.length/4];
     for (int index = 0; index < integers.size() ; index++) {
-      ints[index] = ((Integer)integers.get(index)).intValue();
+      ints[index] = (integers.get(index)).intValue();
     }
     return ints;
   }
diff --git a/java/src/com/tigervnc/vncviewer/CConn.java b/java/src/com/tigervnc/vncviewer/CConn.java
index 636bfac..8784750 100644
--- a/java/src/com/tigervnc/vncviewer/CConn.java
+++ b/java/src/com/tigervnc/vncviewer/CConn.java
@@ -942,8 +942,8 @@
     }
 
     clipboardDialog.setSendingEnabled(viewer.sendClipboard.getValue());
-    menuKey = (int)(options.menuKey.getSelectedIndex()+0xFFBE);
-    F8Menu.f8.setLabel("Send F"+(menuKey-Keysyms.F1+1));
+    menuKey = (options.menuKey.getSelectedIndex()+0xFFBE);
+    F8Menu.f8.setText("Send F"+(menuKey-Keysyms.F1+1));
 
     shared = options.shared.isSelected();
     setShared(shared);
@@ -1185,9 +1185,9 @@
     if (cp.width != desktop.scaledWidth || 
         cp.height != desktop.scaledHeight) {
       int sx = (desktop.scaleWidthRatio == 1.00) 
-        ? ev.getX() : (int)Math.floor(ev.getX()/(float)desktop.scaleWidthRatio);
+        ? ev.getX() : (int)Math.floor(ev.getX()/desktop.scaleWidthRatio);
       int sy = (desktop.scaleHeightRatio == 1.00) 
-        ? ev.getY() : (int)Math.floor(ev.getY()/(float)desktop.scaleHeightRatio);
+        ? ev.getY() : (int)Math.floor(ev.getY()/desktop.scaleHeightRatio);
       ev.translatePoint(sx - ev.getX(), sy - ev.getY());
       writer().writePointerEvent(new Point(ev.getX(),ev.getY()), buttonMask);
     } else {
diff --git a/java/src/com/tigervnc/vncviewer/DesktopWindow.java b/java/src/com/tigervnc/vncviewer/DesktopWindow.java
index b1457c3..d6704e0 100644
--- a/java/src/com/tigervnc/vncviewer/DesktopWindow.java
+++ b/java/src/com/tigervnc/vncviewer/DesktopWindow.java
@@ -339,8 +339,8 @@
         }
       }
     }
-    scaleWidthRatio = (float)((float)scaledWidth / (float)cc.cp.width);
-    scaleHeightRatio = (float)((float)scaledHeight / (float)cc.cp.height);
+    scaleWidthRatio = (float)scaledWidth / (float)cc.cp.width;
+    scaleHeightRatio = (float)scaledHeight / (float)cc.cp.height;
   }
 
   synchronized public void paintComponent(Graphics g) {
@@ -475,8 +475,8 @@
       cursorVisible = true;
       if (softCursor != null) return;
 
-      int cursorLeft = (int)cursor.hotspot.x;
-      int cursorTop = (int)cursor.hotspot.y;
+      int cursorLeft = cursor.hotspot.x;
+      int cursorTop = cursor.hotspot.y;
       int cursorRight = cursorLeft + cursor.width();
       int cursorBottom = cursorTop + cursor.height();
 
diff --git a/java/src/com/tigervnc/vncviewer/Makefile b/java/src/com/tigervnc/vncviewer/Makefile
index 136899b..614057b 100644
--- a/java/src/com/tigervnc/vncviewer/Makefile
+++ b/java/src/com/tigervnc/vncviewer/Makefile
@@ -4,7 +4,7 @@
 
 CP = cp
 JC = javac
-JCFLAGS = -target 1.5 -classpath ../../../
+JCFLAGS = -target 1.5 -Xlint:all,-serial,-cast -classpath ../../../
 JAR = jar
 ARCHIVE = VncViewer.jar
 MANIFEST = MANIFEST.MF
