diff --git a/cli/src/main/java/org/onosproject/cli/net/GlobalLabelPoolDestoryCommand.java b/cli/src/main/java/org/onosproject/cli/net/GlobalLabelPoolDestroyCommand.java
similarity index 94%
rename from cli/src/main/java/org/onosproject/cli/net/GlobalLabelPoolDestoryCommand.java
rename to cli/src/main/java/org/onosproject/cli/net/GlobalLabelPoolDestroyCommand.java
index 063081f..981210e 100644
--- a/cli/src/main/java/org/onosproject/cli/net/GlobalLabelPoolDestoryCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/GlobalLabelPoolDestroyCommand.java
@@ -21,7 +21,7 @@
 
 @Command(scope = "onos", name = "global-label-pool-destroy",
 description = "Destroys global label resource pool")
-public class GlobalLabelPoolDestoryCommand extends AbstractShellCommand {
+public class GlobalLabelPoolDestroyCommand extends AbstractShellCommand {
     @Override
     protected void execute() {
         LabelResourceAdminService lrs = get(LabelResourceAdminService.class);
diff --git a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 8034a40..bc33931 100644
--- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -577,7 +577,7 @@
             <action class="org.onosproject.cli.net.LabelPoolCreateCommand"/>
         </command>
         <command>
-            <action class="org.onosproject.cli.net.GlobalLabelPoolDestoryCommand"/>
+            <action class="org.onosproject.cli.net.GlobalLabelPoolDestroyCommand"/>
         </command>
         <command>
             <action class="org.onosproject.cli.net.LabelPoolDestroyCommand"/>
diff --git a/core/api/src/main/java/org/onosproject/net/statistic/StatisticService.java b/core/api/src/main/java/org/onosproject/net/statistic/StatisticService.java
index d8162ec..1bf30ca 100644
--- a/core/api/src/main/java/org/onosproject/net/statistic/StatisticService.java
+++ b/core/api/src/main/java/org/onosproject/net/statistic/StatisticService.java
@@ -27,7 +27,7 @@
 /**
  * Service for obtaining statistic information about link in the system.
  * Statistics are obtained from the FlowRuleService in order to minimize the
- * amount of hammering occuring at the dataplane.
+ * amount of hammering occurring at the dataplane.
  */
 public interface StatisticService {
 
diff --git a/core/api/src/test/java/org/onosproject/store/service/TestDocumentTreeNode.java b/core/api/src/test/java/org/onosproject/store/service/TestDocumentTreeNode.java
index 508fad2..665355f 100644
--- a/core/api/src/test/java/org/onosproject/store/service/TestDocumentTreeNode.java
+++ b/core/api/src/test/java/org/onosproject/store/service/TestDocumentTreeNode.java
@@ -76,7 +76,7 @@
      * @param newValue new value to set
      * @param newVersion new version to set
      * @return previous value; can be {@code null} if no child currently exists with that relative path name.
-     * a non null return value indicates child already exists and no modification occured.
+     * a non null return value indicates child already exists and no modification occurred.
      */
     public Versioned<V> addChild(String name, V newValue, long newVersion) {
         TestDocumentTreeNode<V> child = (TestDocumentTreeNode<V>) children.get(name);
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStore.java
index 44fd120..0241b41 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStore.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStore.java
@@ -251,7 +251,7 @@
                 !AnnotationsUtil.isEqual(oldLink.annotations(), newLink.annotations())) {
 
             links.put(key, newLink);
-            // strictly speaking following can be ommitted
+            // strictly speaking following can be omitted
             srcLinks.put(oldLink.src().deviceId(), key);
             dstLinks.put(oldLink.dst().deviceId(), key);
             return new LinkEvent(LINK_UPDATED, newLink);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/MapNames.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/MapNames.java
index 18b6bb3..a1e5a98 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/MapNames.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/MapNames.java
@@ -21,6 +21,6 @@
     static final String CONTINUOUS_CONSUMER_MAP = "onos-continuous-consumers";
     static final String CONTINUOUS_CHILD_MAP = "onos-resource-continuous-children";
 
-    // prohibit contruction
+    // prohibit construction
     private MapNames() {}
 }
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeNode.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeNode.java
index 5623185..0f5d66a 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeNode.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeNode.java
@@ -94,7 +94,7 @@
      * @param newValue new value to set
      * @param newVersion new version to set
      * @return previous value; can be {@code null} if no child currently exists with that relative path name.
-     * a non null return value indicates child already exists and no modification occured.
+     * a non null return value indicates child already exists and no modification occurred.
      */
     public Versioned<V> addChild(String name, V newValue, long newVersion) {
         DefaultDocumentTreeNode<V> child = (DefaultDocumentTreeNode<V>) children.get(name);
diff --git a/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java b/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
index 16caa01..5a21de0 100644
--- a/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
+++ b/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
@@ -136,7 +136,7 @@
             });
 
         } catch (IOException e) {
-            log.warn("IO exception occured because of ", e);
+            log.warn("IO exception occurred because of ", e);
         }
         return ports;
     }
diff --git a/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
index 0e9e31f..6e0be07 100644
--- a/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
+++ b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
@@ -210,7 +210,7 @@
     }
 
     /**
-     * Parses the text and seperates to Parent Interfaces.
+     * Parses the text and separates to Parent Interfaces.
      * @param interfacesReply the interfaces as plain text
      * @return Parent interface
      */
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java
index c307456..cc85cbf 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java
@@ -402,7 +402,7 @@
 
             if (assignedVlan == null) {
                 log.error("Driver fails to extract VLAN information. "
-                        + "Not proccessing VLAN filters on device {}.", deviceId);
+                        + "Not processing VLAN filters on device {}.", deviceId);
                 log.debug("VLAN ID in criterion={}, metadata={}",
                         readVlanFromTreatment(filt.meta()), vidCriterion.vlanId());
                 fail(filt, ObjectiveError.BADPARAMS);
