diff --git a/runtime/api/pom.xml b/runtime/api/pom.xml
deleted file mode 100644
index 462eb3a..0000000
--- a/runtime/api/pom.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-  ~ Copyright 2017-present Open Networking Laboratory
-  ~
-  ~ 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.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onosproject</groupId>
-        <artifactId>onos-yang-runtime</artifactId>
-        <version>1.12-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>onos-yang-runtime-api</artifactId>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-model</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-compiler-api</artifactId>
-            <version>1.12-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>3.0.2</version>
-                <configuration>
-                    <skipIfEmpty>true</skipIfEmpty>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>default</id>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/ModelRegistrationParam.java b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/ModelRegistrationParam.java
deleted file mode 100644
index c1d2bf5..0000000
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/ModelRegistrationParam.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * 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.yang.runtime.api;
-
-import org.onosproject.yang.YangModel;
-import org.onosproject.yang.YangModuleId;
-
-/**
- * Representation of model registration parameters.
- */
-public interface ModelRegistrationParam {
-
-    /**
-     * Returns YANG model.
-     *
-     * @return YANG model
-     */
-    YangModel getYangModel();
-
-    /**
-     * Sets YANG model.
-     *
-     * @param model YANG model
-     */
-    void setYangModel(YangModel model);
-
-    /**
-     * Returns extended app related information of a module/sub-module.
-     *
-     * @param id YANG module identifier
-     * @return application module information
-     */
-    AppModuleInfo getAppModuleInfo(YangModuleId id);
-
-    /**
-     * Adds application module information associated with module identifier.
-     * It's expected that application should provide information for all the
-     * YANG modules.
-     *
-     * @param id   YANG module identifier
-     * @param info application information associated with module identifier
-     */
-    void addAppModuleInfo(YangModuleId id, AppModuleInfo info);
-}
diff --git a/runtime/app/pom.xml b/runtime/app/pom.xml
deleted file mode 100644
index 973b6a2..0000000
--- a/runtime/app/pom.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-<!--
-  ~ Copyright 2017-present Open Networking Laboratory
-  ~
-  ~ 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.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onosproject</groupId>
-        <artifactId>onos-yang-runtime</artifactId>
-        <version>1.12-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>onos-yang-runtime-app</artifactId>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-model</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-compiler-datamodel</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-runtime-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-runtime-uils</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-compiler-api</artifactId>
-            <version>1.12-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.onosproject</groupId>
-                <artifactId>onos-yang-compiler-maven-plugin</artifactId>
-                <version>${project.version}</version>
-                <configuration>
-                    <yangFilesDir>src/test/resources</yangFilesDir>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>default</id>
-                        <goals>
-                            <goal>yang2java</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>3.0.2</version>
-                <configuration>
-                    <skipIfEmpty>true</skipIfEmpty>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>default</id>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/package-info.java b/runtime/app/src/main/java/org/onosproject/yang/runtime/app/package-info.java
deleted file mode 100644
index d4e7f72..0000000
--- a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * 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.
- */
-
-/**
- * Implementation of runtime api.
- */
-package org.onosproject.yang.runtime.app;
\ No newline at end of file
diff --git a/runtime/pom.xml b/runtime/pom.xml
index 6760614..b046e4e 100644
--- a/runtime/pom.xml
+++ b/runtime/pom.xml
@@ -1,5 +1,5 @@
 <!--
-  ~ Copyright 2016-present Open Networking Laboratory
+  ~ Copyright 2017-present Open Networking Laboratory
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
@@ -13,6 +13,7 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
+
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -25,13 +26,7 @@
     </parent>
 
     <artifactId>onos-yang-runtime</artifactId>
-    <packaging>pom</packaging>
-
-    <modules>
-        <module>api</module>
-        <module>app</module>
-        <module>utils</module>
-    </modules>
+    <packaging>jar</packaging>
 
     <dependencies>
         <dependency>
@@ -44,6 +39,31 @@
             <artifactId>slf4j-api</artifactId>
             <version>1.7.21</version>
         </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-yang-model</artifactId>
+            <version>1.12-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-yang-compiler-api</artifactId>
+            <version>1.12-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-yang-compiler-datamodel</artifactId>
+            <version>1.12-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-yang-compiler-plugin-utils</artifactId>
+            <version>1.12-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>RELEASE</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/AnnotatedNodeInfo.java b/runtime/src/main/java/org/onosproject/yang/runtime/AnnotatedNodeInfo.java
similarity index 97%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/AnnotatedNodeInfo.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/AnnotatedNodeInfo.java
index d897cb9..3c249b3 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/AnnotatedNodeInfo.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/AnnotatedNodeInfo.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 import org.onosproject.yang.model.ResourceId;
 
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/Annotation.java b/runtime/src/main/java/org/onosproject/yang/runtime/Annotation.java
similarity index 95%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/Annotation.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/Annotation.java
index e2db85d..dd01e93 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/Annotation.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/Annotation.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 /**
  * Abstraction of an entity that represents annotated attribute.
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/AppModuleInfo.java b/runtime/src/main/java/org/onosproject/yang/runtime/AppModuleInfo.java
similarity index 80%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/AppModuleInfo.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/AppModuleInfo.java
index f75f119..4ad75a4 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/AppModuleInfo.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/AppModuleInfo.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 import java.util.List;
 
@@ -33,13 +33,6 @@
     Class<?> getModuleClass();
 
     /**
-     * Sets module class.
-     *
-     * @param moduleClass module class
-     */
-    void setModuleClass(Class<?> moduleClass);
-
-    /**
      * Reference RFC 7895
      * Retrieves the list of YANG feature names from this module that are
      * supported by the server, regardless of whether they are
@@ -48,11 +41,4 @@
      * @return list of YANG features
      */
     List<String> getFeatureList();
-
-    /**
-     * Adds supported feature.
-     *
-     * @param feature supported feature
-     */
-    void addFeature(String feature);
 }
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeData.java b/runtime/src/main/java/org/onosproject/yang/runtime/CompositeData.java
similarity index 92%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeData.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/CompositeData.java
index ea9667f..33653b3 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeData.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/CompositeData.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 import java.util.List;
 
