diff --git a/apps/yms/BUCK b/apps/yms/BUCK
index 73eef6f..6c9f6ca 100644
--- a/apps/yms/BUCK
+++ b/apps/yms/BUCK
@@ -1,5 +1,9 @@
 BUNDLES = [
   '//apps/yms/api:onos-apps-yms-api',
+  '//apps/yms/app:onos-apps-yms-app',
+  '//lib:onos-yang-datamodel',
+  '//lib:onos-yang-utils-generator',
+  '//lib:org.apache.servicemix.bundles.dom4j',
 ]
 
 onos_app(
diff --git a/apps/yms/api/BUCK b/apps/yms/api/BUCK
index 013d7cc..b8b02d6 100644
--- a/apps/yms/api/BUCK
+++ b/apps/yms/api/BUCK
@@ -1,5 +1,6 @@
 COMPILE_DEPS = [
   '//lib:CORE_DEPS',
+  '//lib:onos-yang-datamodel',
 ]
 
 osgi_jar_with_tests(
diff --git a/apps/yms/app/BUCK b/apps/yms/app/BUCK
new file mode 100644
index 0000000..97bd7a4
--- /dev/null
+++ b/apps/yms/app/BUCK
@@ -0,0 +1,11 @@
+COMPILE_DEPS = [
+  '//lib:CORE_DEPS',
+  '//apps/yms/api:onos-apps-yms-api',
+  '//lib:onos-yang-datamodel',
+  '//lib:onos-yang-utils-generator',
+  '//lib:org.apache.servicemix.bundles.dom4j',
+]
+
+osgi_jar_with_tests(
+  deps = COMPILE_DEPS,
+)
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/DefaultYdtAppContext.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/DefaultYdtAppContext.java
index 03502d4..0620420 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/DefaultYdtAppContext.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/DefaultYdtAppContext.java
@@ -71,6 +71,8 @@
     /**
      * Creates an instance of YANG application tree which is used by all node
      * needs delete list.
+     *
+     * @param data application data
      */
     DefaultYdtAppContext(T data) {
         appData = data;
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtLogicalNode.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtLogicalNode.java
index 05de8b3..3960c33 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtLogicalNode.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtLogicalNode.java
@@ -31,7 +31,10 @@
     private final String namespace;
 
     /**
-     * Creates a YANG logical node object.
+     * Creates an instance of YANG logical node object.
+     *
+     * @param name      logical root name
+     * @param namespace YANG namespace
      */
     public YdtLogicalNode(String name, String namespace) {
         super(LOGICAL_ROOT_NODE);
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNode.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNode.java
index 48cf53a..c8bd88b 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNode.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNode.java
@@ -269,6 +269,8 @@
      * to provide the correct behavior for their specific implementation.
      *
      * @param value value in a single instance node
+     * @throws YdtException when fails to add value for non single instance
+     *                      leaf node
      */
     public void addValue(String value) throws YdtException {
         throw new YdtException(errorMsg(FMT_VAL_N, getName()));
@@ -297,6 +299,8 @@
      *
      * @param value     value in a single instance leaf node
      * @param isKeyLeaf true, for key leaf; false non key leaf
+     * @throws YdtException when fails to add value for non single instance
+     *                      leaf node
      */
     public void addValueWithoutValidation(String value, boolean isKeyLeaf)
             throws YdtException {
@@ -311,6 +315,8 @@
      * to provide the correct behavior for their specific implementation.
      *
      * @param valueSet valueSet in a multi instance leaf node
+     * @throws YdtException when fails to add value set for non multi instance
+     *                      leaf node
      */
     public void addValueSet(Set<String> valueSet) throws YdtException {
         throw new YdtException(errorMsg(FMT_VAL_NS, getName()));
@@ -326,6 +332,8 @@
      * to validate the value.
      *
      * @param valueSet valueSet in a multi instance leaf node
+     * @throws YdtException when fails to add value set for non multi instance
+     *                      leaf node
      */
     public void addValueSetWithoutValidation(Set<String> valueSet)
             throws YdtException {
@@ -338,6 +346,8 @@
      * This default implementation throws an exception stating that
      * the duplicate entry found. Subclasses may override this method
      * to provide the correct behavior for their specific implementation.
+     *
+     * @throws YdtException when fails to process valid duplicate entry in YDT
      */
     void validDuplicateEntryProcessing() throws YdtException {
     }
@@ -565,6 +575,8 @@
 
     /**
      * Validates all multi Instance nodes inside current context.
+     *
+     * @throws YdtException when fails to validate multi instance node
      */
     public void validateMultiInstanceNode() throws YdtException {
 
@@ -598,6 +610,9 @@
      *
      * @param keyStringSet set to validate the key element uniqueness
      * @param ydtNodeList  list of instance's of same list
+     * @throws YdtException when user requested multi instance node instance's
+     *                      count doesn't fit into the allowed instance's limit
+     *                      or doesn't have unique key's
      */
     void validateInstances(Set<String> keyStringSet,
                            List<YdtNode<YdtMultiInstanceNode>>
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtUtils.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtUtils.java
index a9f15f2..738a69d 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtUtils.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtUtils.java
@@ -167,6 +167,7 @@
      * @param opType     user requested operation type
      * @param newNode    new requested ydt node
      * @param parentNode parent node under which new node to be added
+     * @param defOpType  YDT context operation type
      * @return operation type
      * @throws YdtException when user requested node operation type is
      *                      not valid as per parent node operation type
