diff --git a/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java b/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
index 4093f2d..e7acf66 100644
--- a/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
+++ b/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
@@ -109,7 +109,7 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected PacketService packetService;
 
-    private DHCPPacketProcessor processor = new DHCPPacketProcessor();
+    private DhcpPacketProcessor processor = new DhcpPacketProcessor();
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected CoreService coreService;
@@ -259,7 +259,7 @@
         return dhcpStore.getAvailableIPs();
     }
 
-    private class DHCPPacketProcessor implements PacketProcessor {
+    private class DhcpPacketProcessor implements PacketProcessor {
 
         /**
          * Builds the DHCP Reply packet.
@@ -437,7 +437,7 @@
          * @param context context of the incoming message
          * @param dhcpPayload the extracted DHCP payload
          */
-        private void processDHCPPacket(PacketContext context, DHCP dhcpPayload) {
+        private void processDhcpPacket(PacketContext context, DHCP dhcpPayload) {
             Ethernet packet = context.inPacket().parsed();
             boolean flagIfRequestedIP = false;
             boolean flagIfServerIP = false;
@@ -464,9 +464,9 @@
                     }
                 }
                 DHCPPacketType outgoingPacketType;
-                MacAddress clientMAC = new MacAddress(dhcpPayload.getClientHardwareAddress());
+                MacAddress clientMac = new MacAddress(dhcpPayload.getClientHardwareAddress());
                 VlanId vlanId = VlanId.vlanId(packet.getVlanID());
-                HostId hostId = HostId.hostId(clientMAC, vlanId);
+                HostId hostId = HostId.hostId(clientMac, vlanId);
 
                 if (incomingPacketType.getValue() == DHCPPacketType.DHCPDISCOVER.getValue()) {
 
@@ -484,7 +484,7 @@
                     if (flagIfServerIP && flagIfRequestedIP) {
                         // SELECTING state
 
-                        if (dhcpStore.getIpAssignmentFromAllocationMap(HostId.hostId(clientMAC))
+                        if (dhcpStore.getIpAssignmentFromAllocationMap(HostId.hostId(clientMac))
                                 .fromOpenStack()) {
                             outgoingPacketType = DHCPPacketType.DHCPACK;
                             Ethernet ethReply = buildReply(packet, requestedIP, (byte) outgoingPacketType.getValue());
@@ -544,7 +544,7 @@
          * @param context context of the incoming message
          * @param packet the ethernet payload
          */
-        private void processARPPacket(PacketContext context, Ethernet packet) {
+        private void processArpPacket(PacketContext context, Ethernet packet) {
 
             ARP arpPacket = (ARP) packet.getPayload();
 
@@ -605,7 +605,7 @@
                         // This is meant for the dhcp server so process the packet here.
 
                         DHCP dhcpPayload = (DHCP) udpPacket.getPayload();
-                        processDHCPPacket(context, dhcpPayload);
+                        processDhcpPacket(context, dhcpPayload);
                     }
                 }
             } else if (packet.getEtherType() == Ethernet.TYPE_ARP) {
@@ -614,7 +614,7 @@
                 if ((arpPacket.getOpCode() == ARP.OP_REQUEST) &&
                         Objects.equals(myIP, Ip4Address.valueOf(arpPacket.getTargetProtocolAddress()))) {
 
-                    processARPPacket(context, packet);
+                    processArpPacket(context, packet);
 
                 }
             }
@@ -727,4 +727,4 @@
             timeout = Timer.getTimer().newTimeout(new PurgeListTask(), timerDelay, TimeUnit.MINUTES);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DHCPWebResource.java b/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DhcpWebResource.java
similarity index 98%
rename from apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DHCPWebResource.java
rename to apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DhcpWebResource.java
index 7a078df..1d4174b 100644
--- a/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DHCPWebResource.java
+++ b/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DhcpWebResource.java
@@ -42,7 +42,7 @@
  * Manage DHCP address assignments.
  */
 @Path("dhcp")
-public class DHCPWebResource extends AbstractWebResource {
+public class DhcpWebResource extends AbstractWebResource {
 
     final DhcpService service = get(DhcpService.class);
 
diff --git a/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml b/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml
index 2750454..a53110e 100644
--- a/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml
+++ b/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml
@@ -30,7 +30,7 @@
         <init-param>
             <param-name>com.sun.jersey.config.property.classnames</param-name>
             <param-value>
-                org.onosproject.dhcp.rest.DHCPWebResource
+                org.onosproject.dhcp.rest.DhcpWebResource
             </param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
diff --git a/apps/dhcp/app/src/test/java/org/onosproject/dhcp/impl/DhcpManagerTest.java b/apps/dhcp/app/src/test/java/org/onosproject/dhcp/impl/DhcpManagerTest.java
index bb6b74c..e9b0260 100644
--- a/apps/dhcp/app/src/test/java/org/onosproject/dhcp/impl/DhcpManagerTest.java
+++ b/apps/dhcp/app/src/test/java/org/onosproject/dhcp/impl/DhcpManagerTest.java
@@ -106,7 +106,7 @@
      */
     @Test
     public void testDiscover() {
-        Ethernet reply = constructDHCPPacket(DHCPPacketType.DHCPDISCOVER);
+        Ethernet reply = constructDhcpPacket(DHCPPacketType.DHCPDISCOVER);
         sendPacket(reply);
     }
 
@@ -115,7 +115,7 @@
      */
     @Test
     public void testRequest() {
-        Ethernet reply = constructDHCPPacket(DHCPPacketType.DHCPREQUEST);
+        Ethernet reply = constructDhcpPacket(DHCPPacketType.DHCPREQUEST);
         sendPacket(reply);
     }
 
@@ -138,7 +138,7 @@
      * @param packetType DHCP Message Type
      * @return Ethernet packet
      */
-    private Ethernet constructDHCPPacket(DHCPPacketType packetType) {
+    private Ethernet constructDhcpPacket(DHCPPacketType packetType) {
 
         // Ethernet Frame.
         Ethernet ethReply = new Ethernet();
diff --git a/apps/openstackswitching/src/main/java/org/onosproject/openstackswitching/OpenstackSwitchingRulePopulator.java b/apps/openstackswitching/src/main/java/org/onosproject/openstackswitching/OpenstackSwitchingRulePopulator.java
index 661a873..f6e9806 100644
--- a/apps/openstackswitching/src/main/java/org/onosproject/openstackswitching/OpenstackSwitchingRulePopulator.java
+++ b/apps/openstackswitching/src/main/java/org/onosproject/openstackswitching/OpenstackSwitchingRulePopulator.java
@@ -120,7 +120,7 @@
      *
      * @param id device ID to set the rules
      */
-    private void setFlowRuleForDHCP(DeviceId id) {
+    private void setFlowRuleForDhcp(DeviceId id) {
         TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder();
         TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
 
diff --git a/drivers/src/main/java/org/onosproject/driver/pipeline/PicaPipeline.java b/drivers/src/main/java/org/onosproject/driver/pipeline/PicaPipeline.java
index 32d6b10..69d2083 100644
--- a/drivers/src/main/java/org/onosproject/driver/pipeline/PicaPipeline.java
+++ b/drivers/src/main/java/org/onosproject/driver/pipeline/PicaPipeline.java
@@ -462,10 +462,10 @@
 
     private void initializePipeline() {
         //processIpUnicastTable(true);
-        processACLTable(true);
+        processAclTable(true);
     }
 
-    private void processACLTable(boolean install) {
+    private void processAclTable(boolean install) {
         TrafficSelector.Builder selector;
         TrafficTreatment.Builder treatment;
         FlowRuleOperations.Builder ops = FlowRuleOperations.builder();
diff --git a/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java b/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java
index d9848be..56b3a99 100644
--- a/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java
+++ b/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java
@@ -94,12 +94,12 @@
     protected String tsLocation;
     protected char[] ksPwd;
     protected char[] tsPwd;
-    protected SSLEngine serverSSLEngine;
+    protected SSLEngine serverSslEngine;
 
     // Perf. related configuration
     protected static final int SEND_BUFFER_SIZE = 4 * 1024 * 1024;
     private DriverService driverService;
-    private boolean enableOFTLS = TLS_DISABLED;
+    private boolean enableOfTls = TLS_DISABLED;
 
     // ***************
     // Getters/Setters
@@ -132,7 +132,7 @@
             bootstrap.setOption("child.sendBufferSize", Controller.SEND_BUFFER_SIZE);
 
             ChannelPipelineFactory pfact =
-                    new OpenflowPipelineFactory(this, null, serverSSLEngine);
+                    new OpenflowPipelineFactory(this, null, serverSslEngine);
             bootstrap.setPipelineFactory(pfact);
             cg = new DefaultChannelGroup();
             openFlowPorts.forEach(port -> {
@@ -189,9 +189,9 @@
         this.systemStartTime = System.currentTimeMillis();
 
         try {
-            getTLSParameters();
-            if (enableOFTLS) {
-                initSSL();
+            getTlsParameters();
+            if (enableOfTls) {
+                initSsl();
             }
         } catch (Exception ex) {
             log.error("SSL init failed: {}", ex.getMessage());
@@ -199,35 +199,35 @@
 
     }
 
-    private void getTLSParameters() {
+    private void getTlsParameters() {
         String tempString = System.getProperty("enableOFTLS");
-        enableOFTLS = Strings.isNullOrEmpty(tempString) ? TLS_DISABLED : Boolean.parseBoolean(tempString);
-        log.info("OpenFlow Security is {}", enableOFTLS ? "enabled" : "disabled");
-        if (enableOFTLS) {
+        enableOfTls = Strings.isNullOrEmpty(tempString) ? TLS_DISABLED : Boolean.parseBoolean(tempString);
+        log.info("OpenFlow Security is {}", enableOfTls ? "enabled" : "disabled");
+        if (enableOfTls) {
             ksLocation = System.getProperty("javax.net.ssl.keyStore");
             if (Strings.isNullOrEmpty(ksLocation)) {
-                enableOFTLS = TLS_DISABLED;
+                enableOfTls = TLS_DISABLED;
                 return;
             }
             tsLocation = System.getProperty("javax.net.ssl.trustStore");
             if (Strings.isNullOrEmpty(tsLocation)) {
-                enableOFTLS = TLS_DISABLED;
+                enableOfTls = TLS_DISABLED;
                 return;
             }
             ksPwd = System.getProperty("javax.net.ssl.keyStorePassword").toCharArray();
             if (MIN_KS_LENGTH > ksPwd.length) {
-                enableOFTLS = TLS_DISABLED;
+                enableOfTls = TLS_DISABLED;
                 return;
             }
             tsPwd = System.getProperty("javax.net.ssl.trustStorePassword").toCharArray();
             if (MIN_KS_LENGTH > tsPwd.length) {
-                enableOFTLS = TLS_DISABLED;
+                enableOfTls = TLS_DISABLED;
                 return;
             }
         }
     }
 
-    private void initSSL() throws Exception {
+    private void initSsl() throws Exception {
 
         TrustManagerFactory tmFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
         KeyStore ts = KeyStore.getInstance("JKS");
@@ -242,13 +242,13 @@
         SSLContext serverContext = SSLContext.getInstance("TLS");
         serverContext.init(kmf.getKeyManagers(), tmFactory.getTrustManagers(), null);
 
-        serverSSLEngine = serverContext.createSSLEngine();
+        serverSslEngine = serverContext.createSSLEngine();
 
-        serverSSLEngine.setNeedClientAuth(true);
-        serverSSLEngine.setUseClientMode(false);
-        serverSSLEngine.setEnabledProtocols(serverSSLEngine.getSupportedProtocols());
-        serverSSLEngine.setEnabledCipherSuites(serverSSLEngine.getSupportedCipherSuites());
-        serverSSLEngine.setEnableSessionCreation(true);
+        serverSslEngine.setNeedClientAuth(true);
+        serverSslEngine.setUseClientMode(false);
+        serverSslEngine.setEnabledProtocols(serverSslEngine.getSupportedProtocols());
+        serverSslEngine.setEnabledCipherSuites(serverSslEngine.getSupportedCipherSuites());
+        serverSslEngine.setEnableSessionCreation(true);
     }
 
     // **************
diff --git a/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/ControllerTest.java b/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/ControllerTest.java
index 3ff3bde..dddea32 100644
--- a/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/ControllerTest.java
+++ b/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/ControllerTest.java
@@ -191,7 +191,7 @@
         controller.setConfigParams(properties);
         controller.start(null, new MockDriverService());
 
-        assertThat(controller.serverSSLEngine, notNullValue());
+        assertThat(controller.serverSslEngine, notNullValue());
 
         controller.stop();
         boolean removed = keystore.delete();
diff --git a/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java b/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
index 6cbb623..4e41c10 100644
--- a/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
+++ b/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
@@ -196,16 +196,16 @@
         providerService.clear();
 
         // new host
-        testProcessor.process(new TestNAPacketContext(DEV4));
+        testProcessor.process(new TestNaPacketContext(DEV4));
         assertNotNull("new host expected", providerService.added);
         assertNull("host motion unexpected", providerService.moved);
 
         // the host moved to new switch
-        testProcessor.process(new TestNAPacketContext(DEV5));
+        testProcessor.process(new TestNaPacketContext(DEV5));
         assertNotNull("host motion expected", providerService.moved);
 
         // the host was misheard on a spine
-        testProcessor.process(new TestNAPacketContext(DEV6));
+        testProcessor.process(new TestNaPacketContext(DEV6));
         assertNull("host misheard on spine switch", providerService.spine);
     }
 
@@ -213,7 +213,7 @@
     public void removeHostByDeviceRemove() {
         provider.modified(CTX_FOR_REMOVE);
         testProcessor.process(new TestArpPacketContext(DEV1));
-        testProcessor.process(new TestNAPacketContext(DEV4));
+        testProcessor.process(new TestNaPacketContext(DEV4));
 
         Device device = new DefaultDevice(ProviderId.NONE, deviceId(DEV1), SWITCH,
                                           "m", "h", "s", "n", new ChassisId(0L));
@@ -292,8 +292,8 @@
      * When receiving NeighborAdvertisement, updates location and IP.
      */
     @Test
-    public void testReceiveNA() {
-        testProcessor.process(new TestNAPacketContext(DEV4));
+    public void testReceiveNa() {
+        testProcessor.process(new TestNaPacketContext(DEV4));
         assertNotNull(providerService.added);
         HostDescription descr = providerService.added;
         assertThat(descr.location(), is(LOCATION2));
@@ -306,8 +306,8 @@
      * When receiving NeighborSolicitation, updates location and IP.
      */
     @Test
-    public void testReceiveNS() {
-        testProcessor.process(new TestNSPacketContext(DEV4));
+    public void testReceiveNs() {
+        testProcessor.process(new TestNsPacketContext(DEV4));
         HostDescription descr = providerService.added;
         assertThat(descr.location(), is(LOCATION2));
         assertThat(descr.hwAddress(), is(MAC2));
@@ -319,7 +319,7 @@
      * When receiving RouterAdvertisement, ignores it.
      */
     @Test
-    public void testReceivesRA() {
+    public void testReceivesRa() {
         testProcessor.process(new TestRAPacketContext(DEV4));
         assertNull(providerService.added);
     }
@@ -328,7 +328,7 @@
      * When receiving RouterSolicitation, ignores it.
      */
     @Test
-    public void testReceiveRS() {
+    public void testReceiveRs() {
         testProcessor.process(new TestRSPacketContext(DEV4));
         assertNull(providerService.added);
     }
@@ -337,8 +337,8 @@
      * When receiving Duplicate Address Detection (DAD), ignores it.
      */
     @Test
-    public void testReceiveDAD() {
-        testProcessor.process(new TestDADPacketContext(DEV4));
+    public void testReceiveDad() {
+        testProcessor.process(new TestDadPacketContext(DEV4));
         assertNull(providerService.added);
     }
 
@@ -575,10 +575,10 @@
     /**
      * Generates NeighborAdvertisement packet.
      */
-    private class TestNAPacketContext implements PacketContext {
+    private class TestNaPacketContext implements PacketContext {
         private final String deviceId;
 
-        public TestNAPacketContext(String deviceId) {
+        public TestNaPacketContext(String deviceId) {
             this.deviceId = deviceId;
         }
 
@@ -637,10 +637,10 @@
     /**
      * Generates NeighborSolicitation packet.
      */
-    private class TestNSPacketContext implements PacketContext {
+    private class TestNsPacketContext implements PacketContext {
         private final String deviceId;
 
-        public TestNSPacketContext(String deviceId) {
+        public TestNsPacketContext(String deviceId) {
             this.deviceId = deviceId;
         }
 
@@ -699,10 +699,10 @@
     /**
      * Generates Duplicate Address Detection packet.
      */
-    private class TestDADPacketContext implements PacketContext {
+    private class TestDadPacketContext implements PacketContext {
         private final String deviceId;
 
-        public TestDADPacketContext(String deviceId) {
+        public TestDadPacketContext(String deviceId) {
             this.deviceId = deviceId;
         }
 
diff --git a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java
index 0cd1924..a9da92a 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java
@@ -58,7 +58,7 @@
      *
      * @return true to emit BDDP
      */
-    boolean useBDDP();
+    boolean useBddp();
 
     /**
      * Touches the link identified by the given key to indicate that it's active.
diff --git a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
index 7dc9aed..4b962ae 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
@@ -155,7 +155,7 @@
      * @param packetContext packet context
      * @return true if handled
      */
-    boolean handleLLDP(PacketContext packetContext) {
+    boolean handleLldp(PacketContext packetContext) {
         Ethernet eth = packetContext.inPacket().parsed();
         if (eth == null) {
             return false;
@@ -216,7 +216,7 @@
      * @param port the port
      * @return Packet_out message with LLDP data
      */
-    private OutboundPacket createOutBoundLLDP(Long port) {
+    private OutboundPacket createOutBoundLldp(Long port) {
         if (port == null) {
             return null;
         }
@@ -233,7 +233,7 @@
      * @param port the port
      * @return Packet_out message with LLDP data
      */
-    private OutboundPacket createOutBoundBDDP(Long port) {
+    private OutboundPacket createOutBoundBddp(Long port) {
         if (port == null) {
             return null;
         }
@@ -246,10 +246,10 @@
 
     private void sendProbes(Long portNumber) {
         log.trace("Sending probes out to {}@{}", portNumber, device.id());
-        OutboundPacket pkt = createOutBoundLLDP(portNumber);
+        OutboundPacket pkt = createOutBoundLldp(portNumber);
         context.packetService().emit(pkt);
-        if (context.useBDDP()) {
-            OutboundPacket bpkt = createOutBoundBDDP(portNumber);
+        if (context.useBddp()) {
+            OutboundPacket bpkt = createOutBoundBddp(portNumber);
             context.packetService().emit(bpkt);
         }
     }
diff --git a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java
similarity index 98%
rename from providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
rename to providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java
index 9844203..c923f78 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java
@@ -81,7 +81,7 @@
  * Provider which uses LLDP and BDDP packets to detect network infrastructure links.
  */
 @Component(immediate = true)
-public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
+public class LldpLinkProvider extends AbstractProvider implements LinkProvider {
 
     private static final String PROVIDER_NAME = "org.onosproject.provider.lldp";
 
@@ -138,7 +138,7 @@
     private static final String PROP_USE_BDDP = "useBDDP";
     @Property(name = PROP_USE_BDDP, boolValue = true,
             label = "Use BDDP for link discovery")
-    private boolean useBDDP = true;
+    private boolean useBddp = true;
 
     private static final String PROP_PROBE_RATE = "probeRate";
     private static final int DEFAULT_PROBE_RATE = 3_000;
@@ -177,7 +177,7 @@
     /**
      * Creates an OpenFlow link provider.
      */
-    public LLDPLinkProvider() {
+    public LldpLinkProvider() {
         super(new ProviderId("lldp", PROVIDER_NAME));
     }
 
@@ -222,7 +222,7 @@
         } catch (NumberFormatException e) {
             log.warn("Component configuration had invalid values", e);
             newEnabled = enabled;
-            newUseBddp = useBDDP;
+            newUseBddp = useBddp;
             newProbeRate = probeRate;
             newStaleLinkAge = staleLinkAge;
             newLldpSuppression = lldpSuppression;
@@ -231,7 +231,7 @@
         boolean wasEnabled = enabled;
 
         enabled = newEnabled;
-        useBDDP = newUseBddp;
+        useBddp = newUseBddp;
         probeRate = newProbeRate;
         staleLinkAge = newStaleLinkAge;
         lldpSuppression = newLldpSuppression;
@@ -250,7 +250,7 @@
             }
         }
 
-        log.info(FORMAT, enabled, useBDDP, probeRate, staleLinkAge, lldpSuppression);
+        log.info(FORMAT, enabled, useBddp, probeRate, staleLinkAge, lldpSuppression);
     }
 
     /**
@@ -418,7 +418,7 @@
         packetService.requestPackets(selector.build(), PacketPriority.CONTROL, appId);
 
         selector.matchEthType(TYPE_BSN);
-        if (useBDDP) {
+        if (useBddp) {
             packetService.requestPackets(selector.build(), PacketPriority.CONTROL, appId);
         } else {
             packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
@@ -534,7 +534,7 @@
                 return;
             }
 
-            if (ld.handleLLDP(context)) {
+            if (ld.handleLldp(context)) {
                 context.block();
             }
         }
@@ -624,8 +624,8 @@
         }
 
         @Override
-        public boolean useBDDP() {
-            return useBDDP;
+        public boolean useBddp() {
+            return useBddp;
         }
 
         @Override
diff --git a/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java b/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LldpLinkProviderTest.java
similarity index 98%
rename from providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java
rename to providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LldpLinkProviderTest.java
index 6070b85..e775a27 100644
--- a/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java
+++ b/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LldpLinkProviderTest.java
@@ -72,7 +72,7 @@
 import static org.easymock.EasyMock.*;
 import static org.junit.Assert.*;
 
-public class LLDPLinkProviderTest {
+public class LldpLinkProviderTest {
 
     private static final DeviceId DID1 = DeviceId.deviceId("of:0000000000000001");
     private static final DeviceId DID2 = DeviceId.deviceId("of:0000000000000002");
@@ -83,7 +83,7 @@
     private static Port pd3;
     private static Port pd4;
 
-    private final LLDPLinkProvider provider = new LLDPLinkProvider();
+    private final LldpLinkProvider provider = new LldpLinkProvider();
     private final TestLinkRegistry linkRegistry = new TestLinkRegistry();
     private final TestLinkService linkService = new TestLinkService();
     private final TestPacketService packetService = new TestPacketService();
@@ -159,7 +159,7 @@
 
         // update device in stub DeviceService with suppression config
         deviceService.putDevice(device(DID3, DefaultAnnotations.builder()
-                                              .set(LLDPLinkProvider.NO_LLDP, "true")
+                                              .set(LldpLinkProvider.NO_LLDP, "true")
                                               .build()));
         deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_UPDATED, DID3));
 
@@ -207,7 +207,7 @@
 
         // add device in stub DeviceService with suppression configured
         deviceService.putDevice(device(DID3, DefaultAnnotations.builder()
-                                              .set(LLDPLinkProvider.NO_LLDP, "true")
+                                              .set(LldpLinkProvider.NO_LLDP, "true")
                                               .build()));
         deviceListener.event(deviceEvent(DeviceEvent.Type.DEVICE_ADDED, DID3));
 
@@ -249,7 +249,7 @@
         final long portno3 = 3L;
         final Port port3 = port(DID3, portno3, true,
                                           DefaultAnnotations.builder()
-                                          .set(LLDPLinkProvider.NO_LLDP, "true")
+                                          .set(LldpLinkProvider.NO_LLDP, "true")
                                           .build());
         deviceService.putPorts(DID3, port3);
         deviceListener.event(portEvent(DeviceEvent.Type.PORT_ADDED, DID3, port3));