@@ -60,9 +60,9 @@
         Builder addAnnotatedNodeInfo(AnnotatedNodeInfo info);
 
         /**
-         * Builds an instance of decoded output.
+         * Builds an instance of composite data.
          *
-         * @return decoded output
+         * @return composite data
          */
         CompositeData build();
     }
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeStream.java b/runtime/src/main/java/org/onosproject/yang/runtime/CompositeStream.java
similarity index 95%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeStream.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/CompositeStream.java
index 066e230..c64d8e6 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeStream.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/CompositeStream.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 import java.io.InputStream;
 
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/DefaultAnnotatedNodeInfo.java b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultAnnotatedNodeInfo.java
new file mode 100644
index 0000000..5e460aa
--- /dev/null
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultAnnotatedNodeInfo.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.yang.runtime;
+
+import org.onosproject.yang.model.ResourceId;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static java.util.Objects.hash;
+
+/**
+ * Representation of default implementation of annotated node information.
+ */
+public class DefaultAnnotatedNodeInfo implements AnnotatedNodeInfo {
+
+    private ResourceId resourceId;
+    private List<Annotation> annotations;
+
+    /**
+     * Creates an instance of data node.
+     *
+     * @param b data node builder
+     */
+    protected DefaultAnnotatedNodeInfo(Builder b) {
+        resourceId = b.resourceId;
+        annotations = b.annotations;
+    }
+
+    @Override
+    public ResourceId resourceId() {
+        return resourceId;
+    }
+
+    @Override
+    public List<Annotation> annotations() {
+        return annotations;
+    }
+
+    @Override
+    public int hashCode() {
+        return hash(resourceId, annotations);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof DefaultAnnotatedNodeInfo) {
+            DefaultAnnotatedNodeInfo that = (DefaultAnnotatedNodeInfo) obj;
+            return Objects.equals(resourceId, that.resourceId) &&
+                    Objects.equals(annotations, that.annotations);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("resourceId", resourceId)
+                .add("annotations", annotations)
+                .toString();
+    }
+
+    /**
+     * Retrieves a new annotated node info builder.
+     *
+     * @return annotated node info builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * Represents implementation of annotated node information builder.
+     */
+    public static class Builder implements AnnotatedNodeInfo.Builder {
+
+        private ResourceId resourceId;
+        private List<Annotation> annotations;
+
+        /**
+         * Creates an instance of annotated node info builder.
+         */
+        public Builder() {
+            annotations = new LinkedList<>();
+        }
+
+        @Override
+        public Builder resourceId(ResourceId id) {
+            resourceId = id;
+            return this;
+        }
+
+        @Override
+        public Builder addAnnotation(Annotation a) {
+            annotations.add(a);
+            return this;
+        }
+
+        @Override
+        public AnnotatedNodeInfo build() {
+            return new DefaultAnnotatedNodeInfo(this);
+        }
+    }
+}
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/DefaultAnnotation.java b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultAnnotation.java
new file mode 100644
index 0000000..9c011e7
--- /dev/null
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultAnnotation.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.yang.runtime;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static java.util.Objects.hash;
+
+/**
+ * Representation of default implementation of annotation.
+ */
+public class DefaultAnnotation implements Annotation {
+
+    private String name;
+    private String value;
+
+    /**
+     * Creates an instance of annotation.
+     *
+     * @param n annotation name
+     * @param v annotation value
+     */
+    protected DefaultAnnotation(String n, String v) {
+        name = n;
+        value = v;
+    }
+
+    @Override
+    public String name() {
+        return name;
+    }
+
+    @Override
+    public String value() {
+        return value;
+    }
+
+    @Override
+    public int hashCode() {
+        return hash(name, value);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof DefaultAnnotation) {
+            DefaultAnnotation that = (DefaultAnnotation) obj;
+            return Objects.equals(name, that.name) &&
+                    Objects.equals(value, that.value);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("name", name)
+                .add("value", value)
+                .toString();
+    }
+}
diff --git a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultAppModuleInfo.java b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultAppModuleInfo.java
similarity index 77%
rename from runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultAppModuleInfo.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/DefaultAppModuleInfo.java
index 8fdc82b..ff1f4e1 100644
--- a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultAppModuleInfo.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultAppModuleInfo.java
@@ -14,30 +14,30 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime;
 
