diff --git a/apps/events/src/main/java/org/onosproject/events/EventHistoryManager.java b/apps/events/src/main/java/org/onosproject/events/EventHistoryManager.java
index 8ace0e1..82d179a 100644
--- a/apps/events/src/main/java/org/onosproject/events/EventHistoryManager.java
+++ b/apps/events/src/main/java/org/onosproject/events/EventHistoryManager.java
@@ -118,7 +118,7 @@
         pruner = newSingleThreadScheduledExecutor(minPriority(groupedThreads("onos/events", "history-pruner")));
 
         pruner.scheduleWithFixedDelay(this::pruneEventHistoryTask,
-                                      pruneInterval , pruneInterval, TimeUnit.SECONDS);
+                                      pruneInterval, pruneInterval, TimeUnit.SECONDS);
 
         listeners = new ListenerTracker();
         listeners.addListener(mastershipService, new InternalMastershipListener())
diff --git a/core/api/src/main/java/org/onosproject/net/OduSignalId.java b/core/api/src/main/java/org/onosproject/net/OduSignalId.java
index e19a673..f5118dc 100644
--- a/core/api/src/main/java/org/onosproject/net/OduSignalId.java
+++ b/core/api/src/main/java/org/onosproject/net/OduSignalId.java
@@ -48,7 +48,7 @@
     public OduSignalId(int tributaryPortNumber, int tributarySlotLen,
             byte[] tributarySlotBitmap) {
 
-        checkArgument(tributaryPortNumber <= 80  ,
+        checkArgument(tributaryPortNumber <= 80,
                 "tributaryPortNumber %s must be <= 80 ",
                  tributaryPortNumber);
 
@@ -56,7 +56,7 @@
                 "number of elements in list " + HexString.toHexString(tributarySlotBitmap)
                 + " must be equal to " + TRIBUTARY_SLOT_BITMAP_SIZE);
 
-        checkArgument(tributarySlotLen <= 80  ,
+        checkArgument(tributarySlotLen <= 80,
                 "tributarySlotLen %s must be <= 80 ",
                 tributarySlotLen);
 
diff --git a/core/api/src/test/java/org/onosproject/net/flow/DefaultFlowRuleTest.java b/core/api/src/test/java/org/onosproject/net/flow/DefaultFlowRuleTest.java
index 62acd16..2cc675f 100644
--- a/core/api/src/test/java/org/onosproject/net/flow/DefaultFlowRuleTest.java
+++ b/core/api/src/test/java/org/onosproject/net/flow/DefaultFlowRuleTest.java
@@ -37,7 +37,7 @@
     private static final IntentTestsMocks.MockTreatment TREATMENT =
             new IntentTestsMocks.MockTreatment();
 
-    private static byte [] b = new byte[3];
+    private static byte[] b = new byte[3];
     private static FlowRuleExtPayLoad payLoad = FlowRuleExtPayLoad.flowRuleExtPayLoad(b);
     final FlowRule flowRule1 = new IntentTestsMocks.MockFlowRule(1, payLoad);
     final FlowRule sameAsFlowRule1 = new IntentTestsMocks.MockFlowRule(1, payLoad);
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 f6a9213..c2f4ccf 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
@@ -541,7 +541,7 @@
                 is(80));
 
        assertThat(((OduSignalIdCriterion) criterion).oduSignalId().tributarySlotBitmap(),
-                is(new byte [] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}));
+                is(new byte[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}));
     }
 
     /**
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java
index f7b0261..8d45f4c 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java
@@ -127,7 +127,7 @@
      */
     @Test
     public void modOduSignalIdInstructionTest() {
-        OduSignalId oduSignalId = OduSignalId.oduSignalId(1, 8, new byte [] {8, 0, 0, 0, 0, 0, 0, 0, 0, 0});
+        OduSignalId oduSignalId = OduSignalId.oduSignalId(1, 8, new byte[] {8, 0, 0, 0, 0, 0, 0, 0, 0, 0});
         L1ModificationInstruction.ModOduSignalIdInstruction instruction =
                 (L1ModificationInstruction.ModOduSignalIdInstruction)
                     Instructions.modL1OduSignalId(oduSignalId);
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/InstructionJsonMatcher.java b/core/common/src/test/java/org/onosproject/codec/impl/InstructionJsonMatcher.java
index 4c49d64..3f65e8c 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/InstructionJsonMatcher.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/InstructionJsonMatcher.java
@@ -230,7 +230,7 @@
         final JsonNode jsonOduSignal = instructionJson.get("oduSignalId");
         int jsonTpn = jsonOduSignal.get("tributaryPortNumber").intValue();
         int jsonTsLen = jsonOduSignal.get("tributarySlotLength").intValue();
-        byte [] tributaryBitMap = HexString.fromHexString(jsonOduSignal.get("tributarySlotBitmap").asText());
+        byte[] tributaryBitMap = HexString.fromHexString(jsonOduSignal.get("tributarySlotBitmap").asText());
         OduSignalId  jsonOduSignalId = OduSignalId.oduSignalId(jsonTpn, jsonTsLen, tributaryBitMap);
         if (!instructionToMatch.oduSignalId().equals(jsonOduSignalId)) {
             description.appendText("oduSignalId was " + instructionToMatch);
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
index 11a1204..75a9f1b 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
@@ -206,8 +206,7 @@
                 // FIXME: Is the enclosing if required here?
                 verify(replaced,
                        "Replacing devices cache failed. PID:%s [expected:%s, found:%s, new=%s]",
-                       providerId, oldDevice, devices.get(newDevice.id())
-                        , newDevice);
+                       providerId, oldDevice, devices.get(newDevice.id()), newDevice);
             }
             if (!providerId.isAncillary()) {
                 availableDevices.add(newDevice.id());
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 03e28f1..14648a5 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
@@ -439,8 +439,7 @@
             if (!replaced) {
                 verify(replaced,
                        "Replacing devices cache failed. PID:%s [expected:%s, found:%s, new=%s]",
-                       providerId, oldDevice, devices.get(newDevice.id())
-                        , newDevice);
+                       providerId, oldDevice, devices.get(newDevice.id()), newDevice);
             }
 
             event = new DeviceEvent(DeviceEvent.Type.DEVICE_UPDATED, newDevice, null);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java b/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
