diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlLoadSnapshot.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlLoadSnapshot.java
index b3f34ea..532297d 100644
--- a/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlLoadSnapshot.java
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlLoadSnapshot.java
@@ -99,7 +99,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(latest, average, time, recent);
+        return Objects.hash(latest, average, time, Arrays.hashCode(recent));
     }
 
     @Override
diff --git a/apps/dhcp/api/src/main/java/org/onosproject/dhcp/IpAssignment.java b/apps/dhcp/api/src/main/java/org/onosproject/dhcp/IpAssignment.java
index d4beda2..7b83f0c 100644
--- a/apps/dhcp/api/src/main/java/org/onosproject/dhcp/IpAssignment.java
+++ b/apps/dhcp/api/src/main/java/org/onosproject/dhcp/IpAssignment.java
@@ -310,7 +310,6 @@
         private void validateInputs() {
             checkNotNull(ipAddress, "IP Address must be specified");
             checkNotNull(assignmentStatus, "Assignment Status must be specified");
-            checkNotNull(leasePeriod, "Lease Period must be specified");
             checkNotNull(timeStamp, "Timestamp must be specified");
 
             switch (assignmentStatus) {
diff --git a/apps/faultmanagement/fmmgr/src/test/java/org/onosproject/faultmanagement/impl/PollingAlarmProviderTest.java b/apps/faultmanagement/fmmgr/src/test/java/org/onosproject/faultmanagement/impl/PollingAlarmProviderTest.java
index b8fa17f..b2f2469 100644
--- a/apps/faultmanagement/fmmgr/src/test/java/org/onosproject/faultmanagement/impl/PollingAlarmProviderTest.java
+++ b/apps/faultmanagement/fmmgr/src/test/java/org/onosproject/faultmanagement/impl/PollingAlarmProviderTest.java
@@ -120,7 +120,7 @@
 
     @Test
     public void activate() throws Exception {
-        assertFalse("Provider should be registered", providerRegistry.getProviders().contains(provider));
+        assertFalse("Provider should be registered", providerRegistry.getProviders().contains(provider.id()));
         assertEquals("Device listener should be added", 1, deviceListeners.size());
         assertEquals("Incorrect alarm provider service", alarmProviderService, provider.providerService);
         assertEquals("Mastership listener should be added", 1, mastershipListeners.size());
@@ -135,7 +135,7 @@
         provider.deactivate();
         assertEquals("Device listener should be removed", 0, deviceListeners.size());
         assertEquals("Mastership listener should be removed", 0, mastershipListeners.size());
-        assertFalse("Provider should not be registered", providerRegistry.getProviders().contains(provider));
+        assertFalse("Provider should not be registered", providerRegistry.getProviders().contains(provider.id()));
         assertTrue(provider.alarmsExecutor.isShutdown());
         assertNull(provider.providerService);
     }
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/addresses/UnresolvedExtensionMappingAddress.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/addresses/UnresolvedExtensionMappingAddress.java
index a1db59f..3a07879 100644
--- a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/addresses/UnresolvedExtensionMappingAddress.java
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/addresses/UnresolvedExtensionMappingAddress.java
@@ -18,8 +18,6 @@
 import org.onosproject.net.flow.AbstractExtension;
 
 import java.util.Arrays;
-import java.util.Objects;
-
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onosproject.mapping.addresses.ExtensionMappingAddressType
                              .ExtensionMappingAddressTypes.UNRESOLVED_TYPE;
@@ -63,7 +61,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(bytes);
+        return Arrays.hashCode(bytes);
     }
 
     @Override
diff --git a/apps/routing-api/src/main/java/org/onosproject/routing/RouterInfo.java b/apps/routing-api/src/main/java/org/onosproject/routing/RouterInfo.java
index 99a6af4..6f2347f 100644
--- a/apps/routing-api/src/main/java/org/onosproject/routing/RouterInfo.java
+++ b/apps/routing-api/src/main/java/org/onosproject/routing/RouterInfo.java
@@ -43,7 +43,7 @@
      */
     public RouterInfo(ConnectPoint controlPlaneConnectPoint, boolean ospfEnabled, Set<String> interfaces) {
         this.controlPlaneConnectPoint = checkNotNull(controlPlaneConnectPoint);
-        this.ospfEnabled = checkNotNull(ospfEnabled);
+        this.ospfEnabled = ospfEnabled;
         this.interfaces = ImmutableSet.copyOf(checkNotNull(interfaces));
     }
 
diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/McastHandler.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/McastHandler.java
index 80affc1..b0be4e3 100644
--- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/McastHandler.java
+++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/McastHandler.java
@@ -411,7 +411,7 @@
                 log.info("NextObj for {}/{} already exists. Abort", deviceId, port);
                 return;
             }
-            portBuilder.addAll(existingPorts).add(port).build();
+            portBuilder.addAll(existingPorts).add(port);
         }
         // Create, store and apply the new nextObj and fwdObj
         ObjectiveContext context = new DefaultObjectiveContext(
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultRouter.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultRouter.java
index f31aed1..fc8bbe5 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultRouter.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultRouter.java
@@ -55,9 +55,9 @@
                          List<String> routes) {
         this.id = checkNotNull(id, "id cannot be null");
         this.name = routerName;
-        this.adminStateUp = checkNotNull(adminStateUp, "adminStateUp cannot be null");
+        this.adminStateUp = adminStateUp;
         this.status = checkNotNull(status, "status cannot be null");
-        this.distributed = checkNotNull(distributed, "distributed cannot be null");
+        this.distributed = distributed;
         this.externalGatewayInfo = externalGatewayInfo;
         this.gatewayPortId = gatewayPortId;
         this.tenantId = checkNotNull(tenantId, "tenantId cannot be null");
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/RouterGateway.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/RouterGateway.java
index 27e1473..6aef24e 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/RouterGateway.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/RouterGateway.java
@@ -35,7 +35,7 @@
     private RouterGateway(TenantNetworkId networkId, boolean enableSnat,
                          Set<FixedIp> externalFixedIps) {
         this.networkId = checkNotNull(networkId, "networkId cannot be null");
-        this.enableSnat = checkNotNull(enableSnat, "enableSnat cannot be null");
+        this.enableSnat = enableSnat;
         this.externalFixedIps = checkNotNull(externalFixedIps, "externalFixedIps cannot be null");
     }
 
diff --git a/cli/src/main/java/org/onosproject/cli/net/FlowsListCommand.java b/cli/src/main/java/org/onosproject/cli/net/FlowsListCommand.java
index 6770490..6310ed4 100644
--- a/cli/src/main/java/org/onosproject/cli/net/FlowsListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/FlowsListCommand.java
@@ -39,6 +39,7 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -303,7 +304,7 @@
                 print(LONG_FORMAT, Long.toHexString(f.id().value()), f.state(),
                         f.bytes(), f.packets(), f.life(), f.liveType(), f.priority(), f.tableId(),
                         appId != null ? appId.name() : "<none>",
-                        f.payLoad() == null ? null : f.payLoad().payLoad().toString(),
+                        f.payLoad() == null ? null : Arrays.toString(f.payLoad().payLoad()),
                         f.selector().criteria(), f.treatment());
             }
         }
diff --git a/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java b/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java
index fa504df..8fb3714 100644
--- a/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java
@@ -553,8 +553,9 @@
             builder.append('\n').append(format("bidirectional=%s", ci.isBidirectional()));
         }
 