-import org.onosproject.yang.runtime.api.AppModuleInfo;
-
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
-import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
  * Represents default application module information.
  */
 public class DefaultAppModuleInfo implements AppModuleInfo {
 
-    private Class<?> module;
     private final List<String> features;
+    private Class<?> module;
 
     /**
      * Creates an instance of application module information.
+     *
+     * @param m module's class
+     * @param f supported features
      */
-    public DefaultAppModuleInfo() {
-        features = new ArrayList<>();
+    public DefaultAppModuleInfo(Class<?> m, List<String> f) {
+        features = f;
+        module = m;
     }
 
     @Override
@@ -46,22 +46,11 @@
     }
 
     @Override
-    public void setModuleClass(Class<?> moduleClass) {
-        checkNotNull(moduleClass);
-        module = moduleClass;
-    }
-
-    @Override
     public List<String> getFeatureList() {
         return features;
     }
 
     @Override
-    public void addFeature(String feature) {
-        features.add(feature);
-    }
-
-    @Override
     public int hashCode() {
         return Objects.hash(module, features);
     }
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/DefaultCompositeData.java b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultCompositeData.java
new file mode 100644
index 0000000..b2e9f72
--- /dev/null
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultCompositeData.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.yang.runtime;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static java.util.Objects.hash;
+
+/**
+ * Representation of default implementation of composite data.
+ */
+public class DefaultCompositeData implements CompositeData {
+
+    private ResourceData data;
+    private List<AnnotatedNodeInfo> annotationsInfo;
+
+    /**
+     * Creates an instance of composite data.
+     *
+     * @param b composite data builder
+     */
+    protected DefaultCompositeData(Builder b) {
+        data = b.data;
+        annotationsInfo = b.annotationsInfo;
+    }
+
+    @Override
+    public ResourceData resourceData() {
+        return data;
+    }
+
+    @Override
+    public List<AnnotatedNodeInfo> annotatedNodesInfo() {
+        return annotationsInfo;
+    }
+
+    @Override
+    public int hashCode() {
+        return hash(data, annotationsInfo);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof DefaultCompositeData) {
+            DefaultCompositeData that = (DefaultCompositeData) obj;
+            return Objects.equals(data, that.data) &&
+                    Objects.equals(annotationsInfo, that.annotationsInfo);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("data", data)
+                .add("annotationsInfo", annotationsInfo)
+                .toString();
+    }
+
+    /**
+     * Retrieves a new composite data builder.
+     *
+     * @return composite data builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * Represents implementation of composite data builder.
+     */
+    public static class Builder implements CompositeData.Builder {
+
+        private ResourceData data;
+        private List<AnnotatedNodeInfo> annotationsInfo;
+
+        /**
+         * Creates an instance of composite data builder.
+         */
+        protected Builder() {
+            annotationsInfo = new LinkedList<>();
+        }
+
+        @Override
+        public Builder resourceData(ResourceData rd) {
+            data = rd;
+            return this;
+        }
+
+        @Override
+        public Builder addAnnotatedNodeInfo(AnnotatedNodeInfo info) {
+            annotationsInfo.add(info);
+            return this;
+        }
+
+        @Override
+        public CompositeData build() {
+            return new DefaultCompositeData(this);
+        }
+    }
+}
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/DefaultCompositeStream.java b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultCompositeStream.java
new file mode 100644
index 0000000..68a4b89
--- /dev/null
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultCompositeStream.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.yang.runtime;
+
+import java.io.InputStream;
+
+/**
+ * Representation of default implementation of composite stream.
+ */
+public class DefaultCompositeStream implements CompositeStream {
+
+    private String resourceId;
+    private InputStream resourceData;
+
+    /**
+     * Creates an instance of composite stream.
+     *
+     * @param id   uri as per RFC 3986
+     * @param data input data stream
+     */
+    public DefaultCompositeStream(String id, InputStream data) {
+        resourceId = id;
+        resourceData = data;
+    }
+
+    @Override
+    public String resourceId() {
+        return resourceId;
+    }
+
+    @Override
+    public InputStream resourceData() {
+        return resourceData;
+    }
+}
+
diff --git a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultModelRegistrationParam.java b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultModelRegistrationParam.java
similarity index 61%
rename from runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultModelRegistrationParam.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/DefaultModelRegistrationParam.java
index 36d72be..54739e8 100644
--- a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultModelRegistrationParam.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultModelRegistrationParam.java
@@ -14,33 +14,33 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime;
 
 import org.onosproject.yang.YangModel;
 import org.onosproject.yang.YangModuleId;
-import org.onosproject.yang.runtime.api.AppModuleInfo;
-import org.onosproject.yang.runtime.api.ModelRegistrationParam;
 
-import java.util.LinkedHashMap;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
-import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
  * Represents default model registration parameter.
  */
 public class DefaultModelRegistrationParam implements ModelRegistrationParam {
 
-    private YangModel model;
     private final Map<YangModuleId, AppModuleInfo> appInfoMap;
+    private YangModel model;
 
     /**
-     * Creates an instance of model registration parameter.
+     * Creates an instance of model registration param.
+     *
+     * @param b model registration param builder
      */
-    public DefaultModelRegistrationParam() {
-        appInfoMap = new LinkedHashMap<>();
+    protected DefaultModelRegistrationParam(Builder b) {
+        appInfoMap = b.appInfoMap;
+        model = b.model;
     }
 
     @Override
@@ -49,22 +49,11 @@
     }
 
     @Override
-    public void setYangModel(YangModel model) {
-        checkNotNull(model);
-        this.model = model;
-    }
-
-    @Override
     public AppModuleInfo getAppModuleInfo(YangModuleId id) {
         return appInfoMap.get(id);
     }
 
     @Override
-    public void addAppModuleInfo(YangModuleId id, AppModuleInfo info) {
-        appInfoMap.put(id, info);
-    }
-
-    @Override
     public int hashCode() {
         return Objects.hash(appInfoMap, model);
     }
@@ -94,4 +83,47 @@
                 .add("appInfo", appInfoMap)
                 .toString();
     }
+
+    /**
+     * Retrieves a new model registration parameter builder.
+     *
+     * @return model registration parameter builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * Represents implementation of model registration parameter builder.
+     */
+    public static class Builder implements ModelRegistrationParam.Builder {
+
+        private final Map<YangModuleId, AppModuleInfo> appInfoMap;
+        private YangModel model;
+
+        /**
+         * Creates an instance of model registration parameter builder.
+         */
+        public Builder() {
+            appInfoMap = new HashMap<>();
+        }
+
+        @Override
+        public Builder addAppModuleInfo(
+                YangModuleId id, AppModuleInfo info) {
+            appInfoMap.put(id, info);
+            return this;
+        }
+
+        @Override
+        public ModelRegistrationParam.Builder setYangModel(YangModel m) {
+            model = m;
+            return this;
+        }
+
+        @Override
+        public DefaultModelRegistrationParam build() {
+            return new DefaultModelRegistrationParam(this);
+        }
+    }
 }
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/DefaultResourceData.java b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultResourceData.java
new file mode 100644
index 0000000..dfdf5e2
--- /dev/null
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultResourceData.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.yang.runtime;
+
+import org.onosproject.yang.model.DataNode;
+import org.onosproject.yang.model.ResourceId;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static java.util.Objects.hash;
+
+/**
+ * Representation of default implementation of resource data.
+ */
+public class DefaultResourceData implements ResourceData {
+
+    private List<DataNode> nodes;
+    private ResourceId resourceId;
+
+    /**
+     * Creates an instance of resource data.
+     *
+     * @param b resource data builder
+     */
+    protected DefaultResourceData(Builder b) {
+        resourceId = b.resourceId;
+        nodes = b.nodes;
+    }
+
+    @Override
+    public List<DataNode> dataNodes() {
+        return nodes;
+    }
+
+    @Override
+    public ResourceId resourceId() {
+        return resourceId;
+    }
+
+    @Override
+    public int hashCode() {
+        return hash(resourceId, nodes);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof DefaultResourceData) {
+            DefaultResourceData that = (DefaultResourceData) obj;
+            return Objects.equals(resourceId, that.resourceId) &&
+                    Objects.equals(nodes, that.nodes);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("resourceId", resourceId)
+                .add("nodes", nodes)
+                .toString();
+    }
+
+    /**
+     * Retrieves a new resource data builder.
+     *
+     * @return resource data builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * Represents implementation of resource data builder.
+     */
+    public static class Builder implements ResourceData.Builder {
+
+        private List<DataNode> nodes;
+        private ResourceId resourceId;
+
+        /**
+         * Creates an instance of resource data builder.
+         */
+        protected Builder() {
+            nodes = new LinkedList<>();
+        }
+
+        @Override
+        public ResourceData.Builder addDataNode(DataNode node) {
+            nodes.add(node);
+            return this;
+        }
+
+        @Override
+        public ResourceData.Builder resourceId(ResourceId id) {
+            resourceId = id;
+            return this;
+        }
+
+        @Override
+        public ResourceData build() {
+            return new DefaultResourceData(this);
+        }
+    }
+}
diff --git a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangSerializerContext.java b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultYangSerializerContext.java
similarity index 91%
rename from runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangSerializerContext.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/DefaultYangSerializerContext.java
index 65f699e..9da0b01 100644
--- a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangSerializerContext.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/DefaultYangSerializerContext.java
@@ -14,10 +14,9 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime;
 
 import org.onosproject.yang.model.SchemaContext;
