diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispGenericLocator.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispGenericLocator.java
index 2936b4b..860da62 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispGenericLocator.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispGenericLocator.java
@@ -31,14 +31,14 @@
  */
 public class DefaultLispGenericLocator implements LispGenericLocator {
 
-    protected final byte priority;
-    protected final byte weight;
-    protected final byte multicastPriority;
-    protected final byte multicastWeight;
-    protected final boolean localLocator;
-    protected final boolean rlocProbed;
-    protected final boolean routed;
-    protected final LispAfiAddress locatorAfi;
+    private final byte priority;
+    private final byte weight;
+    private final byte multicastPriority;
+    private final byte multicastWeight;
+    private final boolean localLocator;
+    private final boolean rlocProbed;
+    private final boolean routed;
+    private final LispAfiAddress locatorAfi;
 
     private static final int LOCAL_LOCATOR_SHIFT_BIT = 2;
     private static final int PROBED_SHIFT_BIT = 1;
@@ -63,11 +63,10 @@
      * @param routed            routed flag
      * @param locatorAfi        locator AFI
      */
-    protected DefaultLispGenericLocator(byte priority, byte weight,
-                                        byte multicastPriority,
-                                        byte multicastWeight,
-                                        boolean localLocator, boolean rlocProbed,
-                                        boolean routed, LispAfiAddress locatorAfi) {
+    DefaultLispGenericLocator(byte priority, byte weight, byte multicastPriority,
+                              byte multicastWeight, boolean localLocator,
+                              boolean rlocProbed, boolean routed,
+                              LispAfiAddress locatorAfi) {
         this.priority = priority;
         this.weight = weight;
         this.multicastPriority = multicastPriority;
@@ -162,14 +161,14 @@
 
     public abstract static class AbstractGenericLocatorBuilder<T>
             implements GenericLocatorBuilder<T> {
-        protected byte priority;
-        protected byte weight;
-        protected byte multicastPriority;
-        protected byte multicastWeight;
-        protected boolean localLocator;
-        protected boolean rlocProbed;
-        protected boolean routed;
-        protected LispAfiAddress locatorAfi;
+        byte priority;
+        byte weight;
+        byte multicastPriority;
+        byte multicastWeight;
+        boolean localLocator;
+        boolean rlocProbed;
+        boolean routed;
+        LispAfiAddress locatorAfi;
 
         @Override
         public T withPriority(byte priority) {
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
index 5cb5877..4cec4f1 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
@@ -333,8 +333,8 @@
             MapRecordWriter writer = new MapRecordWriter();
             List<LispMapRecord> records = message.getMapRecords();
 
-            for (int i = 0; i < records.size(); i++) {
-                writer.writeTo(byteBuf, records.get(i));
+            for (LispMapRecord record : records) {
+                writer.writeTo(byteBuf, record);
             }
         }
     }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java
index 5d2257a..6be325b 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java
@@ -250,8 +250,8 @@
             // serialize locator
             LocatorWriter recordWriter = new LocatorWriter();
             List<LispLocator> locators = message.getLocators();
-            for (int i = 0; i < locators.size(); i++) {
-                recordWriter.writeTo(byteBuf, locators.get(i));
+            for (LispLocator locator : locators) {
+                recordWriter.writeTo(byteBuf, locator);
             }
         }
     }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReferral.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReferral.java
index 2b2acdb..4d14a72 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReferral.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReferral.java
@@ -220,8 +220,8 @@
             ReferralRecordWriter writer = new ReferralRecordWriter();
             List<LispReferralRecord> records = message.getReferralRecords();
 
-            for (int i = 0; i < records.size(); i++) {
-                writer.writeTo(byteBuf, records.get(i));
+            for (LispReferralRecord record : records) {
+                writer.writeTo(byteBuf, record);
             }
         }
     }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
index a75d72d..0eef1c9 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
@@ -401,8 +401,8 @@
             MapRecordWriter writer = new MapRecordWriter();
             List<LispMapRecord> records = message.getMapRecords();
 
-            for (int i = 0; i < records.size(); i++) {
-                writer.writeTo(byteBuf, records.get(i));
+            for (LispMapRecord record : records) {
+                writer.writeTo(byteBuf, record);
             }
         }
     }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
index d82c4be..7e4cbc1 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
@@ -299,8 +299,8 @@
             MapRecordWriter writer = new MapRecordWriter();
             List<LispMapRecord> records = message.getMapRecords();
 
-            for (int i = 0; i < records.size(); i++) {
-                writer.writeTo(byteBuf, records.get(i));
+            for (LispMapRecord record : records) {
+                writer.writeTo(byteBuf, record);
             }
         }
     }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
