diff --git a/apps/cfm/README.md b/apps/cfm/README.md
deleted file mode 100644
index c2c27fa..0000000
--- a/apps/cfm/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Layer 2 Monitoring with CFM and SOAM in ONOS
-Please see the README.md file in the API at
-incubator/api/src/main/java/org/onosproject/incubator/net/l2monitoring/README.md
\ No newline at end of file
diff --git a/apps/cfm/api/README.md b/apps/cfm/api/README.md
index 6123509..1f23f54 100644
--- a/apps/cfm/api/README.md
+++ b/apps/cfm/api/README.md
@@ -44,8 +44,8 @@
 ONOS as a new structure under reusing common ONOS classes such as DeviceId, 
 PortNumber, NetworkResource, Identifier, MacAddress etc. 
 
-* onos/incubator/src/main/java/org/onosproject/api/net/l2monitoring/cfm
-* onos/incubator/src/main/java/org/onosproject/api/net/l2monitoring/soam
+* onos/apps/cfm/api/src/main/java/org/onosproject/l2monitoring/cfm
+* onos/apps/cfm/api/src/main/java/org/onosproject/l2monitoring/soam
 
 ## Java Model
 These immutable objects are defined as Java POJOs with little dependencies on 
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 {
 
diff --git a/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementEntryTest.java b/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementEntryTest.java
index ad2439a..3e3cd11 100644
--- a/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementEntryTest.java
+++ b/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementEntryTest.java
@@ -15,8 +15,6 @@
  */
 package org.onosproject.incubator.net.l2monitoring.soam.delay;
 
-import static org.junit.Assert.*;
-
 import java.time.Duration;
 
 import org.junit.Before;
@@ -30,6 +28,8 @@
 import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.Version;
 import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry.SessionStatus;
 
+import static org.junit.Assert.assertEquals;
+
 public class DelayMeasurementEntryTest {
 
     DelayMeasurementEntry dmE1;
diff --git a/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementThresholdOptionTest.java b/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementThresholdOptionTest.java
index f838143..970452e 100644
--- a/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementThresholdOptionTest.java
+++ b/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/delay/DelayMeasurementThresholdOptionTest.java
@@ -15,8 +15,6 @@
  */
 package org.onosproject.incubator.net.l2monitoring.soam.delay;
 
-import static org.junit.Assert.*;
-
 import java.time.Duration;
 
 import org.junit.Before;
@@ -25,6 +23,8 @@
 import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
 import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementThreshold.ThresholdOption;
 
+import static org.junit.Assert.assertEquals;
+
 public class DelayMeasurementThresholdOptionTest {
 
     DelayMeasurementThreshold dmT1;
diff --git a/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementCreateTest.java b/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementCreateTest.java
index c7d1264..43d9aa4 100644
--- a/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementCreateTest.java
+++ b/apps/cfm/api/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/loss/LossMeasurementCreateTest.java
@@ -15,8 +15,6 @@
  */
 package org.onosproject.incubator.net.l2monitoring.soam.loss;
 
-import static org.junit.Assert.*;
-
 import java.time.Duration;
 
 import org.junit.Before;
@@ -36,6 +34,8 @@
 import org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementCreate.LmCreateBuilder;
 import org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementCreate.LmType;
 
+import static org.junit.Assert.assertEquals;
+
 public class LossMeasurementCreateTest {
 
     LossMeasurementCreate lmc1;
diff --git a/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/impl/DistributedMdStore.java b/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/impl/DistributedMdStore.java
index 82c550d..81813f8 100644
--- a/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/impl/DistributedMdStore.java
+++ b/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/impl/DistributedMdStore.java
@@ -108,12 +108,9 @@
                         .register(InternetDomainName.class)
                         .register(MacAddress.class)
                         .register(ImmutablePair.class)
-                        .register(org.onosproject.incubator.net.l2monitoring
-                                            .cfm.Component.MhfCreationType.class)
-                        .register(org.onosproject.incubator.net.l2monitoring
-                                            .cfm.Component.IdPermissionType.class)
-                        .register(org.onosproject.incubator.net.l2monitoring
-                                            .cfm.Component.TagType.class)
+                        .register(org.onosproject.incubator.net.l2monitoring.cfm.Component.MhfCreationType.class)
+                        .register(org.onosproject.incubator.net.l2monitoring.cfm.Component.IdPermissionType.class)
+                        .register(org.onosproject.incubator.net.l2monitoring.cfm.Component.TagType.class)
                         .build("md")))
                 .build();
         mapListener = new InternalMdListener();
diff --git a/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/impl/SoamManager.java b/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/impl/SoamManager.java
index ca8a373..79a6480 100644
--- a/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/impl/SoamManager.java
+++ b/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/impl/SoamManager.java
@@ -230,7 +230,7 @@
 
     @Override
     public LossMeasurementStatCurrent getLmCurrentStat(MdId mdName,
-            MaIdShort maName, MepId mepId, SoamId lmId) {
+                                                       MaIdShort maName, MepId mepId, SoamId lmId) {
         throw new UnsupportedOperationException("Not yet implemented");
     }
 
diff --git a/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/impl/package-info.java b/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/impl/package-info.java
index fd932e0..a0d89e8 100644
--- a/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/impl/package-info.java
+++ b/apps/cfm/app/src/main/java/org/onosproject/incubator/net/l2monitoring/soam/impl/package-info.java
@@ -17,4 +17,4 @@
 /**
  * An implementation of Layer 2 CFM Service Operations and Maintenance (SOAM).
  */
-package org.onosproject.incubator.net.l2monitoring.soam.impl;
\ No newline at end of file
+package org.onosproject.incubator.net.l2monitoring.impl;
\ No newline at end of file
diff --git a/apps/cfm/app/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/impl/TestSoamDmProgrammable.java b/apps/cfm/app/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/impl/TestSoamDmProgrammable.java
index 9750550..c084a7a 100644
--- a/apps/cfm/app/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/impl/TestSoamDmProgrammable.java
+++ b/apps/cfm/app/src/test/java/org/onosproject/incubator/net/l2monitoring/soam/impl/TestSoamDmProgrammable.java
@@ -42,8 +42,6 @@
 import java.util.Collection;
 import java.util.Optional;
 
-import static org.onosproject.incubator.net.l2monitoring.soam.impl.SoamManagerTest.*;
-
 /**
  * A dummy implementation of the SoamDmProgrammable for test purposes.
  */
@@ -80,7 +78,7 @@
                         .build();
 
         dmEntry1 = DefaultDelayMeasurementEntry
-                .builder(DMID101, DelayMeasurementCreate.DmType.DM1DMTX,
+                .builder(SoamManagerTest.DMID101, DelayMeasurementCreate.DmType.DM1DMTX,
                         DelayMeasurementCreate.Version.Y17312011,
                         MepId.valueOf((short) 11), Mep.Priority.PRIO5)
                 .currentResult(current)
@@ -94,7 +92,8 @@
             MdId mdName, MaIdShort maName, MepId mepId)
             throws CfmConfigException, SoamConfigException {
         Collection<DelayMeasurementEntry> dmEntries = new ArrayList<>();
-        if (mdName.equals(MDNAME1) && maName.equals(MANAME1) && mepId.equals(MEPID1)) {
+        if (mdName.equals(SoamManagerTest.MDNAME1) && maName.equals(SoamManagerTest.MANAME1)
+                && mepId.equals(SoamManagerTest.MEPID1)) {
             dmEntries.add(dmEntry1);
             return dmEntries;
         }
@@ -105,7 +104,8 @@
     public DelayMeasurementEntry getDm(
             MdId mdName, MaIdShort maName, MepId mepId, SoamId dmId)
             throws CfmConfigException, SoamConfigException {
-        if (mdName.equals(MDNAME1) && maName.equals(MANAME1) && mepId.equals(MEPID1)) {
+        if (mdName.equals(SoamManagerTest.MDNAME1) && maName.equals(SoamManagerTest.MANAME1)
+                && mepId.equals(SoamManagerTest.MEPID1)) {
             return dmEntry1;
         }
         return null;
@@ -115,7 +115,8 @@
     public DelayMeasurementStatCurrent getDmCurrentStat(
             MdId mdName, MaIdShort maName, MepId mepId, SoamId dmId)
             throws CfmConfigException, SoamConfigException {
-        if (mdName.equals(MDNAME1) && maName.equals(MANAME1) && mepId.equals(MEPID1)) {
+        if (mdName.equals(SoamManagerTest.MDNAME1) && maName.equals(SoamManagerTest.MANAME1)
+                && mepId.equals(SoamManagerTest.MEPID1)) {
             return dmEntry1.currentResult();
         }
         return null;
@@ -125,7 +126,8 @@
     public Collection<DelayMeasurementStatHistory> getDmHistoricalStats(
             MdId mdName, MaIdShort maName, MepId mepId, SoamId dmId)
             throws CfmConfigException, SoamConfigException {
-        if (mdName.equals(MDNAME1) && maName.equals(MANAME1) && mepId.equals(MEPID1)) {
+        if (mdName.equals(SoamManagerTest.MDNAME1) && maName.equals(SoamManagerTest.MANAME1)
+                && mepId.equals(SoamManagerTest.MEPID1)) {
             return dmEntry1.historicalResults();
         }
         return null;
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/CfmWebComponent.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/CfmWebComponent.java
index 6ead985..a31a407 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/CfmWebComponent.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/CfmWebComponent.java
@@ -82,8 +82,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementThreshold.*;
-
 /**
  * Enables the CFM REST Web Service component at /onos/cfm.
  * Each codec for the rest interfaces should be registered here.
@@ -95,6 +93,9 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected CodecService codecService;
 
+    /**
+     * On activation of this component register these codecs with the codec service.
+     */
     @Activate
     public void activate() {
         codecService.registerCodec(MaintenanceDomain.class,
@@ -146,7 +147,7 @@
                                         new LossAvailabilityStatHistoryCodec());
         codecService.registerCodec(CounterOption.class,
                                         new LmCounterOptionCodec());
-        codecService.registerCodec(ThresholdOption.class,
+        codecService.registerCodec(LossMeasurementThreshold.ThresholdOption.class,
                                         new LmThresholdOptionCodec());
 
         codecService.registerCodec(StartTime.class, new StartTimeCodec());
@@ -155,6 +156,9 @@
         log.info("CFM Web Component Started");
     }
 
+    /**
+     * On deactivation of this component unregister these codecs from the codec service.
+     */
     @Deactivate
     public void deactivate() {
         log.info("CFM Web Component Stopped");
@@ -189,7 +193,7 @@
         codecService.unregisterCodec(LossAvailabilityStatCurrent.class);
         codecService.unregisterCodec(LossAvailabilityStatHistory.class);
         codecService.unregisterCodec(CounterOption.class);
-        codecService.unregisterCodec(ThresholdOption.class);
+        codecService.unregisterCodec(LossMeasurementThreshold.ThresholdOption.class);
 
     }
 }
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMaAddCommand.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMaAddCommand.java
index d449cce..1fec9f3 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMaAddCommand.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMaAddCommand.java
@@ -23,17 +23,8 @@
 import org.onosproject.incubator.net.l2monitoring.cfm.DefaultComponent;
 import org.onosproject.incubator.net.l2monitoring.cfm.DefaultMaintenanceAssociation;
 import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation;
-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.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdDomainName;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdMacUint;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdNone;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMdService;
@@ -44,60 +35,55 @@
 @Command(scope = "onos", name = "cfm-ma-add",
         description = "Add a CFM Maintenance Association to a Maintenance Domain.")
 public class CfmMaAddCommand extends AbstractShellCommand {
-    @Argument(index = 0, name = "name",
+    @Argument(name = "name",
             description = "Maintenance Domain name and type (in brackets)",
-            required = true, multiValued = false)
-    String mdName = null;
+            required = true)
+    private String mdName = null;
 
     @Argument(index = 1, name = "name-type",
             description = "Maintenance Assocation name type",
-            required = true, multiValued = false)
-    String nameType = null;
+            required = true)
+    private String nameType = null;
 
     @Argument(index = 2, name = "name",
             description = "Maintenance Assocation name. Restrictions apply depending " +
                     "on name-type",
-            required = true, multiValued = false)
-    String name = null;
+            required = true)
+    private String name = null;
 
     @Argument(index = 3, name = "ccm-interval",
             description = "CCM Interval values from list",
-            required = true, multiValued = false)
-    String ccmInterval = null;
+            required = true)
+    private String ccmInterval = null;
 
     @Argument(index = 4, name = "numeric-id",
-            description = "An optional numeric id for Maintenance Association [1-65535]",
-            required = false, multiValued = false)
-    short numericId = 0;
+            description = "An optional numeric id for Maintenance Association [1-65535]")
+    private Short numericId = null;
 
     @Argument(index = 5, name = "component-id",
             description = "An id for a Component in the Component List [1-65535]." +
                     "The CLI allows creation of only 1 component. If more are " +
-                    "required use the REST interface",
-            required = false, multiValued = false)
-    short componentId = 0;
+                    "required use the REST interface")
+    private Short componentId = null;
 
     @Argument(index = 6, name = "component-tag-type",
-            description = "Tag Type value for the component",
-            required = false, multiValued = false)
-    String tagType = null;
+            description = "Tag Type value for the component")
+    private String tagType = null;
 
     @Argument(index = 7, name = "component-mhf-creation",
-            description = "MEP Half function creation type for the component",
-            required = false, multiValued = false)
-    String mhfCreationType = null;
+            description = "MEP Half function creation type for the component")
+    private String mhfCreationType = null;
 
     @Argument(index = 8, name = "component-vid",
             description = "A VID for the component [1-4095]. This CLI allows " +
                     "only the specification of 1 VID. If more are required use " +
-                    "the REST interface",
-            required = false, multiValued = false)
-    short vid = 0;
+                    "the REST interface")
+    private Short vid = null;
 
     @Argument(index = 9, name = "rmep",
             description = "Remote Mep numeric identifier [1-8192]",
             required = true, multiValued = true)
-    String[] rmepArray = null;
+    private String[] rmepArray = null;
 
     @Override
     protected void execute() {
@@ -109,56 +95,23 @@
                     "Must be in the format of <identifier(name-type)>");
         }
 
-        MdId mdId = null;
-        MdId.MdNameType mdNameTypeEnum = MdId.MdNameType.valueOf(mdNameParts[1]);
-        switch (mdNameTypeEnum) {
-            case DOMAINNAME:
-                mdId = MdIdDomainName.asMdId(mdNameParts[0]);
-                break;
-            case MACANDUINT:
-                mdId = MdIdMacUint.asMdId(mdNameParts[0]);
-                break;
-            case NONE:
-                mdId = MdIdNone.asMdId();
-                break;
-            case CHARACTERSTRING:
-            default:
-                mdId = MdIdCharStr.asMdId(mdNameParts[0]);
-        }
+        MdId mdId = CfmMdListMdCommand.parseMdName(mdNameParts[0] + "(" + mdNameParts[1] + ")");
 
-        MaIdShort maId = null;
-        MaIdShort.MaIdType maNameTypeEnum = MaIdShort.MaIdType.valueOf(nameType);
-        switch (maNameTypeEnum) {
-            case TWOOCTET:
-                maId = MaId2Octet.asMaId(name);
-                break;
-            case ICCY1731:
-                maId = MaIdIccY1731.asMaId(name);
-                break;
-            case PRIMARYVID:
-                maId = MaIdPrimaryVid.asMaId(name);
-                break;
-            case RFC2685VPNID:
-                maId = MaIdRfc2685VpnId.asMaIdHex(name);
-                break;
-            case CHARACTERSTRING:
-            default:
-                maId = MaIdCharStr.asMaId(name);
-        }
+        MaIdShort maId = CfmMdListMdCommand.parseMaName(name + "(" + nameType + ")");
 
-        MaintenanceAssociation.MaBuilder builder = null;
         try {
-            builder = DefaultMaintenanceAssociation.builder(maId, mdId.getNameLength());
+            MaintenanceAssociation.MaBuilder builder = DefaultMaintenanceAssociation
+                    .builder(maId, mdId.getNameLength());
             if (ccmInterval != null && !ccmInterval.isEmpty()) {
                 builder = builder.ccmInterval(MaintenanceAssociation.CcmInterval.valueOf(ccmInterval));
             }
             for (String rmep:rmepArray) {
                 builder = builder.addToRemoteMepIdList(MepId.valueOf(Short.parseShort(rmep)));
             }
-            if (numericId > 0) {
+            if (numericId != null) {
                 builder = builder.maNumericId(numericId);
             }
-            if (componentId > 0) {
+            if (componentId != null) {
                 Component.ComponentBuilder compBuilder =
                         DefaultComponent.builder(componentId);
                 if (tagType != null && !tagType.isEmpty()) {
@@ -169,7 +122,7 @@
                     compBuilder = compBuilder.mhfCreationType(
                             Component.MhfCreationType.valueOf(mhfCreationType));
                 }
-                if (vid > 0) {
+                if (vid != null) {
                     compBuilder = compBuilder.addToVidList(VlanId.vlanId(vid));
                 }
                 builder = builder.addToComponentList(compBuilder.build());
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMaDeleteCommand.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMaDeleteCommand.java
index 4228b78..b28a35e 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMaDeleteCommand.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMaDeleteCommand.java
@@ -18,17 +18,8 @@
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.cli.AbstractShellCommand;
-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.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdDomainName;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdMacUint;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdNone;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMdService;
 
@@ -39,58 +30,26 @@
         description = "Delete a CFM Maintenance Association and its children.")
 public class CfmMaDeleteCommand extends AbstractShellCommand {
 
-    @Argument(index = 0, name = "name",
+    private static final int MA_NAME_PARTS_COUNT = 4;
+    @Argument(name = "name",
             description = "Maintenance Domain name and type (in brackets) " +
                     "and the Maintenance Association name and type (in brackets)",
-            required = true, multiValued = false)
-    String name = null;
+            required = true)
+    private String name = null;
 
     @Override
     protected void execute() {
         CfmMdService service = get(CfmMdService.class);
 
         String[] nameParts = name.split("[()]");
-        if (nameParts.length != 4) {
+        if (nameParts.length != MA_NAME_PARTS_COUNT) {
             throw new IllegalArgumentException("Invalid name format. Must be in " +
                     "the format of <identifier(name-type)identifier(name-type)>");
         }
 
-        MdId mdId = null;
-        MdId.MdNameType nameTypeEnum = MdId.MdNameType.valueOf(nameParts[1]);
-        switch (nameTypeEnum) {
-            case DOMAINNAME:
-                mdId = MdIdDomainName.asMdId(nameParts[0]);
-                break;
-            case MACANDUINT:
-                mdId = MdIdMacUint.asMdId(nameParts[0]);
-                break;
-            case NONE:
-                mdId = MdIdNone.asMdId();
-                break;
-            case CHARACTERSTRING:
-            default:
-                mdId = MdIdCharStr.asMdId(nameParts[0]);
-        }
+        MdId mdId = CfmMdListMdCommand.parseMdName(nameParts[0] + "(" + nameParts[1] + ")");
 
-        MaIdShort maId = null;
-        MaIdShort.MaIdType maNameTypeEnum = MaIdShort.MaIdType.valueOf(nameParts[3]);
-        switch (maNameTypeEnum) {
-            case TWOOCTET:
-                maId = MaId2Octet.asMaId(nameParts[2]);
-                break;
-            case ICCY1731:
-                maId = MaIdIccY1731.asMaId(nameParts[2]);
-                break;
-            case PRIMARYVID:
-                maId = MaIdPrimaryVid.asMaId(nameParts[2]);
-                break;
-            case RFC2685VPNID:
-                maId = MaIdRfc2685VpnId.asMaIdHex(nameParts[2]);
-                break;
-            case CHARACTERSTRING:
-            default:
-                maId = MaIdCharStr.asMaId(nameParts[2]);
-        }
+        MaIdShort maId = CfmMdListMdCommand.parseMaName(nameParts[2] + "(" + nameParts[3] + ")");
 
         try {
             boolean deleted = service.deleteMaintenanceAssociation(mdId, maId);
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdAddCommand.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdAddCommand.java
index 922ed64..c73fff3 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdAddCommand.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdAddCommand.java
@@ -21,15 +21,9 @@
 import org.onosproject.incubator.net.l2monitoring.cfm.DefaultMaintenanceDomain;
 import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceDomain;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdDomainName;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdMacUint;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdNone;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMdService;
 
-import java.util.Optional;
-
 /**
  * Adds a Maintenance Domain to the existing list.
  */
@@ -37,58 +31,39 @@
         description = "Add a CFM Maintenance Domain.")
 public class CfmMdAddCommand extends AbstractShellCommand {
 
-    @Argument(index = 0, name = "name-type",
+    @Argument(name = "name-type",
             description = "Maintenance Domain name type",
-            required = true, multiValued = false)
-    String nameType = null;
+            required = true)
+    private String nameType = null;
 
     @Argument(index = 1, name = "name",
             description = "Maintenance Domain name. Restrictions apply depending " +
                     "on name-type. Leave empty if name type is none",
-            required = true, multiValued = false)
-    String name = null;
+            required = true)
+    private String name = null;
 
     @Argument(index = 2, name = "level",
             description = "Maintenance Domain level LEVEL0-LEVEL7",
-            required = true, multiValued = false)
-    String level = null;
+            required = true)
+    private String level = null;
 
     @Argument(index = 3, name = "numeric-id",
-            description = "An optional numeric id for Maintenance Domain [1-65535]",
-            required = false, multiValued = false)
-    short numericId = 0;
+            description = "An optional numeric id for Maintenance Domain [1-65535]")
+    private Short numericId = null;
 
     @Override
     protected void execute() {
         CfmMdService service = get(CfmMdService.class);
-        MdId mdId = null;
-        MdId.MdNameType nameTypeEnum = MdId.MdNameType.valueOf(nameType);
-        switch (nameTypeEnum) {
-            case DOMAINNAME:
-                mdId = MdIdDomainName.asMdId(name);
-                break;
-            case MACANDUINT:
-                mdId = MdIdMacUint.asMdId(name);
-                break;
-            case NONE:
-                mdId = MdIdNone.asMdId();
-                break;
-            case CHARACTERSTRING:
-            default:
-                mdId = MdIdCharStr.asMdId(name);
-        }
+        MdId mdId = CfmMdListMdCommand.parseMdName(name + "(" + nameType + ")");
+
         MaintenanceDomain.MdLevel levelEnum =
                 MaintenanceDomain.MdLevel.valueOf(level);
-        Optional<Short> numericIdOpt = Optional.empty();
-        if (numericId > 0) {
-            numericIdOpt = Optional.of(numericId);
-        }
 
-        MaintenanceDomain.MdBuilder builder = null;
         try {
-            builder = DefaultMaintenanceDomain.builder(mdId).mdLevel(levelEnum);
-            if (numericIdOpt.isPresent()) {
-                builder = builder.mdNumericId(numericIdOpt.get());
+            MaintenanceDomain.MdBuilder builder = DefaultMaintenanceDomain
+                    .builder(mdId).mdLevel(levelEnum);
+            if (numericId != null) {
+                builder = builder.mdNumericId(numericId);
             }
             boolean created = service.createMaintenanceDomain(builder.build());
             print("Maintenance Domain with id %s is successfully %s.",
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdDeleteCommand.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdDeleteCommand.java
index 3cf3c26..85f47eb 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdDeleteCommand.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdDeleteCommand.java
@@ -19,10 +19,6 @@
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdDomainName;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdMacUint;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdNone;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMdService;
 
@@ -33,10 +29,10 @@
         description = "Delete a CFM Maintenance Domain and its children.")
 public class CfmMdDeleteCommand extends AbstractShellCommand {
 
-    @Argument(index = 0, name = "name",
+    @Argument(name = "name",
             description = "Maintenance Domain name and type (in brackets)",
-            required = true, multiValued = false)
-    String name = null;
+            required = true)
+    private String name = null;
 
     @Override
     protected void execute() {
@@ -48,22 +44,7 @@
                     "Must be in the format of <identifier(name-type)>");
         }
 
-        MdId mdId = null;
-        MdId.MdNameType nameTypeEnum = MdId.MdNameType.valueOf(nameParts[1]);
-        switch (nameTypeEnum) {
-            case DOMAINNAME:
-                mdId = MdIdDomainName.asMdId(nameParts[0]);
-                break;
-            case MACANDUINT:
-                mdId = MdIdMacUint.asMdId(nameParts[0]);
-                break;
-            case NONE:
-                mdId = MdIdNone.asMdId();
-                break;
-            case CHARACTERSTRING:
-            default:
-                mdId = MdIdCharStr.asMdId(nameParts[0]);
-        }
+        MdId mdId = CfmMdListMdCommand.parseMdName(nameParts[0] + "(" + nameParts[1] + ")");
 
         try {
             boolean deleted = service.deleteMaintenanceDomain(mdId);
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdListMdCommand.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdListMdCommand.java
index 6f41005..7965113 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdListMdCommand.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMdListMdCommand.java
@@ -20,84 +20,76 @@
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation;
 import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceDomain;
-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.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdDomainName;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdMacUint;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdNone;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdMaNameUtil;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMdService;
 
-import java.util.Optional;
-
 /**
  * Lists a particular Maintenance Domain.
  */
 @Command(scope = "onos", name = "cfm-md-list",
         description = "Lists a single CFM Maintenance Domain or all if none specified.")
 public class CfmMdListMdCommand extends AbstractShellCommand {
-    @Argument(index = 0, name = "name",
-            description = "Maintenance Domain name and type (in brackets)",
-            required = false, multiValued = false)
-    String name = null;
+    @Argument(name = "name",
+            description = "Maintenance Domain name and type (in brackets)")
+    private String name = null;
 
     @Override
     protected void execute() {
-        CfmMdService service = get(CfmMdService.class);
+        CfmMdService service;
+        service = get(CfmMdService.class);
 
         if (name != null) {
             MdId mdId = parseMdName(name);
             print("Maintenance Domain:");
-            Optional<MaintenanceDomain> md = service.getMaintenanceDomain(mdId);
-            print(printMd(md));
-            md.get().maintenanceAssociationList().forEach(ma -> printMa(Optional.of(ma)));
-        } else {
-            service.getAllMaintenanceDomain().forEach(md -> {
-                print(printMd(Optional.of(md)));
+            service.getMaintenanceDomain(mdId).ifPresent(md -> {
+                print(printMd(md));
+                md.maintenanceAssociationList().forEach(CfmMdListMdCommand::printMa);
             });
+        } else {
+            service.getAllMaintenanceDomain().forEach(md -> print(printMd(md)));
         }
     }
 
-    public static String printMd(Optional<MaintenanceDomain> md) {
-        if (!md.isPresent()) {
-            return new String("MD not found");
+    private static String printMd(MaintenanceDomain md) {
+        if (md == null) {
+            return "MD not found";
         } else {
-            StringBuffer sb = new StringBuffer("\tMD: ");
-            sb.append(md.get().mdId().mdName());
-            sb.append("(" + md.get().mdId().nameType());
-            sb.append(") Lvl:" + md.get().mdLevel().ordinal());
-            sb.append(", Num: " + md.get().mdNumericId());
+            StringBuilder sb = new StringBuilder("\tMD: ");
+            sb.append(md.mdId().mdName());
+            sb.append("(");
+            sb.append(md.mdId().nameType());
+            sb.append(") Lvl:");
+            sb.append(md.mdLevel().ordinal());
+            sb.append(", Num: ");
+            sb.append(md.mdNumericId());
 
-            md.get().maintenanceAssociationList().
-                    forEach(ma -> sb.append(printMa(Optional.of(ma))));
+            md.maintenanceAssociationList().
+                    forEach(ma -> sb.append(printMa(ma)));
             return sb.toString();
         }
     }
 
-    public static String printMa(Optional<MaintenanceAssociation> ma) {
-        if (!ma.isPresent()) {
+    private static String printMa(MaintenanceAssociation ma) {
+        if (ma == null) {
             return "\n\tNo MA found";
         }
 
         StringBuilder sb = new StringBuilder("\n\t\tMA: ");
-        sb.append(ma.get().maId().maName());
+        sb.append(ma.maId().maName());
         sb.append("(");
-        sb.append(ma.get().maId().nameType());
+        sb.append(ma.maId().nameType());
         sb.append(") CCM: ");
-        sb.append(ma.get().ccmInterval());
+        sb.append(ma.ccmInterval());
         sb.append(" Num: ");
-        sb.append(ma.get().maNumericId());
+        sb.append(ma.maNumericId());
 
-        ma.get().remoteMepIdList().forEach(rmep -> {
+        ma.remoteMepIdList().forEach(rmep -> {
                     sb.append("\n\t\t\tRmep: ");
                     sb.append(rmep);
                 });
-        ma.get().componentList().forEach(comp -> {
+        ma.componentList().forEach(comp -> {
             sb.append("\n\t\t\tComponent: ");
             sb.append(comp.componentId());
             sb.append(" Perm: ");
@@ -116,59 +108,24 @@
         return sb.toString();
     }
 
-    public static MdId parseMdName(String mdStr) {
+    static MdId parseMdName(String mdStr) {
         String[] nameParts = mdStr.split("[()]");
         if (nameParts.length != 2) {
             throw new IllegalArgumentException("Invalid name format. " +
                     "Must be in the format of <identifier(name-type)>");
         }
 
-        MdId mdId = null;
-        MdId.MdNameType nameTypeEnum = MdId.MdNameType.valueOf(nameParts[1]);
-        switch (nameTypeEnum) {
-            case DOMAINNAME:
-                mdId = MdIdDomainName.asMdId(nameParts[0]);
-                break;
-            case MACANDUINT:
-                mdId = MdIdMacUint.asMdId(nameParts[0]);
-                break;
-            case NONE:
-                mdId = MdIdNone.asMdId();
-                break;
-            case CHARACTERSTRING:
-            default:
-                mdId = MdIdCharStr.asMdId(nameParts[0]);
-        }
-        return mdId;
+        return MdMaNameUtil.parseMdName(nameParts[1], nameParts[0]);
     }
 
-    public static MaIdShort parseMaName(String maStr) {
+    static MaIdShort parseMaName(String maStr) {
         String[] nameParts = maStr.split("[()]");
         if (nameParts.length != 2) {
             throw new IllegalArgumentException("Invalid name format. " +
                     "Must be in the format of <identifier(name-type)>");
         }
 
-        MaIdShort maId = null;
-        MaIdShort.MaIdType nameTypeEnum = MaIdShort.MaIdType.valueOf(nameParts[1]);
-        switch (nameTypeEnum) {
-            case ICCY1731:
-                maId = MaIdIccY1731.asMaId(nameParts[0]);
-                break;
-            case PRIMARYVID:
-                maId = MaIdPrimaryVid.asMaId(nameParts[0]);
-                break;
-            case RFC2685VPNID:
-                maId = MaIdRfc2685VpnId.asMaIdHex(nameParts[0]);
-                break;
-            case TWOOCTET:
-                maId = MaId2Octet.asMaId(nameParts[0]);
-                break;
-            case CHARACTERSTRING:
-            default:
-                maId = MaIdCharStr.asMaId(nameParts[0]);
-        }
-        return maId;
+        return MdMaNameUtil.parseMaName(nameParts[1], nameParts[0]);
     }
 
 }
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMepListCommand.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMepListCommand.java
index b406947..55ed5ef 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMepListCommand.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMepListCommand.java
@@ -39,18 +39,15 @@
         description = "Lists a filtered set of MEPs or all if no parameters specified.")
 public class CfmMepListCommand extends AbstractShellCommand {
     private final Logger log = getLogger(getClass());
-    @Argument(index = 0, name = "md",
-            description = "Maintenance Domain name and type (in brackets) - will use all MDs if not specified",
-            required = false, multiValued = false)
-    String mdStr = null;
+    @Argument(name = "md",
+            description = "Maintenance Domain name and type (in brackets) - will use all MDs if not specified")
+    private String mdStr = null;
     @Argument(index = 1, name = "ma",
-            description = "Maintenance Association name and type (in brackets) - requires MD",
-            required = false, multiValued = false)
-    String maStr = null;
+            description = "Maintenance Association name and type (in brackets) - requires MD")
+    private String maStr = null;
     @Argument(index = 2, name = "mep",
-            description = "MEP identifier - requires MD and MA",
-            required = false, multiValued = false)
-    String mepStr = null;
+            description = "MEP identifier - requires MD and MA")
+    private String mepStr = null;
 
     @Override
     protected void execute() {
@@ -83,9 +80,8 @@
                 } else {
                     //MD and MA given but no MEP given
                     try {
-                        mepService.getAllMeps(mdId, maId).forEach(mep -> {
-                            print(printMepEntry(mep));
-                        });
+                        mepService.getAllMeps(mdId, maId)
+                                .forEach(mep -> print(printMepEntry(mep)));
                     } catch (CfmConfigException e) {
                         log.error("Error retrieving Meps for {}/{}",
                                 mdId.mdName(), maId.maName(), e);
@@ -96,9 +92,8 @@
                 mdService.getAllMaintenanceAssociation(mdId).forEach(ma -> {
                     print(printMaId(ma.maId()));
                     try {
-                        mepService.getAllMeps(mdId, ma.maId()).forEach(mep -> {
-                            print(printMepEntry(mep));
-                        });
+                        mepService.getAllMeps(mdId, ma.maId())
+                                .forEach(mep -> print(printMepEntry(mep)));
                     } catch (CfmConfigException e) {
                         log.error("Error retrieving Meps for {}/{}",
                                 mdId.mdName(), ma.maId().maName(), e);
@@ -113,9 +108,8 @@
                 mdService.getAllMaintenanceAssociation(md.mdId()).forEach(ma -> {
                     print(printMaId(ma.maId()));
                     try {
-                        mepService.getAllMeps(md.mdId(), ma.maId()).forEach(mep -> {
-                            print(printMepEntry(mep));
-                        });
+                        mepService.getAllMeps(md.mdId(), ma.maId())
+                                .forEach(mep -> print(printMepEntry(mep)));
                     } catch (CfmConfigException e) {
                         log.error("Error retrieving Meps for {}/{}",
                                 md.mdId().mdName(), ma.maId().maName(), e);
@@ -130,25 +124,38 @@
      * @param mep The MEPEntry to print
      * @return A string with MepEntry details
      */
-    public static String printMepEntry(MepEntry mep) {
+    private static String printMepEntry(MepEntry mep) {
         StringBuffer sb = new StringBuffer("MEP: ");
         sb.append(mep.mepId());
-        sb.append(" Device:" + mep.deviceId());
-        sb.append(", Port: " + mep.port());
-        sb.append(", Vlan: " + mep.primaryVid());
-        sb.append(", AdminSt: " + mep.administrativeState());
-        sb.append(", CciEnabled: " + mep.cciEnabled());
-        sb.append(", Priority: " + mep.ccmLtmPriority());
+        sb.append(" Device:");
+        sb.append(mep.deviceId());
+        sb.append(", Port: ");
+        sb.append(mep.port());
+        sb.append(", Vlan: ");
+        sb.append(mep.primaryVid());
+        sb.append(", AdminSt: ");
+        sb.append(mep.administrativeState());
+        sb.append(", CciEnabled: ");
+        sb.append(mep.cciEnabled());
+        sb.append(", Priority: ");
+        sb.append(mep.ccmLtmPriority());
         sb.append("\n"); //The following are state
-        sb.append(", Total CCMs: " + mep.totalCcmsTransmitted());
-        sb.append(", MAC: " + mep.macAddress());
-        sb.append(", Fault: " + mep.fngState());
+        sb.append(", Total CCMs: ");
+        sb.append(mep.totalCcmsTransmitted());
+        sb.append(", MAC: ");
+        sb.append(mep.macAddress());
+        sb.append(", Fault: ");
+        sb.append(mep.fngState());
 
         mep.activeRemoteMepList().forEach(rmep -> {
-            sb.append("\n\tRmep: " + rmep.remoteMepId());
-            sb.append(", Mac: " + rmep.macAddress());
-            sb.append(", State: " + rmep.state());
-            sb.append(", Failed Time: " + rmep.failedOrOkTime());
+            sb.append("\n\tRmep: ");
+            sb.append(rmep.remoteMepId());
+            sb.append(", Mac: ");
+            sb.append(rmep.macAddress());
+            sb.append(", State: ");
+            sb.append(rmep.state());
+            sb.append(", Failed Time: ");
+            sb.append(rmep.failedOrOkTime());
 
         });
 
@@ -156,18 +163,12 @@
         return sb.toString();
     }
 
-    public static String printMdId(MdId mdId) {
-        StringBuffer sb = new StringBuffer("MD: ");
-        sb.append(mdId.mdName());
-        sb.append("(" + mdId.nameType() + ")");
-        return sb.toString();
+    private static String printMdId(MdId mdId) {
+        return "MD: " + mdId.mdName() + "(" + mdId.nameType() + ")";
     }
 
-    public static String printMaId(MaIdShort maId) {
-        StringBuffer sb = new StringBuffer("MA: ");
-        sb.append(maId.maName());
-        sb.append("(" + maId.nameType() + ")");
-        return sb.toString();
+    private static String printMaId(MaIdShort maId) {
+        return "MA: " + maId.maName() + "(" + maId.nameType() + ")";
     }
 
 }
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMepListDeviceCommand.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMepListDeviceCommand.java
index c99399a..5067cc1 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMepListDeviceCommand.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/CfmMepListDeviceCommand.java
@@ -22,9 +22,6 @@
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMepService;
 import org.onosproject.net.DeviceId;
-import org.slf4j.Logger;
-
-import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * Lists all the MEPs on a particular device.
@@ -32,11 +29,10 @@
 @Command(scope = "onos", name = "cfm-mep-device-list",
         description = "Lists a set of MEPs filtered by device.")
 public class CfmMepListDeviceCommand extends AbstractShellCommand {
-    private final Logger log = getLogger(getClass());
-    @Argument(index = 0, name = "device",
+    @Argument(name = "device",
             description = "Device Id",
-            required = true, multiValued = false)
-    String deviceStr = null;
+            required = true)
+    private String deviceStr = null;
 
     @Override
     protected void execute() {
@@ -44,9 +40,8 @@
         if (deviceStr != null) {
             DeviceId deviceId = DeviceId.deviceId(deviceStr);
             try {
-                mepService.getAllMepsByDevice(deviceId).forEach(mep -> {
-                    print(printMep(mep));
-                });
+                mepService.getAllMepsByDevice(deviceId)
+                        .forEach(mep -> print(printMep(mep)));
             } catch (CfmConfigException e) {
                 log.error("Error retrieving Meps for Device {}",
                         deviceId, e);
@@ -59,19 +54,12 @@
      * @param mep The MEP to print
      * @return A string with MD name, MA name and Mep details
      */
-    public static String printMep(Mep mep) {
-        StringBuffer sb = new StringBuffer("MEP: ");
-        sb.append(mep.mdId().mdName() + "/");
-        sb.append(mep.maId().maName() + "/");
-        sb.append(mep.mepId());
-        sb.append(" Device:" + mep.deviceId());
-        sb.append(", Port: " + mep.port());
-        sb.append(", Vlan: " + mep.primaryVid());
-        sb.append(", AdminSt: " + mep.administrativeState());
-        sb.append(", CciEnabled: " + mep.cciEnabled());
-        sb.append(", Priority: " + mep.ccmLtmPriority());
-
-        return sb.toString();
+    private static String printMep(Mep mep) {
+         return "MEP: " + mep.mdId().mdName() + "/" + mep.maId().maName() + "/" +
+                 mep.mepId() + " Device:" + mep.deviceId() + ", Port: " +
+                 mep.port() + ", Vlan: " + mep.primaryVid() + ", AdminSt: " +
+                 mep.administrativeState() + ", CciEnabled: " + mep.cciEnabled() +
+                 ", Priority: " + mep.ccmLtmPriority();
     }
 
 }
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/completer/CfmMaNameCompleter.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/completer/CfmMaNameCompleter.java
index b484212..1463804 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/completer/CfmMaNameCompleter.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/completer/CfmMaNameCompleter.java
@@ -34,16 +34,8 @@
         CfmMdService service = get(CfmMdService.class);
         service.getAllMaintenanceDomain().forEach(md ->
             md.maintenanceAssociationList().forEach(ma ->
-                choices.add(new StringBuilder(md.mdId().mdName())
-                .append("(")
-                .append(md.mdId().nameType())
-                .append(")")
-                .append(ma.maId().maName())
-                .append("(")
-                .append(ma.maId().nameType())
-                .append(")").toString())
-            )
-        );
+                choices.add(md.mdId().mdName() + "(" + md.mdId().nameType() + ")" +
+                        ma.maId().maName() + "(" + ma.maId().nameType() + ")")));
 
         return choices;
     }
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/completer/CfmMepIdCompleter.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/completer/CfmMepIdCompleter.java
index 6019916..a26a460 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/completer/CfmMepIdCompleter.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/cli/completer/CfmMepIdCompleter.java
@@ -41,32 +41,17 @@
         CfmMepService mepService = get(CfmMepService.class);
 
         mdService.getAllMaintenanceDomain().forEach(md -> {
-            choices.add(new StringBuilder(md.mdId().mdName())
-                            .append("(")
-                            .append(md.mdId().nameType())
-                            .append(")").toString());
+            choices.add(md.mdId().mdName() + "(" + md.mdId().nameType() + ")");
 
             md.maintenanceAssociationList().forEach(ma -> {
-                    choices.add(new StringBuilder(md.mdId().mdName())
-                            .append("(")
-                            .append(md.mdId().nameType())
-                            .append(") ")
-                            .append(ma.maId().maName())
-                            .append("(")
-                            .append(ma.maId().nameType())
-                            .append(")").toString());
+                    choices.add(md.mdId().mdName() + "(" + md.mdId().nameType() +
+                            ") " + ma.maId().maName() + "(" + ma.maId().nameType() + ")");
 
                     try {
                         mepService.getAllMeps(md.mdId(), ma.maId()).forEach(mep ->
-                                choices.add(new StringBuilder(md.mdId().mdName())
-                                        .append("(")
-                                        .append(md.mdId().nameType())
-                                        .append(") ")
-                                        .append(ma.maId().maName())
-                                        .append("(")
-                                        .append(ma.maId().nameType())
-                                        .append(") ")
-                                        .append(mep.mepId()).toString())
+                                choices.add(md.mdId().mdName() + "(" +
+                                        md.mdId().nameType() + ") " + ma.maId().maName() +
+                                        "(" + ma.maId().nameType() + ") " + mep.mepId())
                         );
                     } catch (CfmConfigException e) {
                         log.warn("Unable to retrieve mep details", e);
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MaWebResource.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MaWebResource.java
index 85b7ac4..e0390a9 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MaWebResource.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MaWebResource.java
@@ -17,6 +17,7 @@
 
 import java.io.InputStream;
 import java.net.URI;
+import java.util.Optional;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
@@ -134,9 +135,9 @@
         log.debug("POST called to Create MA");
         try {
             MdId mdId = MdIdCharStr.asMdId(mdName);
-            MaintenanceDomain md = get(CfmMdService.class)
-                                            .getMaintenanceDomain(mdId).get();
-            if (md == null) {
+            Optional<MaintenanceDomain> md = get(CfmMdService.class)
+                                            .getMaintenanceDomain(mdId);
+            if (!md.isPresent()) {
                 return Response.serverError().entity("{ \"failure\":\"md "
                                         + mdName + " does not exist\" }").build();
             }
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MdWebResource.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MdWebResource.java
index 0e523a7..aa16d9e 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MdWebResource.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MdWebResource.java
@@ -49,7 +49,6 @@
 @Path("md")
 public class MdWebResource extends AbstractWebResource {
     private final Logger log = LoggerFactory.getLogger(getClass());
-    public static final String JSON_NOT_NULL = "JsonNode can not be null";
 
     /**
      * Get all Maintenance Domains.
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MepWebResource.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MepWebResource.java
index 52d4150..a9d2c9e 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MepWebResource.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/rest/MepWebResource.java
@@ -180,7 +180,10 @@
         try {
             MdId mdId = MdIdCharStr.asMdId(mdName);
             MaIdShort maId = MaIdCharStr.asMaId(maName);
-            MaintenanceAssociation ma = get(CfmMdService.class).getMaintenanceAssociation(mdId, maId).get();
+            MaintenanceAssociation ma =
+                    get(CfmMdService.class).getMaintenanceAssociation(mdId, maId)
+                    .orElseThrow(() -> new IllegalArgumentException(
+                            "MA " + mdName + "/" + maName + " not Found"));
 
             ObjectMapper mapper = new ObjectMapper();
             JsonNode cfg = mapper.readTree(input);
@@ -194,12 +197,14 @@
                         " already exists").build();
             }
             return Response
-                    .created(new URI("md/" + mdName + "/ma/" + ma.maId() + "/mep/" + mep.mepId()))
-                    .entity("{ \"success\":\"mep " + mdName + "/" + ma.maId() + "/" + mep.mepId() + " created\" }")
+                    .created(new URI("md/" + mdName + "/ma/" + ma.maId() +
+                            "/mep/" + mep.mepId()))
+                    .entity("{ \"success\":\"mep " + mdName + "/" + ma.maId() +
+                            "/" + mep.mepId() + " created\" }")
                     .build();
         } catch (Exception | CfmConfigException e) {
             log.error("Create Mep on " + mdName + "/" + maName + " failed because of exception {}",
-                      e.toString());
+                      e);
             return Response.serverError()
                     .entity("{ \"failure\":\"" + e.toString() + "\" }")
                     .build();
@@ -229,9 +234,25 @@
 
         MdId mdId = MdIdCharStr.asMdId(mdName);
         MaIdShort maId = MaIdCharStr.asMaId(maName);
-        MaintenanceDomain md = get(CfmMdService.class).getMaintenanceDomain(mdId).get();
-        MaintenanceAssociation ma = get(CfmMdService.class)
-                .getMaintenanceAssociation(mdId, maId).get();
+        MaintenanceDomain md;
+        Optional<MaintenanceDomain> mdOpt = get(CfmMdService.class).getMaintenanceDomain(mdId);
+        if (mdOpt.isPresent()) {
+            md = mdOpt.get();
+        } else {
+            return Response.serverError()
+                    .entity("{ \"failure\":\"" + mdName + " does not exist\" }")
+                    .build();
+        }
+        MaintenanceAssociation ma;
+        Optional<MaintenanceAssociation> maOpt = get(CfmMdService.class)
+                .getMaintenanceAssociation(mdId, maId);
+        if (maOpt.isPresent()) {
+            ma = maOpt.get();
+        } else {
+            return Response.serverError()
+                    .entity("{ \"failure\":\"" + maName + " does not exist\" }")
+                    .build();
+        }
 
         MepId mepId = MepId.valueOf(mepIdShort);
 
@@ -275,9 +296,25 @@
 
         MdId mdId = MdIdCharStr.asMdId(mdName);
         MaIdShort maId = MaIdCharStr.asMaId(maName);
-        MaintenanceDomain md = get(CfmMdService.class).getMaintenanceDomain(mdId).get();
-        MaintenanceAssociation ma = get(CfmMdService.class)
-                .getMaintenanceAssociation(mdId, maId).get();
+        MaintenanceDomain md;
+        Optional<MaintenanceDomain> mdOpt = get(CfmMdService.class).getMaintenanceDomain(mdId);
+        if (mdOpt.isPresent()) {
+            md = mdOpt.get();
+        } else {
+            return Response.serverError()
+                    .entity("{ \"failure\":\"" + mdName + " does not exist\" }")
+                    .build();
+        }
+        MaintenanceAssociation ma;
+        Optional<MaintenanceAssociation> maOpt = get(CfmMdService.class)
+                .getMaintenanceAssociation(mdId, maId);
+        if (maOpt.isPresent()) {
+            ma = maOpt.get();
+        } else {
+            return Response.serverError()
+                    .entity("{ \"failure\":\"" + maName + " does not exist\" }")
+                    .build();
+        }
 
         MepId mepId = MepId.valueOf(mepIdShort);
 
@@ -319,9 +356,25 @@
 
         MdId mdId = MdIdCharStr.asMdId(mdName);
         MaIdShort maId = MaIdCharStr.asMaId(maName);
-        MaintenanceDomain md = get(CfmMdService.class).getMaintenanceDomain(mdId).get();
-        MaintenanceAssociation ma = get(CfmMdService.class)
-                .getMaintenanceAssociation(mdId, maId).get();
+        MaintenanceDomain md;
+        Optional<MaintenanceDomain> mdOpt = get(CfmMdService.class).getMaintenanceDomain(mdId);
+        if (mdOpt.isPresent()) {
+            md = mdOpt.get();
+        } else {
+            return Response.serverError()
+                    .entity("{ \"failure\":\"" + mdName + " does not exist\" }")
+                    .build();
+        }
+        MaintenanceAssociation ma;
+        Optional<MaintenanceAssociation> maOpt = get(CfmMdService.class)
+                .getMaintenanceAssociation(mdId, maId);
+        if (maOpt.isPresent()) {
+            ma = maOpt.get();
+        } else {
+            return Response.serverError()
+                    .entity("{ \"failure\":\"" + maName + " does not exist\" }")
+                    .build();
+        }
 
         MepId mepId = MepId.valueOf(mepIdShort);
 
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/ComponentCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/ComponentCodec.java
index 6a53497..ee83dea 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/ComponentCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/ComponentCodec.java
@@ -42,6 +42,15 @@
     private static final String MHF_CREATION_TYPE = "mhf-creation-type";
     private static final String ID_PERMISSION = "id-permission";
 
+    /**
+     * Encodes the Component entity into JSON.
+     *
+     * @param component  Component to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(Component component, CodecContext context) {
 
@@ -63,15 +72,31 @@
         return (ObjectNode) context.mapper().createObjectNode().set(COMPONENT, node);
     }
 
+    /**
+     * Encodes the collection of the Component entities.
+     *
+     * @param components collection of Component to encode
+     * @param context  encoding context
+     * @return JSON array
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ArrayNode encode(Iterable<Component> components, CodecContext context) {
         ArrayNode an = context.mapper().createArrayNode();
-        components.forEach(component -> {
-            an.add(encode(component, context));
-        });
+        components.forEach(component -> an.add(encode(component, context)));
         return an;
     }
 
+    /**
+     * Decodes the Component entity from JSON.
+     *
+     * @param json    JSON to decode
+     * @param context decoding context
+     * @return decoded Component
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support decode operations
+     */
     @Override
     public Component decode(ObjectNode json, CodecContext context) {
         if (json == null || !json.isObject()) {
@@ -87,7 +112,7 @@
 
         List<VlanId> vidList = (new VidCodec()).decode((ArrayNode)
                 nullIsIllegal(componentNode.get(VID_LIST), "vid-list is required"), context);
-        if (vidList == null || vidList.size() < 1) {
+        if (vidList == null || vidList.isEmpty()) {
             throw new IllegalArgumentException("A least one VID is required in component: " + componentId);
         }
         for (VlanId vid:vidList) {
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/FngAddressCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/FngAddressCodec.java
index 47cc9b6..1c0e725 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/FngAddressCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/FngAddressCodec.java
@@ -25,6 +25,8 @@
 import org.onosproject.incubator.net.l2monitoring.cfm.Mep;
 import org.onosproject.incubator.net.l2monitoring.cfm.Mep.FngAddress;
 
+import java.util.Locale;
+
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onlab.util.Tools.nullIsIllegal;
 
@@ -33,6 +35,15 @@
  */
 public class FngAddressCodec extends JsonCodec<FngAddress> {
 
+    /**
+     * Encodes the FngAddress entity into JSON.
+     *
+     * @param fngAddress  FngAddress to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(FngAddress fngAddress, CodecContext context) {
         checkNotNull(fngAddress, "FngAddress cannot be null");
@@ -47,6 +58,15 @@
         return result;
     }
 
+    /**
+     * Decodes the FngAddress entity from JSON.
+     *
+     * @param json    JSON to decode
+     * @param context decoding context
+     * @return decoded FngAddress
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support decode operations
+     */
     @Override
     public FngAddress decode(ObjectNode json, CodecContext context) {
         if (json == null || !json.isObject()) {
@@ -57,7 +77,7 @@
 
         String addressType = nullIsIllegal(node.get("address-type"),
                             "address type is required").asText();
-        Mep.FngAddressType type = Mep.FngAddressType.valueOf(addressType.toUpperCase());
+        Mep.FngAddressType type = Mep.FngAddressType.valueOf(addressType.toUpperCase(Locale.ENGLISH));
         JsonNode ipAddressNode = node.get("ipAddress");
 
         switch (type) {
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MaintenanceAssociationCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MaintenanceAssociationCodec.java
index 6c3829f..b1b9baa 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MaintenanceAssociationCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MaintenanceAssociationCodec.java
@@ -27,12 +27,8 @@
 import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation;
 import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation.CcmInterval;
 import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation.MaBuilder;
-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.MdMaNameUtil;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
 
@@ -53,6 +49,15 @@
     private static final String RMEP_LIST = "rmep-list";
     private static final String MA = "ma";
 
+    /**
+     * Encodes the MaintenanceAssociation entity into JSON.
+     *
+     * @param ma MaintenanceAssociation to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(MaintenanceAssociation ma, CodecContext context) {
         checkNotNull(ma, "Maintenance Association cannot be null");
@@ -72,6 +77,16 @@
         return result;
     }
 
+    /**
+     * Decodes the MaintenanceAssociation entity from JSON.
+     *
+     * @param json    JSON to decode
+     * @param context decoding context
+     * @param mdNameLen the length of the corresponding MD's name
+     * @return decoded MaintenanceAssociation
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support decode operations
+     */
     public MaintenanceAssociation decode(ObjectNode json, CodecContext context, int mdNameLen) {
         if (json == null || !json.isObject()) {
             return null;
@@ -86,25 +101,7 @@
         }
 
         try {
-            MaIdShort maId = null;
-            MaIdShort.MaIdType maIdType = MaIdShort.MaIdType.valueOf(maNameType);
-            switch (maIdType) {
-                case PRIMARYVID:
-                    maId = MaIdPrimaryVid.asMaId(maName);
-                    break;
-                case TWOOCTET:
-                    maId = MaId2Octet.asMaId(maName);
-                    break;
-                case RFC2685VPNID:
-                    maId = MaIdRfc2685VpnId.asMaIdHex(maName);
-                    break;
-                case ICCY1731:
-                    maId = MaIdIccY1731.asMaId(maName);
-                    break;
-                case CHARACTERSTRING:
-                default:
-                    maId = MaIdCharStr.asMaId(maName);
-            }
+            MaIdShort maId = MdMaNameUtil.parseMaName(maNameType, maName);
             MaBuilder builder =
                     DefaultMaintenanceAssociation.builder(maId, mdNameLen);
 
@@ -140,6 +137,15 @@
 
     }
 
+    /**
+     * Encodes the collection of the MaintenanceAssociation entities.
+     *
+     * @param maEntities collection of MaintenanceAssociation to encode
+     * @param context  encoding context
+     * @return JSON array
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ArrayNode encode(Iterable<MaintenanceAssociation> maEntities, CodecContext context) {
         ArrayNode an = context.mapper().createArrayNode();
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MaintenanceDomainCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MaintenanceDomainCodec.java
index a6bcf01..89b7cc1 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MaintenanceDomainCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MaintenanceDomainCodec.java
@@ -24,10 +24,7 @@
 import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceDomain;
 import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceDomain.MdLevel;
 import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdDomainName;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdMacUint;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdNone;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdMaNameUtil;
 import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -50,6 +47,15 @@
 
     }
 
+    /**
+     * Encodes the MaintenanceDomain entity into JSON.
+     *
+     * @param md MaintenanceDomain to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(MaintenanceDomain md, CodecContext context) {
         checkNotNull(md, "Maintenance Domain cannot be null");
@@ -67,6 +73,15 @@
         return result;
     }
 
+    /**
+     * Decodes the MaintenanceDomain entity from JSON.
+     *
+     * @param json    JSON to decode
+     * @param context decoding context
+     * @return decoded MaintenanceDomain
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support decode operations
+     */
     @Override
     public MaintenanceDomain decode(ObjectNode json, CodecContext context) {
         if (json == null || !json.isObject()) {
@@ -82,24 +97,7 @@
         }
 
         try {
-            MdId mdId = null;
-            MdId.MdNameType nameType =
-                    MdId.MdNameType.valueOf(mdNameType);
-            switch (nameType) {
-                case DOMAINNAME:
-                    mdId = MdIdDomainName.asMdId(mdName);
-                    break;
-                case MACANDUINT:
-                    mdId = MdIdMacUint.asMdId(mdName);
-                    break;
-                case NONE:
-                    mdId = MdIdNone.asMdId();
-                    break;
-                case CHARACTERSTRING:
-                default:
-                    mdId = MdIdCharStr.asMdId(mdName);
-            }
-
+            MdId mdId = MdMaNameUtil.parseMdName(mdNameType, mdName);
             MaintenanceDomain.MdBuilder builder = DefaultMaintenanceDomain.builder(mdId);
             JsonNode mdLevelNode = mdNode.get(MD_LEVEL);
             if (mdLevelNode != null) {
@@ -118,6 +116,15 @@
         }
     }
 
+    /**
+     * Encodes the collection of the MaintenanceDomain entities.
+     *
+     * @param mdEntities collection of MaintenanceDomain to encode
+     * @param context  encoding context
+     * @return JSON array
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ArrayNode encode(Iterable<MaintenanceDomain> mdEntities, CodecContext context) {
         ArrayNode an = context.mapper().createArrayNode();
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepCodec.java
index 73a58b6..a095da8 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepCodec.java
@@ -53,6 +53,17 @@
     private static final String DEFECT_PRESENT_TIME = "defect-present-time";
     private static final String DEFECT_ABSENT_TIME = "defect-absent-time";
 
+    /**
+     * Decodes the Mep entity from JSON.
+     *
+     * @param json    JSON to decode
+     * @param context decoding context
+     * @param mdName The MD name
+     * @param maName The MA name
+     * @return decoded Mep
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support decode operations
+     */
      public Mep decode(ObjectNode json, CodecContext context, String
                         mdName, String maName) {
         if (json == null || !json.isObject()) {
@@ -127,6 +138,15 @@
         }
     }
 
+    /**
+     * Encodes the Mep entity into JSON.
+     *
+     * @param mep Mep to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(Mep mep, CodecContext context) {
         checkNotNull(mep, "Mep cannot be null");
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepEntryCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepEntryCodec.java
index d1618a7..f1799fb 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepEntryCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepEntryCodec.java
@@ -34,6 +34,15 @@
  */
 public class MepEntryCodec extends JsonCodec<MepEntry> {
 
+    /**
+     * Encodes the MepEntry entity into JSON.
+     *
+     * @param mepEntry  MepEntry to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(MepEntry mepEntry, CodecContext context) {
         checkNotNull(mepEntry, "Mep cannot be null");
@@ -41,7 +50,7 @@
         ObjectNode result = context.mapper().createObjectNode();
 
         //Get the common attributes
-        Mep mep = (Mep) mepEntry;
+        Mep mep = mepEntry;
         ObjectNode mepAttrs = new MepCodec().encode(mep, context);
         Iterator<Entry<String, JsonNode>> elements = mepAttrs.fields();
         while (elements.hasNext()) {
@@ -81,6 +90,15 @@
         return result;
     }
 
+    /**
+     * Encodes the collection of the MepEntry entities.
+     *
+     * @param mepEntryEntities collection of MepEntry to encode
+     * @param context  encoding context
+     * @return JSON array
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ArrayNode encode(Iterable<MepEntry> mepEntryEntities, CodecContext context) {
         ArrayNode an = context.mapper().createArrayNode();
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLbCreateCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLbCreateCodec.java
index e29415c..8b80237 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLbCreateCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLbCreateCodec.java
@@ -42,6 +42,15 @@
     public static final String VLAN_PRIORITY = "vlanPriority";
     public static final String LOOPBACK = "loopback";
 
+    /**
+     * Encodes the MepLbCreate entity into JSON.
+     *
+     * @param mepLbCreate MepLbCreate to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(MepLbCreate mepLbCreate, CodecContext context) {
         checkNotNull(mepLbCreate, "Mep Lb Create cannot be null");
@@ -66,7 +75,15 @@
         return result;
     }
 
-
+    /**
+     * Decodes the MepLbCreate entity from JSON.
+     *
+     * @param json    JSON to decode
+     * @param context decoding context
+     * @return decoded MepLbCreate
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support decode operations
+     */
     @Override
     public MepLbCreate decode(ObjectNode json, CodecContext context) {
         if (json == null || !json.isObject()) {
@@ -78,7 +95,7 @@
         JsonNode remoteMepIdNode = loopbackNode.get(REMOTE_MEP_ID);
         JsonNode remoteMepMacNode = loopbackNode.get(REMOTE_MEP_MAC);
 
-        MepLbCreate.MepLbCreateBuilder lbCreateBuilder = null;
+        MepLbCreate.MepLbCreateBuilder lbCreateBuilder;
         if (remoteMepIdNode != null) {
             MepId remoteMepId = MepId.valueOf((short) remoteMepIdNode.asInt());
             lbCreateBuilder = DefaultMepLbCreate.builder(remoteMepId);
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLbEntryCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLbEntryCodec.java
index 62409cd..8ff8e23 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLbEntryCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLbEntryCodec.java
@@ -28,6 +28,15 @@
  */
 public class MepLbEntryCodec extends JsonCodec<MepLbEntry> {
 
+    /**
+     * Encodes the MepLbEntry entity into JSON.
+     *
+     * @param mepLbEntry MepLbEntry to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(MepLbEntry mepLbEntry, CodecContext context) {
         checkNotNull(mepLbEntry, "Mep Lb Entry cannot be null");
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLtCreateCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLtCreateCodec.java
index 0141a73..ba7aabe 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLtCreateCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/MepLtCreateCodec.java
@@ -40,6 +40,15 @@
     private static final String LINKTRACE = "linktrace";
     private static final String USE_FDB_ONLY = "use-fdb-only";
 
+    /**
+     * Encodes the MepLtCreate entity into JSON.
+     *
+     * @param mepLtCreate MepLtCreate to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(MepLtCreate mepLtCreate, CodecContext context) {
         checkNotNull(mepLtCreate, "Mep Lt Create cannot be null");
@@ -62,7 +71,15 @@
         return result;
     }
 
-
+    /**
+     * Decodes the MepLtCreate entity from JSON.
+     *
+     * @param json    JSON to decode
+     * @param context decoding context
+     * @return decoded MepLtCreate
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support decode operations
+     */
     @Override
     public MepLtCreate decode(ObjectNode json, CodecContext context) {
         if (json == null || !json.isObject()) {
@@ -74,7 +91,7 @@
         JsonNode remoteMepIdNode = linktraceNode.get(REMOTE_MEP_ID);
         JsonNode remoteMepMacNode = linktraceNode.get(REMOTE_MEP_MAC);
 
-        MepLtCreate.MepLtCreateBuilder ltCreateBuilder = null;
+        MepLtCreate.MepLtCreateBuilder ltCreateBuilder;
         if (remoteMepIdNode != null) {
             MepId remoteMepId = MepId.valueOf((short) remoteMepIdNode.asInt());
             ltCreateBuilder = DefaultMepLtCreate.builder(remoteMepId);
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/RMepCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/RMepCodec.java
index ff4f775..6f4fc53 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/RMepCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/RMepCodec.java
@@ -33,20 +33,45 @@
  */
 public class RMepCodec extends JsonCodec<MepId> {
 
+    /**
+     * Encodes the MepId entity into JSON.
+     *
+     * @param rmep  MepId to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(MepId rmep, CodecContext context) {
         return context.mapper().createObjectNode().put("rmep", rmep.id());
     }
 
+    /**
+     * Encodes the collection of the MepId entities.
+     *
+     * @param rmeps collection of MepId to encode
+     * @param context  encoding context
+     * @return JSON array
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ArrayNode encode(Iterable<MepId> rmeps, CodecContext context) {
         ArrayNode an = context.mapper().createArrayNode();
-        rmeps.forEach(rmep -> {
-            an.add(encode(rmep, context));
-        });
+        rmeps.forEach(rmep -> an.add(encode(rmep, context)));
         return an;
     }
 
+    /**
+     * Decodes the MepId entity from JSON.
+     *
+     * @param json    JSON to decode
+     * @param context decoding context
+     * @return decoded MepId
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support decode operations
+     */
     @Override
     public MepId decode(ObjectNode json, CodecContext context) {
         if (json == null || !json.isObject()) {
@@ -60,6 +85,15 @@
 
     }
 
+    /**
+     * Decodes the MepId JSON array into a collection of entities.
+     *
+     * @param json    JSON array to decode
+     * @param context decoding context
+     * @return collection of decoded MepId
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support decode operations
+     */
     @Override
     public List<MepId> decode(ArrayNode json, CodecContext context) {
         List<MepId> rmepList = new ArrayList<>();
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/RemoteMepEntryCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/RemoteMepEntryCodec.java
index 4f8344a..329cc72 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/RemoteMepEntryCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/RemoteMepEntryCodec.java
@@ -29,6 +29,15 @@
  */
 public class RemoteMepEntryCodec extends JsonCodec<RemoteMepEntry> {
 
+    /**
+     * Encodes the RemoteMepEntry entity into JSON.
+     *
+     * @param remoteMepEntry  RemoteMepEntry to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(RemoteMepEntry remoteMepEntry, CodecContext context) {
         checkNotNull(remoteMepEntry, "Mep cannot be null");
@@ -62,6 +71,15 @@
         return result;
     }
 
+    /**
+     * Encodes the collection of the RemoteMepEntry entities.
+     *
+     * @param remoteMepEntries collection of RemoteMepEntry to encode
+     * @param context  encoding context
+     * @return JSON array
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ArrayNode encode(Iterable<RemoteMepEntry> remoteMepEntries,
             CodecContext context) {
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/VidCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/VidCodec.java
index a673719..cf97f01 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/VidCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/cfm/web/VidCodec.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.cfm.web;
 
+import static org.onlab.packet.VlanId.MAX_VLAN;
 import static org.onlab.util.Tools.nullIsIllegal;
 
 import java.util.ArrayList;
@@ -33,20 +34,45 @@
  */
 public class VidCodec extends JsonCodec<VlanId> {
 
+    /**
+     * Encodes the VlanId entity into JSON.
+     *
+     * @param vid VlanId to encode
+     * @param context encoding context
+     * @return JSON node
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ObjectNode encode(VlanId vid, CodecContext context) {
         return context.mapper().createObjectNode().put("vid", vid.toString());
     }
 
+    /**
+     * Encodes the collection of the VlanId entities.
+     *
+     * @param vids collection of VlanId to encode
+     * @param context  encoding context
+     * @return JSON array
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support encode operations
+     */
     @Override
     public ArrayNode encode(Iterable<VlanId> vids, CodecContext context) {
         ArrayNode an = context.mapper().createArrayNode();
-        vids.forEach(vid -> {
-            an.add(encode(vid, context));
-        });
+        vids.forEach(vid -> an.add(encode(vid, context)));
         return an;
     }
 
+    /**
+     * Decodes the VlanId entity from JSON.
+     *
+     * @param json    JSON to decode
+     * @param context decoding context
+     * @return decoded VlanId
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support decode operations
+     */
     @Override
     public VlanId decode(ObjectNode json, CodecContext context) {
         if (json == null || !json.isObject()) {
@@ -56,12 +82,21 @@
         JsonNode vidNode = json.get("vid");
 
         int vid = (nullIsIllegal(vidNode.asInt(), "vid is required"));
-        if (vid < 0 || vid > 4095) {
+        if (vid < 0 || vid > MAX_VLAN) {
             throw new IllegalArgumentException("VID values must be between 0 and 4095");
         }
         return VlanId.vlanId((short) vid);
     }
 
+    /**
+     * Decodes the VlanId JSON array into a collection of entities.
+     *
+     * @param json    JSON array to decode
+     * @param context decoding context
+     * @return collection of decoded VlanId
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                 support decode operations
+     */
     @Override
     public List<VlanId> decode(ArrayNode json, CodecContext context) {
         List<VlanId> vidList = new ArrayList<>();
diff --git a/apps/cfm/nbi/src/main/java/org/onosproject/soam/web/LossMeasurementThresholdCodec.java b/apps/cfm/nbi/src/main/java/org/onosproject/soam/web/LossMeasurementThresholdCodec.java
index 3a17f94..da87a82 100644
--- a/apps/cfm/nbi/src/main/java/org/onosproject/soam/web/LossMeasurementThresholdCodec.java
+++ b/apps/cfm/nbi/src/main/java/org/onosproject/soam/web/LossMeasurementThresholdCodec.java
@@ -29,6 +29,7 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onlab.util.Tools.nullIsIllegal;
+
 import static org.onosproject.incubator.net.l2monitoring.soam.loss.DefaultLmThreshold.*;
 
 /**
@@ -131,7 +132,7 @@
         LossMeasurementThreshold.LmThresholdBuilder builder = builder(thresholdId);
 
         if (thrNode.get("thresholds") != null) {
-            context.codec(ThresholdOption.class)
+            context.codec(LossMeasurementThreshold.ThresholdOption.class)
                     .decode((ArrayNode) (thrNode.get("thresholds")), context)
                     .forEach(builder::addToThreshold);
         }