-import org.onosproject.yang.runtime.api.YangSerializerContext;
 
 /**
  * Represents YANG serializer context implementation.
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/ModelRegistrationParam.java b/runtime/src/main/java/org/onosproject/yang/runtime/ModelRegistrationParam.java
new file mode 100644
index 0000000..2308427
--- /dev/null
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/ModelRegistrationParam.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.yang.runtime;
+
+import org.onosproject.yang.YangModel;
+import org.onosproject.yang.YangModuleId;
+
+/**
+ * Representation of model registration parameters.
+ */
+public interface ModelRegistrationParam {
+
+    /**
+     * Returns YANG model.
+     *
+     * @return YANG model
+     */
+    YangModel getYangModel();
+
+    /**
+     * Returns extended app related information of a module/sub-module.
+     *
+     * @param id YANG module identifier
+     * @return application module information
+     */
+    AppModuleInfo getAppModuleInfo(YangModuleId id);
+
+    /**
+     * Abstraction of an entity that represents builder of model registration
+     * parameters.
+     */
+    interface Builder {
+
+        /**
+         * Adds application module information associated with module identifier.
+         * It's expected that application should provide information for all the
+         * YANG modules.
+         *
+         * @param id   YANG module identifier
+         * @param info application information associated with module identifier
+         * @return builder
+         */
+        Builder addAppModuleInfo(YangModuleId id, AppModuleInfo info);
+
+        /**
+         * Sets YANG model.
+         *
+         * @param model YANG model
+         * @return builder
+         */
+        Builder setYangModel(YangModel model);
+
+        /**
+         * Builds an instance of model registration param.
+         *
+         * @return model registration param
+         */
+        ModelRegistrationParam build();
+    }
+}
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/ResourceData.java b/runtime/src/main/java/org/onosproject/yang/runtime/ResourceData.java
similarity index 90%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/ResourceData.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/ResourceData.java
index 05e2137..b4af900 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/ResourceData.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/ResourceData.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.ResourceId;
@@ -62,10 +62,10 @@
         Builder resourceId(ResourceId identifier);
 
         /**
-         * Builds an instance of composite data.
+         * Builds an instance of resource data.
          *
-         * @return composite data
+         * @return resource data
          */
-        CompositeStream build();
+        ResourceData build();
     }
 }
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangModelRegistry.java b/runtime/src/main/java/org/onosproject/yang/runtime/YangModelRegistry.java
similarity index 96%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangModelRegistry.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/YangModelRegistry.java
index 036c399..a89212e 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangModelRegistry.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/YangModelRegistry.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 import org.onosproject.yang.YangModel;
 
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangRuntimeException.java b/runtime/src/main/java/org/onosproject/yang/runtime/YangRuntimeException.java
similarity index 97%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangRuntimeException.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/YangRuntimeException.java
index f6b6f24..744cbb6 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangRuntimeException.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/YangRuntimeException.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 /**
  * Represents base class for exceptions in YANG runtime operations.
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangRuntimeService.java b/runtime/src/main/java/org/onosproject/yang/runtime/YangRuntimeService.java
similarity index 98%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangRuntimeService.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/YangRuntimeService.java
index e75d329..1d54ff7 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangRuntimeService.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/YangRuntimeService.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 /**
  * Service for encoding and decoding between internal and external model
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializer.java b/runtime/src/main/java/org/onosproject/yang/runtime/YangSerializer.java
similarity index 98%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializer.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/YangSerializer.java
index bc22af0..15d1b90 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializer.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/YangSerializer.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 /**
  * Abstraction of entity capable of encoding and decoding arbitrary
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializerContext.java b/runtime/src/main/java/org/onosproject/yang/runtime/YangSerializerContext.java
similarity index 95%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializerContext.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/YangSerializerContext.java
index 1feee33..a5972e6 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializerContext.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/YangSerializerContext.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 import org.onosproject.yang.model.SchemaContext;
 
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializerRegistry.java b/runtime/src/main/java/org/onosproject/yang/runtime/YangSerializerRegistry.java
similarity index 83%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializerRegistry.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/YangSerializerRegistry.java
index 1d1b335..3a3610d 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializerRegistry.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/YangSerializerRegistry.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.api;
+package org.onosproject.yang.runtime;
 
 import java.util.Set;
 
@@ -24,7 +24,8 @@
 public interface YangSerializerRegistry {
 
     /**
-     * Registers a new serializer.
+     * Registers a new serializer. Overwrites, if serializer for a given data
+     * format is already registered.
      *
      * @param serializer serializer to be registered
      */
@@ -34,6 +35,7 @@
      * Unregisters the specified serializer.
      *
      * @param serializer serializer to be unregistered
+     * @throws IllegalArgumentException when input serializer is not registered
      */
     void unregisterSerializer(YangSerializer serializer);
 
@@ -43,5 +45,4 @@
      * @return collection of serializers
      */
     Set<YangSerializer> getSerializers();
-
 }
diff --git a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/RuntimeHelper.java b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/RuntimeHelper.java
similarity index 90%
rename from runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/RuntimeHelper.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/helperutils/RuntimeHelper.java
index 5792862..63aa34a 100644
--- a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/RuntimeHelper.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/RuntimeHelper.java
@@ -14,12 +14,13 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.utils;
+package org.onosproject.yang.runtime.helperutils;
 
 import org.onosproject.yang.YangModel;
 import org.onosproject.yang.YangModule;
 import org.onosproject.yang.compiler.datamodel.YangNode;
 import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
+import org.onosproject.yang.compiler.plugin.utils.YangApacheUtils;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -114,4 +115,14 @@
     public static String getServiceName(YangSchemaNode schemaNode) {
         return getInterfaceClassName(schemaNode) + SERVICE;
     }
+
+    /**
+     * Returns date in string format.
+     *
+     * @param schemaNode schema node
+     * @return date in string format
+     */
+    public static String getDateInStringFormat(YangNode schemaNode) {
+        return YangApacheUtils.getDateInStringFormat(schemaNode);
+    }
 }
diff --git a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/SerializerHelper.java b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/SerializerHelper.java
similarity index 96%
rename from runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/SerializerHelper.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/helperutils/SerializerHelper.java
index 4315c35..e786673 100644
--- a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/SerializerHelper.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/SerializerHelper.java
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.utils;
+package org.onosproject.yang.runtime.helperutils;
 
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.ResourceId;
-import org.onosproject.yang.runtime.api.YangSerializerContext;
+import org.onosproject.yang.runtime.YangSerializerContext;
 
 import java.util.List;
 
