diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/Component.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/Component.java
index 9c3e726..b559ee1 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/Component.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/Component.java
@@ -24,7 +24,7 @@
 /**
  * Components which can be managed in a manner equivalent to an 802.1Q bridge.
  *
- * Direct child of the {@link org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation}.
+ * Direct child of the {@link MaintenanceAssociation}.
  */
 public interface Component {
 
@@ -59,7 +59,7 @@
     TagType tagType();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.Component}.
+     * Builder for {@link Component}.
      */
     interface ComponentBuilder {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultComponent.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultComponent.java
index e8f43ae..39b4a6b 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultComponent.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultComponent.java
@@ -22,7 +22,7 @@
 import org.onlab.packet.VlanId;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.cfm.Component}.
+ * The default implementation of {@link Component}.
  */
 public final class DefaultComponent implements Component {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMaintenanceAssociation.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMaintenanceAssociation.java
index 38c3d6f..9da0f21 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMaintenanceAssociation.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMaintenanceAssociation.java
@@ -26,7 +26,7 @@
 import com.google.common.collect.Lists;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation}.
+ * The default implementation of {@link MaintenanceAssociation}.
  */
 public final class DefaultMaintenanceAssociation implements MaintenanceAssociation {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMaintenanceDomain.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMaintenanceDomain.java
index c6e16b0..b073d89 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMaintenanceDomain.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMaintenanceDomain.java
@@ -26,7 +26,7 @@
 import com.google.common.collect.Lists;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceDomain}.
+ * The default implementation of {@link MaintenanceDomain}.
  */
 public final class DefaultMaintenanceDomain implements MaintenanceDomain {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMep.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMep.java
index 72c9769..8e5c4dd 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMep.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMep.java
@@ -26,7 +26,7 @@
 import org.onosproject.net.PortNumber;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.cfm.Mep}.
+ * The default implementation of {@link Mep}.
  */
 public class DefaultMep implements Mep {
 
@@ -334,7 +334,7 @@
     }
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.Mep}.
+     * Builder for {@link Mep}.
      */
     protected static class DefaultMepBuilder implements Mep.MepBuilder {
         protected final MepId mepId;
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepEntry.java
index 1fa255e..edbe643 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepEntry.java
@@ -33,7 +33,7 @@
 import com.google.common.collect.Lists;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.cfm.MepEntry}.
