diff --git a/apps/acl/src/main/java/org/onosproject/acl/AclStore.java b/apps/acl/src/main/java/org/onosproject/acl/AclStore.java
index 80c5c03..63fc08d 100644
--- a/apps/acl/src/main/java/org/onosproject/acl/AclStore.java
+++ b/apps/acl/src/main/java/org/onosproject/acl/AclStore.java
@@ -124,7 +124,7 @@
      * Checks if an existing ACL rule already works in a given device.
      *
      * @param ruleId   ACL rule id
-     * @param deviceId devide id
+     * @param deviceId device id
      * @return true if the given ACL rule works in the given device
      */
     boolean checkIfRuleWorksInDevice(RuleId ruleId, DeviceId deviceId);
diff --git a/apps/cip/src/main/java/org/onosproject/cip/ClusterIpManager.java b/apps/cip/src/main/java/org/onosproject/cip/ClusterIpManager.java
index 6dadbcb..f48b7f5 100644
--- a/apps/cip/src/main/java/org/onosproject/cip/ClusterIpManager.java
+++ b/apps/cip/src/main/java/org/onosproject/cip/ClusterIpManager.java
@@ -146,7 +146,7 @@
             addIpAlias(aliasIp, aliasMask, aliasAdapter);
             wasLeader = true;
         } else if (wasLeader && !isLeader) {
-            // Loosing leadership, so drop the IP alias
+            // Losing leadership, so drop the IP alias
             removeIpAlias(aliasIp, aliasMask, aliasAdapter);
             wasLeader = false;
         }
diff --git a/apps/config/src/test/java/org/onosproject/d/config/DynamicDeviceConfigServiceViewTest.java b/apps/config/src/test/java/org/onosproject/d/config/DynamicDeviceConfigServiceViewTest.java
index 78193fb..a9b0c31 100644
--- a/apps/config/src/test/java/org/onosproject/d/config/DynamicDeviceConfigServiceViewTest.java
+++ b/apps/config/src/test/java/org/onosproject/d/config/DynamicDeviceConfigServiceViewTest.java
@@ -84,7 +84,7 @@
             .addBranchPointSchema("intf", "test")
             .build();
 
-        final CountDownLatch recieved = new CountDownLatch(1);
+        final CountDownLatch received = new CountDownLatch(1);
 
         DynamicConfigListener lsnr = new DynamicConfigListener() {
 
@@ -97,14 +97,14 @@
             @Override
             public void event(DynamicConfigEvent event) {
                 viewEvent = event;
-                recieved.countDown();
+                received.countDown();
             }
         };
         view.addListener(lsnr);
 
         service.post(new DynamicConfigEvent(Type.NODE_ADDED, realIntf));
 
-        assertTrue(recieved.await(5, TimeUnit.SECONDS));
+        assertTrue(received.await(5, TimeUnit.SECONDS));
 
         assertFalse("Expect relative path but was" + viewRelevantEvent.subject(),
                     ResourceIds.isPrefix(rid, viewRelevantEvent.subject()));