index 3d3ff9a..13e9174 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
@@ -215,7 +215,7 @@
             if (internalLinkKey == null) {
                 return null;
             }
-            linkDescriptions.compute(internalLinkKey, (k, v) -> createOrUpdateLinkInternal(v  , linkDescription));
+            linkDescriptions.compute(internalLinkKey, (k, v) -> createOrUpdateLinkInternal(v, linkDescription));
             return refreshLinkCache(linkKey);
         } else {
             // Only forward for ConfigProvider
diff --git a/drivers/src/main/java/org/onosproject/driver/handshaker/OFOpticalSwitch13.java b/drivers/src/main/java/org/onosproject/driver/handshaker/OFOpticalSwitch13.java
index c7409e9..64c6bc4 100644
--- a/drivers/src/main/java/org/onosproject/driver/handshaker/OFOpticalSwitch13.java
+++ b/drivers/src/main/java/org/onosproject/driver/handshaker/OFOpticalSwitch13.java
@@ -112,8 +112,8 @@
                    return;
                }
               } catch (ClassCastException e) {
-                  log.error("Unexspected Experimenter Multipart message type {} "
-                          , stats.getClass().getName());
+                  log.error("Unexspected Experimenter Multipart message type {} ",
+                          stats.getClass().getName());
             }
         }
     }
diff --git a/pom.xml b/pom.xml
index 003a9d4..13a3ef1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -698,7 +698,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
-                <version>2.16</version>
+                <version>2.17</version>
                 <dependencies>
                     <dependency>
                         <groupId>org.onosproject</groupId>
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/IPv4AddressTlv.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/IPv4AddressTlv.java
index 4efde70..b930d69 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/IPv4AddressTlv.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/IPv4AddressTlv.java
@@ -110,7 +110,7 @@
      * @param type says Ipv4 address of interface/neighbor tlv type
      * @return object of this class
      */