+ * The default implementation of {@link MepEntry}.
  */
 public final class DefaultMepEntry extends DefaultMep implements MepEntry {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLbCreate.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLbCreate.java
index b6eb62a..5bc9e07 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLbCreate.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLbCreate.java
@@ -19,11 +19,10 @@
 
 import org.onlab.packet.MacAddress;
 import org.onlab.util.HexString;
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLbCreate}.
+ * The default implementation of {@link MepLbCreate}.
  */
 public final class DefaultMepLbCreate implements MepLbCreate {
 
@@ -31,7 +30,7 @@
     private final MepId remoteMepId;
     private final Integer numberMessages;
     private final String dataTlvHex;
-    private final Priority vlanPriority;
+    private final Mep.Priority vlanPriority;
     private final Boolean vlanDropEligible;
 
     private DefaultMepLbCreate(DefaultMepLbCreateBuilder builder) {
@@ -64,7 +63,7 @@
     }
 
     @Override
-    public Priority vlanPriority() {
+    public Mep.Priority vlanPriority() {
         return vlanPriority;
     }
 
@@ -86,7 +85,7 @@
         private final MepId remoteMepId;
         private Integer numberMessages;
         private String dataTlvHex;
-        private Priority vlanPriority;
+        private Mep.Priority vlanPriority;
         private Boolean vlanDropEligible;
 
         private DefaultMepLbCreateBuilder(MacAddress remoteMepAddress) {
@@ -126,7 +125,7 @@
         }
 
         @Override
-        public MepLbCreateBuilder vlanPriority(Priority vlanPriority) {
+        public MepLbCreateBuilder vlanPriority(Mep.Priority vlanPriority) {
             this.vlanPriority = vlanPriority;
             return this;
         }
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLbEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLbEntry.java
index 0ebe47b..74604a2 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLbEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLbEntry.java
@@ -16,7 +16,7 @@
 package org.onosproject.incubator.net.l2monitoring.cfm;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLbEntry}.
+ * The default implementation of {@link MepLbEntry}.
  */
 public final class DefaultMepLbEntry implements MepLbEntry {
     private final long nextLbmIdentifier;
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLtCreate.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLtCreate.java
index 790278a..665a015 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLtCreate.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepLtCreate.java
@@ -21,7 +21,7 @@
 import java.util.BitSet;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLtCreate}.
+ * The default implementation of {@link MepLtCreate}.
  */
 public final class DefaultMepLtCreate implements MepLtCreate {
     private final MacAddress remoteMepAddress;
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultRemoteMepEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultRemoteMepEntry.java
index 377ddde..8a83e5e 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultRemoteMepEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultRemoteMepEntry.java
@@ -23,7 +23,7 @@
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.cfm.RemoteMepEntry}.
+ * The default implementation of {@link RemoteMepEntry}.
  */
 public class DefaultRemoteMepEntry implements RemoteMepEntry {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MaintenanceAssociation.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MaintenanceAssociation.java
index 37c1a84..2b205a2 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MaintenanceAssociation.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MaintenanceAssociation.java
@@ -27,7 +27,7 @@
  * A model of the Maintenance Association.
  *
  * See IEEE 802.1Q Section 12.14 CFM entities
- * Direct child of {@link org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceDomain}
+ * Direct child of {@link MaintenanceDomain}
  */
 public interface MaintenanceAssociation extends NetworkResource {
     /**
@@ -105,7 +105,7 @@
     }
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation}.
+     * Builder for {@link MaintenanceAssociation}.
      */
     interface MaBuilder {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MaintenanceDomain.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MaintenanceDomain.java
index f98b76b..da5f89b 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MaintenanceDomain.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MaintenanceDomain.java
@@ -17,9 +17,24 @@
 
 import java.util.Collection;
 
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaId2Octet;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdIccY1731;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdPrimaryVid;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdRfc2685VpnId;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
+import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
+import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate;
+import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry;
+import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatCurrent;
+import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatHistory;
+import org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementCreate;
+import org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementEntry;
+import org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStatCurrent;
+import org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStatHistory;
 import org.onosproject.net.NetworkResource;
 
 /**
@@ -28,37 +43,37 @@
  * See IEEE 802.1Q Section 12.14.5.1.3 CFM entities.<br>
  * This is the root of the L2 Monitoring hierarchy<br>
  * |-Maintenance-Domain*<br>
- *   |-{@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId}
+ *   |-{@link MdId}
  *               (MdIdCharStr or MdIdDomainName or MdIdMacUint or MdIdNone)<br>
- *   |-{@link org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation Maintenance-Association}*<br>
- *     |-{@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort}
- *      ({@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr}
- *      or {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdPrimaryVid}
- *      or {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaId2Octet}
- *      or {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdRfc2685VpnId}
- *      or {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdIccY1731})<br>
- *     |-{@link org.onosproject.incubator.net.l2monitoring.cfm.Component}*<br>
- *     |-{@link org.onosproject.incubator.net.l2monitoring.cfm.Mep}* (Maintenance-Association-EndPoint)
- *     and {@link org.onosproject.incubator.net.l2monitoring.cfm.MepEntry}*<br>
- *     |  |-{@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId}<br>
- *     |  |-{@link org.onosproject.incubator.net.l2monitoring.cfm.MepLbEntry}<br>
- *     |  |-{@link org.onosproject.incubator.net.l2monitoring.cfm.MepLtEntry}<br>
- *     |  |  |-{@link org.onosproject.incubator.net.l2monitoring.cfm.MepLtTransactionEntry}*<br>
- *     |  |     |-{@link org.onosproject.incubator.net.l2monitoring.cfm.MepLtReply}*<br>
- *     |  |        |-{@link org.onosproject.incubator.net.l2monitoring.cfm.SenderIdTlv}<br>
- *     |  |-{@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate} (SOAM)*
- *       and {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry}<br>
- *     |  |  |-{@link org.onosproject.incubator.net.l2monitoring.soam.SoamId DmId}<br>
- *     |  |  |-{@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatCurrent}<br>
- *     |  |  |-{@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatHistory}*<br>
- *     |  |-{@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementCreate} (SOAM)*
- *      and {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementEntry}<br>
- *     |  |  |-{@link org.onosproject.incubator.net.l2monitoring.soam.SoamId LmId}<br>
- *     |  |  |-{@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStatCurrent}<br>
- *     |  |  |-{@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStatHistory}*<br>
- *     |  |-{@link org.onosproject.incubator.net.l2monitoring.cfm.RemoteMepEntry}*<br>
- *     |  |  |-{@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId RemoteMepId}<br>
- *     |-{@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId RemoteMepId}*<br>
+ *   |-{@link MaintenanceAssociation Maintenance-Association}*<br>
+ *     |-{@link MaIdShort}
+ *      ({@link MaIdCharStr}
+ *      or {@link MaIdPrimaryVid}
+ *      or {@link MaId2Octet}
+ *      or {@link MaIdRfc2685VpnId}
+ *      or {@link MaIdIccY1731})<br>
+ *     |-{@link Component}*<br>
+ *     |-{@link Mep}* (Maintenance-Association-EndPoint)
+ *     and {@link MepEntry}*<br>
+ *     |  |-{@link MepId}<br>
+ *     |  |-{@link MepLbEntry}<br>
+ *     |  |-{@link MepLtEntry}<br>
+ *     |  |  |-{@link MepLtTransactionEntry}*<br>
+ *     |  |     |-{@link MepLtReply}*<br>
+ *     |  |        |-{@link SenderIdTlv}<br>
+ *     |  |-{@link DelayMeasurementCreate} (SOAM)*
+ *       and {@link DelayMeasurementEntry}<br>
+ *     |  |  |-{@link SoamId DmId}<br>
+ *     |  |  |-{@link DelayMeasurementStatCurrent}<br>
+ *     |  |  |-{@link DelayMeasurementStatHistory}*<br>
+ *     |  |-{@link LossMeasurementCreate} (SOAM)*
+ *      and {@link LossMeasurementEntry}<br>
+ *     |  |  |-{@link SoamId LmId}<br>
+ *     |  |  |-{@link LossMeasurementStatCurrent}<br>
+ *     |  |  |-{@link LossMeasurementStatHistory}*<br>
+ *     |  |-{@link RemoteMepEntry}*<br>
+ *     |  |  |-{@link MepId RemoteMepId}<br>
+ *     |-{@link MepId RemoteMepId}*<br>
  *<br>
  * *above indicates 0-many can be created
  * -Create suffix means the Object is part of a request
@@ -107,7 +122,7 @@
     }
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceDomain}.
+     * Builder for {@link MaintenanceDomain}.
      */
     interface MdBuilder {
         MdBuilder mdLevel(MdLevel mdLevel);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/Mep.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/Mep.java
index ff06932..a31799f 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/Mep.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/Mep.java
@@ -212,7 +212,7 @@
 
     /**
      * Supported FNG Address Types.
-     * See {@link org.onosproject.incubator.net.l2monitoring.cfm.Mep.FngAddress}
+     * See {@link Mep.FngAddress}
      */
     public enum FngAddressType {
         IPV4,
@@ -235,7 +235,7 @@
 
     /**
      * Options for setting the lowest fault defect.
-     * Each comprises a set of {@link org.onosproject.incubator.net.l2monitoring.cfm.Mep.FaultDefectType}
+     * Each comprises a set of {@link Mep.FaultDefectType}
      */
     public enum LowestFaultDefect {
         ALL_DEFECTS(FaultDefectType.DEF_RDI_CCM,
@@ -344,7 +344,7 @@
     }
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.Mep}.
+     * Builder for {@link Mep}.
      */
     interface MepBuilder {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepEntry.java
index 5259ec6..e1c3846 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepEntry.java
@@ -145,7 +145,7 @@
     }
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.MepEntry}.
+     * Builder for {@link MepEntry}.
      */
     interface MepEntryBuilder extends MepBuilder {
         MepEntryBuilder macAddress(MacAddress macAddress);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLbCreate.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLbCreate.java
index cdb02ca..e167fc9 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLbCreate.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLbCreate.java
@@ -16,7 +16,6 @@
 package org.onosproject.incubator.net.l2monitoring.cfm;
 
 import org.onlab.packet.MacAddress;
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
 
 /**
@@ -54,7 +53,7 @@
      * [802.1q] 12.14.7.3.2:e
      * @return The priority to be used
      */
-    Priority vlanPriority();
+    Mep.Priority vlanPriority();
 
     /**
      * The drop eligible parameter to be used in the transmitted LBMs.
@@ -63,7 +62,7 @@
     Boolean vlanDropEligible();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLbCreate}.
+     * Builder for {@link MepLbCreate}.
      */
     interface MepLbCreateBuilder {
         MepLbCreateBuilder numberMessages(int numberMessages);
@@ -89,7 +88,7 @@
          */
         MepLbCreateBuilder dataTlvB64(String dataTlv);
 
-        MepLbCreateBuilder vlanPriority(Priority vlanPriority);
+        MepLbCreateBuilder vlanPriority(Mep.Priority vlanPriority);
 
         MepLbCreateBuilder vlanDropEligible(boolean vlanDropEligible);
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLbEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLbEntry.java
index fe72023..a1468d9 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLbEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLbEntry.java
@@ -58,7 +58,7 @@
     long countLbrMacMisMatch();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLbEntry}.
+     * Builder for {@link MepLbEntry}.
      */
     interface MepLbEntryBuilder {
         MepLbEntryBuilder nextLbmIdentifier(long nextLbmIdentifier);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtCreate.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtCreate.java
index adf472b..7d39152 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtCreate.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtCreate.java
@@ -53,7 +53,7 @@
 
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLtCreate}.
+     * Builder for {@link MepLtCreate}.
      */
     interface MepLtCreateBuilder {
         MepLtCreateBuilder transmitLtmFlags(BitSet transmitLtmFlags);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtEntry.java
index 310b58a..96b7fc4 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtEntry.java
@@ -49,7 +49,7 @@
     Collection<MepLtTransactionEntry> linktraceDatabase();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLtEntry}.
+     * Builder for {@link MepLtEntry}.
      */
     interface MepLtEntryBuilder {
         MepLtEntryBuilder nextLtmIdentifier(int nextLtmIdentifier);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtReply.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtReply.java
index 4fa0004..4ec43f4 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtReply.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtReply.java
@@ -63,7 +63,7 @@
     LtrReply ltrRelay();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLtReply}.
+     * Builder for {@link MepLtReply}.
      */
     public interface MepLtReplyBuilder {
         MepLtReplyBuilder replyOrder(int replyOrder);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtTransactionEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtTransactionEntry.java
index 82ddfe1..0838183 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtTransactionEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepLtTransactionEntry.java
@@ -69,7 +69,7 @@
     Collection<MepLtReply> ltrReplies();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLtTransactionEntry}.
+     * Builder for {@link MepLtTransactionEntry}.
      */
     interface MepLtEntryBuilder {
         MepLtEntryBuilder macAddress(MacAddress macAddress);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepTsCreate.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepTsCreate.java
index fce75aa..3df59e1 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepTsCreate.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/MepTsCreate.java
@@ -62,7 +62,7 @@
     Optional<TestType> testType();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.MepTsCreate}.
+     * Builder for {@link MepTsCreate}.
      */
     interface MepTsCreateBuilder {
         MepTsCreateBuilder isReceiver(Optional<Boolean> isReceiver);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/RemoteMepEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/RemoteMepEntry.java
index 91d45d8..09ca3f7 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/RemoteMepEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/RemoteMepEntry.java
@@ -73,7 +73,7 @@
     SenderIdTlvType senderIdTlvType();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.cfm.RemoteMepEntry}.
+     * Builder for {@link RemoteMepEntry}.
      */
     public interface RemoteMepEntryBuilder {
         RemoteMepEntryBuilder failedOrOkTime(Duration failedOrOkTime);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/identifier/MaIdShort.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/identifier/MaIdShort.java
index 6e1d6fb..bac5dbd 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/identifier/MaIdShort.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/identifier/MaIdShort.java
@@ -50,23 +50,23 @@
      */
     enum MaIdType {
         /**
-         * Implemented as {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr}.
+         * Implemented as {@link MaIdCharStr}.
          */
         CHARACTERSTRING,
         /**
-         * Implemented as {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaId2Octet}.
+         * Implemented as {@link MaId2Octet}.
          */
         TWOOCTET,
         /**
-         * Implemented as {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdIccY1731}.
+         * Implemented as {@link MaIdIccY1731}.
          */
         ICCY1731,
         /**
-         * Implemented as {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdPrimaryVid}.
+         * Implemented as {@link MaIdPrimaryVid}.
          */
         PRIMARYVID,
         /**
-         * Implemented as {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdRfc2685VpnId}.
+         * Implemented as {@link MaIdRfc2685VpnId}.
          */
         RFC2685VPNID
     }
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/identifier/MdId.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/identifier/MdId.java
index 4d82f51..a94ccbe 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/identifier/MdId.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/identifier/MdId.java
@@ -56,19 +56,19 @@
      */
     enum MdNameType {
         /**
-         * Implemented as {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr}.
+         * Implemented as {@link MdIdCharStr}.
          */
         CHARACTERSTRING,
         /**
-         * Implemented as {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdDomainName}.
+         * Implemented as {@link MdIdDomainName}.
          */
         DOMAINNAME,
         /**
-         * Implemented as {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdMacUint}.
+         * Implemented as {@link MdIdMacUint}.
          */
         MACANDUINT,
         /**
-         * Implemented as {@link org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdNone}.
+         * Implemented as {@link MdIdNone}.
          */
         NONE
     }
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/identifier/MdMaNameUtil.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/identifier/MdMaNameUtil.java
new file mode 100644
index 0000000..661cf15
--- /dev/null
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/identifier/MdMaNameUtil.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.incubator.net.l2monitoring.cfm.identifier;
+
+/**
+ * Utility for generating an MaIdShort or MdId from string.
+ */
+public final class MdMaNameUtil {
+
+    private MdMaNameUtil() {
+        //Singleton
+    }
+
+    /**
+     * Create an MdId from a pair of strings.
+     * @param mdNameType the name type
+     * @param mdName the name
+     * @return an MdId
+     */
+    public static MdId parseMdName(String mdNameType, String mdName) {
+        MdId.MdNameType nameTypeEnum = MdId.MdNameType.valueOf(mdNameType);
+        switch (nameTypeEnum) {
+            case DOMAINNAME:
+                return MdIdDomainName.asMdId(mdName);
+            case MACANDUINT:
+                return MdIdMacUint.asMdId(mdName);
+            case NONE:
+                return MdIdNone.asMdId();
+            case CHARACTERSTRING:
+            default:
+                return MdIdCharStr.asMdId(mdName);
+        }
+    }
+
+    /**
+     * Create an MaIdShort from a pair of strings.
+     * @param maNameType the name type
+     * @param maName the name
+     * @return an MaIdShort
+     */
+    public static MaIdShort parseMaName(String maNameType, String maName) {
+        MaIdShort.MaIdType nameTypeEnum = MaIdShort.MaIdType.valueOf(maNameType);
+        switch (nameTypeEnum) {
+            case ICCY1731:
+                return MaIdIccY1731.asMaId(maName);
+            case PRIMARYVID:
+                return MaIdPrimaryVid.asMaId(maName);
+            case RFC2685VPNID:
+                return MaIdRfc2685VpnId.asMaIdHex(maName);
+            case TWOOCTET:
+                return MaId2Octet.asMaId(maName);
+            case CHARACTERSTRING:
+            default:
+                return MaIdCharStr.asMaId(maName);
+        }
+    }
+}
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepListener.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepListener.java
index 655823f..4b74f01 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepListener.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepListener.java
@@ -18,7 +18,7 @@
 import org.onosproject.event.EventListener;
 
 /**
- * Entity capable of receiving {@link org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMepEvent} events.
+ * Entity capable of receiving {@link CfmMepEvent} events.
  */
 public interface CfmMepListener extends EventListener<CfmMepEvent> {
 }
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepService.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepService.java
index c774c65..33fbf63 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepService.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepService.java
@@ -33,7 +33,7 @@
 public interface CfmMepService
         extends ListenerService<CfmMepEvent, CfmMepListener>, CfmMepServiceBase {
     /**
-     * Retrieve all {@link org.onosproject.incubator.net.l2monitoring.cfm.MepEntry}(s) belonging to an MA.
+     * Retrieve all {@link MepEntry}(s) belonging to an MA.
      * @param mdName A Maintenance Domain
      * @param maName A Maintetance Association in the MD
      * @return A collection of MEP Entries
@@ -43,7 +43,7 @@
             throws CfmConfigException;
 
     /**
-     * Retrieve all {@link org.onosproject.incubator.net.l2monitoring.cfm.Mep}(s) belonging to an MA.
+     * Retrieve all {@link Mep}(s) belonging to an MA.
      * Note: This just returns the configuration part of the Mep, not the MepEntry
      * which contains config and state
      * @param deviceId A device id
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepServiceBase.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepServiceBase.java
index 71e5611..2fdb4cc 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepServiceBase.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/CfmMepServiceBase.java
@@ -19,16 +19,21 @@
 import org.onosproject.incubator.net.l2monitoring.cfm.Mep;
 import org.onosproject.incubator.net.l2monitoring.cfm.MepEntry;
 import org.onosproject.incubator.net.l2monitoring.cfm.MepLbCreate;
+import org.onosproject.incubator.net.l2monitoring.cfm.MepLbEntry;
 import org.onosproject.incubator.net.l2monitoring.cfm.MepLtCreate;
+import org.onosproject.incubator.net.l2monitoring.cfm.MepLtEntry;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
 
 import java.util.Optional;
 
+/**
+ * A common base interface for Mep service.
+ */
 public interface CfmMepServiceBase {
     /**
-     * Retrieve a named {@link org.onosproject.incubator.net.l2monitoring.cfm.MepEntry} belonging to an MA.
+     * Retrieve a named {@link MepEntry} belonging to an MA.
      * @param mdName A Maintenance Domain
      * @param maName A Maintetance Association in the MD
      * @param mepId A Mep Id
@@ -39,7 +44,7 @@
             throws CfmConfigException;
 
     /**
-     * Delete a named {@link org.onosproject.incubator.net.l2monitoring.cfm.Mep} belonging to an MA.
+     * Delete a named {@link Mep} belonging to an MA.
      * @param mdName A Maintenance Domain
      * @param maName A Maintetance Association in the MD
      * @param mepId A Mep Id
@@ -51,7 +56,7 @@
             throws CfmConfigException;
 
     /**
-     * Create a named {@link org.onosproject.incubator.net.l2monitoring.cfm.Mep} on an MA.
+     * Create a named {@link Mep} on an MA.
      * @param mdName A Maintenance Domain
      * @param maName A Maintetance Association in the MD
      * @param mep A Mep object
@@ -62,7 +67,7 @@
             throws CfmConfigException;
 
     /**
-     * Create a {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLbEntry Loopback} session on the named Mep.
+     * Create a {@link MepLbEntry Loopback} session on the named Mep.
      * @param mdName A Maintenance Domain
      * @param maName A Maintetance Association in the MD
      * @param mepId A Mep Id
@@ -73,7 +78,7 @@
                           MepLbCreate lbCreate) throws CfmConfigException;
 
     /**
-     * Abort a {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLbEntry Loopback} session on the named Mep.
+     * Abort a {@link MepLbEntry Loopback} session on the named Mep.
      * @param mdName A Maintenance Domain
      * @param maName A Maintetance Association in the MD
      * @param mepId A Mep Id
@@ -83,7 +88,7 @@
             throws CfmConfigException;
 
     /**
-     * Create a {@link org.onosproject.incubator.net.l2monitoring.cfm.MepLtEntry Linktrace} session on the named Mep.
+     * Create a {@link MepLtEntry Linktrace} session on the named Mep.
      * @param mdName A Maintenance Domain
      * @param maName A Maintetance Association in the MD
      * @param mepId A Mep Id
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/MdStore.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/MdStore.java
index 26a3933..a4c6a90 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/MdStore.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/MdStore.java
@@ -23,7 +23,7 @@
 import java.util.Optional;
 
 /**
- * {@link org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceDomain Maintenance Domain's} storage interface.
+ * {@link MaintenanceDomain Maintenance Domain's} storage interface.
  * Note: because the MaintenanceDomain is immutable if anything needs to be
  * changed in it, then it must be replaced in the store. This includes adding
  * and deleting Maintenance Associations from an MD.
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/MepStore.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/MepStore.java
index ed4bb35..d00c3e1 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/MepStore.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/service/MepStore.java
@@ -26,7 +26,7 @@
 import java.util.Optional;
 
 /**
- * {@link org.onosproject.incubator.net.l2monitoring.cfm.Mep Maintenance Association Endpoint's} storage interface.
+ * {@link Mep Maintenance Association Endpoint's} storage interface.
  * Note: because the Mep is immutable if anything needs to be
  * changed in it, then it must be replaced in the store.
  */
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/DefaultMeasurementCreateBase.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/DefaultMeasurementCreateBase.java
index 62b9e3a..a0c0b83 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/DefaultMeasurementCreateBase.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/DefaultMeasurementCreateBase.java
@@ -27,7 +27,7 @@
 import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.Version;
 
 /**
- * Abstract implementation of {@link org.onosproject.incubator.net.l2monitoring.soam.MeasurementCreateBase}.
+ * Abstract implementation of {@link MeasurementCreateBase}.
  */
 public abstract class DefaultMeasurementCreateBase
         implements MeasurementCreateBase {
@@ -144,7 +144,7 @@
 
     /**
      * Abstract Builder class for  building.
-     * {@link org.onosproject.incubator.net.l2monitoring.soam.MeasurementCreateBase}.
+     * {@link MeasurementCreateBase}.
      */
     protected abstract static class DefaultMeasCreateBaseBuilder implements MeasCreateBaseBuilder {
         protected final Version version;
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/MeasurementCreateBase.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/MeasurementCreateBase.java
index 89428b0..b1debde 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/MeasurementCreateBase.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/MeasurementCreateBase.java
@@ -17,11 +17,9 @@
 
 import java.time.Duration;
 
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.DataPattern;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.TestTlvPattern;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.Version;
+import org.onosproject.incubator.net.l2monitoring.cfm.Mep;
+import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate;
 
 /**
  * A base interface with attributes that are common to both Delay and Loss Measurements.
@@ -32,7 +30,7 @@
      * The exact PDUs to use are specified by this object in combination with measurement-type
      * @return The version of the PDUs
      */
-    Version version();
+    DelayMeasurementCreate.Version version();
 
     /**
      * The remote MEP to perform the tests against.
@@ -52,7 +50,7 @@
      * The priority of frames with Performance Monitoring OAM message information.
      * @return A priority enumerated value 0-7
      */
-    Priority priority();
+    Mep.Priority priority();
 
     /**
      * The Loss Measurement frame size between 64 bytes and the maximum transmission unit of the EVC.
@@ -72,7 +70,7 @@
      * test-tlv-included is 'true' the value of this object is ignored
      * @return The data pattern - ones or zeroes
      */
-    DataPattern dataPattern();
+    DelayMeasurementCreate.DataPattern dataPattern();
 
     /**
      * Whether a Test TLV or Data TLV is included when the size of the LM frame is determined by the frame-size object.
@@ -90,7 +88,7 @@
      * test-tlv-included is 'false' the value of this object is ignored
      * @return A TLV pattern enum
      */
-    TestTlvPattern testTlvPattern();
+    DelayMeasurementCreate.TestTlvPattern testTlvPattern();
 
     /**
      * The Measurement Interval for FLR statistics.
@@ -156,7 +154,7 @@
     SessionType sessionType();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.MeasurementCreateBase}.
+     * Builder for {@link MeasurementCreateBase}.
      */
     public interface MeasCreateBaseBuilder {
         MeasCreateBaseBuilder messagePeriod(
@@ -164,11 +162,11 @@
 
         MeasCreateBaseBuilder frameSize(Short frameSize) throws SoamConfigException;
 
-        MeasCreateBaseBuilder dataPattern(DataPattern dataPattern);
+        MeasCreateBaseBuilder dataPattern(DelayMeasurementCreate.DataPattern dataPattern);
 
         MeasCreateBaseBuilder testTlvIncluded(boolean testTlvIncluded);
 
-        MeasCreateBaseBuilder testTlvPattern(TestTlvPattern testTlvPattern);
+        MeasCreateBaseBuilder testTlvPattern(DelayMeasurementCreate.TestTlvPattern testTlvPattern);
 
         MeasCreateBaseBuilder measurementInterval(
                 Duration measurementInterval) throws SoamConfigException;
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/SoamDmProgrammable.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/SoamDmProgrammable.java
index 77582e9..36aa1c7 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/SoamDmProgrammable.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/SoamDmProgrammable.java
@@ -20,7 +20,7 @@
 /**
  * Behaviour that allows Layer 2 SOAM PM in the form of Delay Measurement to be implemented by devices.
  *
- * Has all of the same methods as {@link org.onosproject.incubator.net.l2monitoring.soam.SoamService},
+ * Has all of the same methods as {@link SoamService},
  * so we don't repeat them here
  */
 public interface SoamDmProgrammable extends HandlerBehaviour, SoamService {
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementCreate.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementCreate.java
index f74ff04..3fe924d 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementCreate.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementCreate.java
@@ -18,13 +18,13 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
 import org.onosproject.incubator.net.l2monitoring.soam.DefaultMeasurementCreateBase;
 import org.onosproject.incubator.net.l2monitoring.soam.SoamConfigException;
+import org.onosproject.incubator.net.l2monitoring.cfm.Mep;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate}.
+ * The default implementation of {@link DelayMeasurementCreate}.
  */
 public class DefaultDelayMeasurementCreate extends DefaultMeasurementCreateBase
                             implements DelayMeasurementCreate {
@@ -84,13 +84,13 @@
     }
 
     public static DmCreateBuilder builder(DmType dmCfgType,
-            Version version, MepId remoteMepId, Priority priority)
+                                          Version version, MepId remoteMepId, Mep.Priority priority)
                     throws SoamConfigException {
         return new DefaultDmCreateBuilder(dmCfgType, version, remoteMepId, priority);
     }
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate}.
+     * Builder for {@link DelayMeasurementCreate}.
      */
     protected static class DefaultDmCreateBuilder extends DefaultMeasCreateBaseBuilder
                     implements DmCreateBuilder {
@@ -104,7 +104,7 @@
         protected Collection<DelayMeasurementThreshold> thresholds;
 
         protected DefaultDmCreateBuilder(DmType dmCfgType, Version version,
-                MepId remoteMepId, Priority priority)
+                MepId remoteMepId, Mep.Priority priority)
                         throws SoamConfigException {
             super(version, remoteMepId, priority);
             this.dmCfgType = dmCfgType;
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementEntry.java
index c53c63b..87f813d 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementEntry.java
@@ -19,15 +19,15 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
 import org.onosproject.incubator.net.l2monitoring.soam.SoamConfigException;
 import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
 
 import com.google.common.collect.Lists;
+import org.onosproject.incubator.net.l2monitoring.cfm.Mep;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry}.
+ * The default implementation of {@link DelayMeasurementEntry}.
  */
 public final class DefaultDelayMeasurementEntry
     extends DefaultDelayMeasurementCreate implements DelayMeasurementEntry {
@@ -112,14 +112,14 @@
     }
 
     public static DmEntryBuilder builder(SoamId dmId, DmType dmCfgType,
-            Version version, MepId remoteMepId, Priority priority)
+            Version version, MepId remoteMepId, Mep.Priority priority)
                     throws SoamConfigException {
         return new DefaultDmEntryBuilder(dmId, dmCfgType, version,
                 remoteMepId, priority);
     }
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry}.
+     * Builder for {@link DelayMeasurementEntry}.
      */
     private static final class DefaultDmEntryBuilder extends DefaultDmCreateBuilder
                                         implements DmEntryBuilder {
@@ -135,7 +135,7 @@
         private Collection<DelayMeasurementStatHistory> historicalResults;
 
         private DefaultDmEntryBuilder(SoamId dmId, DmType dmCfgType,
-                Version version, MepId remoteMepId, Priority priority)
+                Version version, MepId remoteMepId, Mep.Priority priority)
                         throws SoamConfigException {
             super(dmCfgType, version, remoteMepId, priority);
             if (dmId == null) {
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStat.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStat.java
index 01f0bc4..a819388 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStat.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStat.java
@@ -22,7 +22,7 @@
 
 /**
  * Abstract default implementation of DelayMeasurementStat.
- * {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStat}.
+ * {@link DelayMeasurementStat}.
  */
 public abstract class DefaultDelayMeasurementStat implements DelayMeasurementStat {
 
@@ -326,7 +326,7 @@
     }
 
     /**
-     * Abstract builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStat}.
+     * Abstract builder for {@link DelayMeasurementStat}.
      */
     protected abstract static class DefaultDmStatBuilder implements DmStatBuilder {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStatCurrent.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStatCurrent.java
index 7263134..b755e3a 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStatCurrent.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStatCurrent.java
@@ -20,7 +20,7 @@
 
 /**
  * The default implementation of DelayMeasurementStatCurrent.
- * {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatCurrent}.
+ * {@link DelayMeasurementStatCurrent}.
  */
 public final class DefaultDelayMeasurementStatCurrent
     extends DefaultDelayMeasurementStat
@@ -43,7 +43,7 @@
     }
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatCurrent}.
+     * Builder for {@link DelayMeasurementStatCurrent}.
      */
     private static final class DefaultDmStatCurrentBuilder extends DefaultDmStatBuilder
         implements DmStatCurrentBuilder {
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStatHistory.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStatHistory.java
index 4db3683..d735782 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStatHistory.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementStatHistory.java
@@ -22,7 +22,7 @@
 
 /**
  * The default implementation of DelayMeasurementStatHistory.
- * {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatHistory}.
+ * {@link DelayMeasurementStatHistory}.
  */
 public class DefaultDelayMeasurementStatHistory extends DefaultDelayMeasurementStat
         implements DelayMeasurementStatHistory {
@@ -53,7 +53,7 @@
     }
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatHistory}.
+     * Builder for {@link DelayMeasurementStatHistory}.
      */
     private static final class DefaultDmStatHistoryBuilder
         extends DefaultDmStatBuilder implements DmStatHistoryBuilder {
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementThreshold.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementThreshold.java
index 90a8c25..d037dbc 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementThreshold.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DefaultDelayMeasurementThreshold.java
@@ -23,7 +23,7 @@
 
 /**
  * The default implementation of DelayMeasurementThreshold.
- * {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementThreshold}.
+ * {@link DelayMeasurementThreshold}.
  */
 public final class DefaultDelayMeasurementThreshold
         implements DelayMeasurementThreshold {
@@ -230,7 +230,7 @@
     }
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementThreshold}.
+     * Builder for {@link DelayMeasurementThreshold}.
      */
     private static final class DefaultDmThresholdBuilder implements DmThresholdBuilder {
         private final SoamId threshId;
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementCreate.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementCreate.java
index 4934146..39a8969 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementCreate.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementCreate.java
@@ -88,7 +88,7 @@
     Collection<DelayMeasurementThreshold> thresholds();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate}.
+     * Builder for {@link DelayMeasurementCreate}.
      */
     public interface DmCreateBuilder extends MeasCreateBaseBuilder {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementEntry.java
index 3571922..cd9beba 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementEntry.java
@@ -106,7 +106,7 @@
     Collection<DelayMeasurementStatHistory> historicalResults();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry}.
+     * Builder for {@link DelayMeasurementEntry}.
      */
     public interface DmEntryBuilder extends DmCreateBuilder {
         DmEntryBuilder sessionStatus(SessionStatus sessionStatus);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStat.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStat.java
index c218c06..2fadfc1 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStat.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStat.java
@@ -278,7 +278,7 @@
 
     /**
      * Abstract Builder interface for DelayMeasurementStat.
-     * {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStat}.
+     * {@link DelayMeasurementStat}.
      */
     interface DmStatBuilder {
         DmStatBuilder frameDelayTwoWayMin(Duration frameDelayTwoWayMin);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStatCurrent.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStatCurrent.java
index f9bb25f..205a905 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStatCurrent.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStatCurrent.java
@@ -28,7 +28,7 @@
     Instant startTime();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatCurrent}.
+     * Builder for {@link DelayMeasurementStatCurrent}.
      */
     public interface DmStatCurrentBuilder extends DmStatBuilder {
         DmStatCurrentBuilder startTime(Instant startTime);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStatHistory.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStatHistory.java
index c55c66a..4ce8de3 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStatHistory.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementStatHistory.java
@@ -36,7 +36,7 @@
     Instant endTime();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatHistory}.
+     * Builder for {@link DelayMeasurementStatHistory}.
      */
     public interface DmStatHistoryBuilder extends DmStatBuilder {
         DmStatHistoryBuilder endTime(Instant endTime);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementThreshold.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementThreshold.java
index 78ae5d4..a9c7f26 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementThreshold.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementThreshold.java
@@ -186,7 +186,7 @@
     Duration averageFrameDelayRangeBackward();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementThreshold}.
+     * Builder for {@link DelayMeasurementThreshold}.
      */
     public interface DmThresholdBuilder {
         DmThresholdBuilder addToThresholdsEnabled(
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStat.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStat.java
index 0616a55..e85c10b 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStat.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStat.java
@@ -20,7 +20,7 @@
 import org.onosproject.incubator.net.l2monitoring.soam.MilliPct;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossAvailabilityStat}.
+ * The default implementation of {@link LossAvailabilityStat}.
  */
 public abstract class DefaultLaStat implements LossAvailabilityStat {
     private final Duration elapsedTime;
@@ -141,7 +141,7 @@
 
     /**
      * Abstract base class for builders of.
-     * {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossAvailabilityStat}.
+     * {@link LossAvailabilityStat}.
      */
     protected abstract static class DefaultLaStatBuilder implements LaStatBuilder {
         private final Duration elapsedTime;
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStatCurrent.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStatCurrent.java
index 9564ef0..0c7f0f9 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStatCurrent.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStatCurrent.java
@@ -20,7 +20,7 @@
 
 /**
  * The default implementation of LossAvailabilityStatCurrent.
- * {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossAvailabilityStatCurrent}.
+ * {@link LossAvailabilityStatCurrent}.
  */
 public final class DefaultLaStatCurrent extends DefaultLaStat
                         implements LossAvailabilityStatCurrent {
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStatHistory.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStatHistory.java
index 6203bbd..ca3b1b8 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStatHistory.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLaStatHistory.java
@@ -22,7 +22,7 @@
 
 /**
  * The default implementation of LossAvailabilityStatHistory.
- * {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossAvailabilityStatHistory}.
+ * {@link LossAvailabilityStatHistory}.
  */
 public final class DefaultLaStatHistory extends DefaultLaStat
                         implements LossAvailabilityStatHistory {
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmCreate.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmCreate.java
index c735994..600da83 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmCreate.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmCreate.java
@@ -27,7 +27,7 @@
 import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.Version;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementCreate}.
+ * The default implementation of {@link LossMeasurementCreate}.
  */
 public class DefaultLmCreate extends DefaultMeasurementCreateBase
         implements LossMeasurementCreate {
@@ -101,7 +101,7 @@
 
     /**
      * Implementation of LmCreateBuilder.
-     * {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementCreate.LmCreateBuilder}
+     * {@link LossMeasurementCreate.LmCreateBuilder}
      */
     protected static class DefaultLmCreateBuilder extends DefaultMeasCreateBaseBuilder
             implements LmCreateBuilder {
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmEntry.java
index 3e45303..f19f25c 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmEntry.java
@@ -19,15 +19,15 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
 import org.onosproject.incubator.net.l2monitoring.soam.MilliPct;
 import org.onosproject.incubator.net.l2monitoring.soam.SoamConfigException;
 import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.Version;
+import org.onosproject.incubator.net.l2monitoring.cfm.Mep;
+import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementEntry}.
+ * The default implementation of {@link LossMeasurementEntry}.
  */
 public final class DefaultLmEntry extends DefaultLmCreate
         implements LossMeasurementEntry {
@@ -113,8 +113,8 @@
         return availabilityHistories;
     }
 
-    public static LmEntryBuilder builder(Version version, MepId remoteMepId,
-            Priority priority, LmType lmCfgType, SoamId lmId)
+    public static LmEntryBuilder builder(DelayMeasurementCreate.Version version, MepId remoteMepId,
+                                         Mep.Priority priority, LmType lmCfgType, SoamId lmId)
                     throws SoamConfigException {
         return new DefaultLmEntryBuilder(version, remoteMepId,
                 priority, lmCfgType, lmId);
@@ -134,8 +134,8 @@
         private LossAvailabilityStatCurrent availabilityCurrent;
         private Collection<LossAvailabilityStatHistory> availabilityHistories;
 
-        protected DefaultLmEntryBuilder(Version version, MepId remoteMepId,
-                Priority priority, LmType lmCfgType, SoamId lmId)
+        protected DefaultLmEntryBuilder(DelayMeasurementCreate.Version version, MepId remoteMepId,
+                                        Mep.Priority priority, LmType lmCfgType, SoamId lmId)
                 throws SoamConfigException {
             super(version, remoteMepId, priority, lmCfgType);
             this.lmId = lmId;
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStat.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStat.java
index 0410e47..334b403 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStat.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStat.java
@@ -20,7 +20,7 @@
 import org.onosproject.incubator.net.l2monitoring.soam.MilliPct;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStat}.
+ * The default implementation of {@link LossMeasurementStat}.
  */
 public abstract class DefaultLmStat implements LossMeasurementStat {
     private final Duration elapsedTime;
@@ -127,7 +127,7 @@
 
     /**
      * Abstract implementation of LmStatBuilder.
-     * {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStat.LmStatBuilder}
+     * {@link LossMeasurementStat.LmStatBuilder}
      */
     protected abstract static class DefaultLmStatBuilder implements LmStatBuilder {
         private final Duration elapsedTime;
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStatCurrent.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStatCurrent.java
index 1920845..2eb8a0e 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStatCurrent.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStatCurrent.java
@@ -20,7 +20,7 @@
 
 /**
  * The default implementation of LossMeasurementStatCurrent.
- * {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStatCurrent}
+ * {@link LossMeasurementStatCurrent}
  */
 public final class DefaultLmStatCurrent extends DefaultLmStat
         implements LossMeasurementStatCurrent {
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStatHistory.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStatHistory.java
index 1109e92..4feccb8 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStatHistory.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmStatHistory.java
@@ -22,7 +22,7 @@
 
 /**
  * The default implementation of LossMeasurementStatHistory.
- * {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStatHistory}
+ * {@link LossMeasurementStatHistory}
  */
 public final class DefaultLmStatHistory extends DefaultLmStat
         implements LossMeasurementStatHistory {
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmThreshold.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmThreshold.java
index 0487516..cd38c2e 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmThreshold.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/DefaultLmThreshold.java
@@ -22,7 +22,7 @@
 import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
 
 /**
- * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementThreshold}.
+ * The default implementation of {@link LossMeasurementThreshold}.
  */
 public final class DefaultLmThreshold implements LossMeasurementThreshold {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStat.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStat.java
index 09b6e0e..85f155d 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStat.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStat.java
@@ -170,7 +170,7 @@
 
     /**
      * Abstract builder for classes derived from LossAvailabilityStat.
-     * {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossAvailabilityStat}.
+     * {@link LossAvailabilityStat}.
      */
     public interface LaStatBuilder {
         LaStatBuilder forwardHighLoss(Long forwardHighLoss);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStatCurrent.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStatCurrent.java
index 9c1465a..ea80afc 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStatCurrent.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStatCurrent.java
@@ -19,7 +19,7 @@
 
 /**
  * Object for representing Loss Availability Stats Current.
- * Extends {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossAvailabilityStat}
+ * Extends {@link LossAvailabilityStat}
  */
 public interface LossAvailabilityStatCurrent extends LossAvailabilityStat {
     /**
@@ -29,7 +29,7 @@
     Instant startTime();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossAvailabilityStatCurrent}.
+     * Builder for {@link LossAvailabilityStatCurrent}.
      */
     public interface LaStatCurrentBuilder extends LaStatBuilder {
         LossAvailabilityStatCurrent build();
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStatHistory.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStatHistory.java
index 49beef5..47b4462 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStatHistory.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossAvailabilityStatHistory.java
@@ -21,7 +21,7 @@
 
 /**
  * Object for representing Loss Availability Stats History.
- * Extends {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossAvailabilityStat}
+ * Extends {@link LossAvailabilityStat}
  */
 public interface LossAvailabilityStatHistory extends LossAvailabilityStat {
     /**
@@ -37,7 +37,7 @@
     Instant endTime();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossAvailabilityStatHistory}.
+     * Builder for {@link LossAvailabilityStatHistory}.
      */
     public interface LaStatHistoryBuilder extends LaStatBuilder {
         LossAvailabilityStatHistory build();
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementCreate.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementCreate.java
index 032a4bb..ff6328b 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementCreate.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementCreate.java
@@ -125,7 +125,7 @@
     Collection<LossMeasurementThreshold> lossMeasurementThreshold();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementCreate}.
+     * Builder for {@link LossMeasurementCreate}.
      */
     public interface LmCreateBuilder extends MeasCreateBaseBuilder {
 
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementEntry.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementEntry.java
index fb0cecb..99a3a95 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementEntry.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementEntry.java
@@ -113,7 +113,7 @@
     Collection<LossAvailabilityStatHistory> availabilityHistories();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementEntry}.
+     * Builder for {@link LossMeasurementEntry}.
      */
     public interface LmEntryBuilder extends LmCreateBuilder {
         LmEntryBuilder measuredForwardFlr(MilliPct measuredForwardFlr);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStat.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStat.java
index f61aab5..2beef59 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStat.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStat.java
@@ -21,8 +21,8 @@
 
 /**
  * Abstract base interface for the creation of Loss Measurement Stat.
- * This is the base for {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStatHistory}
- * and {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStatCurrent}
+ * This is the base for {@link LossMeasurementStatHistory}
+ * and {@link LossMeasurementStatCurrent}
  */
 public interface LossMeasurementStat {
     /**
@@ -142,7 +142,7 @@
     Long soamPdusReceived();
 
     /**
-     * Base interface for builders of {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStat}.
+     * Base interface for builders of {@link LossMeasurementStat}.
      */
     interface LmStatBuilder {
         LmStatBuilder forwardTransmittedFrames(Long forwardTransmittedFrames);
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStatCurrent.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStatCurrent.java
index c5b2423..8f7addd 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStatCurrent.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStatCurrent.java
@@ -19,7 +19,7 @@
 
 /**
  * Object for representing Loss Availability Stats Current.
- * Extends {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStat}
+ * Extends {@link LossMeasurementStat}
  */
 public interface LossMeasurementStatCurrent extends LossMeasurementStat {
     /**
@@ -29,7 +29,7 @@
     Instant startTime();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStatCurrent}.
+     * Builder for {@link LossMeasurementStatCurrent}.
      */
     public interface LmStatCurrentBuilder extends LmStatBuilder {
         LossMeasurementStatCurrent build();
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStatHistory.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStatHistory.java
index 90c7a5f..9387c89 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStatHistory.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementStatHistory.java
@@ -21,7 +21,7 @@
 
 /**
  * Object for representing Loss Measurement Stats History.
- * Extends {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStat}
+ * Extends {@link LossMeasurementStat}
  */
 public interface LossMeasurementStatHistory extends LossMeasurementStat {
     /**
@@ -37,7 +37,7 @@
     Instant endTime();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStatHistory}.
+     * Builder for {@link LossMeasurementStatHistory}.
      */
     public interface LmStatHistoryBuilder extends LmStatBuilder {
         LossMeasurementStatHistory build();
diff --git a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementThreshold.java b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementThreshold.java
index 1624204..491d69d 100644
--- a/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementThreshold.java
+++ b/apps/cfm/api/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementThreshold.java
@@ -150,7 +150,7 @@
     MilliPct backwardAvailableRatio();
 
     /**
-     * Builder for {@link org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementThreshold}.
+     * Builder for {@link LossMeasurementThreshold}.
      */
     public interface LmThresholdBuilder {
 