diff --git a/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java b/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java
index cab0908..8c57c9f 100644
--- a/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java
+++ b/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java
@@ -288,7 +288,7 @@
     @Test
     public void testArpRequest() throws Exception {
         packetService.processPacket(new TestArpRequestPacketContext(CLIENT_INTERFACE));
-        OutboundPacket outboundPacket = packetService.emitedPacket;
+        OutboundPacket outboundPacket = packetService.emittedPacket;
         byte[] outPacketData = outboundPacket.data().array();
         Ethernet eth = Ethernet.deserializer().deserialize(outPacketData, 0, outPacketData.length);
 
@@ -436,7 +436,7 @@
 
     private class MockPacketService extends PacketServiceAdapter {
         Set<PacketProcessor> packetProcessors = Sets.newHashSet();
-        OutboundPacket emitedPacket;
+        OutboundPacket emittedPacket;
 
         @Override
         public void addProcessor(PacketProcessor processor, int priority) {
@@ -449,7 +449,7 @@
 
         @Override
         public void emit(OutboundPacket packet) {
-            this.emitedPacket = packet;
+            this.emittedPacket = packet;
         }
     }
 
diff --git a/apps/evpnopenflow/src/main/java/org/onosproject/evpnopenflow/manager/impl/EvpnManager.java b/apps/evpnopenflow/src/main/java/org/onosproject/evpnopenflow/manager/impl/EvpnManager.java
index 33d6924..562171b 100644
--- a/apps/evpnopenflow/src/main/java/org/onosproject/evpnopenflow/manager/impl/EvpnManager.java
+++ b/apps/evpnopenflow/src/main/java/org/onosproject/evpnopenflow/manager/impl/EvpnManager.java
@@ -426,8 +426,8 @@
             List<VpnRouteTarget> expRt = route.exportRouteTarget();
             List<VpnRouteTarget> similar = new LinkedList<>(expRt);
             similar.retainAll(vpnInstance.getImportRouteTargets());
-            //TODO: currently checking for RT comparision.
-            //TODO: Need to check about RD comparision is really required.
+            //TODO: currently checking for RT comparison.
+            //TODO: Need to check about RD comparison is really required.
             //if (route.routeDistinguisher()
             //.equals(vpnInstance.routeDistinguisher())) {
             if (!similar.isEmpty()) {
diff --git a/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/device/IpDeviceDescription.java b/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/device/IpDeviceDescription.java
index 25e3685..81dc9f6 100644
--- a/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/device/IpDeviceDescription.java
+++ b/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/device/IpDeviceDescription.java
@@ -38,7 +38,7 @@
     URI deviceUri();
 
     /**
-     * Returns the type of the ip device. For ex: Psuedo or actual
+     * Returns the type of the ip device. For ex: Pseudo or actual
      *
      * @return type of the device
      */
diff --git a/apps/learning-switch/src/main/java/org/onosproject/learningswitch/LearningSwitchSolution.java b/apps/learning-switch/src/main/java/org/onosproject/learningswitch/LearningSwitchSolution.java
index 842044a..621d16d 100644
--- a/apps/learning-switch/src/main/java/org/onosproject/learningswitch/LearningSwitchSolution.java
+++ b/apps/learning-switch/src/main/java/org/onosproject/learningswitch/LearningSwitchSolution.java
@@ -80,7 +80,7 @@
         log.info("Started");
         appId = coreService.getAppId("org.onosproject.learningswitch"); //equal to the name shown in pom.xml file
 
-        processor = new SwitchPacketProcesser();
+        processor = new SwitchPacketProcessor();
         packetService.addProcessor(processor, PacketProcessor.director(3));
 
         /*
@@ -106,7 +106,7 @@
      * send the packet out the port previously learned for the destination MAC, if it
      * exists. Otherwise flood the packet (to all ports).
      */
-    private class SwitchPacketProcesser implements PacketProcessor {
+    private class SwitchPacketProcessor implements PacketProcessor {
         /**
          * Learns the source port associated with the packet's DeviceId if it has not already been learned.
          * Calls actLikeSwitch to process and send the packet.
diff --git a/apps/learning-switch/src/main/java/org/onosproject/learningswitch/LearningSwitchTutorial.java b/apps/learning-switch/src/main/java/org/onosproject/learningswitch/LearningSwitchTutorial.java
index b0daa95..3a9c8b7 100644
--- a/apps/learning-switch/src/main/java/org/onosproject/learningswitch/LearningSwitchTutorial.java
+++ b/apps/learning-switch/src/main/java/org/onosproject/learningswitch/LearningSwitchTutorial.java
@@ -106,7 +106,7 @@
      * send the packet out the port previously learned for the destination MAC.  If it does not exist,
      * flood the packet out (to all ports).
      */
-    private class SwitchPacketProcesser implements PacketProcessor {
+    private class SwitchPacketProcessor implements PacketProcessor {
         /**
          * Learns the source port associated with the packet's DeviceId if it has not already been learned.
          * Calls actLikeSwitch to process and send the packet.
diff --git a/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/base/TsLoopPacket.java b/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/base/TsLoopPacket.java
index 4f68942..b675a87 100644
--- a/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/base/TsLoopPacket.java
+++ b/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/base/TsLoopPacket.java
@@ -280,7 +280,7 @@
     /**
      * Returns true if the packet passed through the specific device.
      *
-     * @param deviceId identify of the divice to test
+     * @param deviceId identify of the device to test
      * @return true if packet passed through the specific device;
      *         false otherwise
      */
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java b/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
index f425f3b..23622f4 100644
--- a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
+++ b/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
@@ -285,7 +285,7 @@
     /**
      * Sets connection tracking rule using OVS extension commands.
      * It is not so graceful, but I don't want to make it more general because it is going to be used
-     * only here. The following is the usage of the fucntion.
+     * only here. The following is the usage of the function.
      *
      * @param deviceId Device ID
      * @param ctState ctState: please use RulePopulatorUtil.computeCtStateFlag() to build the value
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java b/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java
index 2c5aad7..47c369c 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java
@@ -307,7 +307,7 @@
         return devList;
     }
 
-    //To dectect loops in the path i.e if the partial paths has intersection node avoid it.
+    //To detect loops in the path i.e if the partial paths has intersection node avoid it.
     private boolean pathValidation(List<Path> partialPath, Path path) {
 
         //List of devices in new path computed
diff --git a/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovOverlay.java b/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovOverlay.java
index f876b45..1ab69eb 100644
--- a/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovOverlay.java
+++ b/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovOverlay.java
@@ -164,7 +164,7 @@
         try {
             Thread.sleep(100);
         } catch (InterruptedException e) {
-            log.error("Exception occured while getting the bandwidth.");
+            log.error("Exception occurred while getting the bandwidth.");
         }
         Set<Resource> resources = resService.getRegisteredResources(devResource.id());
         for (Resource res : resources) {
diff --git a/apps/pcep-api/src/main/java/org/onosproject/pcep/api/PcepSwitch.java b/apps/pcep-api/src/main/java/org/onosproject/pcep/api/PcepSwitch.java
index 8144209..19aeff7 100644
--- a/apps/pcep-api/src/main/java/org/onosproject/pcep/api/PcepSwitch.java
+++ b/apps/pcep-api/src/main/java/org/onosproject/pcep/api/PcepSwitch.java
@@ -30,7 +30,7 @@
         /* router */
         ROUTER,
 
-        /* unkown type */
+        /* unknown type */
         UNKNOW,
     }
 
diff --git a/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterface.java b/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterface.java
index ca23864..b52acc5 100644
--- a/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterface.java
+++ b/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterface.java
@@ -167,7 +167,7 @@
     /**
      * Return a single "best" IP address.
      *
-     * @return the choosen IP address or null if none
+     * @return the chosen IP address or null if none
      */
     public IpAddress getIpAddress() {
         if (onosInterface.ipAddressesList().isEmpty()) {
diff --git a/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceService.java b/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceService.java
index 6a82f4c..3c9431f 100644
--- a/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceService.java
+++ b/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceService.java
@@ -24,7 +24,7 @@
  * define PIM Interfaces.  The PIM Application signed up as a Netconfig
  * listener.
  *
- * TODO: Do we need a PIMInterfaceListenerService?  Who sould listen to Interfaces changes?
+ * TODO: Do we need a PIMInterfaceListenerService?  Who should listen to Interfaces changes?
  */
 public interface PimInterfaceService {
 
diff --git a/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/api/MQConstants.java b/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/api/MQConstants.java
index 5c9731f..540bdb1 100644
--- a/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/api/MQConstants.java
+++ b/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/api/MQConstants.java
@@ -109,7 +109,7 @@
     public static final String CHASIS_ID = "chassis_id";
 
     /**
-     * Specifies event occurence time.
+     * Specifies event occurrence time.
      */
     public static final String OCC_TIME = "occurrence_time";
 
@@ -129,9 +129,9 @@
     public static final String LOGICAL = "logical";
 
     /**
-     * Specifies packet recieved time.
+     * Specifies packet received time.
      */
-    public static final String RECIEVED = "received";
+    public static final String RECEIVED = "received";
 
     /**
      * Specifies message type.
diff --git a/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/impl/MQServiceImpl.java b/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/impl/MQServiceImpl.java
index 0ec5127..11b46fb 100644
--- a/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/impl/MQServiceImpl.java
+++ b/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/impl/MQServiceImpl.java
@@ -136,7 +136,7 @@
     /**
      * Publishes packet message to MQ server.
      *
-     * @param context Context of the packet recieved including details like mac, length etc
+     * @param context Context of the packet received including details like mac, length etc
      */
     @Override
     public void publish(PacketContext context) {
diff --git a/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/util/MQUtil.java b/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/util/MQUtil.java
index 0fbcab0..33aded4 100644
--- a/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/util/MQUtil.java
+++ b/apps/rabbitmq/src/main/java/org/onosproject/rabbitmq/util/MQUtil.java
@@ -144,7 +144,7 @@
         jo.addProperty(SWITCH_ID, pkt.receivedFrom().deviceId().toString());
         jo.addProperty(IN_PORT, pkt.receivedFrom().port().name());
         jo.addProperty(LOGICAL, pkt.receivedFrom().port().isLogical());
-        jo.addProperty(RECIEVED, new Date(context.time()).toString());
+        jo.addProperty(RECEIVED, new Date(context.time()).toString());
         jo.addProperty(MSG_TYPE, PKT_TYPE);
         // parse ethernet
         jo.addProperty(SUB_MSG_TYPE,
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/package-info.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/package-info.java
index d0e8ea9..9e4113d 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/package-info.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/package-info.java
@@ -15,6 +15,6 @@
  */
 
 /**
- * Application api for Scaleable Gateway management.
+ * Application api for Scalable Gateway management.
  */
-package org.onosproject.scalablegateway.api;
\ No newline at end of file
+package org.onosproject.scalablegateway.api;
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/package-info.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/package-info.java
index 620d9de..83b43f2 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/package-info.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/cli/package-info.java
@@ -15,6 +15,6 @@
  */
 
 /**
- * Command line interface for Scaleable Gateway management.
+ * Command line interface for Scalable Gateway management.
  */
-package org.onosproject.scalablegateway.cli;
\ No newline at end of file
+package org.onosproject.scalablegateway.cli;
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/package-info.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/package-info.java
index e4aad4f..2e39cb9 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/package-info.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/package-info.java
@@ -15,6 +15,6 @@
  */
 
 /**
- * Application for Scaleable Gateway management.
+ * Application for Scalable Gateway management.
  */
-package org.onosproject.scalablegateway.impl;
\ No newline at end of file
+package org.onosproject.scalablegateway.impl;
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/PortPairId.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/PortPairId.java
index 47d4244..0b44761 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/PortPairId.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/PortPairId.java
@@ -55,7 +55,7 @@
     }
 
     /**
-     * Returns teh value of port pair id.
+     * Returns the value of port pair id.
      *
      * @return port pair id
      */
diff --git a/apps/yms/api/src/main/java/org/onosproject/yms/ych/YangCodecHandler.java b/apps/yms/api/src/main/java/org/onosproject/yms/ych/YangCodecHandler.java
index a7e63f0..47e6c66 100644
--- a/apps/yms/api/src/main/java/org/onosproject/yms/ych/YangCodecHandler.java
+++ b/apps/yms/api/src/main/java/org/onosproject/yms/ych/YangCodecHandler.java
@@ -118,7 +118,7 @@
      * The protocols can have a logical root node which acts as a container
      * of applications module node.  For example in RESTCONF, it could be
      * RootResource/data, etc. There is no validation done on the value
-     * of this parameter. It is upto the protocol to use it. It is a
+     * of this parameter. It is up to the protocol to use it. It is a
      * mandatory parameter and protocols must pass this parameter.
      * <p>
      * The resource to be operated upon in the device is identified in a
diff --git a/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/YdtDecimal64Test.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/YdtDecimal64Test.java
index 24f439e..69fffb0 100644
--- a/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/YdtDecimal64Test.java
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/YdtDecimal64Test.java
@@ -51,7 +51,7 @@
 
     Positive scenario
 
-    input at boundry for decimal64 with fraction 2
+    input at boundary for decimal64 with fraction 2
         i. min value
         ii. max value
 
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmId.java b/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmId.java
index cf870ec..430e3c5 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmId.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmId.java
@@ -44,7 +44,7 @@
     }
 
     /**
-     * Instantiates a new Alarm id, primarly meant for lookup.
+     * Instantiates a new Alarm id, primarily meant for lookup.
      *
      * @param globallyUniqueIdentifier the globally unique identifier of the Alarm,
      *                                 device Id + local unique identifier on the device
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManagerTest.java
index 0a12962..92dd4ab 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkFlowObjectiveManagerTest.java
@@ -221,7 +221,7 @@
         service1.filter(VDID1, filter);
     }
 
-    //TODO: More test cases for filter, foward, and next
+    //TODO: More test cases for filter, forward, and next
 
     private class TestProvider extends AbstractVirtualProvider
             implements VirtualFlowRuleProvider {
diff --git a/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java b/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java
index 1c24468..af01f05 100644
--- a/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java
+++ b/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java
@@ -74,7 +74,7 @@
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private static final ProviderId PID = new ProviderId("test", "com.exmaple.test");
+    private static final ProviderId PID = new ProviderId("test", "com.example.test");
 
     private static final URI DURI = URI.create("dev:000001");
 
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
+}
