diff --git a/compiler/plugin/utils/src/main/java/org/onosproject/yang/compiler/plugin/utils/YangApacheUtils.java b/compiler/plugin/utils/src/main/java/org/onosproject/yang/compiler/plugin/utils/YangApacheUtils.java
index 24797b8..1f91d96 100644
--- a/compiler/plugin/utils/src/main/java/org/onosproject/yang/compiler/plugin/utils/YangApacheUtils.java
+++ b/compiler/plugin/utils/src/main/java/org/onosproject/yang/compiler/plugin/utils/YangApacheUtils.java
@@ -92,11 +92,12 @@
     /**
      * Returns YANG model for application.
      *
-     * @param path path for metadata file
+     * @param path     path for metadata file
+     * @param curNodes curNodes YANG nodes
      * @return YANG model
      */
-    public static YangModel processYangModel(String path, List<YangNode>
-            curNodes) {
+    public static YangModel processYangModel(String path,
+                                             List<YangNode> curNodes) {
         DefaultYangModel model = new DefaultYangModel();
         YangModuleId id;
         for (YangSchemaNode node : curNodes) {
diff --git a/model/src/main/java/org/onosproject/yang/model/DataNode.java b/model/src/main/java/org/onosproject/yang/model/DataNode.java
index cb56d51..1727195 100644
--- a/model/src/main/java/org/onosproject/yang/model/DataNode.java
+++ b/model/src/main/java/org/onosproject/yang/model/DataNode.java
@@ -48,6 +48,7 @@
          */
         MULTI_INSTANCE_LEAF_VALUE_NODE
     }
+
     /**
      * Type of node in data store.
      */
@@ -123,7 +124,7 @@
         protected Object AppInfo;
 
         /**
-         * Parent data node
+         * Parent data node.
          */
         protected InnerNode.Builder parent;
 
diff --git a/model/src/main/java/org/onosproject/yang/model/LeafListKey.java b/model/src/main/java/org/onosproject/yang/model/LeafListKey.java
index b7d082c..1758d2e 100644
--- a/model/src/main/java/org/onosproject/yang/model/LeafListKey.java
+++ b/model/src/main/java/org/onosproject/yang/model/LeafListKey.java
@@ -113,6 +113,7 @@
          * Adds the value for for the leaf list node identifier.
          *
          * @param val leaf list value
+         * @return builder
          */
         LeafListKeyBuilder value(Object val) {
             this.val = val;
diff --git a/model/src/main/java/org/onosproject/yang/model/ResourceId.java b/model/src/main/java/org/onosproject/yang/model/ResourceId.java
index 98999ee..d81911d 100644
--- a/model/src/main/java/org/onosproject/yang/model/ResourceId.java
+++ b/model/src/main/java/org/onosproject/yang/model/ResourceId.java
@@ -73,6 +73,7 @@
      * provide mutability of resource identifier using builder pattern.
      *
      * @return data node builder
+     * @throws CloneNotSupportedException when clone is not supported
      */
     public Builder copyBuilder() throws CloneNotSupportedException {
         return new Builder(this);
@@ -128,6 +129,7 @@
          * identifier.
          *
          * @param id old resource identifier
+         * @throws CloneNotSupportedException when clone is not supported
          */
         public Builder(ResourceId id) throws CloneNotSupportedException {
             nodeKeyList = new LinkedList<>();
@@ -141,6 +143,7 @@
          *
          * @param id resource identifier to be appended
          * @return builder
+         * @throws CloneNotSupportedException when clone is not supported
          */
         public Builder append(ResourceId id) throws CloneNotSupportedException {
             processCurKey();
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/AnnotatedNodeInfo.java b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/AnnotatedNodeInfo.java
index 2ed3c4d..d897cb9 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/AnnotatedNodeInfo.java
+++ b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/AnnotatedNodeInfo.java
@@ -21,7 +21,7 @@
 import java.util.List;
 
 /**
- * Representation of annotated nodes information.
+ * Abstraction of an entity that represents annotated nodes information.
  */
 public interface AnnotatedNodeInfo {
 
@@ -33,13 +33,6 @@
     ResourceId resourceId();
 
     /**
-     * Sets resource identifier of the annotated node.
-     *
-     * @param id resource identifier
-     */
-    void resourceId(ResourceId id);
-
-    /**
      * Returns annotations associated with the node.
      *
      * @return annotations
@@ -47,10 +40,34 @@
     List<Annotation> annotations();
 
     /**
-     * Adds annotation to a node.
-     *
-     * @param annotation annotation information
+     * Abstraction of an entity that represents builder of annotated node
+     * information.
      */
-    void addAnnotation(Annotation annotation);
+    interface Builder {
+
+
+        /**
+         * Sets resource identifier of the annotated node.
+         *
+         * @param id resource identifier
+         * @return builder
+         */
+        Builder resourceId(ResourceId id);
+
+        /**
+         * Adds annotation to a node.
+         *
+         * @param annotation annotation information
+         * @return builder
+         */
+        Builder addAnnotation(Annotation annotation);
+
+        /**
+         * Builds an instance of annotated node information.
+         *
+         * @return annotated node info
+         */
+        AnnotatedNodeInfo build();
+    }
 }
 
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/Annotation.java b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/Annotation.java
index 317e5e7..e2db85d 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/Annotation.java
+++ b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/Annotation.java
@@ -17,7 +17,7 @@
 package org.onosproject.yang.runtime.api;
 
 /**
- * Representation of annotated attribute.
+ * Abstraction of an entity that represents annotated attribute.
  */
 public interface Annotation {
 
@@ -29,23 +29,9 @@
     String name();
 
     /**
-     * Sets name of the annotated attribute.
-     *
-     * @param name of the attribute
-     */
-    void name(String name);
-
-    /**
      * Returns value of the annotation.
      *
      * @return annotation value
      */
     String value();
-
-    /**
-     * Sets value of the annotation.
-     *
-     * @param value value of the annotation
-     */
-    void value(String value);
 }
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeData.java b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeData.java
index 8809609..ea9667f 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeData.java
+++ b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeData.java
@@ -16,42 +16,54 @@
 
 package org.onosproject.yang.runtime.api;
 
-import org.onosproject.yang.model.DataNode;
-import org.onosproject.yang.model.ResourceId;
-
 import java.util.List;
 
 /**
- * Representation of an entity which is comprised of composite data having
- * resource identifier with list of data node.
+ * Abstraction of an entity that is composition of resource data and
+ * associated annotations information.
  */
 public interface CompositeData {
 
     /**
-     * Returns list of data nodes.
+     * Returns resource node.
      *
-     * @return list of data nodes
+     * @return resource node
      */
-    List<DataNode> dataNodes();
+    ResourceData resourceData();
 
     /**
-     * Adds a data node.
+     * Returns annotated nodes information.
      *
-     * @param node data node
+     * @return annotated nodes information
      */
-    void addDataNode(DataNode node);
+    List<AnnotatedNodeInfo> annotatedNodesInfo();
 
     /**
-     * Returns resource identifier.
-     *
-     * @return resource identifier
+     * Abstraction of an entity that represents builder of composite data.
      */
-    ResourceId resourceId();
+    interface Builder {
 
-    /**
-     * Sets resource identifier.
-     *
-     * @param identifier resource identifier
-     */
-    void resourceId(ResourceId identifier);
+        /**
+         * Sets resource node.
+         *
+         * @param node resource node
+         * @return builder
+         */
+        Builder resourceData(ResourceData node);
+
+        /**
+         * Adds information about annotated node.
+         *
+         * @param info annotated node information
+         * @return builder
+         */
+        Builder addAnnotatedNodeInfo(AnnotatedNodeInfo info);
+
+        /**
+         * Builds an instance of decoded output.
+         *
+         * @return decoded output
+         */
+        CompositeData build();
+    }
 }
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeStream.java b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeStream.java
index 7468362..066e230 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeStream.java
+++ b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/CompositeStream.java
@@ -19,8 +19,8 @@
 import java.io.InputStream;
 
 /**
- * Representation of composite stream comprising of resource identifier and
- * its data.
+ * Abstraction of an entity that is composition of resource identifier and
+ * data.
  */
 public interface CompositeStream {
 
@@ -28,28 +28,14 @@
      * Retrieves the resource identifier stream on which the operation is being
      * performed.
      *
-     * @return string representation of the resource being identified
+     * @return uri as per RFC 3986
      */
     String resourceId();
 
     /**
-     * Sets resource identifier on which operation is to be performed.
-     *
-     * @param uri resource identifier string as per RFC 3986
-     */
-    void resourceId(String uri);
-
-    /**
      * Retrieves the resource data stream in the protocol encoding format.
      *
      * @return resource data
      */
     InputStream resourceData();
-
-    /**
-     * Sets resource data stream in the protocol encoding format.
-     *
-     * @param stream resource data
-     */
-    void resourceData(InputStream stream);
 }
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/DataFormat.java b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/DataFormat.java
deleted file mode 100644
index 1ba26fb..0000000
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/DataFormat.java
+++ /dev/null
@@ -1,27 +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;
-
-/**
- * Abstraction of configuration data-format descriptor.
- */
-public interface DataFormat {
-
-    // TODO: should this be an enum instead with choices fixed at compile-time?
-    // name, e.g. "XML", "JSON"
-
-}
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/DecodedOutput.java b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/DecodedOutput.java
deleted file mode 100644
index 600acaa..0000000
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/DecodedOutput.java
+++ /dev/null
@@ -1,54 +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 java.util.List;
-
-/**
- * Representation of parameters which are provided by serializers as decoding
- * output.
- */
-public interface DecodedOutput {
-
-    /**
-     * Returns composite node.
-     *
-     * @return composite node
-     */
-    CompositeData getCompositeNode();
-
-    /**
-     * Sets composite node.
-     *
-     * @param node composite node
-     */
-    void setCompositeNode(CompositeData node);
-
-    /**
-     * Returns annotated nodes information.
-     *
-     * @return annotated nodes information
-     */
-    List<AnnotatedNodeInfo> getAnnotatedNodesInfo();
-
-    /**
-     * Adds information about annotated node.
-     *
-     * @param info annotated node information
-     */
-    void addAnnotatedNodeInfo(AnnotatedNodeInfo info);
-}
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/ResourceData.java b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/ResourceData.java
new file mode 100644
index 0000000..05e2137
--- /dev/null
+++ b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/ResourceData.java
@@ -0,0 +1,71 @@
+/*
+ * 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.model.DataNode;
+import org.onosproject.yang.model.ResourceId;
+
+import java.util.List;
+
+/**
+ * Abstraction of an entity that is representation of resource data.
+ */
+public interface ResourceData {
+
+    /**
+     * Returns list of data nodes.
+     *
+     * @return list of data nodes
+     */
+    List<DataNode> dataNodes();
+
+    /**
+     * Returns resource identifier.
+     *
+     * @return resource identifier
+     */
+    ResourceId resourceId();
+
+    /**
+     * Abstraction of an entity that represents builder of composite data.
+     */
+    interface Builder {
+
+        /**
+         * Adds a data node.
+         *
+         * @param node data node
+         * @return builder
+         */
+        Builder addDataNode(DataNode node);
+
+        /**
+         * Sets resource identifier.
+         *
+         * @param identifier resource identifier
+         * @return builder
+         */
+        Builder resourceId(ResourceId identifier);
+
+        /**
+         * Builds an instance of composite data.
+         *
+         * @return composite data
+         */
+        CompositeStream build();
+    }
+}
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangRuntimeService.java b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangRuntimeService.java
index 747907c..e75d329 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangRuntimeService.java
+++ b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangRuntimeService.java
@@ -16,8 +16,6 @@
 
 package org.onosproject.yang.runtime.api;
 
-import java.util.List;
-
 /**
  * Service for encoding and decoding between internal and external model
  * representations.
@@ -37,20 +35,16 @@
      * <p>
      * Also protocols like NETCONF will have decorations around the input stream
      * which will be reported back to protocol in output. Produced
-     * annotations will be in order of preorder traversal.
+     * annotations will be in order of pre-order traversal.
      *
-     * @param external      composite input stream carrying external
-     *                      representation of configuration data
-     * @param dataFormat    data format of the provided external representation
-     * @param nodeAnnotated true if annotations are expected, false otherwise
+     * @param external   composite input stream carrying external
+     *                   representation of configuration data
+     * @param dataFormat data format of the provided external representation
      * @return in-memory representation of configuration data with decorated
      * node information
      * @throws YangRuntimeException when fails to perform decode operation
      */
-    // FIXME: This needs to be revised for symmetry with encode and mutability
-    // FIXME: Entities exchanged across this boundary ought not to be mutable
-    DecodedOutput decode(CompositeStream external, String dataFormat,
-                         boolean nodeAnnotated);
+    CompositeData decode(CompositeStream external, String dataFormat);
 
     /**
      * Encodes the internal in-memory representation of a configuration model
@@ -68,17 +62,14 @@
      * form of body without URI.
      * <p>
      * Also protocols like NETCONF would like to provide additional
-     * decorations for the node. These decoration should be in preorder
+     * decorations for the node. These decoration should be in pre-order
      * traversal order.
      *
      * @param internal   in-memory representation of configuration data
      * @param dataFormat expected data format of the external representation
-     * @param info       decorated node information
      * @return input stream carrying external representation of
      * configuration data
      * @throws YangRuntimeException when fails to perform encode operation
      */
-    // FIXME: Entities exchanged across this boundary ought not to be mutable
-    CompositeStream encode(CompositeData internal, String dataFormat,
-                           List<AnnotatedNodeInfo> info);
+    CompositeStream encode(CompositeData internal, String dataFormat);
 }
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializer.java b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializer.java
index 5021a27..46e026d 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializer.java
+++ b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializer.java
@@ -18,8 +18,6 @@
 
 import org.onosproject.yang.model.DataNode;
 
-import java.util.List;
-
 /**
  * Abstraction of entity capable of encoding and decoding arbitrary
  * {@link DataNode} structures, which are in-memory representations of
@@ -51,7 +49,7 @@
      * <p>
      * Also protocols like NETCONF will have decorations around the input stream
      * which will be reported back to protocol in output. Produced
-     * annotations will be in order of preorder traversal.
+     * annotations will be in order of pre-order traversal.
      *
      * @param external composite input stream carrying external
      *                 representation of configuration data
@@ -60,7 +58,7 @@
      * node information
      * @throws YangRuntimeException when fails to perform decode operation
      */
-    DecodedOutput decode(CompositeStream external, YangSerializerContext context);
+    CompositeData decode(CompositeStream external, YangSerializerContext context);
 
     /**
      * Encodes the internal in-memory representation of a configuration model
@@ -78,14 +76,14 @@
      * form of body without URI.
      * <p>
      * Also protocols like NETCONF would like to provide additional
-     * decorations for the node. These decoration should be in preorder
+     * decorations for the node. These decoration should be in pre-order
      * traversal order.
      *
      * @param internal in-memory representation of configuration data
-     * @param info     decorated node information
+     * @param context  YANG serializer context
      * @return input stream carrying external representation of
      * configuration data
      * @throws YangRuntimeException when fails to perform decode operation
      */
-    CompositeStream encode(CompositeData internal, List<AnnotatedNodeInfo> info);
+    CompositeStream encode(CompositeData internal, YangSerializerContext context);
 }
diff --git a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializerContext.java b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializerContext.java
index 790d8fd..1feee33 100644
--- a/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializerContext.java
+++ b/runtime/api/src/main/java/org/onosproject/yang/runtime/api/YangSerializerContext.java
@@ -24,13 +24,6 @@
 public interface YangSerializerContext {
 
     /**
-     * Provides information about whether node annotation is expected.
-     *
-     * @return true if node can be annotated, false otherwise
-     */
-    boolean isNodeAnnotated();
-
-    /**
      * Returns schema context of root node "/".
      *
      * @return schema context provider
