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 {
 
