diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DistributedLock.java b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DistributedLock.java
index 48a45c4..4998179 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DistributedLock.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DistributedLock.java
@@ -2,6 +2,7 @@
 
 import static org.slf4j.LoggerFactory.getLogger;
 
+import java.nio.charset.StandardCharsets;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
@@ -41,7 +42,9 @@
         this.databaseService = databaseService;
         this.lockManager = lockManager;
         this.lockId =
-                (UUID.randomUUID().toString() + "::" + clusterService.getLocalNode().id().toString()).getBytes();
+                (UUID.randomUUID().toString() + "::" +
+                        clusterService.getLocalNode().id().toString()).
+                        getBytes(StandardCharsets.UTF_8);
     }
 
     @Override
diff --git a/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/RoleManager.java b/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/RoleManager.java
index 734e0ba..51e90e5 100644
--- a/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/RoleManager.java
+++ b/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/RoleManager.java
@@ -216,7 +216,7 @@
                     + "Switch: {}. "
                     + "This controller has no current role for this sw. "
                     + "Ignoring ...", new Object[] {rri,
-                            sw.getStringId(), });
+                            sw == null ? "(null)" : sw.getStringId(), });
             return RoleRecvStatus.OTHER_EXPECTATION;
         }
 
diff --git a/openflow/ctl/src/main/java/org/onlab/onos/openflow/drivers/impl/OFSwitchImplCPqD13.java b/openflow/ctl/src/main/java/org/onlab/onos/openflow/drivers/impl/OFSwitchImplCPqD13.java
index f5aa0d4..0905f43 100644
--- a/openflow/ctl/src/main/java/org/onlab/onos/openflow/drivers/impl/OFSwitchImplCPqD13.java
+++ b/openflow/ctl/src/main/java/org/onlab/onos/openflow/drivers/impl/OFSwitchImplCPqD13.java
@@ -155,7 +155,7 @@
 
     @Override
     public void processDriverHandshakeMessage(OFMessage m) {
-        if (!startDriverHandshakeCalled || !startDriverHandshakeCalled) {
+        if (!startDriverHandshakeCalled) {
             throw new SwitchDriverSubHandshakeNotStarted();
         }
         if (driverHandshakeComplete.get()) {
diff --git a/pom.xml b/pom.xml
index 28b387e..99e2e08 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+ <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
@@ -428,12 +428,6 @@
                 </plugin>
 
                 <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>findbugs-maven-plugin</artifactId>
-                    <version>3.0.0</version>
-                </plugin>
-
-                <plugin>
                     <groupId>org.apache.felix</groupId>
                     <artifactId>maven-scr-plugin</artifactId>
                     <version>1.20.0</version>
@@ -452,6 +446,22 @@
                         </supportedProjectTypes>
                     </configuration>
                 </plugin>
+                <plugin>
+                  <groupId>org.codehaus.mojo</groupId>
+                  <artifactId>findbugs-maven-plugin</artifactId>
+                  <version>3.0.0</version>
+                  <dependencies>
+                    <dependency>
+                      <groupId>org.onlab.tools</groupId>
+                      <artifactId>onos-build-conf</artifactId>
+                      <version>1.0</version>
+                    </dependency>
+                  </dependencies>
+                  <configuration>
+                    <effort>Max</effort>
+                    <excludeFilterFile>onos/findbugs-suppressions.xml</excludeFilterFile>
+                  </configuration>
+                </plugin>
 
                 <!-- TODO: add findbugs plugin for static code analysis; for explicit invocation only -->
                 <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
@@ -586,7 +596,7 @@
                 <artifactId>maven-checkstyle-plugin</artifactId>
                 <version>2.12.1</version>
                 <configuration>
-                    <configLocation>onos/checkstyle.xml</configLocation>
+                    <!-- <configLocation>onos/checkstyle.xml</configLocation> -->
                 </configuration>
             </plugin>
 
@@ -598,10 +608,25 @@
                     <excludes>
                     </excludes>
                     <rulesets>
-                        <ruleset>onos/pmd.xml</ruleset>
+                        <!-- <ruleset>onos/pmd.xml</ruleset> -->
                     </rulesets>
                 </configuration>
             </plugin>
+            <plugin>
+              <groupId>org.codehaus.mojo</groupId>
+              <artifactId>findbugs-maven-plugin</artifactId>
+              <version>3.0.0</version>
+              <configuration>
+                <effort>$Max</effort>
+                <!-- <excludeFilterFile>${findbugs.excludeFilterFile}</excludeFilterFile> -->
+                <reportPlugins>
+                  <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>findbugs-maven-plugin</artifactId>
+                  </plugin>
+                </reportPlugins>
+              </configuration>
+            </plugin>
         </plugins>
     </reporting>
 </project>
diff --git a/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/FlowModBuilderVer13.java b/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/FlowModBuilderVer13.java
index f7cf9a5..6f595d0 100644
--- a/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/FlowModBuilderVer13.java
+++ b/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/FlowModBuilderVer13.java
@@ -259,10 +259,12 @@
             ip = (ModIPInstruction) i;
             ip4 = ip.ip().getIp4Address();
             oxm = factory().oxms().ipv4Dst(IPv4Address.of(ip4.toInt()));
+            break;
         case IP_SRC:
             ip = (ModIPInstruction) i;
             ip4 = ip.ip().getIp4Address();
             oxm = factory().oxms().ipv4Src(IPv4Address.of(ip4.toInt()));
+            break;
         default:
             log.warn("Unimplemented action type {}.", l3m.subtype());
             break;
diff --git a/tools/build/conf/src/main/resources/onos/findbugs-suppressions.xml b/tools/build/conf/src/main/resources/onos/findbugs-suppressions.xml
new file mode 100644
index 0000000..eb5a385
--- /dev/null
+++ b/tools/build/conf/src/main/resources/onos/findbugs-suppressions.xml
@@ -0,0 +1,30 @@
+<!--
+  ~ Copyright 2014 Open Networking Laboratory
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<FindBugsFilter>
+
+    <!-- False positives on calls to CompletableFuture methods with a null
+         parameter -->
+    <Match>
+        <Class name="~org\.onlab\.onos\.store\.service\.impl\..*" />
+        <Bug pattern="NP_NONNULL_PARAM_VIOLATION" />
+    </Match>
+
+    <!-- Filter out testing application -->
+    <Match>
+        <Class name="~org\.onlab\.onos\.foo\..*" />
+    </Match>
+
+</FindBugsFilter>
diff --git a/utils/misc/src/main/java/org/onlab/packet/Ethernet.java b/utils/misc/src/main/java/org/onlab/packet/Ethernet.java
index 0058e16..f3f61f0 100644
--- a/utils/misc/src/main/java/org/onlab/packet/Ethernet.java
+++ b/utils/misc/src/main/java/org/onlab/packet/Ethernet.java
@@ -40,15 +40,15 @@
     public static final short MPLS_UNICAST = (short) 0x8847;
     public static final short MPLS_MULTICAST = (short) 0x8848;
     public static final short DATALAYER_ADDRESS_LENGTH = 6; // bytes
-    public static Map<Short, Class<? extends IPacket>> etherTypeClassMap;
+    public static final Map<Short, Class<? extends IPacket>> ETHER_TYPE_CLASS_MAP =
+        new HashMap<>();
 
     static {
-        Ethernet.etherTypeClassMap = new HashMap<Short, Class<? extends IPacket>>();
-        Ethernet.etherTypeClassMap.put(Ethernet.TYPE_ARP, ARP.class);
-        Ethernet.etherTypeClassMap.put(Ethernet.TYPE_RARP, ARP.class);
-        Ethernet.etherTypeClassMap.put(Ethernet.TYPE_IPV4, IPv4.class);
-        Ethernet.etherTypeClassMap.put(Ethernet.TYPE_LLDP, LLDP.class);
-        Ethernet.etherTypeClassMap.put(Ethernet.TYPE_BSN, LLDP.class);
+        Ethernet.ETHER_TYPE_CLASS_MAP.put(Ethernet.TYPE_ARP, ARP.class);
+        Ethernet.ETHER_TYPE_CLASS_MAP.put(Ethernet.TYPE_RARP, ARP.class);
+        Ethernet.ETHER_TYPE_CLASS_MAP.put(Ethernet.TYPE_IPV4, IPv4.class);
+        Ethernet.ETHER_TYPE_CLASS_MAP.put(Ethernet.TYPE_LLDP, LLDP.class);
+        Ethernet.ETHER_TYPE_CLASS_MAP.put(Ethernet.TYPE_BSN, LLDP.class);
     }
 
     protected MacAddress destinationMACAddress;
@@ -327,8 +327,8 @@
         this.etherType = ethType;
 
         IPacket payload;
-        if (Ethernet.etherTypeClassMap.containsKey(this.etherType)) {
-            final Class<? extends IPacket> clazz = Ethernet.etherTypeClassMap
+        if (Ethernet.ETHER_TYPE_CLASS_MAP.containsKey(this.etherType)) {
+            final Class<? extends IPacket> clazz = Ethernet.ETHER_TYPE_CLASS_MAP
                     .get(this.etherType);
             try {
                 payload = clazz.newInstance();
diff --git a/utils/misc/src/main/java/org/onlab/packet/IPv4.java b/utils/misc/src/main/java/org/onlab/packet/IPv4.java
index e54e9e7..28f6a48 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IPv4.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IPv4.java
@@ -32,10 +32,10 @@
     public static final byte PROTOCOL_ICMP = 0x1;
     public static final byte PROTOCOL_TCP = 0x6;
     public static final byte PROTOCOL_UDP = 0x11;
-    public static Map<Byte, Class<? extends IPacket>> protocolClassMap;
+    public static Map<Byte, Class<? extends IPacket>> protocolClassMap =
+            new HashMap<>();
 
     static {
-        IPv4.protocolClassMap = new HashMap<Byte, Class<? extends IPacket>>();
         IPv4.protocolClassMap.put(IPv4.PROTOCOL_ICMP, ICMP.class);
         IPv4.protocolClassMap.put(IPv4.PROTOCOL_TCP, TCP.class);
         IPv4.protocolClassMap.put(IPv4.PROTOCOL_UDP, UDP.class);
diff --git a/utils/misc/src/main/java/org/onlab/packet/ONLabLddp.java b/utils/misc/src/main/java/org/onlab/packet/ONLabLddp.java
index 4fd38cd..7978d37 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ONLabLddp.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ONLabLddp.java
@@ -16,6 +16,7 @@
 package org.onlab.packet;
 
 import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
@@ -68,7 +69,7 @@
     // Contents of full name TLV
     private static final byte[] NAME_TLV = ByteBuffer.allocate(NAME_TLV_SIZE + 2)
             .putShort(NAME_TLV_HEADER).put(ONLAB_OUI).put(NAME_TLV_SUBTYPE)
-            .put(OVX_NAME.getBytes()).array();
+            .put(OVX_NAME.getBytes(StandardCharsets.UTF_8)).array();
 
     private static final byte DPID_TLV_TYPE = 127;
     private static final byte DPID_TLV_SIZE = (byte) (12); // 12 = OUI (3) + subtype
@@ -203,7 +204,7 @@
         this.bb = ByteBuffer.wrap(ouiName);
         this.bb.put(ONLabLddp.ONLAB_OUI);
         this.bb.put(NAME_TLV_SUBTYPE);
-        this.bb.put(name.getBytes());
+        this.bb.put(name.getBytes(StandardCharsets.UTF_8));
 
         this.ouiNameTLV.setLength(NAME_TLV_SIZE);
         this.ouiNameTLV.setType(NAME_TLV_TYPE);
diff --git a/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java b/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java
index 0b33c45..5b3902a 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java
@@ -19,6 +19,7 @@
 import org.apache.commons.lang.ArrayUtils;
 
 import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
 
 /**
  *  ONOS LLDP containing organizational TLV for ONOS device dicovery.
@@ -141,7 +142,7 @@
     public String getNameString() {
         LLDPOrganizationalTLV tlv = getNameTLV();
         if (tlv != null) {
-            return new String(tlv.getInfoString());
+            return new String(tlv.getInfoString(), StandardCharsets.UTF_8);
         }
         return null;
     }
@@ -149,7 +150,7 @@
     public String getDeviceString() {
         LLDPOrganizationalTLV tlv = getDeviceTLV();
         if (tlv != null) {
-            return new String(tlv.getInfoString());
+            return new String(tlv.getInfoString(), StandardCharsets.UTF_8);
         }
         return null;
     }
diff --git a/utils/misc/src/main/java/org/onlab/packet/UDP.java b/utils/misc/src/main/java/org/onlab/packet/UDP.java
index 73a196a..19e23c0 100644
--- a/utils/misc/src/main/java/org/onlab/packet/UDP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/UDP.java
@@ -27,18 +27,18 @@
  */
 
 public class UDP extends BasePacket {
-    public static Map<Short, Class<? extends IPacket>> decodeMap;
+    public static final Map<Short, Class<? extends IPacket>> DECODE_MAP =
+            new HashMap<>();
     public static final short DHCP_SERVER_PORT = (short) 67;
     public static final short DHCP_CLIENT_PORT = (short) 68;
 
     static {
-        UDP.decodeMap = new HashMap<Short, Class<? extends IPacket>>();
         /*
          * Disable DHCP until the deserialize code is hardened to deal with
          * garbage input
          */
-        UDP.decodeMap.put(UDP.DHCP_SERVER_PORT, DHCP.class);
-        UDP.decodeMap.put(UDP.DHCP_CLIENT_PORT, DHCP.class);
+        UDP.DECODE_MAP.put(UDP.DHCP_SERVER_PORT, DHCP.class);
+        UDP.DECODE_MAP.put(UDP.DHCP_CLIENT_PORT, DHCP.class);
 
     }
 
@@ -231,16 +231,16 @@
         this.length = bb.getShort();
         this.checksum = bb.getShort();
 
-        if (UDP.decodeMap.containsKey(this.destinationPort)) {
+        if (UDP.DECODE_MAP.containsKey(this.destinationPort)) {
             try {
-                this.payload = UDP.decodeMap.get(this.destinationPort)
+                this.payload = UDP.DECODE_MAP.get(this.destinationPort)
                         .getConstructor().newInstance();
             } catch (final Exception e) {
                 throw new RuntimeException("Failure instantiating class", e);
             }
-        } else if (UDP.decodeMap.containsKey(this.sourcePort)) {
+        } else if (UDP.DECODE_MAP.containsKey(this.sourcePort)) {
             try {
-                this.payload = UDP.decodeMap.get(this.sourcePort)
+                this.payload = UDP.DECODE_MAP.get(this.sourcePort)
                         .getConstructor().newInstance();
             } catch (final Exception e) {
                 throw new RuntimeException("Failure instantiating class", e);