@@ -136,7 +136,7 @@
      */
     public static Builder addDataNode(Builder builder,
                                       String name, String namespace,
-                                      String value, DataNode type) {
+                                      String value, DataNode.Type type) {
         // TODO implementation
         return null;
     }
diff --git a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/package-info.java
similarity index 92%
rename from runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/helperutils/package-info.java
index 145ee65..6788c8a 100644
--- a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/package-info.java
@@ -17,4 +17,4 @@
 /**
  * Representation of YANG runtime utilities.
  */
-package org.onosproject.yang.runtime.utils;
\ No newline at end of file
+package org.onosproject.yang.runtime.helperutils;
\ No newline at end of file
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/package-info.java b/runtime/src/main/java/org/onosproject/yang/runtime/package-info.java
similarity index 94%
rename from runtime/api/src/main/java/org/onosproject/yang/runtime/api/package-info.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/package-info.java
index 5a0f954..bd6976e 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/package-info.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/package-info.java
@@ -17,4 +17,4 @@
 /**
  * Set of facilities for processing and working with compiled YANG models.
  */
-package org.onosproject.yang.runtime.api;
\ No newline at end of file
+package org.onosproject.yang.runtime;
\ No newline at end of file
diff --git a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangModelRegistry.java b/runtime/src/main/java/org/onosproject/yang/runtime/ymrimpl/DefaultYangModelRegistry.java
similarity index 96%
rename from runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangModelRegistry.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/ymrimpl/DefaultYangModelRegistry.java
index f5e3a60..b064e9b 100644
--- a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangModelRegistry.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/ymrimpl/DefaultYangModelRegistry.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.ymrimpl;
 
 import org.onosproject.yang.YangModel;
 import org.onosproject.yang.YangModuleId;
@@ -28,9 +28,9 @@
 import org.onosproject.yang.model.SchemaContext;
 import org.onosproject.yang.model.SchemaId;
 import org.onosproject.yang.model.SingleInstanceNodeContext;
-import org.onosproject.yang.runtime.api.AppModuleInfo;
-import org.onosproject.yang.runtime.api.ModelRegistrationParam;
-import org.onosproject.yang.runtime.api.YangModelRegistry;
+import org.onosproject.yang.runtime.AppModuleInfo;
+import org.onosproject.yang.runtime.ModelRegistrationParam;
+import org.onosproject.yang.runtime.YangModelRegistry;
 import org.slf4j.Logger;
 
 import java.util.ArrayList;
@@ -44,11 +44,11 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static java.util.Collections.sort;
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.getNodeIdFromSchemaId;
-import static org.onosproject.yang.compiler.plugin.utils.YangApacheUtils.getDateInStringFormat;
-import static org.onosproject.yang.runtime.utils.RuntimeHelper.getInterfaceClassName;
-import static org.onosproject.yang.runtime.utils.RuntimeHelper.getNodes;
-import static org.onosproject.yang.runtime.utils.RuntimeHelper.getOpParamClassName;
-import static org.onosproject.yang.runtime.utils.RuntimeHelper.getServiceName;
+import static org.onosproject.yang.runtime.helperutils.RuntimeHelper.getDateInStringFormat;
+import static org.onosproject.yang.runtime.helperutils.RuntimeHelper.getInterfaceClassName;
+import static org.onosproject.yang.runtime.helperutils.RuntimeHelper.getNodes;
+import static org.onosproject.yang.runtime.helperutils.RuntimeHelper.getOpParamClassName;
+import static org.onosproject.yang.runtime.helperutils.RuntimeHelper.getServiceName;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
diff --git a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java b/runtime/src/main/java/org/onosproject/yang/runtime/ymrimpl/package-info.java
similarity index 86%
copy from runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java
copy to runtime/src/main/java/org/onosproject/yang/runtime/ymrimpl/package-info.java
index 145ee65..2f5448f 100644
--- a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/ymrimpl/package-info.java
@@ -15,6 +15,6 @@
  */
 
 /**
- * Representation of YANG runtime utilities.
+ * Contains implementation of YANG model registry.
  */
-package org.onosproject.yang.runtime.utils;
\ No newline at end of file
+package org.onosproject.yang.runtime.ymrimpl;
\ No newline at end of file
diff --git a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangRuntimeHandler.java b/runtime/src/main/java/org/onosproject/yang/runtime/yrhimpl/DefaultYangRuntimeHandler.java
similarity index 79%
rename from runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangRuntimeHandler.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/yrhimpl/DefaultYangRuntimeHandler.java
index b832370..22667dd 100644
--- a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangRuntimeHandler.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/yrhimpl/DefaultYangRuntimeHandler.java
@@ -14,16 +14,19 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.yrhimpl;
 
 import org.onosproject.yang.model.SchemaContext;
-import org.onosproject.yang.runtime.api.CompositeData;
-import org.onosproject.yang.runtime.api.CompositeStream;
-import org.onosproject.yang.runtime.api.YangRuntimeException;
-import org.onosproject.yang.runtime.api.YangRuntimeService;
-import org.onosproject.yang.runtime.api.YangSerializer;
-import org.onosproject.yang.runtime.api.YangSerializerContext;
-import org.onosproject.yang.runtime.api.YangSerializerRegistry;
+import org.onosproject.yang.runtime.CompositeData;
+import org.onosproject.yang.runtime.CompositeStream;
+import org.onosproject.yang.runtime.DefaultYangSerializerContext;
+import org.onosproject.yang.runtime.YangRuntimeException;
+import org.onosproject.yang.runtime.YangRuntimeService;
+import org.onosproject.yang.runtime.YangSerializer;
+import org.onosproject.yang.runtime.YangSerializerContext;
+import org.onosproject.yang.runtime.YangSerializerRegistry;
+import org.onosproject.yang.runtime.ysrimpl.DefaultYangSerializerRegistry;
+import org.onosproject.yang.runtime.ymrimpl.DefaultYangModelRegistry;
 import org.slf4j.Logger;
 
 import static org.slf4j.LoggerFactory.getLogger;
diff --git a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java b/runtime/src/main/java/org/onosproject/yang/runtime/yrhimpl/package-info.java
similarity index 86%
copy from runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java
copy to runtime/src/main/java/org/onosproject/yang/runtime/yrhimpl/package-info.java
index 145ee65..d4aef06 100644
--- a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/yrhimpl/package-info.java
@@ -15,6 +15,6 @@
  */
 
 /**
- * Representation of YANG runtime utilities.
+ * Contains implementation of YANG runtime service.
  */