-        List<Intent> installable = service.getInstallableIntents(intent.key());
-        installable.stream().filter(i -> contentFilter.filter(i));
+        List<Intent> installable = service.getInstallableIntents(intent.key())
+            .stream().filter(i -> contentFilter.filter(i))
+            .collect(Collectors.toList());
         if (showInstallable && installable != null && !installable.isEmpty()) {
             builder.append('\n').append(format(INSTALLABLE, installable));
         }
diff --git a/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualFlowsListCommand.java b/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualFlowsListCommand.java
index 8959389..ff0cf7d 100644
--- a/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualFlowsListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualFlowsListCommand.java
@@ -38,6 +38,7 @@
 import org.onosproject.utils.Comparators;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -237,7 +238,7 @@
                 print(LONG_FORMAT, Long.toHexString(f.id().value()), f.state(),
                         f.bytes(), f.packets(), f.life(), f.liveType(), f.priority(), f.tableId(),
                         appId != null ? appId.name() : "<none>",
-                        f.payLoad() == null ? null : f.payLoad().payLoad().toString(),
+                        f.payLoad() == null ? null : Arrays.toString(f.payLoad().payLoad()),
                         f.selector().criteria(), f.treatment());
             }
         }
diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java
index 17f527b..22bf95c 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java
@@ -17,7 +17,6 @@
 
 import org.onosproject.net.flow.AbstractExtension;
 import java.util.Arrays;
-import java.util.Objects;
 import static com.google.common.base.MoreObjects.toStringHelper;
 
 
@@ -57,7 +56,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(bytes);
+        return Arrays.hashCode(bytes);
     }
 
     @Override
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
index 460976a..95ee08d 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
@@ -97,7 +97,6 @@
      * @return set-queue instruction
      */
     public static SetQueueInstruction setQueue(final long queueId, final PortNumber port) {
-        checkNotNull(queueId, "queue ID cannot be null");
         return new SetQueueInstruction(queueId, port);
     }
 
@@ -324,7 +323,6 @@
      * @return a l3 modification
      */
     public static L3ModificationInstruction modL3ArpOp(short op) {
-        checkNotNull(op, "Arp operation cannot be null");
         return new ModArpOpInstruction(L3SubType.ARP_OP, op);
     }
 
@@ -424,7 +422,6 @@
      * @return a L2 modification
      */
     public static L2ModificationInstruction modTunnelId(long tunnelId) {
-        checkNotNull(tunnelId, "Tunnel id cannot be null");
         return new L2ModificationInstruction.ModTunnelIdInstruction(tunnelId);
     }
 
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java
index bbe1d33..6c4a8c2 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java
@@ -19,7 +19,6 @@
 import com.google.common.base.MoreObjects;
 import org.onosproject.net.flow.AbstractExtension;
 import java.util.Arrays;
