diff --git a/model/src/main/java/org/onosproject/yang/model/Augmentable.java b/model/src/main/java/org/onosproject/yang/model/Augmentable.java
new file mode 100644
index 0000000..18d9b87
--- /dev/null
+++ b/model/src/main/java/org/onosproject/yang/model/Augmentable.java
@@ -0,0 +1,56 @@
+/*
+ * 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.model;
+
+import java.util.Map;
+
+/**
+ * Abstraction of augmentation behavior generated augmentable nodes interfaces
+ * will inherit it.
+ */
+public interface Augmentable {
+
+    /**
+     * Adds the specified augmentation to this model object.
+     *
+     * @param obj model object of augmentation
+     */
+    void addAugmentation(InnerModelObject obj);
+
+    /**
+     * Removes the specified augmentation to this model object.
+     *
+     * @param obj model object of augmentation
+     */
+    void removeAugmentation(InnerModelObject obj);
+
+    /**
+     * Returns the map of augmentations available to this model object.
+     *
+     * @return map of augmentations
+     */
+    Map<Class<? extends InnerModelObject>, InnerModelObject> augmentations();
+
+    /**
+     * Returns the augmentation for to a given augmentation class.
+     *
+     * @param c   augmentation class
+     * @param <T> augmentation class type
+     * @return augmentation object if available, null otherwise
+     */
+    <T extends InnerModelObject> T augmentation(Class<T> c);
+}
diff --git a/model/src/main/java/org/onosproject/yang/model/InnerModelObject.java b/model/src/main/java/org/onosproject/yang/model/InnerModelObject.java
index b0773e6..bda3c89 100644
--- a/model/src/main/java/org/onosproject/yang/model/InnerModelObject.java
+++ b/model/src/main/java/org/onosproject/yang/model/InnerModelObject.java
@@ -28,7 +28,7 @@
  * Abstraction of an entity that provides common basis for all POJOs which are
  * generated from a YANG model.
  */
-public abstract class InnerModelObject extends ModelObject {
+public abstract class InnerModelObject extends ModelObject implements Augmentable {
 
     private final ConcurrentMap<Class<? extends InnerModelObject>, InnerModelObject> augments =
             new ConcurrentHashMap<>();
@@ -40,40 +40,22 @@
         super(NON_ATOMIC);
     }
 
-    /**
-     * Adds the specified augmentation to this model object.
-     *
-     * @param obj model object of augmentation
-     */
+    @Override
     public void addAugmentation(InnerModelObject obj) {
         augments.put(obj.getClass(), obj);
     }
 
-    /**
-     * Removes the specified augmentation to this model object.
-     *
-     * @param obj model object of augmentation
-     */
+    @Override
     public void removeAugmentation(InnerModelObject obj) {
         augments.remove(obj.getClass());
     }
 
-    /**
-     * Returns the map of augmentations available to this model object.
-     *
-     * @return map of augmentations
-     */
+    @Override
     public Map<Class<? extends InnerModelObject>, InnerModelObject> augmentations() {
         return ImmutableMap.copyOf(augments);
     }
 
-    /**
-     * Returns the augmentation for to a given augmentation class.
-     *
-     * @param c   augmentation class
-     * @param <T> augmentation class type
-     * @return augmentation object if available, null otherwise
-     */
+    @Override
     public <T extends InnerModelObject> T augmentation(Class<T> c) {
         return (T) augments.get(c);
     }