-    public static IPv4AddressTlv of(final Ip4Address address , final short type) {
+    public static IPv4AddressTlv of(final Ip4Address address, final short type) {
         return new IPv4AddressTlv(address, type);
     }
 
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/IPv6AddressTlv.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/IPv6AddressTlv.java
index 087cd5c..9ad8759 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/IPv6AddressTlv.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/IPv6AddressTlv.java
@@ -110,7 +110,7 @@
      * @param type says Ipv6 address of interface/neighbor tlv type
      * @return object of this class
      */
-    public static IPv6AddressTlv of(final Ip6Address address , final short type) {
+    public static IPv6AddressTlv of(final Ip6Address address, final short type) {
         return new IPv6AddressTlv(address, type);
     }
 
diff --git a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateMsgTest.java b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateMsgTest.java
index 69ba01a..bc9fef2 100644
--- a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateMsgTest.java
+++ b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/BgpUpdateMsgTest.java
@@ -221,7 +221,7 @@
      */
     @Test
     public void bgpUpdateMessageTest07() throws BgpParseException {
-        byte[] updateMsg = new byte [] {(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
+        byte[] updateMsg = new byte[] {(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
                 (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
                 (byte) 0xff, (byte) 0xff, 0x00, 0x3f, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x40, 0x01, 0x01,
                 0x00, 0x40, 0x02, 0x00, 0x40, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, (byte) 0x80, 0x04, 0x04, 0x00, 0x00,
diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTlv.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTlv.java
index aceb7ea..9e8cea3 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTlv.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTlv.java
@@ -185,7 +185,7 @@
      * @return object of RemoteTENodeDescriptorsTLV
      * @throws PcepParseException if mandatory fields are missing
      */
-    public static PcepValueType read(ChannelBuffer c , short length) throws PcepParseException {
+    public static PcepValueType read(ChannelBuffer c, short length) throws PcepParseException {
 
         // Node Descriptor Sub-TLVs (variable)
         LinkedList<PcepValueType> llRemoteTENodeDescriptorSubTLVs = new LinkedList<>();
diff --git a/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java b/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java
index fb1cbe5..16be530 100644
--- a/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java
+++ b/providers/openflow/packet/src/test/java/org/onosproject/provider/of/packet/impl/OpenFlowPacketProviderTest.java
@@ -88,7 +88,7 @@
     private static final TrafficTreatment TR = treatment(INST1, INST2);
     private static final TrafficTreatment TR_MISSING = treatment(INST1, INST3);
 
-    private static final byte[] ANY = new byte [] {0, 0, 0, 0};
+    private static final byte[] ANY = new byte[] {0, 0, 0, 0};
 
     private final OpenFlowPacketProvider provider = new OpenFlowPacketProvider();
     private final TestPacketRegistry registry = new TestPacketRegistry();
diff --git a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java
index b7aa3bd..fd67a85 100644
--- a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java
+++ b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java
@@ -125,7 +125,7 @@
             int value = tunnelIdMap.get(pcepTunnelData.tunnel().tunnelId());
             tunnelDB.put(new Integer(value), pcepTunnelData);
             tunnelRequestQueue.remove(new Integer(srpId), pcepTunnelData);
-            log.debug("Tunnel Added to TunnelDBQueue and removed from TunnelRequestQueue. tunnel id {}" ,
+            log.debug("Tunnel Added to TunnelDBQueue and removed from TunnelRequestQueue. tunnel id {}",
                       (new Integer(value)).toString());
         } else {
             pcepTunnelData.setRptFlag(true);
diff --git a/utils/misc/src/main/java/org/onlab/packet/IGMP.java b/utils/misc/src/main/java/org/onlab/packet/IGMP.java
index 938cd6e..5f82d82 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IGMP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IGMP.java
@@ -159,7 +159,7 @@
     @java.lang.SuppressWarnings(SONAR_SWITCH_FALLTHROUGH) // suppress switch fall through warning
     @Override
     public byte[] serialize() {
-        byte [] data = new byte[8915];
+        byte[] data = new byte[8915];
 
         ByteBuffer bb = ByteBuffer.wrap(data);
         bb.put(this.getIgmpType());
@@ -193,7 +193,7 @@
 
         int size = bb.position();
         bb.position(0);
-        byte [] rdata = new byte[size];
+        byte[] rdata = new byte[size];
         bb.get(rdata, 0, size);
         return rdata;
     }
diff --git a/utils/misc/src/main/java/org/onlab/packet/pim/PIMHelloOption.java b/utils/misc/src/main/java/org/onlab/packet/pim/PIMHelloOption.java
index 1ea0ba8..7d05d92 100644
--- a/utils/misc/src/main/java/org/onlab/packet/pim/PIMHelloOption.java
+++ b/utils/misc/src/main/java/org/onlab/packet/pim/PIMHelloOption.java
@@ -131,7 +131,7 @@
         return opt;
     }
 
-    public byte [] serialize() {
+    public byte[] serialize() {
         int len = 4 + this.optLength;
         ByteBuffer bb = ByteBuffer.allocate(len);
         bb.putShort(this.optType);
diff --git a/utils/misc/src/test/java/org/onlab/packet/IGMPTest.java b/utils/misc/src/test/java/org/onlab/packet/IGMPTest.java
index 7634bbf..6a8a37b 100644
--- a/utils/misc/src/test/java/org/onlab/packet/IGMPTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/IGMPTest.java
@@ -73,7 +73,7 @@
 
     @Test
     public void testDeserializeTruncated() throws Exception {
-        byte [] bits = igmpQuery.serialize();
+        byte[] bits = igmpQuery.serialize();
         PacketTestUtils.testDeserializeTruncated(deserializer, bits);
 
         bits = igmpMembership.serialize();
@@ -82,14 +82,14 @@
 
     @Test
     public void testDeserializeQuery() throws Exception {
-        byte [] data = igmpQuery.serialize();
+        byte[] data = igmpQuery.serialize();
         IGMP igmp = deserializer.deserialize(data, 0, data.length);
         assertTrue(igmp.equals(igmpQuery));
     }
 
     @Test
     public void testDeserializeMembership() throws Exception {
-        byte [] data = igmpMembership.serialize();
+        byte[] data = igmpMembership.serialize();
         IGMP igmp = deserializer.deserialize(data, 0, data.length);
         assertTrue(igmp.equals(igmpMembership));
     }
diff --git a/utils/misc/src/test/java/org/onlab/packet/PIMTest.java b/utils/misc/src/test/java/org/onlab/packet/PIMTest.java
index 7fba3cd..8e3e890 100644
--- a/utils/misc/src/test/java/org/onlab/packet/PIMTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/PIMTest.java
@@ -101,7 +101,7 @@
      */
     @Test
     public void testDeserializeTruncated() throws Exception {
-        byte [] bits = pimJoinPrune.serialize();
+        byte[] bits = pimJoinPrune.serialize();
         PacketTestUtils.testDeserializeTruncated(deserializer, bits);
     }
 
@@ -112,7 +112,7 @@
      */
     @Test
     public void testDeserializeHello() throws Exception {
-        byte [] data = pimHello.serialize();
+        byte[] data = pimHello.serialize();
         PIM pim = deserializer.deserialize(data, 0, data.length);
         assertTrue(pim.equals(pimHello));
     }
@@ -124,7 +124,7 @@
      */
     @Test
     public void testDeserializeJoinPrune() throws Exception {
-        byte [] data = pimJoinPrune.serialize();
+        byte[] data = pimJoinPrune.serialize();
         PIM pim = deserializer.deserialize(data, 0, data.length);
         assertTrue(pim.equals(pimJoinPrune));
     }
