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/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);