-package org.onosproject.yang.runtime.utils;
\ No newline at end of file
+package org.onosproject.yang.runtime.yrhimpl;
\ No newline at end of file
diff --git a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangSerializerRegistry.java b/runtime/src/main/java/org/onosproject/yang/runtime/ysrimpl/DefaultYangSerializerRegistry.java
similarity index 91%
rename from runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangSerializerRegistry.java
rename to runtime/src/main/java/org/onosproject/yang/runtime/ysrimpl/DefaultYangSerializerRegistry.java
index daf4ac6..df652b5 100644
--- a/runtime/app/src/main/java/org/onosproject/yang/runtime/app/DefaultYangSerializerRegistry.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/ysrimpl/DefaultYangSerializerRegistry.java
@@ -14,10 +14,11 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.ysrimpl;
 
-import org.onosproject.yang.runtime.api.YangSerializer;
-import org.onosproject.yang.runtime.api.YangSerializerRegistry;
+import org.onosproject.yang.runtime.YangSerializer;
+import org.onosproject.yang.runtime.YangSerializerRegistry;
+import org.onosproject.yang.runtime.ymrimpl.DefaultYangModelRegistry;
 import org.slf4j.Logger;
 
 import java.util.HashSet;
diff --git a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java b/runtime/src/main/java/org/onosproject/yang/runtime/ysrimpl/package-info.java
similarity index 86%
copy from runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java
copy to runtime/src/main/java/org/onosproject/yang/runtime/ysrimpl/package-info.java
index 145ee65..93f65f4 100644
--- a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/ysrimpl/package-info.java
@@ -15,6 +15,6 @@
  */
 
 /**
- * Representation of YANG runtime utilities.
+ * Contains implementation of YANG schema registry.
  */
-package org.onosproject.yang.runtime.utils;
\ No newline at end of file
+package org.onosproject.yang.runtime.ysrimpl;
\ No newline at end of file
diff --git a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/DefaultYangModelRegistryTest.java b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/DefaultYangModelRegistryTest.java
similarity index 98%
rename from runtime/app/src/test/java/org/onosproject/yang/runtime/app/DefaultYangModelRegistryTest.java
rename to runtime/src/main/test/java/org/onosproject/yang/runtime/impl/DefaultYangModelRegistryTest.java
index baa6e7b..8d6caba 100644
--- a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/DefaultYangModelRegistryTest.java
+++ b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/DefaultYangModelRegistryTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.impl;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -22,6 +22,7 @@
 import org.onosproject.yang.compiler.datamodel.YangNode;
 import org.onosproject.yang.compiler.datamodel.YangRevision;
 import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
+import org.onosproject.yang.runtime.ymrimpl.DefaultYangModelRegistry;
 
 import java.io.IOException;
 
diff --git a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/RuntimeHandlerTest.java b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/RuntimeHandlerTest.java
similarity index 75%
rename from runtime/app/src/test/java/org/onosproject/yang/runtime/app/RuntimeHandlerTest.java
rename to runtime/src/main/test/java/org/onosproject/yang/runtime/impl/RuntimeHandlerTest.java
index 24a2e13..1d6369b 100644
--- a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/RuntimeHandlerTest.java
+++ b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/RuntimeHandlerTest.java
@@ -14,19 +14,21 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.impl;
 
 import org.junit.Test;
