diff --git a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpController.java b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpController.java
index b5cfe5a..a8520ce 100644
--- a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpController.java
+++ b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpController.java
@@ -151,7 +151,7 @@
     Set<BgpLinkListener> linkListener();
 
     /**
-     * Stores the exceptions occured during an active session.
+     * Stores the exceptions occurred during an active session.
      *
      * @param peerId BGP peer id
      * @param exception exceptions based on the peer id.
@@ -159,7 +159,7 @@
     void activeSessionExceptionAdd(String peerId, String exception);
 
     /**
-     * Stores the exceptions occured during an closed session.
+     * Stores the exceptions occurred during an closed session.
      *
      * @param peerId BGP peer id
      * @param exception exceptions based on the peer id
diff --git a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpLocalRib.java b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpLocalRib.java
index c28a4ad..f30a2dc 100644
--- a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpLocalRib.java
+++ b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpLocalRib.java
@@ -48,7 +48,7 @@
     void delete(BgpLSNlri nlri) throws BgpParseException;
 
     /**
-     * Update NLRI identifier mapped with route distinguisher if it exists in tree otherwise add NLRI infomation mapped
+     * Update NLRI identifier mapped with route distinguisher if it exists in tree otherwise add NLRI information mapped
      * to respective route distinguisher.
      *
      * @param sessionInfo BGP session info
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/util/Validation.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/util/Validation.java
index 3f06487..3764842 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/util/Validation.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/util/Validation.java
@@ -148,7 +148,7 @@
         try {
             ipAddress = InetAddress.getByAddress(address);
         } catch (UnknownHostException e) {
-             log.info("InetAddress convertion failed");
+             log.info("InetAddress conversion failed");
         }
         return ipAddress;
     }
@@ -233,4 +233,4 @@
         IpPrefix ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, length);
         return ipPrefix;
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpKeepAliveTimer.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpKeepAliveTimer.java
index 23c8f35..919e9af 100644
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpKeepAliveTimer.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpKeepAliveTimer.java
@@ -65,7 +65,7 @@
                 handler.sendKeepAliveMessage();
                 handler.getBgpPacketStats().addOutPacket();
             } catch (Exception e) {
-                log.info("Exception occured while sending keepAlive message" + e.toString());
+                log.info("Exception occurred while sending keepAlive message" + e.toString());
             }
         }
     }
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpLocalRibImpl.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpLocalRibImpl.java
index 8e8ee43..ece0933 100644
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpLocalRibImpl.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpLocalRibImpl.java
@@ -469,7 +469,7 @@
     }
 
     /**
-     * Update local RIB node based on avaliable peer adjacency RIB.
+     * Update local RIB node based on available peer adjacency RIB.
      *
      * @param o adjacency-in/VPN adjacency-in
      * @throws BgpParseException BGP parse exception
@@ -511,7 +511,7 @@
     }
 
     /**
-     * Update localRIB link based on avaliable peer adjacency RIB.
+     * Update localRIB link based on available peer adjacency RIB.
      *
      * @param o adjacency-in/VPN adjacency-in
      * @throws BgpParseException BGP parse exceptions
@@ -553,7 +553,7 @@
     }
 
     /**
-     * Update localRIB prefix based on avaliable peer adjacency RIB.
+     * Update localRIB prefix based on available peer adjacency RIB.
      *
      * @param o instance of adjacency-in/VPN adjacency-in
      * @throws BgpParseException BGP parse exception
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/VpnAdjRibIn.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/VpnAdjRibIn.java
index dad262c..31ced74 100644
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/VpnAdjRibIn.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/VpnAdjRibIn.java
@@ -131,7 +131,7 @@
     }
 
     /**
-     * Update nlri identifier mapped with route distinguisher if it exists in tree otherwise add nlri infomation mapped
+     * Update nlri identifier mapped with route distinguisher if it exists in tree otherwise add nlri information mapped
      * to respective route distinguisher in tree.
      *
      * @param nlri NLRI info
@@ -206,4 +206,4 @@
                 .add("vpnPrefixTree", vpnPrefixTree)
                 .toString();
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/pdu/HelloPdu.java b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/pdu/HelloPdu.java
index ddb36d5..05e6448 100644
--- a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/pdu/HelloPdu.java
+++ b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/pdu/HelloPdu.java
@@ -145,7 +145,7 @@
     /**
      * Sets the PDU length.
      *
-     * @param pduLength PDU lenght
+     * @param pduLength PDU length
      */
     public void setPduLength(int pduLength) {
         this.pduLength = pduLength;
@@ -217,4 +217,4 @@
     public int hashCode() {
         return Objects.hashCode(circuitType, sourceId, holdingTime, pduLength);
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/AreaAddressTlv.java b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/AreaAddressTlv.java
index 0555df3..88ad3b9 100644
--- a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/AreaAddressTlv.java
+++ b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/AreaAddressTlv.java
@@ -64,7 +64,7 @@
             int addressLength = channelBuffer.readByte();
             byte[] addressbytes = new byte[addressLength];
             channelBuffer.readBytes(addressbytes, 0, addressLength);
-            String areaAddress = IsisUtil.areaAddres(addressbytes);
+            String areaAddress = IsisUtil.areaAddress(addressbytes);
             this.areaAddress.add(areaAddress);
         }
     }