-import java.util.Objects;
 
 /**
  * Unresolved extension treatment.
@@ -57,7 +56,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(bytes);
+        return Arrays.hashCode(bytes);
     }
 
     @Override
diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentOperationContext.java b/core/api/src/main/java/org/onosproject/net/intent/IntentOperationContext.java
index 6fc3f2e..528f4ba 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/IntentOperationContext.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/IntentOperationContext.java
@@ -103,7 +103,7 @@
         IntentOperationContext that = (IntentOperationContext) obj;
         return Objects.equals(intentsToInstall, that.intentsToInstall) &&
                 Objects.equals(intentsToUninstall, that.intentsToUninstall) &&
-                Objects.equals(intentInstallationContext, intentInstallationContext);
+                Objects.equals(intentInstallationContext, that.intentInstallationContext);
     }
 
     @Override
diff --git a/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessage.java b/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessage.java
index 4c03699..5327d48 100644
--- a/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessage.java
+++ b/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessage.java
@@ -155,6 +155,6 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(sender, subject, payload);
+        return Objects.hash(sender, subject, Arrays.hashCode(payload));
     }
 }
diff --git a/core/api/src/test/java/org/onosproject/net/link/LinkProviderRegistryAdapter.java b/core/api/src/test/java/org/onosproject/net/link/LinkProviderRegistryAdapter.java
index d2cfec2..c0ee902 100644
--- a/core/api/src/test/java/org/onosproject/net/link/LinkProviderRegistryAdapter.java
+++ b/core/api/src/test/java/org/onosproject/net/link/LinkProviderRegistryAdapter.java
@@ -36,11 +36,18 @@
 
     @Override
     public void unregister(LinkProvider provider) {
+        if (providerService != null && provider.id().equals(providerService.provider().id())) {
+            providerService = null;
+        }
     }
 
     @Override
     public Set<ProviderId> getProviders() {
-        return ImmutableSet.of(providerService.provider().id());
+        if (providerService != null) {
+            return ImmutableSet.of(providerService.provider().id());
+        } else {
+            return ImmutableSet.of();
+        }
     }
 
     public LinkProviderServiceAdapter registeredProvider() {
diff --git a/core/api/src/test/java/org/onosproject/security/PermissionTest.java b/core/api/src/test/java/org/onosproject/security/PermissionTest.java
index 191d868..bdab240 100644
--- a/core/api/src/test/java/org/onosproject/security/PermissionTest.java
+++ b/core/api/src/test/java/org/onosproject/security/PermissionTest.java
@@ -17,8 +17,6 @@
 package org.onosproject.security;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-
 import org.junit.Test;
 
 /**
@@ -70,7 +68,7 @@
     public void testEqualsObject() {
         Permission permissionA = new Permission("classname", "name", "actions");
         Permission permissionB = new Permission("classname", "name", "actions");
-        assertSame(permissionA, permissionA);
+        assertEquals(permissionA, permissionB);
         assertEquals(permissionA.getClassName(), permissionB.getClassName());
         assertEquals(permissionA.getName(), permissionB.getName());
         assertEquals(permissionA.getActions(), permissionB.getActions());
diff --git a/core/api/src/test/java/org/onosproject/store/service/DocumentPathTest.java b/core/api/src/test/java/org/onosproject/store/service/DocumentPathTest.java
index 6e69eb6..80f411f 100644
--- a/core/api/src/test/java/org/onosproject/store/service/DocumentPathTest.java
+++ b/core/api/src/test/java/org/onosproject/store/service/DocumentPathTest.java
@@ -68,6 +68,7 @@
         DocumentPath path1 = exceptions("node|name", parentPath);
     }
 
+    @SuppressWarnings("SelfComparison")
     @Test
     public void comparePaths() {
         DocumentPath one = path("root");
diff --git a/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java b/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java
index b28356d..352210d 100644
--- a/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java
+++ b/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java
@@ -86,6 +86,7 @@
         return map.get(key);
     }
 
+    @SuppressWarnings("ReturnValueIgnored")
     @Override
     public void put(K key, V value) {
         map.put(key, value);
diff --git a/core/api/src/test/java/org/onosproject/store/service/WallClockTimestampTest.java b/core/api/src/test/java/org/onosproject/store/service/WallClockTimestampTest.java
index 3f02fef..8ea04fd 100644
--- a/core/api/src/test/java/org/onosproject/store/service/WallClockTimestampTest.java
+++ b/core/api/src/test/java/org/onosproject/store/service/WallClockTimestampTest.java
@@ -30,6 +30,7 @@
  */
 public class WallClockTimestampTest {
 
+    @SuppressWarnings("SelfComparison")
     @Test
     public final void testBasic() throws InterruptedException {
         WallClockTimestamp ts1 = new WallClockTimestamp();
diff --git a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java
index 09d3a24..c623bf2 100644
--- a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java
+++ b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java
@@ -208,7 +208,7 @@
         public ObjectiveInstaller(DeviceId deviceId, Objective objective, int attemps) {
             this.deviceId = checkNotNull(deviceId);
             this.objective = checkNotNull(objective);
-            this.numAttempts = checkNotNull(attemps);
+            this.numAttempts = attemps;
         }
 
         @Override
diff --git a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java
index be90cb5..a765648 100644
--- a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java
+++ b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java
@@ -177,7 +177,7 @@
         public ObjectiveInstaller(DeviceId deviceId, Objective objective, int attemps) {
             this.deviceId = checkNotNull(deviceId);
             this.objective = checkNotNull(objective);
-            this.numAttempts = checkNotNull(attemps);
+            this.numAttempts = attemps;
         }
 
         @Override
diff --git a/core/net/src/test/java/org/onosproject/net/config/basics/PortAnnotationConfigTest.java b/core/net/src/test/java/org/onosproject/net/config/basics/PortAnnotationConfigTest.java
index dd3211c..df6ce7b 100644
--- a/core/net/src/test/java/org/onosproject/net/config/basics/PortAnnotationConfigTest.java
+++ b/core/net/src/test/java/org/onosproject/net/config/basics/PortAnnotationConfigTest.java
@@ -126,6 +126,7 @@
         assertThat(annotations.get(key), is(value));
     }
 
+    @Test
     public void writeEntryTest() throws JsonProcessingException, IOException {
 
         PortAnnotationConfig w = new PortAnnotationConfig();
@@ -146,6 +147,7 @@
         assertThat(annotations.get(key), is(value));
     }
 
+    @Test
     public void writeMapTest() throws JsonProcessingException, IOException {
 
         PortAnnotationConfig w = new PortAnnotationConfig();
diff --git a/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java b/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java
index 1982d7f..d818b3d 100644
--- a/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java
@@ -148,7 +148,7 @@
     @Test
     public void register() {
         piPipeconfService.register(piPipeconf);
-        assertTrue("PiPipeconf should be registered", piPipeconfService.piPipeconfs.contains(piPipeconf));
+        assertTrue("PiPipeconf should be registered", piPipeconfService.piPipeconfs.containsValue(piPipeconf));
     }
 
     @Test
diff --git a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
index 03bfc55..67066fd 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
@@ -318,7 +318,7 @@
                     ? deviceClockService.getTimestamp(deviceId)
                     : removalRequest.getOrDefault(deviceId, DEFAULT_TIMESTAMP);
         } catch (IllegalStateException e) {
-            newTimestamp = removalRequest.getOrDefault(deviceDescription, DEFAULT_TIMESTAMP);
+            newTimestamp = removalRequest.getOrDefault(deviceId, DEFAULT_TIMESTAMP);
             isMaster = false;
         }
         final Timestamped<DeviceDescription> deltaDesc = new Timestamped<>(deviceDescription, newTimestamp);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
index 14ed0ed..e5ed75b 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
@@ -63,6 +63,7 @@
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.stream.Collectors.groupingBy;
 import static org.onosproject.net.resource.ResourceEvent.Type.RESOURCE_ADDED;
 import static org.onosproject.net.resource.ResourceEvent.Type.RESOURCE_REMOVED;
 
@@ -132,7 +133,7 @@
             // the order is preserved by LinkedHashMap
             Map<DiscreteResource, List<Resource>> resourceMap = resources.stream()
                     .filter(x -> x.parent().isPresent())
-                    .collect(Collectors.groupingBy(x -> x.parent().get(), LinkedHashMap::new, Collectors.toList()));
+                    .collect(groupingBy(x -> x.parent().get(), LinkedHashMap::new, Collectors.<Resource>toList()));
 
             TransactionalDiscreteResourceSubStore discreteTxStore = discreteStore.transactional(tx);
             TransactionalContinuousResourceSubStore continuousTxStore = continuousStore.transactional(tx);
diff --git a/core/store/dist/src/test/java/org/onosproject/store/impl/MastershipBasedTimestampTest.java b/core/store/dist/src/test/java/org/onosproject/store/impl/MastershipBasedTimestampTest.java
index 605de95..bbbc616 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/impl/MastershipBasedTimestampTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/impl/MastershipBasedTimestampTest.java
@@ -47,6 +47,7 @@
         assertEquals(sequenceNumber, ts.sequenceNumber());
     }
 
+    @SuppressWarnings("SelfComparison")
     @Test
     public final void testCompareTo() {
         assertTrue(TS_1_1.compareTo(TS_1_1) == 0);
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTree.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTree.java
index 31bd20c..4c1ff6a 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTree.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTree.java
@@ -19,6 +19,7 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.onosproject.store.service.DocumentPath;
@@ -147,13 +148,17 @@
     }
 
     @Override
-    public boolean replace(DocumentPath path, V newValue, V currentValue) {
+    public boolean replace(DocumentPath path, V newValue, V expectedValue) {
         checkRootModification(path);
-        if (Objects.equals(newValue, currentValue)) {
+        if (Objects.equals(newValue, expectedValue)) {
             return false;
         }
         DocumentTreeNode<V> node = getNode(path);
-        if (node != null && Objects.equals(Versioned.valueOrNull(node.value()), currentValue)) {
+        V prevValue = Optional.ofNullable(node)
+                    .map(DocumentTreeNode::value)
+                    .map(Versioned::valueOrNull)
+                    .orElse(null);
+        if (Objects.equals(prevValue, expectedValue)) {
             set(path, newValue);
             return true;
         }
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/MapValueTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/MapValueTest.java
index 70c33e1..cfad4e4 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/MapValueTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/MapValueTest.java
@@ -48,6 +48,7 @@
         assertEquals(actual, expected);
     }
 
+    @SuppressWarnings("SelfComparison")
     @Test
     public void testComparison() {
         Timestamp ts1 = new LogicalTimestamp(9);
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMapTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMapTest.java
index 2cc9631..6466c12 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMapTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMapTest.java
@@ -115,6 +115,7 @@
         assertFalse(transcodingMap.containsValue(DEV1).join());
     }
 
+    @Test
     public void testGet() throws Exception {
         assertNull(transcodingMap.get(KEY1).join().value());
         transcodingMap.put(KEY2, DEV1).join();
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapServiceTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapServiceTest.java
index c05ebcb..66173d0 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapServiceTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapServiceTest.java
@@ -15,8 +15,8 @@
  */
 package org.onosproject.store.primitives.resources.impl;
 
-import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 
 import io.atomix.protocols.raft.service.ServiceId;
 import io.atomix.protocols.raft.service.impl.DefaultCommit;
@@ -57,7 +57,7 @@
                 2,
                 PUT,
                 new AtomixConsistentSetMultimapOperations.Put(
-                        "foo", Arrays.asList("Hello world!".getBytes()), Match.ANY),
+                        "foo", Collections.singletonList("Hello world!".getBytes()), Match.ANY),
                 mock(RaftSessionContext.class),
                 System.currentTimeMillis()));
 
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeTest.java
index 18746a7..7a41395 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeTest.java
@@ -27,6 +27,7 @@
 import com.google.common.base.Throwables;
 import io.atomix.protocols.raft.proxy.RaftProxy;
 import io.atomix.protocols.raft.service.RaftService;
+
 import org.junit.Test;
 import org.onosproject.store.primitives.NodeUpdate;
 import org.onosproject.store.primitives.TransactionId;
@@ -219,6 +220,9 @@
         assertArrayEquals("newAB".getBytes(), tree.get(path("root.a.b")).join().value());
 
         assertFalse(tree.replace(path("root.a.d"), "bar".getBytes(), "foo".getBytes()).join());
+
+        assertTrue(tree.replace(path("root.x"), "beta".getBytes(), null).join());
+
     }
 
     /**
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java
index 919d3c9..2529523 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java
@@ -15,8 +15,8 @@
  */
 package org.onosproject.store.primitives.resources.impl;
 