-import org.onosproject.yang.runtime.api.CompositeData;
-import org.onosproject.yang.runtime.api.CompositeStream;
-import org.onosproject.yang.runtime.api.YangRuntimeService;
-import org.onosproject.yang.runtime.api.YangSerializer;
+import org.onosproject.yang.runtime.CompositeData;
+import org.onosproject.yang.runtime.CompositeStream;
+import org.onosproject.yang.runtime.YangRuntimeService;
+import org.onosproject.yang.runtime.YangSerializer;
+import org.onosproject.yang.runtime.yrhimpl.DefaultYangRuntimeHandler;
+import org.onosproject.yang.runtime.ysrimpl.DefaultYangSerializerRegistry;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
-import static org.onosproject.yang.runtime.app.SerializerRegistryTest.JSON;
-import static org.onosproject.yang.runtime.app.SerializerRegistryTest.XML;
-import static org.onosproject.yang.runtime.app.TestSerializer.TESTSTREAM;
+import static org.onosproject.yang.runtime.impl.SerializerRegistryTest.JSON;
+import static org.onosproject.yang.runtime.impl.SerializerRegistryTest.XML;
+import static org.onosproject.yang.runtime.impl.TestSerializer.TESTSTREAM;
 
 /**
  * Test cases for YANG runtime handler.
diff --git a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/SerializerRegistryTest.java b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/SerializerRegistryTest.java
similarity index 94%
rename from runtime/app/src/test/java/org/onosproject/yang/runtime/app/SerializerRegistryTest.java
rename to runtime/src/main/test/java/org/onosproject/yang/runtime/impl/SerializerRegistryTest.java
index 5d4b206..6d9f88c 100644
--- a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/SerializerRegistryTest.java
+++ b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/SerializerRegistryTest.java
@@ -14,10 +14,11 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.impl;
 
 import org.junit.Test;
-import org.onosproject.yang.runtime.api.YangSerializer;
+import org.onosproject.yang.runtime.YangSerializer;
+import org.onosproject.yang.runtime.ysrimpl.DefaultYangSerializerRegistry;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
diff --git a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestCaseSchemaContext.java b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestCaseSchemaContext.java
similarity index 89%
rename from runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestCaseSchemaContext.java
rename to runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestCaseSchemaContext.java
index 136fd58..cedfdf5 100644
--- a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestCaseSchemaContext.java
+++ b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestCaseSchemaContext.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.impl;
 
 import org.junit.Test;
 import org.onosproject.yang.compiler.datamodel.DefaultYangNamespace;
@@ -24,12 +24,13 @@
 import org.onosproject.yang.compiler.datamodel.YangSchemaNodeIdentifier;
 import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
 import org.onosproject.yang.model.SchemaId;
+import org.onosproject.yang.runtime.ymrimpl.DefaultYangModelRegistry;
 
 import static org.onosproject.yang.model.DataNode.Type.MULTI_INSTANCE_NODE;
 import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_NODE;
-import static org.onosproject.yang.runtime.app.TestUtils.checkLeafListSchemaContext;
-import static org.onosproject.yang.runtime.app.TestUtils.checkLeafSchemaContext;
-import static org.onosproject.yang.runtime.app.TestUtils.checkSchemaContext;
+import static org.onosproject.yang.runtime.impl.TestUtils.checkLeafListSchemaContext;
+import static org.onosproject.yang.runtime.impl.TestUtils.checkLeafSchemaContext;
+import static org.onosproject.yang.runtime.impl.TestUtils.checkSchemaContext;
 
 /**
  * Tests the default schema context methods.
diff --git a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestLeafSchemaContext.java b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestLeafSchemaContext.java
similarity index 89%
rename from runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestLeafSchemaContext.java
rename to runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestLeafSchemaContext.java
index d11e930..4ceecf9 100644
--- a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestLeafSchemaContext.java
+++ b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestLeafSchemaContext.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.impl;
 
 import org.junit.Test;
 import org.onosproject.yang.compiler.datamodel.DefaultYangNamespace;
@@ -26,10 +26,11 @@
 import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.SchemaId;
+import org.onosproject.yang.runtime.ymrimpl.DefaultYangModelRegistry;
 
-import static org.onosproject.yang.runtime.app.TestUtils.checkLeafListSchemaContext;
-import static org.onosproject.yang.runtime.app.TestUtils.checkLeafSchemaContext;
-import static org.onosproject.yang.runtime.app.TestUtils.checkSchemaContext;
+import static org.onosproject.yang.runtime.impl.TestUtils.checkLeafListSchemaContext;
+import static org.onosproject.yang.runtime.impl.TestUtils.checkLeafSchemaContext;
+import static org.onosproject.yang.runtime.impl.TestUtils.checkSchemaContext;
 
 /**
  * Tests the default schema context methods.
diff --git a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestRpcSchemaContext.java b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestRpcSchemaContext.java
similarity index 97%
rename from runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestRpcSchemaContext.java
rename to runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestRpcSchemaContext.java
index 7968b2d..1468222 100644
--- a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestRpcSchemaContext.java
+++ b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestRpcSchemaContext.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.impl;
 
 /**
  * Tests the default schema context methods.
diff --git a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestSchemaContext.java b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestSchemaContext.java
similarity index 92%
rename from runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestSchemaContext.java
rename to runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestSchemaContext.java
index 2c2605a..a767c1c 100644
--- a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestSchemaContext.java
+++ b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestSchemaContext.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.impl;
 
 import org.junit.Test;
 import org.onosproject.yang.compiler.datamodel.YangAugment;
@@ -24,11 +24,13 @@
 import org.onosproject.yang.compiler.datamodel.YangNode;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.SchemaId;
+import org.onosproject.yang.runtime.ymrimpl.DefaultYangModelRegistry;
 
 import java.util.List;
 
-import static org.onosproject.yang.runtime.app.TestUtils.checkLeafSchemaContext;
-import static org.onosproject.yang.runtime.app.TestUtils.checkSchemaContext;
+
+import static org.onosproject.yang.runtime.impl.TestUtils.checkLeafSchemaContext;
+import static org.onosproject.yang.runtime.impl.TestUtils.checkSchemaContext;
 
 /**
  * Tests the default schema context methods.
diff --git a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestSerializer.java b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestSerializer.java
similarity index 86%
rename from runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestSerializer.java
rename to runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestSerializer.java
index e6f203c..bf63dc6 100644
--- a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestSerializer.java
+++ b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestSerializer.java
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.impl;
 
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.ResourceId;
-import org.onosproject.yang.runtime.api.AnnotatedNodeInfo;
-import org.onosproject.yang.runtime.api.CompositeData;
-import org.onosproject.yang.runtime.api.CompositeStream;
-import org.onosproject.yang.runtime.api.ResourceData;
-import org.onosproject.yang.runtime.api.YangSerializer;
-import org.onosproject.yang.runtime.api.YangSerializerContext;
+import org.onosproject.yang.runtime.AnnotatedNodeInfo;
+import org.onosproject.yang.runtime.CompositeData;
+import org.onosproject.yang.runtime.CompositeStream;
+import org.onosproject.yang.runtime.ResourceData;
+import org.onosproject.yang.runtime.YangSerializer;
+import org.onosproject.yang.runtime.YangSerializerContext;
 
 import java.io.InputStream;
 import java.util.List;
diff --git a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestUtils.java b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestUtils.java
similarity index 98%
rename from runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestUtils.java
rename to runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestUtils.java
index a69dc02..f249534 100644
--- a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestUtils.java
+++ b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestUtils.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.yang.runtime.app;
+
+package org.onosproject.yang.runtime.impl;
 
 import org.onosproject.yang.compiler.datamodel.YangLeaf;
 import org.onosproject.yang.compiler.datamodel.YangLeafList;
diff --git a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestYangSchemaNodeProvider.java b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestYangSchemaNodeProvider.java
similarity index 79%
rename from runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestYangSchemaNodeProvider.java
rename to runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestYangSchemaNodeProvider.java
index a42f2fb..59418e5 100644
--- a/runtime/app/src/test/java/org/onosproject/yang/runtime/app/TestYangSchemaNodeProvider.java
+++ b/runtime/src/main/test/java/org/onosproject/yang/runtime/impl/TestYangSchemaNodeProvider.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2017-present Open Networking Laboratory
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,14 +14,17 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime.app;
+package org.onosproject.yang.runtime.impl;
 
 import org.onosproject.yang.YangModel;
 import org.onosproject.yang.compiler.datamodel.YangNode;
 import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
-import org.onosproject.yang.runtime.api.AppModuleInfo;
-import org.onosproject.yang.runtime.api.ModelRegistrationParam;
-import org.onosproject.yang.runtime.api.YangModelRegistry;
+import org.onosproject.yang.runtime.AppModuleInfo;
+import org.onosproject.yang.runtime.DefaultAppModuleInfo;
+import org.onosproject.yang.runtime.DefaultModelRegistrationParam;
+import org.onosproject.yang.runtime.ModelRegistrationParam;
+import org.onosproject.yang.runtime.YangModelRegistry;
+import org.onosproject.yang.runtime.ymrimpl.DefaultYangModelRegistry;
 
 import java.io.File;
 import java.io.IOException;
@@ -34,7 +37,7 @@
 import static org.onosproject.yang.compiler.plugin.utils.YangApacheUtils.processYangModel;
 import static org.onosproject.yang.compiler.utils.UtilConstants.TEMP;
 import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.deleteDirectory;
-import static org.onosproject.yang.runtime.utils.RuntimeHelper.getInterfaceClassName;
+import static org.onosproject.yang.runtime.helperutils.RuntimeHelper.getInterfaceClassName;
 
 /**
  * Represents mock bundle context. provides bundle context for YSR to do unit
@@ -84,18 +87,17 @@
                 }
 
                 //Create model registration param.
-                ModelRegistrationParam param = new
-                        DefaultModelRegistrationParam();
+                ModelRegistrationParam.Builder b =
+                        DefaultModelRegistrationParam.builder();
 
                 //create a new YANG model
                 YangModel model = processYangModel(META_PATH, nodes);
                 //set YANG model
-                param.setYangModel(model);
+                b.setYangModel(model);
                 //generate app info.
-                AppModuleInfo info = new DefaultAppModuleInfo();
-                info.setModuleClass(cls);
-                param.addAppModuleInfo(processModuleId((YangNode) node), info);
-                reg.registerModel(param);
+                AppModuleInfo info = new DefaultAppModuleInfo(cls, null);
+                b.addAppModuleInfo(processModuleId((YangNode) node), info);
+                reg.registerModel(b.build());
             }
             deleteDirectory(TEMP_FOLDER_PATH);
         } catch (IOException e) {
diff --git a/runtime/app/src/test/resources/schemaProviderTestYangFiles/choice-case.yang b/runtime/src/main/test/resources/schemaProviderTestYangFiles/choice-case.yang
similarity index 100%
rename from runtime/app/src/test/resources/schemaProviderTestYangFiles/choice-case.yang
rename to runtime/src/main/test/resources/schemaProviderTestYangFiles/choice-case.yang
diff --git a/runtime/app/src/test/resources/schemaProviderTestYangFiles/food.yang b/runtime/src/main/test/resources/schemaProviderTestYangFiles/food.yang
similarity index 100%
rename from runtime/app/src/test/resources/schemaProviderTestYangFiles/food.yang
rename to runtime/src/main/test/resources/schemaProviderTestYangFiles/food.yang
diff --git a/runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-inet-types.yang b/runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-inet-types.yang
similarity index 100%
rename from runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-inet-types.yang
rename to runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-inet-types.yang
diff --git a/runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-network.yang b/runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-network.yang
similarity index 100%
rename from runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-network.yang
rename to runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-network.yang
diff --git a/runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-schedule.yang b/runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-schedule.yang
similarity index 100%
rename from runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-schedule.yang
rename to runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-schedule.yang
diff --git a/runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-te-topology.yang b/runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-te-topology.yang
similarity index 100%
rename from runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-te-topology.yang
rename to runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-te-topology.yang
diff --git a/runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-te-types.yang b/runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-te-types.yang
similarity index 100%
rename from runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-te-types.yang
rename to runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-te-types.yang
diff --git a/runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-types.yang b/runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-types.yang
similarity index 100%
rename from runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-types.yang
rename to runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-ietf-yang-types.yang
diff --git a/runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-network-topology.yang b/runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-network-topology.yang
similarity index 100%
rename from runtime/app/src/test/resources/schemaProviderTestYangFiles/yrt-network-topology.yang
rename to runtime/src/main/test/resources/schemaProviderTestYangFiles/yrt-network-topology.yang
diff --git a/runtime/app/src/test/resources/ysrTestYangFiles/CheckWithNamespace.yang b/runtime/src/main/test/resources/ysrTestYangFiles/CheckWithNamespace.yang
similarity index 100%
rename from runtime/app/src/test/resources/ysrTestYangFiles/CheckWithNamespace.yang
rename to runtime/src/main/test/resources/ysrTestYangFiles/CheckWithNamespace.yang
diff --git a/runtime/app/src/test/resources/ysrTestYangFiles/multiRevisions/norev.yang b/runtime/src/main/test/resources/ysrTestYangFiles/multiRevisions/norev.yang
similarity index 100%
rename from runtime/app/src/test/resources/ysrTestYangFiles/multiRevisions/norev.yang
rename to runtime/src/main/test/resources/ysrTestYangFiles/multiRevisions/norev.yang
diff --git a/runtime/app/src/test/resources/ysrTestYangFiles/multiRevisions/withrev.yang b/runtime/src/main/test/resources/ysrTestYangFiles/multiRevisions/withrev.yang
similarity index 100%
rename from runtime/app/src/test/resources/ysrTestYangFiles/multiRevisions/withrev.yang
rename to runtime/src/main/test/resources/ysrTestYangFiles/multiRevisions/withrev.yang
diff --git a/runtime/app/src/test/resources/ysrTestYangFiles/multiRevisions/withrev2.yang b/runtime/src/main/test/resources/ysrTestYangFiles/multiRevisions/withrev2.yang
similarity index 100%
rename from runtime/app/src/test/resources/ysrTestYangFiles/multiRevisions/withrev2.yang
rename to runtime/src/main/test/resources/ysrTestYangFiles/multiRevisions/withrev2.yang
diff --git a/runtime/app/src/test/resources/ysrTestYangFiles/multiRevisions/withrev3.yang b/runtime/src/main/test/resources/ysrTestYangFiles/multiRevisions/withrev3.yang
similarity index 100%
rename from runtime/app/src/test/resources/ysrTestYangFiles/multiRevisions/withrev3.yang
rename to runtime/src/main/test/resources/ysrTestYangFiles/multiRevisions/withrev3.yang
diff --git a/runtime/app/src/test/resources/ysrTestYangFiles/multiRevisions/withrev4.yang b/runtime/src/main/test/resources/ysrTestYangFiles/multiRevisions/withrev4.yang
similarity index 100%
rename from runtime/app/src/test/resources/ysrTestYangFiles/multiRevisions/withrev4.yang
rename to runtime/src/main/test/resources/ysrTestYangFiles/multiRevisions/withrev4.yang
diff --git a/runtime/app/src/test/resources/ysrTestYangFiles/withoutNotification/ysr3.yang b/runtime/src/main/test/resources/ysrTestYangFiles/withoutNotification/ysr3.yang
similarity index 100%
rename from runtime/app/src/test/resources/ysrTestYangFiles/withoutNotification/ysr3.yang
rename to runtime/src/main/test/resources/ysrTestYangFiles/withoutNotification/ysr3.yang
diff --git a/runtime/utils/pom.xml b/runtime/utils/pom.xml
deleted file mode 100644
index cb401e2..0000000
--- a/runtime/utils/pom.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-  ~ Copyright 2017-present Open Networking Laboratory
-  ~
-  ~ 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.
-  -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onosproject</groupId>
-        <artifactId>onos-yang-runtime</artifactId>
-        <version>1.12-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>onos-yang-runtime-uils</artifactId>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-model</artifactId>
-            <version>1.12-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-compiler-api</artifactId>
-            <version>1.12-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-runtime-api</artifactId>
-            <version>1.12-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-compiler-plugin-utils</artifactId>
-            <version>1.12-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>3.0.2</version>
-                <configuration>
-                    <skipIfEmpty>true</skipIfEmpty>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>default</id>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
