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
