diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepAttributeVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepAttributeVer1.java
index 446cc1f..4034a42 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepAttributeVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepAttributeVer1.java
@@ -144,7 +144,7 @@
      */
     public boolean parseMetricList(ChannelBuffer cb) throws PcepParseException {
 
-        if (null == llMetricList) {
+        if (llMetricList == null) {
             llMetricList = new LinkedList<PcepMetricObject>();
         }
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEndPointsObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEndPointsObjectVer1.java
index 131fd75..6b594f8 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEndPointsObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEndPointsObjectVer1.java
@@ -120,8 +120,8 @@
         int destIpAddress;
 
         endPointsObjHeader = PcepObjectHeader.read(cb);
-        if (END_POINTS_OBJ_TYPE == endPointsObjHeader.getObjType()
-                && END_POINTS_OBJ_CLASS == endPointsObjHeader.getObjClass()) {
+        if (endPointsObjHeader.getObjType() == END_POINTS_OBJ_TYPE
+                && endPointsObjHeader.getObjClass() == END_POINTS_OBJ_CLASS) {
             sourceIpAddress = cb.readInt();
             destIpAddress = cb.readInt();
         } else {
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java
index 9557906..9750c91 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java
@@ -212,7 +212,7 @@
         while (listIterator.hasNext()) {
             PcepValueType tlv = listIterator.next();
 
-            if (null == tlv) {
+            if (tlv == null) {
                 log.debug("TLV is null from OptionalTlv list");
                 continue;
             }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorVer1.java
index 50200d0..cc5ec0e 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorVer1.java
@@ -393,12 +393,12 @@
         ToStringHelper toStrHelper = MoreObjects.toStringHelper(getClass());
 
         //RP Object list is optional
-        if (null != llRPObjList) {
+        if (llRPObjList != null) {
             toStrHelper.add("RpObjectList", llRPObjList);
         }
 
         //TE Object list is optional
-        if (null != llTEObjList) {
+        if (llTEObjList != null) {
             toStrHelper.add("TeObjectList", llTEObjList);
         }
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInitiateMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInitiateMsgVer1.java
index 5b47f53..a0c74d2 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInitiateMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInitiateMsgVer1.java
@@ -126,7 +126,7 @@
 
             boolean isDelLspRequest = false;
 
-            if (null == cb) {
+            if (cb == null) {
                 throw new PcepParseException("Channel buffer is empty");
             }
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelObjectVer1.java
index 27acb0a..abeb1bb 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelObjectVer1.java
@@ -250,7 +250,7 @@
         while (listIterator.hasNext()) {
             PcepValueType tlv = listIterator.next();
 
-            if (null == tlv) {
+            if (tlv == null) {
                 log.debug("tlv is null from OptionalTlv list");
                 continue;
             }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeObjectVer1.java
index 776d3f1..e98cf06 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeObjectVer1.java
@@ -235,7 +235,7 @@
         while (listIterator.hasNext()) {
             PcepValueType tlv = listIterator.next();
 
-            if (null == tlv) {
+            if (tlv == null) {
                 log.debug("tlv is null from OptionalTlv list");
                 continue;
             }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
index 2eba09b..d1a7414 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
@@ -377,7 +377,7 @@
         while (listIterator.hasNext()) {
             PcepValueType tlv = listIterator.next();
 
-            if (null == tlv) {
+            if (tlv == null) {
                 log.debug("tlv is null from OptionalTlv list");
                 continue;
             }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspaObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspaObjectVer1.java
index a0e2389..7f25c70 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspaObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspaObjectVer1.java
@@ -308,7 +308,7 @@
         ListIterator<PcepValueType> listIterator = llOptionalTlv.listIterator();
         while (listIterator.hasNext()) {
             PcepValueType tlv = listIterator.next();
-            if (null == tlv) {
+            if (tlv == null) {
                 log.debug("Warning: tlv is null from OptionalTlv list");
                 continue;
             }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java
index 724fa68..3051cc3 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java
@@ -326,7 +326,7 @@
         ListIterator<PcepValueType> listIterator = llOptionalTlv.listIterator();
         while (listIterator.hasNext()) {
             PcepValueType tlv = listIterator.next();
-            if (null == tlv) {
+            if (tlv == null) {
                 log.debug("TLV is null from OptionalTlv list");
                 continue;
             }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java
index 1bbf6b6..9b99af2 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java
@@ -253,7 +253,7 @@
                 PcepSrpObject srpObj = stateRpt.getSrpObject();
 
                 //SRP object is optional
-                if (null != srpObj) {
+                if (srpObj != null) {
                     srpObj.write(cb);
                 }
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java
index e76de01..fcdcfb4 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java
@@ -159,7 +159,7 @@
 
         srpObjHeader = PcepObjectHeader.read(cb);
 
-        if (SRP_OBJ_CLASS != srpObjHeader.getObjClass()) {
+        if (srpObjHeader.getObjClass() != SRP_OBJ_CLASS) {
             throw new PcepParseException("SRP object expected. But received " + srpObjHeader.getObjClass());
         }
 
@@ -258,7 +258,7 @@
         while (listIterator.hasNext()) {
             PcepValueType tlv = listIterator.next();
 
-            if (null == tlv) {
+            if (tlv == null) {
                 log.debug("tlv is null from OptionalTlv list");
                 continue;
             }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepStateReportVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepStateReportVer1.java
index 456a3c1..0c322de 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepStateReportVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepStateReportVer1.java
@@ -98,22 +98,22 @@
             this.attrList = attrList;
             this.rroObj = rroObj;
             this.bandwidth = bandwidth;
-            if (null == rroObj) {
+            if (rroObj == null) {
                 this.isRroObjectSet = false;
             } else {
                 this.isRroObjectSet = true;
             }
-            if (null == eroObj) {
+            if (eroObj == null) {
                 this.isEroObjectSet = false;
             } else {
                 this.isEroObjectSet = true;
             }
-            if (null == attrList) {
+            if (attrList == null) {
                 this.isAttributeListSet = false;
             } else {
                 this.isAttributeListSet = true;
             }
-            if (null == bandwidth) {
+            if (bandwidth == null) {
                 this.isBandwidthObjectSet = false;
             } else {
                 this.isBandwidthObjectSet = true;
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java
index 1e770f3..d6c1aa8 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java
@@ -343,7 +343,7 @@
         while (listIterator.hasNext()) {
             PcepValueType tlv = listIterator.next();
 
-            if (null == tlv) {
+            if (tlv == null) {
                 log.debug("TLV is null from OptionalTlv list");
                 continue;
             }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/LocalTENodeDescriptorsTLV.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/LocalTENodeDescriptorsTLV.java
index b33029d..eb6364b 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/LocalTENodeDescriptorsTLV.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/LocalTENodeDescriptorsTLV.java
@@ -152,7 +152,7 @@
 
         while (listIterator.hasNext()) {
             PcepValueType tlv = listIterator.next();
-            if (null == tlv) {
+            if (tlv == null) {
                 log.debug("TLV is null from subTlv list");
                 continue;
             }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpUserErrorSpec.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpUserErrorSpec.java
index 80fedd8..c0ce6b7 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpUserErrorSpec.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpUserErrorSpec.java
@@ -102,13 +102,13 @@
         cb.writeShort(userErrorValue);
         cb.writeBytes(errDesc);
 
-        if (null != llRsvpUserSpecSubObj) {
+        if (llRsvpUserSpecSubObj != null) {
 
             ListIterator<PcepValueType> listIterator = llRsvpUserSpecSubObj.listIterator();
 
             while (listIterator.hasNext()) {
                 PcepValueType tlv = listIterator.next();
-                if (null == tlv) {
+                if (tlv == null) {
                     continue;
                 }
                 tlv.write(cb);
@@ -145,7 +145,7 @@
 
         objHeader = PcepRsvpSpecObjHeader.read(cb);
 
-        if (CLASS_NUM != objHeader.getObjClassNum() || CLASS_TYPE != objHeader.getObjClassType()) {
+        if (objHeader.getObjClassNum() != CLASS_NUM || objHeader.getObjClassType() != CLASS_TYPE) {
             throw new PcepParseException("Expected PcepRsvpUserErrorSpec object.");
         }
         enterpriseNum = cb.readInt();
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTLV.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTLV.java
index 8afa23d..61d93a1 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTLV.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTLV.java
@@ -154,7 +154,7 @@
         while (listIterator.hasNext()) {
             PcepValueType tlv = listIterator.next();
 
-            if (null == tlv) {
+            if (tlv == null) {
                 log.debug("TLV is null from subTlv list");
                 continue;
             }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkAttributesTlv.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkAttributesTlv.java
index 1a13de5..482480f 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkAttributesTlv.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkAttributesTlv.java
@@ -152,7 +152,7 @@
         while (listIterator.hasNext()) {
             PcepValueType tlv = listIterator.next();
 
-            if (null == tlv) {
+            if (tlv == null) {
                 log.debug("TLV is null from subTlv list");
                 continue;
             }
diff --git a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
index ee5dba4..152a388 100644
--- a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
+++ b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
@@ -628,7 +628,7 @@
         PcepValueType tlv;
         LinkedList<PcepValueType> llSubObjects = createPcepPath(path);
 
-        if (null == llSubObjects || 0 == llSubObjects.size()) {
+        if (llSubObjects == null || llSubObjects.size() == 0) {
             log.error("There is no link information to create tunnel");
             return null;
         }
@@ -661,7 +661,7 @@
         PcepEroObject eroobj = pc.factory().buildEroObject().setSubObjects(llSubObjects).build();
 
         int iBandwidth = DEFAULT_BANDWIDTH_VALUE;
-        if (null != tunnel.annotations().value("bandwidth")) {
+        if (tunnel.annotations().value("bandwidth") != null) {
             iBandwidth = Integer.parseInt(tunnel.annotations().value("bandwidth"));
         }
         // build bandwidth object
@@ -692,7 +692,7 @@
 
             LinkedList<PcInitiatedLspRequest> llPcInitiatedLspRequestList = createPcInitiatedLspReqList(tunnel, path,
                                                                                                         pc, srpId);
-            if (null == llPcInitiatedLspRequestList || 0 == llPcInitiatedLspRequestList.size()) {
+            if (llPcInitiatedLspRequestList == null || llPcInitiatedLspRequestList.size() == 0) {
                 log.error("Failed to create PcInitiatedLspRequestList");
                 return;
             }
@@ -740,7 +740,7 @@
             LinkedList<PcepValueType> llOptionalTlv = new LinkedList<PcepValueType>();
             LinkedList<PcInitiatedLspRequest> llPcInitiatedLspRequestList = new LinkedList<PcInitiatedLspRequest>();
 
-            if (null != statefulIpv4IndentifierTlv) {
+            if (statefulIpv4IndentifierTlv != null) {
                 tlv = statefulIpv4IndentifierTlv;
             } else {
                 tlv = new StatefulIPv4LspIdentidiersTlv((
@@ -819,7 +819,7 @@
             PcepEroObject eroobj = pc.factory().buildEroObject().setSubObjects(llSubObjects).build();
 
             int iBandwidth = DEFAULT_BANDWIDTH_VALUE;
-            if (null != tunnel.annotations().value("bandwidth")) {
+            if (tunnel.annotations().value("bandwidth") != null) {
                 iBandwidth = Integer.parseInt(tunnel.annotations().value("bandwidth"));
             }
             // build bandwidth object
@@ -957,7 +957,7 @@
                     break;
                 }
             }
-            if (null != ipv4LspTlv) {
+            if (ipv4LspTlv != null) {
                 pcepTunnelData.setStatefulIpv4IndentifierTlv(ipv4LspTlv);
             }
 
@@ -1021,7 +1021,7 @@
             }
             log.debug("Sync report received");
 
-            if (null != msgPath.getBandwidthObject()) {
+            if (msgPath.getBandwidthObject() != null) {
                 bandwidth = msgPath.getBandwidthObject().getBandwidth();
             }
 
