diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java
index b463ddc..a44d837 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java
@@ -304,7 +304,7 @@
         List<Resource> tributarySlotResources = portsList.stream()
                 .flatMap(cp -> tributarySlots
                         .stream()
-                        .map(ts-> Resources.discrete(cp.deviceId(), cp.port()).resource().child(ts)))
+                        .map(ts -> Resources.discrete(cp.deviceId(), cp.port()).resource().child(ts)))
                 .collect(Collectors.toList());
 
         if (!tributarySlotResources.stream().allMatch(resourceService::isAvailable)) {
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalOduIntentCompiler.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalOduIntentCompiler.java
index b01603f..b722285 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalOduIntentCompiler.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalOduIntentCompiler.java
@@ -210,7 +210,7 @@
         Set<Resource> resources = slotsMap.entrySet().stream()
                 .flatMap(x -> x.getValue()
                         .stream()
-                        .flatMap(ts-> Stream.of(
+                        .flatMap(ts -> Stream.of(
                                 Resources.discrete(x.getKey().src().deviceId(), x.getKey().src().port())
                                         .resource().child(ts),
                                 Resources.discrete(x.getKey().dst().deviceId(), x.getKey().dst().port())
@@ -386,4 +386,4 @@
                 Resources.discrete(cp.deviceId(), cp.port()).id(),
                 TributarySlot.class);
     }
-}
\ No newline at end of file
+}
diff --git a/apps/test/messaging-perf/src/main/java/org/onosproject/messagingperf/MessagingPerfApp.java b/apps/test/messaging-perf/src/main/java/org/onosproject/messagingperf/MessagingPerfApp.java
index 7d13ec5..03d4f63 100644
--- a/apps/test/messaging-perf/src/main/java/org/onosproject/messagingperf/MessagingPerfApp.java
+++ b/apps/test/messaging-perf/src/main/java/org/onosproject/messagingperf/MessagingPerfApp.java
@@ -268,7 +268,9 @@
         communicationService.<Data>addSubscriber(
                 TEST_UNICAST_MESSAGE_TOPIC,
                 decoder,
-                d -> { received.incrementAndGet(); },
+                d -> {
+                    received.incrementAndGet();
+                },
                 messageReceivingExecutor);
 
         communicationService.<Data, Data>addSubscriber(
diff --git a/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/installer/impl/SfcFlowRuleInstallerImpl.java b/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/installer/impl/SfcFlowRuleInstallerImpl.java
index 59329c4..52ecde6 100644
--- a/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/installer/impl/SfcFlowRuleInstallerImpl.java
+++ b/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/installer/impl/SfcFlowRuleInstallerImpl.java
@@ -379,7 +379,7 @@
         Set<PortNumber> ports = bridgeConfig.getPortNumbers();
         String tunnelName = "vxlan-" + DEFAULT_IP;
         ports.stream()
-        .filter(p ->p.name().equalsIgnoreCase(tunnelName))
+        .filter(p -> p.name().equalsIgnoreCase(tunnelName))
         .forEach(p -> {
             treatment.setOutput(p);
             sendSfcRule(selector, treatment, deviceId, type, TUNNEL_SEND_PRIORITY);
@@ -899,8 +899,8 @@
     private PortNumber getVxlanPortNumber(DeviceId deviceId) {
         Iterable<Port> ports = deviceService.getPorts(deviceId);
         Port vxlanPort = Sets.newHashSet(ports).stream()
-                .filter(p ->!p.number().equals(PortNumber.LOCAL))
-                .filter(p ->p.annotations().value(AnnotationKeys.PORT_NAME)
+                .filter(p -> !p.number().equals(PortNumber.LOCAL))
+                .filter(p -> p.annotations().value(AnnotationKeys.PORT_NAME)
                         .startsWith(VXLANPORT_HEAD))
                 .findFirst().get();
         return vxlanPort.number();
diff --git a/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/manager/impl/SfcManager.java b/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/manager/impl/SfcManager.java
index b71fec7..eb63917 100644
--- a/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/manager/impl/SfcManager.java
+++ b/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/manager/impl/SfcManager.java
@@ -148,11 +148,11 @@
 
         nshSpiPortChainMap = storageService.<PortChainId, Integer>eventuallyConsistentMapBuilder()
                 .withName("nshSpiPortChainMap").withSerializer(serializer)
-                .withTimestampProvider((k, v) ->new WallClockTimestamp()).build();
+                .withTimestampProvider((k, v) -> new WallClockTimestamp()).build();
 
         portChainFiveTupleMap = storageService.<PortChainId, List<FiveTuple>>eventuallyConsistentMapBuilder()
                 .withName("portChainFiveTupleMap").withSerializer(serializer)
-                .withTimestampProvider((k, v) ->new WallClockTimestamp()).build();
+                .withTimestampProvider((k, v) -> new WallClockTimestamp()).build();
 
         nshSpiIdFreeList = storageService.<Integer>setBuilder()
                 .withName("nshSpiIdDeletedList")
diff --git a/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualPortBindCommand.java b/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualPortBindCommand.java
index 2eb0a56..e0842e7 100644
--- a/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualPortBindCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualPortBindCommand.java
@@ -83,7 +83,7 @@
         VirtualNetworkService service = get(VirtualNetworkService.class);
         Set<VirtualPort> ports = service.getVirtualPorts(NetworkId.networkId(networkId),
                                                     DeviceId.deviceId(deviceId));
-        return ports.stream().filter(p->p.number().equals(aPortNumber))
+        return ports.stream().filter(p -> p.number().equals(aPortNumber))
                 .findFirst().get();
     }
 }
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
index 11df9a1..fb1ff08 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
@@ -360,8 +360,7 @@
         checkCommonData(rule);
 
         rule.treatment().allInstructions()
-                .forEach(instruction ->
-                {
+                .forEach(instruction -> {
                     String subType;
                     if (instruction.type() == Instruction.Type.L0MODIFICATION) {
                         subType = ((L0ModificationInstruction) instruction)
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java
index f3f0bd7..c55d009 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java
@@ -416,7 +416,7 @@
                     Optional<GroupBucket> matchingBucket =
                             existing.buckets().buckets()
                             .stream()
-                            .filter((existingBucket)->(existingBucket.equals(bucket)))
+                            .filter((existingBucket) -> (existingBucket.equals(bucket)))
                             .findFirst();
                     if (matchingBucket.isPresent()) {
                         ((StoredGroupBucketEntry) matchingBucket.
diff --git a/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedFlowStatisticStore.java b/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedFlowStatisticStore.java
index 8bfbf09..75600e7 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedFlowStatisticStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedFlowStatisticStore.java
@@ -197,10 +197,14 @@
 
         // create one if absent and add this rule
         current.putIfAbsent(cp, new HashSet<>());
-        current.computeIfPresent(cp, (c, e) -> { e.add(rule); return e; });
+        current.computeIfPresent(cp, (c, e) -> {
+            e.add(rule); return e;
+        });
 
         // remove previous one if present
-        previous.computeIfPresent(cp, (c, e) -> { e.remove(rule); return e; });
+        previous.computeIfPresent(cp, (c, e) -> {
+            e.remove(rule); return e;
+        });
     }
 
     @Override
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentTreeMapTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentTreeMapTest.java
index a3e75a3..f27148e 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentTreeMapTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentTreeMapTest.java
@@ -117,7 +117,7 @@
                                 result.value())).join());
         //test all compute methods in this section
         allKeys.forEach(key -> map.computeIfAbsent(
-                key, v ->allValues.get(allKeys.indexOf(key)
+                key, v -> allValues.get(allKeys.indexOf(key)
                 )).thenAccept(result ->
                                 assertArrayEquals(
                                         allValues.get(allKeys.indexOf(key)),
@@ -657,4 +657,4 @@
             return 0;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/SimpleVirtualGroupStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/SimpleVirtualGroupStore.java
index b6be85d..98e3d87 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/SimpleVirtualGroupStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/SimpleVirtualGroupStore.java
@@ -412,7 +412,7 @@
                     Optional<GroupBucket> matchingBucket =
                             existing.buckets().buckets()
                                     .stream()
-                                    .filter((existingBucket)->(existingBucket.equals(bucket)))
+                                    .filter((existingBucket) -> (existingBucket.equals(bucket)))
                                     .findFirst();
                     if (matchingBucket.isPresent()) {
                         ((StoredGroupBucketEntry) matchingBucket.
diff --git a/lib/BUCK b/lib/BUCK
index 7fa1008..af101d8 100644
--- a/lib/BUCK
+++ b/lib/BUCK
@@ -1,4 +1,4 @@
-# ***** This file was auto-generated at Fri, 24 Mar 2017 18:02:30 GMT. Do not edit this file manually. *****
+# ***** This file was auto-generated at Thu, 30 Mar 2017 23:42:03 GMT. Do not edit this file manually. *****
 # ***** Use onos-lib-gen *****
 
 pass_thru_pom(
@@ -1031,10 +1031,10 @@
 
 remote_jar (
   name = 'checkstyle',
-  out = 'checkstyle-6.11.2.jar',
-  url = 'mvn:com.puppycrawl.tools:checkstyle:jar:6.11.2',
-  sha1 = '2705f014697ac0219de0bb2bfc33afb7ec6d22c6',
-  maven_coords = 'com.puppycrawl.tools:checkstyle:jar:NON-OSGI:6.11.2',
+  out = 'checkstyle-6.19.jar',
+  url = 'mvn:com.puppycrawl.tools:checkstyle:jar:6.19',
+  sha1 = 'df5c3a46239d66c623922992a98080ae7f6cc932',
+  maven_coords = 'com.puppycrawl.tools:checkstyle:jar:NON-OSGI:6.19',
   visibility = [ 'PUBLIC' ],
 )
 
diff --git a/lib/deps.json b/lib/deps.json
index 753f5e6..3cd9279 100644
--- a/lib/deps.json
+++ b/lib/deps.json
@@ -191,7 +191,7 @@
     "slf4j-jdk14": "mvn:org.slf4j:slf4j-jdk14:1.7.21",
     "typesafe-config": "mvn:com.typesafe:config:1.2.1",
     "validation-api": "mvn:javax.validation:validation-api:1.1.0.Final",
-    "checkstyle": "mvn:com.puppycrawl.tools:checkstyle:6.11.2",
+    "checkstyle": "mvn:com.puppycrawl.tools:checkstyle:6.19",
     "apache-karaf": "http://onlab.vicci.org/onos/third-party/apache-karaf-3.0.8-offline-20170202.tar.gz",
     "bndlib": "mvn:biz.aQute.bnd:biz.aQute.bndlib:jar:3.1.0",
     "bndexe": "http://onlab.vicci.org/onos/third-party/biz.aQute.bnd-3.1.0.jar",
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/topology/TopologyForDeviceAndLinkImpl.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/topology/TopologyForDeviceAndLinkImpl.java
index 86d2a57..d36f608 100644
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/topology/TopologyForDeviceAndLinkImpl.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/topology/TopologyForDeviceAndLinkImpl.java
@@ -273,14 +273,15 @@
             }
         }
         return isisRouter;
-    }/*
+    }
 
-    *//**
+    /**
      * Removes Device and Link instance.
      *
      * @param lsPdu ISIS LSPDU instance
      * @return isisRouter isisRouter instance
-     *//*
+     */
+    /*
     public IsisRouter removeDeviceAndLinkInfo(LsPdu lsPdu) {
         IsisRouter isisRouter = createIsisRouter(lsPdu);
         return isisRouter;
@@ -487,4 +488,4 @@
         }
         return isisLinkTed;
     }
-}
\ No newline at end of file
+}
diff --git a/utils/misc/src/main/java/org/onlab/packet/ChassisId.java b/utils/misc/src/main/java/org/onlab/packet/ChassisId.java
index 2d53ab8..50a0ff9 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ChassisId.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ChassisId.java
@@ -73,4 +73,9 @@
     public int hashCode() {
         return Long.hashCode(identifier);
     }
+
+    @Override
+    public boolean equals(Object that) {
+        return super.equals(that);
+    }
 }
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 f20de98..40e99d4 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java
@@ -66,7 +66,7 @@
     private final byte[] ttlValue = new byte[] {0, 0x78};
 
     // Only needs to be accessed from LinkProbeFactory.
-    public ONOSLLDP(byte ... subtype) {
+    public ONOSLLDP(byte... subtype) {
         super();
         for (byte st : subtype) {
             opttlvs.put(st, new LLDPOrganizationalTLV());
diff --git a/utils/misc/src/test/java/org/onlab/util/PredictableExecutorTest.java b/utils/misc/src/test/java/org/onlab/util/PredictableExecutorTest.java
index 752575a..2966435 100644
--- a/utils/misc/src/test/java/org/onlab/util/PredictableExecutorTest.java
+++ b/utils/misc/src/test/java/org/onlab/util/PredictableExecutorTest.java
@@ -123,6 +123,11 @@
             public int hashCode() {
                 return 0;
             }
+
+            @Override
+            public boolean equals(Object that) {
+                return false;
+            }
         });
 
         latch.await(1, TimeUnit.SECONDS);
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java
index 29291cd..9d26891 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java
@@ -199,8 +199,7 @@
         ObjectNode root = (ObjectNode) mapper().readTree(request);
         List<String> errorMsgs = new ArrayList<String>();
         root.fieldNames()
-                .forEachRemaining(sk ->
-                {
+                .forEachRemaining(sk -> {
                     errorMsgs.addAll(consumeJson(service, (ObjectNode) root.path(sk),
                                                  service.getSubjectFactory(sk)));
                 });