-import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 
 import io.atomix.protocols.raft.ReadConsistency;
 import io.atomix.protocols.raft.cluster.MemberId;
@@ -93,7 +93,7 @@
         service.add(new DefaultCommit<>(
                 2,
                 ADD,
-                new AtomixWorkQueueOperations.Add(Arrays.asList("Hello world!".getBytes())),
+                new AtomixWorkQueueOperations.Add(Collections.singletonList("Hello world!".getBytes())),
                 session,
                 System.currentTimeMillis()));
 
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeTest.java
index 5505e0d..1398300 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeTest.java
@@ -148,6 +148,7 @@
         tree.set(path("root.a.b"), "alpha");
     }
 
+    @Test
     public void testReplaceWithVersion() {
         DocumentTree<String> tree = new DefaultDocumentTree<>();
         tree.create(path("root.a"), "bar");
@@ -158,6 +159,7 @@
         Assert.assertFalse(tree.replace(path("root.x"), "beta", 1));
     }
 
+    @Test
     public void testReplaceWithValue() {
         DocumentTree<String> tree = new DefaultDocumentTree<>();
         tree.create(path("root.a"), "bar");
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/TestClusterCommunicationService.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/TestClusterCommunicationService.java
index a15bba4..791a488 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/TestClusterCommunicationService.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/TestClusterCommunicationService.java
@@ -72,9 +72,9 @@
 
     @Override
     public <M> void multicast(M message, MessageSubject subject, Function<M, byte[]> encoder, Set<NodeId> nodeIds) {
-        nodes.values().stream()
-                .filter(n -> nodeIds.contains(n))
-                .forEach(n -> n.handle(subject, encoder.apply(message)));
+        nodes.entrySet().stream()
+                .filter(e -> nodeIds.contains(e.getKey()))
+                .forEach(e -> e.getValue().handle(subject, encoder.apply(message)));
     }
 
     @Override
diff --git a/drivers/default/src/main/java/org/onosproject/driver/extensions/NiciraResubmitTable.java b/drivers/default/src/main/java/org/onosproject/driver/extensions/NiciraResubmitTable.java
index bb6347e..3e1dd05 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/extensions/NiciraResubmitTable.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/extensions/NiciraResubmitTable.java
@@ -65,7 +65,6 @@
      */
     public NiciraResubmitTable(PortNumber inPort, short table) {
         checkNotNull(inPort);
-        checkNotNull(table);
         this.inPort = inPort;
         this.table = table;
     }
@@ -76,7 +75,6 @@
      * @param table table
      */
     public NiciraResubmitTable(short table) {
-        checkNotNull(table);
         this.inPort = DEFAULT_IN_PORT;
         this.table = table;
     }
diff --git a/drivers/default/src/main/java/org/onosproject/driver/extensions/Ofdpa3SetMplsType.java b/drivers/default/src/main/java/org/onosproject/driver/extensions/Ofdpa3SetMplsType.java
index ca0f03d..a160b3a 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/extensions/Ofdpa3SetMplsType.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/extensions/Ofdpa3SetMplsType.java
@@ -49,7 +49,6 @@
      * @param mplsType MPLS type in short
      */
     public Ofdpa3SetMplsType(short mplsType) {
-        checkNotNull(mplsType);
         this.mplsType = mplsType;
     }
 
diff --git a/drivers/optical/src/test/java/org/onosproject/driver/optical/config/FlowTableConfigTest.java b/drivers/optical/src/test/java/org/onosproject/driver/optical/config/FlowTableConfigTest.java
index b6e6d95..0dbdbcc 100644
--- a/drivers/optical/src/test/java/org/onosproject/driver/optical/config/FlowTableConfigTest.java
+++ b/drivers/optical/src/test/java/org/onosproject/driver/optical/config/FlowTableConfigTest.java
@@ -51,11 +51,11 @@
     private static final DeviceId DID = DeviceId.deviceId("of:0000000000000001");
     private static final PortNumber PN_1 = portNumber(1);
     private static final PortNumber PN_2 = portNumber(2);
-    private static final int FLOW_ID_3 = 3;
+    private static final long FLOW_ID_3 = 3;
     private static final int PRIO_4 = 4;
 
     private static final DefaultApplicationId APP_ID =
-                new DefaultApplicationId(FLOW_ID_3 >>> 48, "test");
+                new DefaultApplicationId((int) (FLOW_ID_3 >>> 48), "test");
 
     private static final OchSignal LAMBDA_42 = OchSignal.newFlexGridSlot(42);
 
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarm.java b/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarm.java
index 1422dde..fd4bad0 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarm.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarm.java
@@ -427,8 +427,6 @@
             checkNotNull(id, "Must specify an alarm id");
             checkNotNull(deviceId, "Must specify a device");
             checkNotNull(description, "Must specify a description");
-            checkNotNull(timeRaised, "Must specify a time raised");
-            checkNotNull(timeUpdated, "Must specify a time updated");
             checkNotNull(severity, "Must specify a severity");
 
             return new DefaultAlarm(id, deviceId, description, source, timeRaised, timeUpdated, timeCleared,
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/resource/label/impl/LabelResourceManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/resource/label/impl/LabelResourceManager.java
index 259dce0..56c308e 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/resource/label/impl/LabelResourceManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/resource/label/impl/LabelResourceManager.java
@@ -130,13 +130,11 @@
     public Collection<LabelResource> applyFromDevicePool(DeviceId deviceId,
                                                          long applyNum) {
         checkNotNull(deviceId, "deviceId is not null");
-        checkNotNull(applyNum, "applyNum is not null");
         return store.applyFromDevicePool(deviceId, applyNum);
     }
 
     @Override
     public Collection<LabelResource> applyFromGlobalPool(long applyNum) {
-        checkNotNull(applyNum, "applyNum is not null");
         return store.applyFromGlobalPool(applyNum);
     }
 
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManager.java
index 1816bb4..2a5bc26 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManager.java
@@ -317,7 +317,7 @@
         public ObjectiveInstaller(DeviceId deviceId, Objective objective, int attemps) {
             this.deviceId = checkNotNull(deviceId);
             this.objective = checkNotNull(objective);
-            this.numAttempts = checkNotNull(attemps);
+            this.numAttempts = attemps;
         }
 
         @Override
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpEvpnEsi.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpEvpnEsi.java
index b6816e8..883be89 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpEvpnEsi.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpEvpnEsi.java
@@ -16,7 +16,7 @@
 
 package org.onosproject.bgpio.types;
 
-import java.util.Objects;
+import java.util.Arrays;
 import org.jboss.netty.buffer.ChannelBuffer;
 import com.google.common.base.MoreObjects;
 
@@ -78,7 +78,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(ethernetSegmentidentifier);
+        return Arrays.hashCode(ethernetSegmentidentifier);
     };
 
     @Override
@@ -89,9 +89,7 @@
 
         if (obj instanceof BgpEvpnEsi) {
             BgpEvpnEsi that = (BgpEvpnEsi) obj;
-            if (this.ethernetSegmentidentifier == that.ethernetSegmentidentifier) {
-                return true;
-            }
+            return Arrays.equals(this.ethernetSegmentidentifier, that.ethernetSegmentidentifier);
         }
 
         return false;
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpEvpnLabel.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpEvpnLabel.java
index 60348ac..b6a2e87 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpEvpnLabel.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpEvpnLabel.java
@@ -16,7 +16,7 @@
 
 package org.onosproject.bgpio.types;
 
-import java.util.Objects;
+import java.util.Arrays;
 import org.jboss.netty.buffer.ChannelBuffer;
 import com.google.common.base.MoreObjects;
 
@@ -87,9 +87,7 @@
 
             BgpEvpnLabel that = (BgpEvpnLabel) obj;
 
-            if (this.mplsLabel == that.mplsLabel) {
-                return true;
-            }
+            return Arrays.equals(this.mplsLabel, that.mplsLabel);
         }
 
         return false;
