diff --git a/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java b/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
index a4126f6..b8b2a2c 100644
--- a/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
+++ b/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
@@ -320,7 +320,7 @@
                     net.onrc.onos.core.intent.Path path = pathIntent.getPath();
 
                     for (Iterator<LinkEvent> i = path.iterator(); i.hasNext();) {
-                        LinkEvent le = (LinkEvent) i.next();
+                        LinkEvent le = i.next();
                         if (le.getSrc().dpid.equals(sw.getDpid())) {
                             log.debug("src {} dst {}", le.getSrc(), le.getDst());
                             isflowEntryForThisSwitch = true;
@@ -500,6 +500,7 @@
                         default:
                             break;
                     }
+                    break;
                 default:
                     break;
             }
diff --git a/src/main/java/net/onrc/onos/apps/proxyarp/ArpCacheNotification.java b/src/main/java/net/onrc/onos/apps/proxyarp/ArpCacheNotification.java
index 3eef171..cae6a7d 100644
--- a/src/main/java/net/onrc/onos/apps/proxyarp/ArpCacheNotification.java
+++ b/src/main/java/net/onrc/onos/apps/proxyarp/ArpCacheNotification.java
@@ -22,8 +22,8 @@
      */
     public ArpCacheNotification(byte[] targetAddress,
                                 byte[] targetMacAddress) {
-        this.targetAddress = (byte[]) targetAddress.clone();
-        this.targetMacAddress = (byte[]) targetMacAddress.clone();
+        this.targetAddress = targetAddress.clone();
+        this.targetMacAddress = targetMacAddress.clone();
     }
 
     /**
@@ -32,7 +32,7 @@
      * @return the IP address
      */
     public byte[] getTargetAddress() {
-        return (byte[]) targetAddress.clone();
+        return targetAddress.clone();
     }
 
     /**
@@ -41,7 +41,7 @@
      * @return the MAC address
      */
     public byte[] getTargetMacAddress() {
-        return (byte[]) targetMacAddress.clone();
+        return targetMacAddress.clone();
     }
 
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModule.java b/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModule.java
index 48937f1..136a357 100644
--- a/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModule.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModule.java
@@ -376,6 +376,7 @@
         // do nothing
     }
 
+    @SuppressWarnings("fallthrough")
     @Override
     public void entryUpdated(IntentStateList value) {
         // TODO draw state transition diagram in multiple ONOS instances and update this method
diff --git a/src/main/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManager.java
index e3d8432..3bbb60b 100644
--- a/src/main/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManager.java
+++ b/src/main/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManager.java
@@ -1521,7 +1521,7 @@
                 // Timeout the unicast and multicast LLDP valid times
                 // independently.
                 if ((info.getUnicastValidTime() != null) &&
-                        (info.getUnicastValidTime() + (1000L * this.LINK_TIMEOUT) < curTime)) {
+                        (info.getUnicastValidTime() + (1000L * LINK_TIMEOUT) < curTime)) {
                     info.setUnicastValidTime(null);
 
                     if (info.getMulticastValidTime() != null) {
@@ -1532,7 +1532,7 @@
                     linkChanged = true;
                 }
                 if ((info.getMulticastValidTime() != null) &&
-                        (info.getMulticastValidTime() + (1000L * this.LINK_TIMEOUT) < curTime)) {
+                        (info.getMulticastValidTime() + (1000L * LINK_TIMEOUT) < curTime)) {
                     info.setMulticastValidTime(null);
                     // if uTime is not null, then link will remain as openflow
                     // link. If uTime is null, it will be deleted.  So, we
diff --git a/src/main/java/net/onrc/onos/core/packet/DHCP.java b/src/main/java/net/onrc/onos/core/packet/DHCP.java
index 82ba850..77842ae 100644
--- a/src/main/java/net/onrc/onos/core/packet/DHCP.java
+++ b/src/main/java/net/onrc/onos/core/packet/DHCP.java
@@ -368,7 +368,7 @@
             if (code == 0 || code == 255) {
                 optionsLength += 1;
             } else {
-                optionsLength += 2 + (int) (0xff & option.getLength());
+                optionsLength += 2 + (0xff & option.getLength());
             }
         }
         int optionsPadLength = 0;
diff --git a/src/main/java/net/onrc/onos/core/packet/Ethernet.java b/src/main/java/net/onrc/onos/core/packet/Ethernet.java
index 089a481..aab5e7b 100644
--- a/src/main/java/net/onrc/onos/core/packet/Ethernet.java
+++ b/src/main/java/net/onrc/onos/core/packet/Ethernet.java
@@ -392,7 +392,7 @@
 
         StringBuffer sb = new StringBuffer("\n");
 
-        IPacket pkt = (IPacket) this.getPayload();
+        IPacket pkt = this.getPayload();
 
         if (pkt instanceof ARP) {
             sb.append("arp");
@@ -447,7 +447,7 @@
             sb.append("\nnw_proto: ");
             sb.append(p.getProtocol());
 
-            IPacket payload = (IPacket) pkt.getPayload();
+            IPacket payload = pkt.getPayload();
             if (payload instanceof TCP) {
                 sb.append("\ntp_src: ");
                 sb.append(((TCP) payload).getSourcePort());