@@ -100,4 +100,4 @@
                 .add("areaAddress", areaAddress)
                 .toString();
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/MetricOfInternalReachability.java b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/MetricOfInternalReachability.java
index b91871c..eb8f6d2 100644
--- a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/MetricOfInternalReachability.java
+++ b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/MetricOfInternalReachability.java
@@ -29,7 +29,7 @@
  */
 public class MetricOfInternalReachability {
     private Ip4Address ipAddress;
-    private Ip4Address subnetAddres;
+    private Ip4Address subnetAddress;
     private byte defaultMetric;
     private byte delayMetric;
     private byte expenseMetric;
@@ -64,19 +64,19 @@
     /**
      * Returns the subnet address of metric of internal reachability.
      *
-     * @return subnetAddres subnet address of metric of internal reachability
+     * @return subnetAddress subnet address of metric of internal reachability
      */
-    public Ip4Address getSubnetAddres() {
-        return subnetAddres;
+    public Ip4Address getSubnetAddress() {
+        return subnetAddress;
     }
 
     /**
      * Sets the subnet address for metric of internal reachability.
      *
-     * @param subnetAddres subnet address
+     * @param subnetAddress subnet address
      */
-    public void setSubnetAddres(Ip4Address subnetAddres) {
-        this.subnetAddres = subnetAddres;
+    public void setSubnetAddress(Ip4Address subnetAddress) {
+        this.subnetAddress = subnetAddress;
     }
 
     /**
@@ -365,7 +365,7 @@
 
         tempByteArray = new byte[IsisUtil.FOUR_BYTES];
         channelBuffer.readBytes(tempByteArray, 0, IsisUtil.FOUR_BYTES);
-        this.setSubnetAddres(Ip4Address.valueOf(tempByteArray));
+        this.setSubnetAddress(Ip4Address.valueOf(tempByteArray));
     }
 
     /**
@@ -425,7 +425,7 @@
         bytes.add((byte) Integer.parseInt(binary, 2));
 
         bytes.addAll(Bytes.asList(this.getIpAddress().toOctets()));
-        bytes.addAll(Bytes.asList(this.getSubnetAddres().toOctets()));
+        bytes.addAll(Bytes.asList(this.getSubnetAddress().toOctets()));
         return Bytes.toArray(bytes);
     }
 
@@ -434,7 +434,7 @@
         return MoreObjects.toStringHelper(getClass())
                 .omitNullValues()
                 .add("ipAddress", ipAddress)
-                .add("subnetAddres", subnetAddres)
+                .add("subnetAddress", subnetAddress)
                 .add("defaultMetric", defaultMetric)
                 .add("delayMetric", delayMetric)
                 .add("expenseMetric", expenseMetric)
@@ -449,4 +449,4 @@
                 .add("errorIsInternal", errorIsInternal)
                 .toString();
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisUtil.java b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisUtil.java
index 54a0e14..511f000 100644
--- a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisUtil.java
+++ b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisUtil.java
@@ -144,9 +144,9 @@
      * Parse byte array to area address.
      *
      * @param bytes area address
-     * @return areaAddres area address
+     * @return areaAddress area address
      */
-    public static String areaAddres(byte[] bytes) {
+    public static String areaAddress(byte[] bytes) {
         String areaAddres = "";
         for (Byte byt : bytes) {
             String hexa = Integer.toHexString(Byte.toUnsignedInt(byt));
@@ -759,4 +759,4 @@
         StringTokenizer stringTokenizer = new StringTokenizer(systemId, "-");
         return stringTokenizer.nextToken();
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/LspGenerator.java b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/LspGenerator.java
index fb07e4d..194bf08 100644
--- a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/LspGenerator.java
+++ b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/LspGenerator.java
@@ -149,7 +149,7 @@
         result[2] = (byte) (ipAddress[2] & networkmass[2]);
         result[3] = (byte) (ipAddress[3] & networkmass[3]);
         metricOfIntRea.setIpAddress(Ip4Address.valueOf(result));
-        metricOfIntRea.setSubnetAddres(Ip4Address.valueOf(isisInterface.networkMask()));
+        metricOfIntRea.setSubnetAddress(Ip4Address.valueOf(isisInterface.networkMask()));
         ipInterReacTlv.addInternalReachabilityMetric(metricOfIntRea);
         lsp.addTlv(ipInterReacTlv);
 
@@ -179,4 +179,4 @@
         isisHeader.setMaximumAreaAddresses((byte) IsisConstants.MAXAREAADDRESS);
         return isisHeader;
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/pdu/HelloPduTest.java b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/pdu/HelloPduTest.java
index 1dcf031..2952a92 100644
--- a/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/pdu/HelloPduTest.java
+++ b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/pdu/HelloPduTest.java
@@ -170,7 +170,7 @@
     }
 
     /**
-     * Tests areaAddres()  method.
+     * Tests areaAddress()  method.
      */
     @Test
     public void testAreaAddress() throws Exception {
@@ -321,4 +321,4 @@
         resultInt = pdu.hashCode();
         assertThat(resultInt, is(notNullValue()));
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/AreaAddressTlvTest.java b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/AreaAddressTlvTest.java
index 4855164..c33f5e4 100644
--- a/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/AreaAddressTlvTest.java
+++ b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/AreaAddressTlvTest.java
@@ -33,7 +33,7 @@
  */
 public class AreaAddressTlvTest {
 
-    private final String areaAddres = "490001";
+    private final String areaAddress = "490001";
     private final byte[] tlv = {1, 49};
     private AreaAddressTlv areaAddressTlv;
     private TlvHeader tlvHeader;
@@ -59,7 +59,7 @@
      */
     @Test
     public void testAddAddress() throws Exception {
-        areaAddressTlv.addAddress(areaAddres);
+        areaAddressTlv.addAddress(areaAddress);
         result = areaAddressTlv.areaAddress();
         assertThat(result.size(), is(1));
     }
@@ -69,7 +69,7 @@
      */
     @Test
     public void testSetAreaAddress() throws Exception {
-        areaAddressTlv.addAddress(areaAddres);
+        areaAddressTlv.addAddress(areaAddress);
         result = areaAddressTlv.areaAddress();
         assertThat(result.size(), is(1));
     }
@@ -102,4 +102,4 @@
     public void testToString() throws Exception {
         assertThat(areaAddressTlv.toString(), is(notNullValue()));
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/MetricOfInternalReachabilityTest.java b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/MetricOfInternalReachabilityTest.java
index 28bcd15..3ece0e0 100644
--- a/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/MetricOfInternalReachabilityTest.java
+++ b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/MetricOfInternalReachabilityTest.java
@@ -76,22 +76,22 @@
     }
 
     /**
-     * Tests getSubnetAddres() getter method.
+     * Tests getSubnetAddress() getter method.
      */
     @Test
     public void testGetSubnetAddres() throws Exception {
-        reachability.setSubnetAddres(ip4Address);
-        result = reachability.getSubnetAddres();
+        reachability.setSubnetAddress(ip4Address);
+        result = reachability.getSubnetAddress();
         assertThat(result, is(ip4Address));
     }
 
     /**
-     * Tests setSubnetAddres() setter method.
+     * Tests setSubnetAddress() setter method.
      */
     @Test
     public void testSetSubnetAddres() throws Exception {
-        reachability.setSubnetAddres(ip4Address);
-        result = reachability.getSubnetAddres();
+        reachability.setSubnetAddress(ip4Address);
+        result = reachability.getSubnetAddress();
         assertThat(result, is(ip4Address));
     }
 
@@ -343,4 +343,4 @@
     public void testToString() throws Exception {
         assertThat(reachability.toString(), is(notNullValue()));
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/TlvsToBytesTest.java b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/TlvsToBytesTest.java
index 0018820..7905eb5 100644
--- a/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/TlvsToBytesTest.java
+++ b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/isispacket/tlv/TlvsToBytesTest.java
@@ -111,7 +111,7 @@
         metricOfIntRea.setErrorMetricSupported(false);
         metricOfIntRea.setExpenseIsInternal(true);
         metricOfIntRea.setIpAddress(ip4Address);
-        metricOfIntRea.setSubnetAddres(ip4Address);
+        metricOfIntRea.setSubnetAddress(ip4Address);
         ipInterReacTlv.addInternalReachabilityMetric(metricOfIntRea);
         tlv = TlvsToBytes.tlvToBytes(ipInterReacTlv);
         assertThat(tlv, is(notNullValue()));
@@ -158,4 +158,4 @@
         tlv = TlvsToBytes.tlvToBytes(reachability);
         assertThat(tlv, is(notNullValue()));
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/util/IsisUtilTest.java b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/util/IsisUtilTest.java
index 4abd9c0..de96972 100644
--- a/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/util/IsisUtilTest.java
+++ b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/util/IsisUtilTest.java
@@ -33,7 +33,7 @@
 
     private final String systemId = "2929.2929.2929";
     private final String lanId = "2929.2929.2929.01";
-    private final String areaAddres = "490001";
+    private final String areaAddress = "490001";
     private final byte[] l1Lsp = {
             -125, 27, 1, 0, 18, 1, 0, 0, 0, 86, 4, -81, 34, 34, 34,
             34, 34, 34, 0, 0, 0, 0, 0, 9, 99, 11, 1, 1, 4, 3, 73,
@@ -94,13 +94,13 @@
     }
 
     /**
-     * Tests areaAddres() method.
+     * Tests areaAddress() method.
      */
     @Test
     public void testAreaAddres() throws Exception {
-        result1 = IsisUtil.areaAddres(Bytes.toArray(
-                IsisUtil.areaAddressToBytes(areaAddres)));
-        assertThat(result1, is(areaAddres));
+        result1 = IsisUtil.areaAddress(Bytes.toArray(
+                IsisUtil.areaAddressToBytes(areaAddress)));
+        assertThat(result1, is(areaAddress));
     }
 
     /**
@@ -108,7 +108,7 @@
      */
     @Test
     public void testAreaAddressToBytes() throws Exception {
-        result2 = Bytes.toArray(IsisUtil.areaAddressToBytes(areaAddres));
+        result2 = Bytes.toArray(IsisUtil.areaAddressToBytes(areaAddress));
         assertThat(result2, is(notNullValue()));
     }
 
@@ -264,4 +264,4 @@
         result2 = IsisUtil.prefixToBytes(prefix);
         assertThat(result2, is(notNullValue()));
     }
-}
\ No newline at end of file
+}