@@ -97,7 +95,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hashCode(mplsLabel);
+        return Arrays.hashCode(mplsLabel);
     }
 
     @Override
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/RouteTarget.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/RouteTarget.java
index 5a009f9..2d48788 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/RouteTarget.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/RouteTarget.java
@@ -17,7 +17,10 @@
 package org.onosproject.bgpio.types;
 
 import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
+
+import java.util.Arrays;
+import java.util.Objects;
+
 import org.jboss.netty.buffer.ChannelBuffer;
 
 /**
@@ -107,7 +110,7 @@
         if (obj instanceof RouteTarget) {
             RouteTarget that = (RouteTarget) obj;
             if (this.type == that.type
-                    && this.routeTarget == that.routeTarget) {
+                    && Arrays.equals(this.routeTarget, that.routeTarget)) {
                 return true;
             }
         }
@@ -116,7 +119,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hashCode(routeTarget);
+        return Objects.hash(type, Arrays.hashCode(routeTarget));
     }
 
     @Override
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java
index e984ced..8bd7b2e 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java
@@ -27,6 +27,8 @@
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
 import org.onosproject.lisp.msg.protocols.DefaultLispMapReply.ReplyReader;
 import org.onosproject.lisp.msg.protocols.DefaultLispMapReply.ReplyWriter;
+import org.onosproject.lisp.msg.protocols.LispMapRecord.MapRecordBuilder;
+import org.onosproject.lisp.msg.protocols.LispMapReply.ReplyBuilder;
 import org.onosproject.lisp.msg.types.LispIpv4Address;
 
 import java.util.List;
@@ -34,9 +36,7 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
 import static org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.DefaultMapRecordBuilder;
-import static org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.MapRecordBuilder;
 import static org.onosproject.lisp.msg.protocols.DefaultLispMapReply.DefaultReplyBuilder;
-import static org.onosproject.lisp.msg.protocols.DefaultLispMapReply.ReplyBuilder;
 
 /**
  * Unit tests for DefaultLispMapReply class.
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
index d05acc3..3ebb982 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
@@ -67,7 +67,7 @@
     public NetconfDeviceInfo(String name, String password, IpAddress ipAddress,
                              int port) {
         checkArgument(!name.equals(""), "Empty device username");
-        checkNotNull(port > 0, "Negative port");
+        checkArgument(port > 0, "Negative port");
         checkNotNull(ipAddress, "Null ip address");
         this.name = name;
         this.password = password;
@@ -96,7 +96,7 @@
     public NetconfDeviceInfo(String name, String password, IpAddress ipAddress,
                              int port, String keyString) {
         checkArgument(!name.equals(""), "Empty device name");
-        checkNotNull(port > 0, "Negative port");
+        checkArgument(port > 0, "Negative port");
         checkNotNull(ipAddress, "Null ip address");
         this.name = name;
         this.password = password;
@@ -116,7 +116,7 @@
      */
     public NetconfDeviceInfo(NetconfDeviceConfig netconfConfig) {
         checkArgument(!netconfConfig.username().isEmpty(), "Empty device name");
-        checkNotNull(netconfConfig.port() > 0, "Negative port");
+        checkArgument(netconfConfig.port() > 0, "Negative port");
         checkNotNull(netconfConfig.ip(), "Null ip address");
 
         this.name = netconfConfig.username();
diff --git a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
index b00da85..dbb1d53 100644
--- a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
+++ b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
@@ -75,7 +75,7 @@
 
     @Override
     public int hashCodeIgnoreXid() {
-        return payLoad.hashCode();
+        return Arrays.hashCode(payLoad);
     }
 
     @Override
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java
index c230af2..97d9197 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java
@@ -1446,7 +1446,7 @@
         if (dispatcherHandle.isDone()) {
             // dispatcher terminated for some reason, restart
 
-            dispatcherHandle = dispatcher.submit(() -> {
+            dispatcherHandle = dispatcher.submit((Runnable) () -> {
                 try {
                     List<OFMessage> msgs = new ArrayList<>();
                     for (;;) {
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java
index 79b613a..7c1626b 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java
@@ -138,6 +138,7 @@
      *
      * @return OSPF area instance
      */
+    @Override
     public OspfArea ospfArea() {
         return ospfArea;
     }
@@ -156,6 +157,7 @@
      *
      * @param ospfArea OSPF area instance
      */
+    @Override
     public void setOspfArea(OspfArea ospfArea) {
         this.ospfArea = ospfArea;
     }
@@ -188,6 +190,7 @@
      *
      * @return network mask
      */
+    @Override
     public Ip4Address ipNetworkMask() {
         return ipNetworkMask;
     }
@@ -207,6 +210,7 @@
      *
      * @param ospfNbr ospfNbr instance
      */
+    @Override
     public void addNeighbouringRouter(OspfNbr ospfNbr) {
         listOfNeighbors.put(ospfNbr.neighborId().toString(), ospfNbr);
     }
@@ -217,6 +221,7 @@
      * @param neighborId neighbors id
      * @return ospfNbr neighbor instance
      */
+    @Override
     public OspfNbr neighbouringRouter(String neighborId) {
         return listOfNeighbors.get(neighborId);
     }
@@ -224,6 +229,7 @@
     /**
      * Removes all the neighbors.
      */
+    @Override
     public void removeNeighbors() {
         Set<String> neighbors = listOfNeighbors.keySet();
         for (String neighborId : neighbors) {
@@ -245,7 +251,7 @@
         ospfNeighbor.stopRxMtDdTimer();
         ospfNeighbor.stopRxMtLsrTimer();
 
-        listOfNeighbors.remove(ospfNeighbor.neighborId());
+        listOfNeighbors.remove(ospfNeighbor.neighborId().toString());
     }
 
 
@@ -274,6 +280,7 @@
      *
      * @param lsaKey key used to store LSA in map
      */
+    @Override
     public void removeLsaFromNeighborMap(String lsaKey) {
         listOfNeighborMap.remove(lsaKey);
     }
@@ -284,6 +291,7 @@
      * @param neighborId neighbors id
      * @return true if neighbor in list else false
      */
+    @Override
     public boolean isNeighborInList(String neighborId) {
         return listOfNeighbors.containsKey(neighborId);
     }
@@ -293,6 +301,7 @@
      *
      * @return listOfNeighbors as key value pair
      */
+    @Override
     public Map<String, OspfNbr> listOfNeighbors() {
         return listOfNeighbors;
     }
@@ -311,6 +320,7 @@
      *
      * @return interface index
      */
+    @Override
     public int interfaceIndex() {
         return interfaceIndex;
     }
@@ -320,6 +330,7 @@
      *
      * @param interfaceIndex interface index
      */
+    @Override
     public void setInterfaceIndex(int interfaceIndex) {
         this.interfaceIndex = interfaceIndex;
     }
@@ -329,6 +340,7 @@
      *
      * @return IP address
      */
+    @Override
     public Ip4Address ipAddress() {
         return ipAddress;
     }
@@ -338,6 +350,7 @@
      *
      * @param ipAddress interface IP address
      */
+    @Override
     public void setIpAddress(Ip4Address ipAddress) {
         this.ipAddress = ipAddress;
     }
@@ -347,6 +360,7 @@
      *
      * @return routerPriority value
      */
+    @Override
     public int routerPriority() {
         return routerPriority;
     }
@@ -356,6 +370,7 @@
      *
      * @param routerPriority value
      */
+    @Override
     public void setRouterPriority(int routerPriority) {
         this.routerPriority = routerPriority;
     }
@@ -365,6 +380,7 @@
      *
      * @return hello interval time
      */
+    @Override
     public int helloIntervalTime() {
         return helloIntervalTime;
     }
@@ -374,6 +390,7 @@
      *
      * @param helloIntervalTime an integer interval time
      */
+    @Override
     public void setHelloIntervalTime(int helloIntervalTime) {
         this.helloIntervalTime = helloIntervalTime;
     }
@@ -383,6 +400,7 @@
      *
      * @return router dead interval time
      */
+    @Override
     public int routerDeadIntervalTime() {
         return routerDeadIntervalTime;
     }
@@ -392,6 +410,7 @@
      *
      * @param routerDeadIntervalTime router dead interval time
      */
+    @Override
     public void setRouterDeadIntervalTime(int routerDeadIntervalTime) {
         this.routerDeadIntervalTime = routerDeadIntervalTime;
     }
@@ -401,6 +420,7 @@
      *
      * @return interfaceType an integer represents interface type
      */
+    @Override
     public int interfaceType() {
         return interfaceType;
     }
@@ -410,6 +430,7 @@
      *
      * @param interfaceType interface type
      */
+    @Override
     public void setInterfaceType(int interfaceType) {
         this.interfaceType = interfaceType;
     }
@@ -419,6 +440,7 @@
      *
      * @return mtu an integer represents max transfer unit
      */
+    @Override
     public int mtu() {
         return mtu;
     }
@@ -428,6 +450,7 @@
      *
      * @param mtu max transfer unit
      */
+    @Override
     public void setMtu(int mtu) {
         this.mtu = mtu;
     }
@@ -437,6 +460,7 @@
      *
      * @return retransmit interval
      */
+    @Override
     public int reTransmitInterval() {
         return reTransmitInterval;
     }
@@ -446,6 +470,7 @@
      *
      * @param reTransmitInterval retransmit interval
      */
+    @Override
     public void setReTransmitInterval(int reTransmitInterval) {
         this.reTransmitInterval = reTransmitInterval;
     }
@@ -455,6 +480,7 @@
      *
      * @return dr designated routers IP address
      */
+    @Override
     public Ip4Address dr() {
         return dr;
     }
@@ -464,6 +490,7 @@
      *
      * @param dr designated routers IP address
      */
+    @Override
     public void setDr(Ip4Address dr) {
         this.dr = dr;
     }
@@ -473,6 +500,7 @@
      *
      * @return bdr backup designated routers IP address
      */
+    @Override
     public Ip4Address bdr() {
         return bdr;
     }
@@ -482,6 +510,7 @@
      *
      * @param bdr backup designated routers IP address
      */
+    @Override
     public void setBdr(Ip4Address bdr) {
         this.bdr = bdr;
     }
@@ -491,6 +520,7 @@
      *
      * @throws Exception might throws exception
      */
+    @Override
     public void interfaceUp() throws Exception {
         log.debug("OSPFInterfaceChannelHandler::interfaceUp...!!!");
         if (interfaceType() == OspfInterfaceType.POINT_TO_POINT.value()) {
@@ -578,6 +608,7 @@
      * All interface variables are reset, and interface timers disabled.
      * Also all neighbor connections associated with the interface are destroyed.
      */
+    @Override
     public void interfaceDown() {
         log.debug("OSPFInterfaceChannelHandler::interfaceDown ");
         stopHelloTimer();
@@ -594,6 +625,7 @@
      * @param ctx         channel handler context instance.
      * @throws Exception might throws exception
      */
+    @Override
     public void processOspfMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
         log.debug("OspfChannelHandler::processOspfMessage...!!!");
 
@@ -1078,7 +1110,7 @@
                             OspfUtil.LSA_HEADER_LENGTH; // subtract a normal IP header.
                     int noLsa = 0;
                     while (listItr.hasNext()) {
-                        LsRequestPacket lsRequest = (LsRequestPacket) listItr.next();
+                        LsRequestPacket lsRequest = listItr.next();
                         // to verify length of the LSA
                         LsaWrapper wrapper = ospfArea.getLsa(lsRequest.lsType(), lsRequest.linkStateId(),
                                                              lsRequest.ownRouterId());
@@ -1168,7 +1200,7 @@
                     LsaHeader lsRequest = (LsaHeader) itr.next();
 
                     OspfLsa ospfLsa =
-                            (OspfLsa) nbr.getPendingReTxList().get(((OspfAreaImpl) ospfArea).getLsaKey(lsRequest));
+                            nbr.getPendingReTxList().get(((OspfAreaImpl) ospfArea).getLsaKey(lsRequest));
                     if (ospfLsa != null) {
                         String isSame = ((OspfLsdbImpl) ospfArea.database()).isNewerOrSameLsa(
                                 lsRequest, (LsaHeader) ospfLsa);
@@ -1206,6 +1238,7 @@
     /**
      * Starts the hello timer which sends hello packet every configured seconds.
      */
+    @Override
     public void startHelloTimer() {
         log.debug("OSPFInterfaceChannelHandler::startHelloTimer");
         exServiceHello = Executors.newSingleThreadScheduledExecutor();
@@ -1217,6 +1250,7 @@
     /**
      * Stops the hello timer.
      */
+    @Override
     public void stopHelloTimer() {
         log.debug("OSPFInterfaceChannelHandler::stopHelloTimer ");
         exServiceHello.shutdown();
@@ -1244,6 +1278,7 @@
     /**
      * Starts the timer which waits for configured seconds and sends Delayed Ack Packet.
      */
+    @Override
     public void startDelayedAckTimer() {
         if (!isDelayedAckTimerScheduled) {
             log.debug("Started DelayedAckTimer...!!!");
@@ -1259,6 +1294,7 @@
     /**
      * Stops the delayed acknowledge timer.
      */
+    @Override
     public void stopDelayedAckTimer() {
         if (isDelayedAckTimerScheduled) {
             log.debug("Stopped DelayedAckTimer...!!!");
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImpl.java
index 636e75c..794d623 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/lsdb/LsdbAgeImpl.java
@@ -80,7 +80,7 @@
         return Objects.equal(ageBins, that.ageBins) &&
                 Objects.equal(ageCounter, that.ageCounter) &&
                 Objects.equal(ageCounterRollOver, that.ageCounterRollOver) &&
-                Objects.equal(lsaQueue, lsaQueue);
+                Objects.equal(lsaQueue, that.lsaQueue);
     }
 
     @Override
@@ -94,6 +94,7 @@
      * @param binKey key to store in bin
      * @param lsaBin LSA bin instance
      */
+    @Override
     public void addLsaBin(Integer binKey, LsaBin lsaBin) {
         if (!ageBins.containsKey(binKey)) {
             ageBins.put(binKey, lsaBin);
@@ -106,6 +107,7 @@
      * @param binKey key
      * @return bin instance
      */
+    @Override
     public LsaBin getLsaBin(Integer binKey) {
 
         return ageBins.get(binKey);
@@ -117,6 +119,7 @@
      * @param key     key
      * @param wrapper wrapper instance
      */
+    @Override
     public void addLsaToMaxAgeBin(String key, LsaWrapper wrapper) {
         maxAgeBin.addOspfLsa(key, wrapper);
     }
@@ -126,6 +129,7 @@
      *
      * @param lsaWrapper wrapper instance
      */
+    @Override
     public void removeLsaFromBin(LsaWrapper lsaWrapper) {
         if (ageBins.containsKey(lsaWrapper.binNumber())) {
             LsaBin lsaBin = ageBins.get(lsaWrapper.binNumber());
@@ -137,6 +141,7 @@
     /**
      * Starts the aging timer and queue consumer.
      */
+    @Override
     public void startDbAging() {
         startDbAgeTimer();
         queueConsumer = new LsaQueueConsumer(lsaQueue, channel, ospfArea);
@@ -147,6 +152,7 @@
     /**
      * Gets called every 1 second as part of the timer.
      */
+    @Override
     public void ageLsaAndFlood() {
         //every 5 mins checksum validation
         checkAges();
@@ -167,6 +173,7 @@
     /**
      * If the LSA have completed the MaxAge - they are moved called stop aging and flooded.
      */
+    @Override
     public void maxAgeLsa() {
         if (ageCounter == 0) {
             return;
@@ -178,7 +185,7 @@
         }
         Map lsaBinMap = lsaBin.listOfLsa();
         for (Object key : lsaBinMap.keySet()) {
-            LsaWrapper lsa = (LsaWrapper) lsaBinMap.get((String) key);
+            LsaWrapper lsa = (LsaWrapper) lsaBinMap.get(key);
             if (lsa.currentAge() == OspfParameters.MAXAGE) {
                 lsa.setLsaProcessing(OspfParameters.MAXAGELSA);
                 log.debug("Lsa picked for maxage flooding. Age Counter: {}, AgeCounterRollover: {}, " +
@@ -198,7 +205,7 @@
         //Get from maxAgeBin
         Map lsaMaxAgeBinMap = maxAgeBin.listOfLsa();
         for (Object key : lsaMaxAgeBinMap.keySet()) {
-            LsaWrapper lsa = (LsaWrapper) lsaMaxAgeBinMap.get((String) key);
+            LsaWrapper lsa = (LsaWrapper) lsaMaxAgeBinMap.get(key);
             lsa.setLsaProcessing(OspfParameters.MAXAGELSA);
             log.debug("Lsa picked for maxage flooding. Age Counter: {}, LSA Type: {}, LSA Key: {}",
                       ageCounter, lsa.lsaType(), key);
@@ -217,6 +224,7 @@
     /*
      * If the LSA is in age bin of 1800 - it's pushed into refresh list.
      */
+    @Override
     public void refreshLsa() {
         int binNumber;
         if (ageCounter < OspfParameters.LSREFRESHTIME) {
@@ -230,7 +238,7 @@
         }
         Map lsaBinMap = lsaBin.listOfLsa();
         for (Object key : lsaBinMap.keySet()) {
-            LsaWrapper lsa = (LsaWrapper) lsaBinMap.get((String) key);
+            LsaWrapper lsa = (LsaWrapper) lsaBinMap.get(key);
             try {
                 if (lsa.isSelfOriginated()) {
                     log.debug("Lsa picked for refreshLsa. binNumber: {}, LSA Type: {}, LSA Key: {}",
@@ -259,7 +267,7 @@
             }
             Map lsaBinMap = lsaBin.listOfLsa();
             for (Object key : lsaBinMap.keySet()) {
-                LsaWrapper lsa = (LsaWrapper) lsaBinMap.get((String) key);
+                LsaWrapper lsa = (LsaWrapper) lsaBinMap.get(key);
                 lsa.setLsaProcessing(OspfParameters.VERIFYCHECKSUM);
                 try {
                     lsaQueue.put(lsa);
@@ -319,6 +327,7 @@
      *
      * @return ageCounter
      */
+    @Override
     public int getAgeCounter() {
         return ageCounter;
     }
@@ -328,6 +337,7 @@
      *
      * @return the age counter roll over value
      */
+    @Override
     public int getAgeCounterRollOver() {
         return ageCounterRollOver;
     }
@@ -337,6 +347,7 @@
      *
      * @return lsa bin instance
      */
+    @Override
     public LsaBin getMaxAgeBin() {
         return maxAgeBin;
     }
@@ -347,6 +358,7 @@
      * @param x Can be either age or ageCounter
      * @return bin number.
      */
+    @Override
     public int age2Bin(int x) {
         if (x <= ageCounter) {
             return (ageCounter - x);
diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6InterfaceAddressSubTlv.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6InterfaceAddressSubTlv.java
index 657a553..d478b91 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6InterfaceAddressSubTlv.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6InterfaceAddressSubTlv.java
@@ -80,7 +80,7 @@
         boolean bFoundNoMask = true;
         //value starts from 3rd byte.
         for (int i = 2; i < 20; ++i) {
-            if (0xFF != raw[i]) {
+            if ((byte) 0xFF != raw[i]) {
                 bFoundNoMask = false;
             }
         }
diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6NeighborAddressSubTlv.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6NeighborAddressSubTlv.java
index a318024..f0dcc52 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6NeighborAddressSubTlv.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6NeighborAddressSubTlv.java
@@ -78,7 +78,7 @@
         boolean bFoundNoMask = true;
         //value starts from 3rd byte.
         for (int i = 2; i < 20; ++i) {
-            if (0xFF != raw[i]) {
+            if ((byte) 0xFF != raw[i]) {
                 bFoundNoMask = false;
             }
         }
diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6RouterIdofLocalNodeSubTlv.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6RouterIdofLocalNodeSubTlv.java
index fc34f99..f5e4fb7 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6RouterIdofLocalNodeSubTlv.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6RouterIdofLocalNodeSubTlv.java
@@ -78,7 +78,7 @@
         boolean bFoundNoMask = true;
         //value starts from 3rd byte.
         for (int i = 2; i < 20; ++i) {
-            if (0xFF != raw[i]) {
+            if ((byte) 0xFF != raw[i]) {
                 bFoundNoMask = false;
             }
         }
diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6RouterIdofRemoteNodeSubTlv.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6RouterIdofRemoteNodeSubTlv.java
index 03291a7..09a76f9 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6RouterIdofRemoteNodeSubTlv.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6RouterIdofRemoteNodeSubTlv.java
@@ -79,7 +79,7 @@
         boolean bFoundNoMask = true;
         //value starts from 3rd byte.
         for (int i = 2; i < 20; ++i) {
-            if (0xFF != raw[i]) {
+            if ((byte) 0xFF != raw[i]) {
                 bFoundNoMask = false;
             }
         }
diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6SubObject.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6SubObject.java
index 2ef1309..0b88a83 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6SubObject.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6SubObject.java
@@ -130,7 +130,7 @@
         boolean bFoundNoMask = true;
         //value starts from 3rd byte.
         for (int i = 2; i < 20; ++i) {
-            if (0xFF != raw[i]) {
+            if ((byte) 0xFF != raw[i]) {
                 bFoundNoMask = false;
             }
         }
diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/NexthopIPv6addressTlv.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/NexthopIPv6addressTlv.java
index d662b14..ce1d04d 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/NexthopIPv6addressTlv.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/NexthopIPv6addressTlv.java
@@ -99,7 +99,7 @@
         boolean bFoundNoMask = true;
         //value starts from 3rd byte.
         for (int i = 5; i < 20; ++i) {
-            if (0xFF != raw[i]) {
+            if ((byte) 0xFF != raw[i]) {
                 bFoundNoMask = false;
             }
         }
diff --git a/protocols/pcep/server/ctl/src/test/java/org/onosproject/pcelabelstore/util/TestEventuallyConsistentMap.java b/protocols/pcep/server/ctl/src/test/java/org/onosproject/pcelabelstore/util/TestEventuallyConsistentMap.java
index 6c34554..9184352 100644
--- a/protocols/pcep/server/ctl/src/test/java/org/onosproject/pcelabelstore/util/TestEventuallyConsistentMap.java
+++ b/protocols/pcep/server/ctl/src/test/java/org/onosproject/pcelabelstore/util/TestEventuallyConsistentMap.java
@@ -90,6 +90,7 @@
         return map.get(key);
     }
 
+    @SuppressWarnings("ReturnValueIgnored")
     @Override
     public void put(K key, V value) {
         map.put(key, value);
diff --git a/protocols/snmp/ctl/src/main/java/org/onosproject/snmp/ctl/DefaultSnmpDevice.java b/protocols/snmp/ctl/src/main/java/org/onosproject/snmp/ctl/DefaultSnmpDevice.java
index 5e1f867..b15277c 100644
--- a/protocols/snmp/ctl/src/main/java/org/onosproject/snmp/ctl/DefaultSnmpDevice.java
+++ b/protocols/snmp/ctl/src/main/java/org/onosproject/snmp/ctl/DefaultSnmpDevice.java
@@ -50,7 +50,7 @@
     public DefaultSnmpDevice(String snmpHost, int snmpPort, String username, String community) {
 
         this.snmpHost = checkNotNull(snmpHost, "SNMP Device IP cannot be null");
-        this.snmpPort = checkNotNull(snmpPort, "SNMP Device port cannot be null");
+        this.snmpPort = snmpPort;
         this.username = username;
         this.community = community;
         this.deviceId = createDeviceId();
diff --git a/providers/link/src/test/java/org/onosproject/provider/linkdiscovery/impl/LinkDiscoveryProviderTest.java b/providers/link/src/test/java/org/onosproject/provider/linkdiscovery/impl/LinkDiscoveryProviderTest.java
index a1872c8..30ddf2a 100644
--- a/providers/link/src/test/java/org/onosproject/provider/linkdiscovery/impl/LinkDiscoveryProviderTest.java
+++ b/providers/link/src/test/java/org/onosproject/provider/linkdiscovery/impl/LinkDiscoveryProviderTest.java
@@ -149,7 +149,7 @@
 
     @Test
     public void activate() throws Exception {
-        assertFalse("Provider should be registered", linkRegistry.getProviders().contains(provider));
+        assertTrue("Provider should be registered", linkRegistry.getProviders().contains(provider.id()));
         assertEquals("Device service should be registered", provider.deviceService, deviceService);
         assertEquals("Device listener should be added", 1, deviceListeners.size());
         assertNotNull("Registration expected", providerService);
@@ -177,7 +177,7 @@
     public void deactivate() throws Exception {
         provider.deactivate();
         assertEquals("Device listener should be removed", 0, deviceListeners.size());
-        assertFalse("Provider should not be registered", linkRegistry.getProviders().contains(provider));
+        assertFalse("Provider should not be registered", linkRegistry.getProviders().contains(provider.id()));
         assertTrue(provider.executor.isShutdown());
         assertNull(provider.providerService);
     }
diff --git a/providers/lisp/device/src/test/java/org/onosproject/provider/lisp/device/impl/LispDeviceProviderTest.java b/providers/lisp/device/src/test/java/org/onosproject/provider/lisp/device/impl/LispDeviceProviderTest.java
index 74a28f0..90a15fa 100644
--- a/providers/lisp/device/src/test/java/org/onosproject/provider/lisp/device/impl/LispDeviceProviderTest.java
+++ b/providers/lisp/device/src/test/java/org/onosproject/provider/lisp/device/impl/LispDeviceProviderTest.java
@@ -97,7 +97,7 @@
         provider.deactivate();
 
         assertFalse("Provider should not be registered",
-                            providerRegistry.getProviders().contains(provider));
+                            providerRegistry.getProviders().contains(provider.id()));
         assertNull("Provider service should be null",
                             provider.providerService);
         assertEquals("Controller listener should be removed", 0,
diff --git a/providers/lisp/mapping/src/test/java/org/onosproject/provider/lisp/mapping/impl/LispMappingProviderTest.java b/providers/lisp/mapping/src/test/java/org/onosproject/provider/lisp/mapping/impl/LispMappingProviderTest.java
index 17c758c..8424454 100644
--- a/providers/lisp/mapping/src/test/java/org/onosproject/provider/lisp/mapping/impl/LispMappingProviderTest.java
+++ b/providers/lisp/mapping/src/test/java/org/onosproject/provider/lisp/mapping/impl/LispMappingProviderTest.java
@@ -78,7 +78,7 @@
         provider.deactivate();
 
         assertFalse("Provider should not be registered",
-                            providerRegistry.getProviders().contains(provider));
+                            providerRegistry.getProviders().contains(provider.id()));
         assertNull("Provider service should be null",
                             provider.providerService);
         assertEquals("Controller listener should be removed", 0,
diff --git a/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java b/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java
index f37d41e..802c002 100644
--- a/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java
+++ b/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java
@@ -225,7 +225,7 @@
     public void deactivate() throws Exception {
         provider.deactivate();
         assertNull("Device listener should be removed", deviceService.listener);
-        assertFalse("Provider should not be registered", deviceRegistry.getProviders().contains(provider));
+        assertFalse("Provider should not be registered", deviceRegistry.getProviders().contains(provider.id()));
         assertTrue("Thread to connect device should be shutdown", provider.executor.isShutdown());
         assertTrue("Scheduled task to update device should be shutdown", provider.scheduledTask.isCancelled());
         assertNull("Provider service should be null", provider.providerService);