diff --git a/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuT100DeviceDescription.java b/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuT100DeviceDescription.java
index 1b0b902..32dd5cd 100644
--- a/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuT100DeviceDescription.java
+++ b/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuT100DeviceDescription.java
@@ -126,7 +126,7 @@
         HierarchicalConfiguration otuConfig = cfg.configurationAt("otu");
         boolean enabled = "up".equals(otuConfig.getString("administrative-state"));
         OduSignalType signalType = "OTU4".equals(otuConfig.getString("rate")) ? OduSignalType.ODU4 : null;
-        //Unsure how to retreive, outside knowledge it is tunable.
+        //Unsure how to retrieve, outside knowledge it is tunable.
         boolean isTunable = true;
         OchSignal lambda = new OchSignal(GridType.DWDM, ChannelSpacing.CHL_50GHZ, 0, 4);
         DefaultAnnotations annotations = DefaultAnnotations.builder().
diff --git a/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuVoltAlarmConsumer.java b/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuVoltAlarmConsumer.java
index b0ffc6a..f0ae5fe 100644
--- a/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuVoltAlarmConsumer.java
+++ b/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuVoltAlarmConsumer.java
@@ -280,7 +280,7 @@
                     try {
                         Date date = dateFormat.parse(strDate + SPACE + strTime);
                         timeRaised = date.getTime();
-                        log.debug("{} {} coverted to {}", strDate, strTime, timeRaised);
+                        log.debug("{} {} converted to {}", strDate, strTime, timeRaised);
                         return timeRaised;
                     } catch (ParseException e) {
                         log.error("Cannot parse exception {} {} {}", strDate, strTime, e);
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispGcAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispGcAddress.java
index 0f371dd..88eafd2 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispGcAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispGcAddress.java
@@ -387,7 +387,7 @@
         /**
          * Sets mapping address.
          *
-         * @param address mapping addres
+         * @param address mapping address
          * @return Builder object
          */
         public Builder withAddress(MappingAddress address) {
diff --git a/drivers/oplink/src/main/java/org/onosproject/drivers/oplink/OplinkOpticalProtectionSwitchConfig.java b/drivers/oplink/src/main/java/org/onosproject/drivers/oplink/OplinkOpticalProtectionSwitchConfig.java
index cb3c37d..677d694 100644
--- a/drivers/oplink/src/main/java/org/onosproject/drivers/oplink/OplinkOpticalProtectionSwitchConfig.java
+++ b/drivers/oplink/src/main/java/org/onosproject/drivers/oplink/OplinkOpticalProtectionSwitchConfig.java
@@ -272,7 +272,7 @@
         Set<Link> links = handler().get(LinkService.class).getIngressLinks(dstCp);
         for (Link l : links) {
             if (l.type() == Link.Type.VIRTUAL) {
-                // This devide is the destination and peer is the source.
+                // This device is the destination and peer is the source.
                 return l.src().deviceId();
             }
         }
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/protection/OplinkSwitchProtection.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/protection/OplinkSwitchProtection.java
index 250c155..9ea408b 100644
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/protection/OplinkSwitchProtection.java
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/protection/OplinkSwitchProtection.java
@@ -92,7 +92,7 @@
         //add flow from client port to virtual port. This set device in auto switch mode
         addFlow(PortNumber.portNumber(VIRTUAL_PORT));
 
-        //add a virtual link bewteen two virtual ports of this device and peer
+        //add a virtual link between two virtual ports of this device and peer
         addLinkToPeer(configuration.peer());
 
         result.complete(new ConnectPoint(data().deviceId(), PortNumber.portNumber(VIRTUAL_PORT)));
@@ -118,7 +118,7 @@
         CompletableFuture result = new CompletableFuture<Boolean>();
 
         if (identifier.port().toLong() == VIRTUAL_PORT) {
-            //add a link bewteen two virtual ports of this device and peer
+            //add a link between two virtual ports of this device and peer
             removeLinkToPeer(getPeerId());
             deleteFlow();
             result.complete(true);
@@ -366,7 +366,7 @@
 
         for (Link l : links) {
             if (l.type() == Link.Type.VIRTUAL) {
-                // this devide is the destination and peer is the source.
+                // this device is the destination and peer is the source.
                 return l.src().deviceId();
             }
         }
diff --git a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/GrpcServiceRegistryImpl.java b/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/GrpcServiceRegistryImpl.java
index 8b7fd0f..5716926 100644
--- a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/GrpcServiceRegistryImpl.java
+++ b/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/GrpcServiceRegistryImpl.java
@@ -101,7 +101,7 @@
             if (!registeredServices.containsKey(service.getClass())) {
                 registeredServices.put(service.getClass(), service);
             } else {
-                log.warn("The specified class \"{}\" was not added becuase an " +
+                log.warn("The specified class \"{}\" was not added because an " +
                                  "instance of the class is already registered.",
                          service.getClass().toString());
                 return false;
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/cli/impl/NetconfConfigGetCommand.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/cli/impl/NetconfConfigGetCommand.java
index 5282ab8..b7651a5 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/cli/impl/NetconfConfigGetCommand.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/cli/impl/NetconfConfigGetCommand.java
@@ -73,7 +73,7 @@
             print("%s", res);
         } catch (IOException e) {
             log.error("Configuration could not be retrieved", e);
-            print("Error occured retrieving configuration");
+            print("Error occurred retrieving configuration");
         }
     }
 
diff --git a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java
index 80757fe..37c43f3 100644
--- a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java
+++ b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java
@@ -65,7 +65,7 @@
      * Called when this controller's role for a switch transitions from equal
      * to master. For 1.0 switches, we internally refer to the role 'slave' as
      * 'equal' - so this transition is equivalent to 'addActivatedMasterSwitch'.
-     * @param dpid the dpid to transistion.
+     * @param dpid the dpid to transition.
      */
     void transitionToMasterSwitch(Dpid dpid);
 
@@ -73,7 +73,7 @@
      * Called when this controller's role for a switch transitions to equal.
      * For 1.0 switches, we internally refer to the role 'slave' as
      * 'equal'.
-     * @param dpid the dpid to transistion.
+     * @param dpid the dpid to transition.
      */
     void transitionToEqualSwitch(Dpid dpid);
 
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/ControllerTest.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/ControllerTest.java
index 02f8f29..b3bb8b1 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/ControllerTest.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/ControllerTest.java
@@ -216,7 +216,7 @@
     }
 
     /**
-     * Tests controll utility health methods.
+     * Tests control utility health methods.
      */
     @Test
     public void testHealth() {
diff --git a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/LsdbAge.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/LsdbAge.java
index 35eda52..120bcd5 100644
--- a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/LsdbAge.java
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/LsdbAge.java
@@ -34,7 +34,7 @@
     /**
      * Gets LSA from bin, this method is used while processing ls refresh and max age on LSA.
      *
-     * @param binKey key to retreive the LSA from bin
+     * @param binKey key to retrieve the LSA from bin
      * @return lsaBin bin instance
      */
     public LsaBin getLsaBin(Integer binKey);
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfAreaImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfAreaImpl.java
index 5f42e89..b598d86 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfAreaImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfAreaImpl.java
@@ -273,7 +273,7 @@
         ChecksumCalculator checksum = new ChecksumCalculator();
         byte[] lsaBytes = routerLsa.asBytes();
         routerLsa.setLsPacketLen(lsaBytes.length);
-        //Convert lsa object to byte again to reflect the packet length whic we added.
+        //Convert lsa object to byte again to reflect the packet length which we added.
         lsaBytes = routerLsa.asBytes();
         //find the checksum
         byte[] twoByteChecksum = checksum.calculateLsaChecksum(lsaBytes,
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfNbrImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfNbrImpl.java
index 2786f44..68ff4fc 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfNbrImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfNbrImpl.java
@@ -1051,7 +1051,7 @@
     public boolean processReceivedLsa(LsaHeader recLsa,
                                       boolean receivedViaFlooding, Channel ch, Ip4Address sourceIp)
             throws Exception {
-        log.debug("OSPFNbr::processReceivedLsa(recLsa, recievedViaFlooding, ch)...!!!");
+        log.debug("OSPFNbr::processReceivedLsa(recLsa, receivedViaFlooding, ch)...!!!");
 
         //Validate the lsa checksum RFC 2328 13 (1)
         ChecksumCalculator checkSum = new ChecksumCalculator();
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/TopologyForDeviceAndLinkImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/TopologyForDeviceAndLinkImpl.java
index b187ab5..1aae861 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/TopologyForDeviceAndLinkImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/TopologyForDeviceAndLinkImpl.java
@@ -234,7 +234,7 @@
     /**
      * Gets OSPF Link TED details from the map.
      *
-     * @param key key used to retreive from map
+     * @param key key used to retrieve from map
      * @return OSPF link ted instance
      */
     public OspfLinkTed getOspfLinkTedHashMap(String key) {
diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4InfoBrowser.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4InfoBrowser.java
index 1a39d24..609d2d2 100644
--- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4InfoBrowser.java
+++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4InfoBrowser.java
@@ -237,7 +237,7 @@
      *
      * @param controllerPacketMetadataId controller packet metadata identifier
      * @return metadata browser
-     * @throws NotFoundException controller packet metadata cannot be foudn
+     * @throws NotFoundException controller packet metadata cannot be found
      */
     EntityBrowser<ControllerPacketMetadata.Metadata> packetMetadatas(int controllerPacketMetadataId)
             throws NotFoundException {
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 45ab408..9896968 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
@@ -1337,7 +1337,7 @@
                     log.debug("Received unsupported message type {}", msg.getType().toString());
                 }
             } catch (Exception e) {
-                log.error("Exception occured while processing report message {}", e.getMessage());
+                log.error("Exception occurred while processing report message {}", e.getMessage());
             }
         }
 
diff --git a/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java b/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java
index 061f4dc..281a7b3 100644
--- a/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java
+++ b/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java
@@ -310,7 +310,7 @@
                 log.info("Added device to ONOS core. Device Info: "
                                  + device.deviceInfo() + " " + did.uri().toString());
                 //FIXME this description will be populated only if driver is pushed from outside
-                // becuase otherwise default driver is used
+                // because otherwise default driver is used
                 Device d = deviceService.getDevice(did);
                 if (d.is(DeviceDescriptionDiscovery.class)) {
                     DeviceDescriptionDiscovery descriptionDiscovery = d.as(DeviceDescriptionDiscovery.class);
