diff --git a/apps/yms/api/src/main/java/org/onosproject/yms/ypm/DefaultYpmNode.java b/apps/yms/api/src/main/java/org/onosproject/yms/ypm/DefaultYpmNode.java
new file mode 100644
index 0000000..662d3c3
--- /dev/null
+++ b/apps/yms/api/src/main/java/org/onosproject/yms/ypm/DefaultYpmNode.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright 2016-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.yms.ypm;
+
+/**
+ * Represents implementation of interfaces to build and obtain YANG protocol metadata tree node.
+ */
+public class DefaultYpmNode implements YpmContext {
+
+    /**
+     * Name of the node.
+     */
+    private String name;
+
+    /**
+     * Parent reference.
+     */
+    private DefaultYpmNode parent;
+
+    /**
+     * First child reference.
+     */
+    private DefaultYpmNode child;
+
+    /**
+     * Next sibling reference.
+     */
+    private DefaultYpmNode nextSibling;
+
+    /**
+     * Previous sibling reference.
+     */
+    private DefaultYpmNode previousSibling;
+
+    /**
+     * Protocol metadata object.
+     */
+    private Object metaData;
+
+    /**
+     * Creates a specific type of node.
+     *
+     * @param name of ypm node
+     */
+    public DefaultYpmNode(String name) {
+        setName(name);
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public DefaultYpmNode getParent() {
+        return parent;
+    }
+
+    @Override
+    public void setParent(YpmContext parent) {
+        this.parent = (DefaultYpmNode) parent;
+    }
+
+    @Override
+    public YpmContext getFirstChild() {
+        return child;
+    }
+
+    @Override
+    public YpmContext getChild(String ypmName) {
+        if (ypmName == null) {
+            // Input is null. So, will not proceed.
+            return null;
+        }
+
+        if (child == null) {
+            // No children
+            return null;
+        }
+
+        // Check the first child
+        if (child.name.equals(ypmName)) {
+            return child;
+        }
+
+        // Check its siblings
+        YpmContext currentChild = child;
+        while (currentChild.getNextSibling() != null) {
+            currentChild = currentChild.getNextSibling();
+            if (currentChild.getName().equals(ypmName)) {
+                return currentChild;
+            }
+        }
+
+        return null;
+    }
+
+    @Override
+    public void addChild(String ypmName) {
+        if (ypmName == null) {
+            // Input is null. So, will not proceed.
+            return;
+        }
+
+        if (getChild(ypmName) != null) {
+            // Already available with the same name. So, no need to add
+            return;
+        }
+
+        // Create new ypm node and attach to its parent
+        DefaultYpmNode newNode = new DefaultYpmNode(ypmName);
+        newNode.setParent(this);
+
+        // Check the first child
+        if (child == null) {
+            child = newNode;
+            return;
+        }
+
+        // Add it to its siblings
+        YpmContext currentChild = child;
+        // Go to the last child
+        while (currentChild.getNextSibling() != null) {
+            currentChild = currentChild.getNextSibling();
+        }
+        currentChild.setNextSibling(newNode);
+        newNode.setPreviousSibling((DefaultYpmNode) currentChild);
+    }
+
+    @Override
+    public YpmContext getSibling(String ypmName) {
+        if (ypmName == null) {
+            // Input is null. So, will not proceed.
+            return null;
+        }
+
+        YpmContext sibling = getNextSibling();
+        while (sibling != null) {
+            if (sibling.getName().equals(ypmName)) {
+                return sibling;
+            }
+            sibling = sibling.getNextSibling();
+        }
+        return null;
+    }
+
+    @Override
+    public void addSibling(String ypmName) {
+        if (ypmName == null) {
+            // Input is null. So, will not proceed.
+            return;
+        }
+
+        if (getSibling(ypmName) != null) {
+            // Already available with the same name. So, no need to add
+            return;
+        }
+
+        // Create new ypm node and attach to its parent
+        DefaultYpmNode newSibling = new DefaultYpmNode(ypmName);
+        newSibling.setParent(this.getParent());
+
+        // Add it as its sibling
+        YpmContext sibling = getNextSibling();
+        if (sibling == null) {
+            setNextSibling(newSibling);
+            newSibling.setPreviousSibling(this);
+        } else {
+            // Go to the last sibling
+            while (sibling.getNextSibling() != null) {
+                sibling = sibling.getNextSibling();
+            }
+            sibling.setNextSibling(newSibling);
+            newSibling.setPreviousSibling((DefaultYpmNode) sibling);
+        }
+    }
+
+    @Override
+    public DefaultYpmNode getNextSibling() {
+        return nextSibling;
+    }
+
+    @Override
+    public void setNextSibling(DefaultYpmNode sibling) {
+        nextSibling = sibling;
+    }
+
+    @Override
+    public DefaultYpmNode getPreviousSibling() {
+        return previousSibling;
+    }
+
+    @Override
+    public void setPreviousSibling(DefaultYpmNode sibling) {
+        this.previousSibling = sibling;
+    }
+
+    @Override
+    public Object getMetaData() {
+        return this.metaData;
+    }
+
+    @Override
+    public void setMetaData(Object data) {
+        this.metaData = data;
+    }
+}
diff --git a/apps/yms/api/src/main/java/org/onosproject/yms/ypm/YpmContext.java b/apps/yms/api/src/main/java/org/onosproject/yms/ypm/YpmContext.java
new file mode 100644
index 0000000..fe7efb5
--- /dev/null
+++ b/apps/yms/api/src/main/java/org/onosproject/yms/ypm/YpmContext.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2016-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.yms.ypm;
+
+/**
+ * Abstraction of an entity which represents YANG protocol metadata context
+ * information.
+ */
+public interface YpmContext {
+
+    /**
+     * Returns the node name.
+     *
+     * @return node name
+     */
+    String getName();
+
+    /**
+     * Sets the nodes name.
+     *
+     * @param name nodes name
+     */
+    void setName(String name);
+
+    /**
+     * Returns the context of parent node.
+     *
+     * @return context of parent node
+     */
+    YpmContext getParent();
+
+    /**
+     * Sets the context of parent node.
+     *
+     * @param parent node parent
+     */
+    void setParent(YpmContext parent);
+
+    /**
+     * Retrieves the first child of a node.
+     *
+     * @return first child of a node
+     */
+    YpmContext getFirstChild();
+
+    /**
+     * Retrieves the child of a node for corresponding ydt node.
+     *
+     * @param name ypm node
+     * @return child of a node
+     */
+    YpmContext getChild(String name);
+
+    /**
+     * Adds child to a node by ydt name.
+     *
+     * @param name ypm name
+     */
+    void addChild(String name);
+
+    /**
+     * Retrieves sibling of a child by (ydt) name.
+     *
+     * @param name ypm name
+     * @return sibling of a child
+     */
+    YpmContext getSibling(String name);
+
+    /**
+     * Adds new sibling to a child.
+     *
+     * @param name ypm name
+     */
+    void addSibling(String name);
+
+    /**
+     * Returns the context of next sibling.
+     *
+     * @return context of next sibling
+     */
+    YpmContext getNextSibling();
+
+    /**
+     * Sets the next sibling of node.
+     *
+     * @param sibling ypm node
+     */
+    void setNextSibling(DefaultYpmNode sibling);
+
+    /**
+     * Returns the previous sibling of a node.
+     *
+     * @return previous sibling of a node
+     */
+    DefaultYpmNode getPreviousSibling();
+
+    /**
+     * Sets the previous sibling.
+     *
+     * @param previousSibling points to predecessor sibling
+     */
+    void setPreviousSibling(DefaultYpmNode previousSibling);
+
+    /**
+     * Retrieves protocol metadata.
+     *
+     * @return metadata
+     */
+    Object getMetaData();
+
+    /**
+     * Sets the protocol metadata.
+     *
+     * @param data metadata
+     */
+    void setMetaData(Object data);
+}
diff --git a/apps/yms/api/src/main/java/org/onosproject/yms/ypm/YpmService.java b/apps/yms/api/src/main/java/org/onosproject/yms/ypm/YpmService.java
new file mode 100644
index 0000000..18ecd8a
--- /dev/null
+++ b/apps/yms/api/src/main/java/org/onosproject/yms/ypm/YpmService.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2016-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.yms.ypm;
+
+import org.onosproject.yms.ydt.YdtContext;
+
+/**
+ * Abstraction of an entity which provides interfaces to YANG Protocol Metadata Manager.
+ */
+public interface YpmService {
+
+    /**
+     * Returns the protocol data stored in sepecific data model path.
+     *
+     * @param rootNode YANG data tree
+     * @return YANG protocol metadata
+     */
+    YpmContext getProtocolData(YdtContext rootNode);
+
+    /**
+     * Sets the YANG protocol metadata in specific ydt path in ypm tree.
+     *
+     * @param rootNode YANG data tree
+     * @param data YANG protocol metadata
+     */
+    void setProtocolData(YdtContext rootNode, Object data);
+}
diff --git a/apps/yms/api/src/main/java/org/onosproject/yms/ypm/package-info.java b/apps/yms/api/src/main/java/org/onosproject/yms/ypm/package-info.java
new file mode 100644
index 0000000..b1472aa
--- /dev/null
+++ b/apps/yms/api/src/main/java/org/onosproject/yms/ypm/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2016-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.
+ */
+
+/**
+ * Provides interfaces to YANG protocol metadata manager. YPM maintains protocol specific information
+ * (like timestamp, entity tag, etc.) for YANG modeled data.
+ */
+package org.onosproject.yms.ypm;