index 67a4979..7c1e1b1 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
@@ -476,16 +476,16 @@
 
             // ITR RLOCs
             List<LispAfiAddress> rlocs = message.getItrRlocs();
-            for (int i = 0; i < rlocs.size(); i++) {
-                afiAddressWriter.writeTo(byteBuf, rlocs.get(i));
+            for (LispAfiAddress rloc : rlocs) {
+                afiAddressWriter.writeTo(byteBuf, rloc);
             }
 
             // EID records
             EidRecordWriter recordWriter = new EidRecordWriter();
             List<LispEidRecord> records = message.getEids();
 
-            for (int i = 0; i < records.size(); i++) {
-                recordWriter.writeTo(byteBuf, records.get(i));
+            for (LispEidRecord record : records) {
+                recordWriter.writeTo(byteBuf, record);
             }
 
             // reply record
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispReferralRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispReferralRecord.java
index fff9185..93fc21b 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispReferralRecord.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispReferralRecord.java
@@ -310,8 +310,8 @@
             // serialize referrals
             ReferralWriter referralWriter = new ReferralWriter();
             List<LispReferral> referrals = message.getReferrals();
-            for (int i = 0; i < referrals.size(); i++) {
-                referralWriter.writeTo(byteBuf, referrals.get(i));
+            for (LispReferral referral : referrals) {
+                referralWriter.writeTo(byteBuf, referral);
             }
         }
     }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispDistinguishedNameAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispDistinguishedNameAddress.java
index d2fe1b3..5dd8e38 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispDistinguishedNameAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispDistinguishedNameAddress.java
@@ -106,8 +106,8 @@
                                                     throws LispWriterException {
             String distinguishedName = address.getDistinguishedName();
             byte[] nameBytes = distinguishedName.getBytes();
-            for (int i = 0; i < nameBytes.length; i++) {
-                byteBuf.writeByte(nameBytes[i]);
+            for (byte nameByte : nameBytes) {
+                byteBuf.writeByte(nameByte);
             }
         }
     }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNatLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNatLcafAddress.java
index 2016f82..e2257f9 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNatLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNatLcafAddress.java
@@ -329,8 +329,8 @@
 
             List<LispAfiAddress> rtrRlocAddresses = address.getRtrRlocAddresses();
 
-            for (int i = 0; i < rtrRlocAddresses.size(); i++) {
-                writer.writeTo(byteBuf, rtrRlocAddresses.get(i));
+            for (LispAfiAddress rtrRlocAddress : rtrRlocAddresses) {
+                writer.writeTo(byteBuf, rtrRlocAddress);
             }
 
             updateLength(lcafIndex, byteBuf);
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispTeLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispTeLcafAddress.java
index 4906ed3..087f949 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispTeLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispTeLcafAddress.java
@@ -164,8 +164,8 @@
             LispTeRecord.TeRecordWriter writer = new LispTeRecord.TeRecordWriter();
 
             List<LispTeRecord> teRecords = address.getTeRecords();
-            for (int i = 0; i < teRecords.size(); i++) {
-                writer.writeTo(byteBuf, teRecords.get(i));
+            for (LispTeRecord teRecord : teRecords) {
+                writer.writeTo(byteBuf, teRecord);
             }
 
             LispLcafAddress.updateLength(lcafIndex, byteBuf);
