diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaImportData.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaImportData.java
index 5b53ef1..0eaf757 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaImportData.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaImportData.java
@@ -29,9 +29,7 @@
 import static org.onosproject.yang.compiler.utils.UtilConstants.BIG_INTEGER;
 import static org.onosproject.yang.compiler.utils.UtilConstants.BITSET;
 import static org.onosproject.yang.compiler.utils.UtilConstants.COLLECTION_IMPORTS;
-import static org.onosproject.yang.compiler.utils.UtilConstants.CONFIG_PKG;
 import static org.onosproject.yang.compiler.utils.UtilConstants.DATA_NODE;
-import static org.onosproject.yang.compiler.utils.UtilConstants.DYNAMIC_CONFIG_SERVICE;
 import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
 import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_LISTENER;
 import static org.onosproject.yang.compiler.utils.UtilConstants.EXECUTORS;
@@ -59,6 +57,7 @@
 import static org.onosproject.yang.compiler.utils.UtilConstants.RPC_OUTPUT_STATUS_PKG;
 import static org.onosproject.yang.compiler.utils.UtilConstants.RPC_SUCCESS;
 import static org.onosproject.yang.compiler.utils.UtilConstants.SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_RPC_SERVICE;
 
 /**
  * Represents that generated Java file can contain imports.
@@ -373,7 +372,7 @@
      * @return import for RPC command
      */
     public String getImportForRpcCommand() {
-        return getImportString(CONFIG_PKG, RPC_COMMAND);
+        return getImportString(MODEL_PKG, RPC_COMMAND);
     }
 
     /**
@@ -382,7 +381,7 @@
      * @return import for RPC handler
      */
     public String getImportForRpcHandler() {
-        return getImportString(CONFIG_PKG, RPC_HANDLER);
+        return getImportString(MODEL_PKG, RPC_HANDLER);
     }
 
     /**
@@ -391,7 +390,7 @@
      * @return import for dynamic store service
      */
     public String getImportForDynamicStoreService() {
-        return getImportString(CONFIG_PKG, DYNAMIC_CONFIG_SERVICE);
+        return getImportString(MODEL_PKG, YANG_RPC_SERVICE);
     }
 
     /**
@@ -418,7 +417,7 @@
      * @return import for RPC input
      */
     public String getImportForRpcInput() {
-        return getImportString(CONFIG_PKG, RPC_INPUT);
+        return getImportString(MODEL_PKG, RPC_INPUT);
     }
 
     /**
@@ -427,7 +426,7 @@
      * @return import for RPC output
      */
     public String getImportForRpcOutput() {
-        return getImportString(CONFIG_PKG, RPC_OUTPUT);
+        return getImportString(MODEL_PKG, RPC_OUTPUT);
     }
 
     /**
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaRpcCommandFragmentFiles.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaRpcCommandFragmentFiles.java
index f714eff..3913955 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaRpcCommandFragmentFiles.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaRpcCommandFragmentFiles.java
@@ -48,7 +48,6 @@
 import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_CAPS;
 import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_MODEL_OBJECT_DATA;
 import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_RESOURCE_DATA;
-import static org.onosproject.yang.compiler.utils.UtilConstants.DYNAMIC_CONFIG_SERVICE;
 import static org.onosproject.yang.compiler.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
 import static org.onosproject.yang.compiler.utils.UtilConstants.EQUAL;
 import static org.onosproject.yang.compiler.utils.UtilConstants.FOUR_SPACE_INDENTATION;
@@ -72,7 +71,6 @@
 import static org.onosproject.yang.compiler.utils.UtilConstants.RPC_INPUT;
 import static org.onosproject.yang.compiler.utils.UtilConstants.RPC_OUTPUT;
 import static org.onosproject.yang.compiler.utils.UtilConstants.RPC_SUCCESS;
-import static org.onosproject.yang.compiler.utils.UtilConstants.RUNTIME_PKG;
 import static org.onosproject.yang.compiler.utils.UtilConstants.SEMI_COLON;
 import static org.onosproject.yang.compiler.utils.UtilConstants.SERVICE;
 import static org.onosproject.yang.compiler.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
@@ -82,6 +80,7 @@
 import static org.onosproject.yang.compiler.utils.UtilConstants.SUPER;
 import static org.onosproject.yang.compiler.utils.UtilConstants.THIS;
 import static org.onosproject.yang.compiler.utils.UtilConstants.VOID;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_RPC_SERVICE;
 import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDocForExecuteMethod;
 import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDocForRpcCommandConstructor;
 import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
@@ -104,8 +103,7 @@
     private static final String VAR_INPUT = "input";
     private static final String VAR_OUTPUT = "output";
     private static final String VAR_MSG_ID = "msgId";
-    private static final String VAR_STORE = "store";
-    private static final String VAR_STORE_SERVICE = "storeService";
+    private static final String VAR_CFG_SERVICE = "cfgService";
     private static final String VAR_MODEL_CONVERTER = "modelConverter";
     private static final String EXECUTE = "execute";
     private static final String GET_RESOURCE_ID = "getResourceId";
@@ -120,6 +118,7 @@
     private static final String ADD_DATA_NODE = "addDataNode";
     private static final String ADD_MODEL_OBJECT = "addModelObject";
     private static final String VAR_RESOURCE_ID = "resourceId";
+    private static final String VAR_APP_SERVICE = "appService";
 
     @Override
     public void generateJavaFile(int fileType, YangNode curNode) throws IOException {
@@ -130,7 +129,7 @@
         String parentClassName = getCapitalCase(getCamelCase(
                 curNode.getParent().getJavaClassNameOrBuiltInType(), null));
         String className = getCapitalCase(getCamelCase(
-                curNode.getJavaClassNameOrBuiltInType(), null) + COMMAND);
+                curNode.getJavaClassNameOrBuiltInType(), null)) + COMMAND;
         createPackage(curNode);
 
         // add RPC input import
@@ -198,7 +197,7 @@
             imports.add(getImportString(MODEL_PKG, MODEL_OBJECT_DATA));
         }
         if (inputNode != null) {
-            imports.add(getImportString(RUNTIME_PKG, DEFAULT_RESOURCE_DATA));
+            imports.add(getImportString(MODEL_PKG, DEFAULT_RESOURCE_DATA));
         }
         if (outputNode != null) {
             imports.add(getImportString(MODEL_PKG, DEFAULT_MODEL_OBJECT_DATA));
@@ -257,17 +256,18 @@
 
         // parameters for constructors
         Map<String, String> param = new LinkedHashMap<>();
-        param.put(VAR_STORE, DYNAMIC_CONFIG_SERVICE);
+        param.put(VAR_CFG_SERVICE, YANG_RPC_SERVICE);
         param.put(VAR_MODEL_CONVERTER, MODEL_CONVERTER);
-        param.put(appService, getCapitalCase(appService));
+        param.put(VAR_APP_SERVICE, getCapitalCase(appService));
 
         StringBuilder builder = new StringBuilder();
         // add attributes
         builder.append(getVariableDeclaration(VAR_MODEL_CONVERTER, MODEL_CONVERTER,
                                               FOUR_SPACE_INDENTATION, PRIVATE))
-                .append(getVariableDeclaration(appService, getCapitalCase(appService),
+                .append(getVariableDeclaration(VAR_APP_SERVICE, getCapitalCase(appService),
                                                FOUR_SPACE_INDENTATION, PRIVATE))
-                .append(getVariableDeclaration(VAR_STORE_SERVICE, DYNAMIC_CONFIG_SERVICE,
+                .append(getVariableDeclaration(VAR_CFG_SERVICE,
+                                               YANG_RPC_SERVICE,
                                                FOUR_SPACE_INDENTATION, PRIVATE))
                 .append(NEW_LINE)
 
@@ -282,19 +282,19 @@
                 .append(OPEN_PARENTHESIS).append(GET_RESOURCE_ID)
                 .append(OPEN_PARENTHESIS).append(CLOSE_PARENTHESIS)
                 .append(CLOSE_PARENTHESIS).append(SEMI_COLON).append(NEW_LINE)
-                .append(valueAssign(THIS + PERIOD + VAR_STORE_SERVICE, VAR_STORE,
-                                    EIGHT_SPACE_INDENTATION))
+                .append(valueAssign(THIS + PERIOD + VAR_CFG_SERVICE,
+                                    VAR_CFG_SERVICE, EIGHT_SPACE_INDENTATION))
                 .append(valueAssign(THIS + PERIOD + VAR_MODEL_CONVERTER,
                                     VAR_MODEL_CONVERTER,
                                     EIGHT_SPACE_INDENTATION))
-                .append(valueAssign(THIS + PERIOD + appService, appService,
-                                    EIGHT_SPACE_INDENTATION))
+                .append(valueAssign(THIS + PERIOD + VAR_APP_SERVICE,
+                                    VAR_APP_SERVICE, EIGHT_SPACE_INDENTATION))
 
                 .append(FOUR_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET)
                 .append(NEW_LINE)
 
                 //add execute method
-                .append(getRpcCommandExecuteMethod(appService, node))
+                .append(getRpcCommandExecuteMethod(node))
 
                 //add get resource id method
                 .append(getResourceIdMethod(node));
@@ -306,10 +306,10 @@
     /**
      * Returns RPC command execute method.
      *
+     * @param node Yang RPC node
      * @return RPC command execute method
      */
-    private static String getRpcCommandExecuteMethod(String appService,
-                                                     YangNode node) {
+    private static String getRpcCommandExecuteMethod(YangNode node) {
         StringBuilder builder = new StringBuilder(getOverRideString())
 
                 // execute method with only RPC input
@@ -330,7 +330,7 @@
                 .append(SPACE).append(VAR_MSG_ID).append(CLOSE_PARENTHESIS)
                 .append(SPACE).append(OPEN_CURLY_BRACKET).append(NEW_LINE)
 
-                .append(getExecuteMethodContents(node, appService))
+                .append(getExecuteMethodContents(node))
                 .append(FOUR_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET)
                 .append(NEW_LINE);
 
@@ -340,6 +340,7 @@
     /**
      * Returns get resource id method.
      *
+     * @param node YANG RPC node
      * @return get resource id method
      */
     private static String getResourceIdMethod(YangNode node) {
@@ -376,13 +377,13 @@
     /**
      * Returns execute method contents.
      *
+     * @param node YANG RPC node
      * @return execute method contents
      */
-    private static String getExecuteMethodContents(YangNode node, String
-            appService) {
+    private static String getExecuteMethodContents(YangNode node) {
         StringBuilder builder = new StringBuilder();
         builder.append(invokeCreateModelString(node))
-                .append(invokeRpcString(node, appService))
+                .append(invokeRpcString(node))
                 .append(invokeCreateDataNodeString(node))
                 .append(createRpcOutputString(node))
                 .append(invokeRpcResponseString());
@@ -392,6 +393,7 @@
     /**
      * Returns create model for input data node statement.
      *
+     * @param node YANG RPC node
      * @return create model for input data node statement
      */
     private static String invokeCreateModelString(YangNode node) {
@@ -413,6 +415,7 @@
     /**
      * Returns creating data node for output object.
      *
+     * @param node YANG RPC node
      * @return creating data node for output object
      */
     private static String invokeCreateDataNodeString(YangNode node) {
@@ -423,10 +426,11 @@
             builder.append(buildModelObjectData());
             builder.append(EIGHT_SPACE_INDENTATION).append(RESOURCE_DATA)
                     .append(SPACE).append(VAR_OUTPUT_DATA).append(SPACE)
-                    .append(EQUAL).append(SPACE).append(VAR_MODEL_CONVERTER).append(PERIOD)
-                    .append(CREATE_DATA_NODE).append(OPEN_PARENTHESIS)
-                    .append(VAR_OUTPUT_MO).append(CLOSE_PARENTHESIS)
-                    .append(SEMI_COLON).append(NEW_LINE);
+                    .append(EQUAL).append(SPACE).append(VAR_MODEL_CONVERTER)
+                    .append(PERIOD).append(CREATE_DATA_NODE)
+                    .append(OPEN_PARENTHESIS).append(VAR_OUTPUT_MO)
+                    .append(CLOSE_PARENTHESIS).append(SEMI_COLON)
+                    .append(NEW_LINE);
         }
         return builder.toString();
     }
@@ -434,11 +438,10 @@
     /**
      * Returns execute method contents.
      *
-     * @param node       YANG RPC node
-     * @param appService application service name
+     * @param node YANG RPC node
      * @return execute method contents
      */
-    private static String invokeRpcString(YangNode node, String appService) {
+    private static String invokeRpcString(YangNode node) {
         StringBuilder builder = new StringBuilder();
         String rpc = getCamelCase(node.getJavaClassNameOrBuiltInType(), null);
         YangNode inputNode = findRpcInput(node);
@@ -455,12 +458,12 @@
                     .append(outputName).append(SPACE).append(VAR_OUTPUT_OBJECT)
                     .append(SPACE).append(EQUAL).append(SPACE).append(OPEN_PARENTHESIS)
                     .append(DEFAULT_CAPS).append(outputName).append(CLOSE_PARENTHESIS)
-                    .append(SPACE).append(appService).append(PERIOD).append(rpc)
+                    .append(SPACE).append(VAR_APP_SERVICE).append(PERIOD).append(rpc)
                     .append(OPEN_PARENTHESIS).append(VAR_INPUT_OBJECT).append(CLOSE_PARENTHESIS)
                     .append(SEMI_COLON).append(NEW_LINE);
         } else if (inputNode != null && outputNode == null) {
             builder.append(getInputObject(inputNode));
-            builder.append(EIGHT_SPACE_INDENTATION).append(appService)
+            builder.append(EIGHT_SPACE_INDENTATION).append(VAR_APP_SERVICE)
                     .append(PERIOD).append(rpc).append(OPEN_PARENTHESIS)
                     .append(VAR_INPUT_OBJECT).append(CLOSE_PARENTHESIS)
                     .append(SEMI_COLON).append(NEW_LINE);
@@ -469,11 +472,11 @@
                     .append(outputName).append(SPACE).append(VAR_OUTPUT_OBJECT)
                     .append(SPACE).append(EQUAL).append(SPACE).append(OPEN_PARENTHESIS)
                     .append(DEFAULT_CAPS).append(outputName).append(CLOSE_PARENTHESIS)
-                    .append(SPACE).append(appService).append(PERIOD).append(rpc)
+                    .append(SPACE).append(VAR_APP_SERVICE).append(PERIOD).append(rpc)
                     .append(OPEN_PARENTHESIS).append(CLOSE_PARENTHESIS).append(SEMI_COLON)
                     .append(NEW_LINE);
         } else {
-            builder.append(EIGHT_SPACE_INDENTATION).append(appService)
+            builder.append(EIGHT_SPACE_INDENTATION).append(VAR_APP_SERVICE)
                     .append(PERIOD).append(rpc).append(OPEN_PARENTHESIS)
                     .append(CLOSE_PARENTHESIS).append(SEMI_COLON)
                     .append(NEW_LINE);
@@ -510,7 +513,7 @@
      */
     private static String invokeRpcResponseString() {
         StringBuilder builder = new StringBuilder();
-        builder.append(EIGHT_SPACE_INDENTATION).append(VAR_STORE_SERVICE)
+        builder.append(EIGHT_SPACE_INDENTATION).append(VAR_CFG_SERVICE)
                 .append(PERIOD).append(RPC_RESPONSE).append(OPEN_PARENTHESIS)
                 .append(VAR_MSG_ID).append(COMMA).append(SPACE)
                 .append(VAR_OUTPUT).append(CLOSE_PARENTHESIS).append(SEMI_COLON)
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaRpcFragmentFiles.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaRpcFragmentFiles.java
index 21e5f98..61341b0 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaRpcFragmentFiles.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaRpcFragmentFiles.java
@@ -50,7 +50,6 @@
 import static org.onosproject.yang.compiler.utils.UtilConstants.COMMAND;
 import static org.onosproject.yang.compiler.utils.UtilConstants.CREATE_RPC_CMD_JAVADOC;
 import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_RPC_HANDLER;
-import static org.onosproject.yang.compiler.utils.UtilConstants.DYNAMIC_CONFIG_SERVICE;
 import static org.onosproject.yang.compiler.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
 import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
 import static org.onosproject.yang.compiler.utils.UtilConstants.EQUAL;
@@ -86,6 +85,7 @@
 import static org.onosproject.yang.compiler.utils.UtilConstants.THIS;
 import static org.onosproject.yang.compiler.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
 import static org.onosproject.yang.compiler.utils.UtilConstants.VOID;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_RPC_SERVICE;
 import static org.onosproject.yang.compiler.utils.io.impl.FileSystemUtil.closeFile;
 import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDocForExtendedExecuteMethod;
 import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDocForRpcExecuterConstructor;
@@ -126,11 +126,11 @@
     private static final String VAR_CMD = "cmd";
     private static final String VAR_INPUT = "input";
     private static final String VAR_MSG_ID = "msgId";
-    private static final String VAR_STORE = "store";
     private static final String VAR_RPC_COMMANDS = "rpcCommands";
     private static final String VAR_RPC_COMMAND = "rpcCommand";
-    private static final String VAR_STORE_SERVICE = "storeService";
+    private static final String VAR_CFG_SERVICE = "cfgService";
     private static final String VAR_MODEL_CONVERTER = "modelConverter";
+    private static final String VAR_APP_SERVICE = "appService";
     private static final String EXECUTE = "execute";
     private static final String EXECUTE_RPC = "executeRpc";
     private static final String REGISTER_RPC_METHOD = "registerRpc";
@@ -342,22 +342,22 @@
                                          null) + SERVICE;
 
         Map<String, String> param = new LinkedHashMap<>();
-        param.put(VAR_STORE, DYNAMIC_CONFIG_SERVICE);
+        param.put(VAR_CFG_SERVICE, YANG_RPC_SERVICE);
         param.put(VAR_MODEL_CONVERTER, MODEL_CONVERTER);
-        param.put(appService, getCapitalCase(appService));
+        param.put(VAR_APP_SERVICE, getCapitalCase(appService));
 
         // add attributes
         builder.append(getVariableDeclaration(VAR_RPC_COMMANDS, "List<RpcCommand>",
                                               FOUR_SPACE_INDENTATION, PRIVATE))
                 .append(getVariableDeclaration(VAR_RPC_HANDLER, RPC_HANDLER,
                                                FOUR_SPACE_INDENTATION, PRIVATE))
-                .append(getVariableDeclaration(VAR_STORE_SERVICE,
-                                               DYNAMIC_CONFIG_SERVICE,
+                .append(getVariableDeclaration(VAR_CFG_SERVICE,
+                                               YANG_RPC_SERVICE,
                                                FOUR_SPACE_INDENTATION, PRIVATE))
                 .append(getVariableDeclaration(VAR_MODEL_CONVERTER,
                                                MODEL_CONVERTER,
                                                FOUR_SPACE_INDENTATION, PRIVATE))
-                .append(getVariableDeclaration(appService, getCapitalCase(appService),
+                .append(getVariableDeclaration(VAR_APP_SERVICE, getCapitalCase(appService),
                                                FOUR_SPACE_INDENTATION, PRIVATE))
                 .append(NEW_LINE)
 
@@ -372,12 +372,12 @@
                 .append(valueAssign("this." + VAR_RPC_HANDLER,
                                     "new DefaultRpcHandler()",
                                     EIGHT_SPACE_INDENTATION))
-                .append(valueAssign(THIS + PERIOD + VAR_STORE_SERVICE, VAR_STORE,
-                                    EIGHT_SPACE_INDENTATION))
+                .append(valueAssign(THIS + PERIOD + VAR_CFG_SERVICE,
+                                    VAR_CFG_SERVICE, EIGHT_SPACE_INDENTATION))
                 .append(valueAssign(THIS + PERIOD + VAR_MODEL_CONVERTER,
                                     VAR_MODEL_CONVERTER,
                                     EIGHT_SPACE_INDENTATION))
-                .append(valueAssign(THIS + PERIOD + appService, appService,
+                .append(valueAssign(THIS + PERIOD + VAR_APP_SERVICE, VAR_APP_SERVICE,
                                     EIGHT_SPACE_INDENTATION))
 
                 .append(FOUR_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET)
@@ -512,7 +512,7 @@
 
                 .append(getForLoopString(EIGHT_SPACE_INDENTATION, RPC_COMMAND,
                                          VAR_RPC_COMMAND, VAR_RPC_COMMANDS))
-                .append(TWELVE_SPACE_INDENTATION).append(VAR_STORE_SERVICE)
+                .append(TWELVE_SPACE_INDENTATION).append(VAR_CFG_SERVICE)
                 .append(PERIOD).append(REGISTER_HANDLER).append(OPEN_PARENTHESIS)
                 .append(VAR_RPC_HANDLER).append(COMMA).append(SPACE)
                 .append(VAR_RPC_COMMAND).append(CLOSE_PARENTHESIS)
@@ -570,8 +570,6 @@
      */
     public static String getCreateRpcCommand(YangNode node) {
         StringBuilder builder = new StringBuilder();
-        String appService = node.getParent().getJavaClassNameOrBuiltInType()
-                + SERVICE;
         String cmdName = getSmallCase(node.getJavaClassNameOrBuiltInType());
 
         // creates RPC command
@@ -579,9 +577,9 @@
                 .append(cmdName).append(SPACE).append(EQUAL).append(SPACE)
                 .append(NEW).append(SPACE).append(getCapitalCase(
                 node.getJavaClassNameOrBuiltInType())).append(COMMAND)
-                .append(OPEN_PARENTHESIS).append(VAR_STORE_SERVICE).append(COMMA).append(SPACE)
+                .append(OPEN_PARENTHESIS).append(VAR_CFG_SERVICE).append(COMMA).append(SPACE)
                 .append(VAR_MODEL_CONVERTER).append(COMMA)
-                .append(SPACE).append(appService).append(CLOSE_PARENTHESIS)
+                .append(SPACE).append(VAR_APP_SERVICE).append(CLOSE_PARENTHESIS)
                 .append(SEMI_COLON).append(NEW_LINE)
 
                 // adds RPC command to list
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java
index f81f5e7..29ab285 100644
--- a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java
@@ -906,7 +906,8 @@
      */
     public static final String LEAF_IDENTIFIER = "LeafIdentifier";
 
-    public static final String MODEL_LEAF_IDENTIFIER = "org.onosproject.yang.model.LeafIdentifier";
+    public static final String MODEL_LEAF_IDENTIFIER = "org.onosproject.yang" +
+            ".model.LeafIdentifier";
 
     /**
      * Static attribute for is leaf.
@@ -1790,25 +1791,15 @@
             ".concurrent";
 
     /**
-     * Static attribute for config import package.
-     */
-    public static final String CONFIG_PKG = "org.onosproject.config";
-
-    /**
      * Static attribute for model import package.
      */
     public static final String MODEL_PKG = "org.onosproject.yang.model";
 
     /**
-     * Static attribute for runtime import package.
-     */
-    public static final String RUNTIME_PKG = "org.onosproject.yang.runtime";
-
-    /**
      * Static attribute for RPC execution status import package.
      */
-    public static final String RPC_OUTPUT_STATUS_PKG = "org.onosproject.config" +
-            ".RpcOutput.Status";
+    public static final String RPC_OUTPUT_STATUS_PKG = "org.onosproject.yang" +
+            ".model.RpcOutput.Status";
 
     /**
      * Static param for model converter.
@@ -1821,9 +1812,9 @@
     public static final String RESOURCE_ID = "ResourceId";
 
     /**
-     * Static param for dynamic config service.
+     * Static param for YANG RPC service.
      */
-    public static final String DYNAMIC_CONFIG_SERVICE = "DynamicConfigService";
+    public static final String YANG_RPC_SERVICE = "YangRpcService";
 
     /**
      * Static param for RPC handler.
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/JavaDocGen.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/JavaDocGen.java
index 050fd52..33393a2 100644
--- a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/JavaDocGen.java
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/JavaDocGen.java
@@ -729,11 +729,10 @@
      */
     public static String getJavaDocForRpcCommandConstructor(String rpcName) {
         return "    /**\n" +
-                "     * Constructs a " + rpcName + " command for the given " +
-                "cmd id, model converter,\n     * application service.\n     *\n" +
-                "     * @param cmdId identifier of RPC command\n" +
+                "     * Constructs a " + rpcName + " command.\n" +
+                "     * @param cfgService dynamic config service\n" +
                 "     * @param modelConverter model converter for convertion\n" +
-                "     * @param allService application service\n     */";
+                "     * @param appService application service\n     */";
     }
 
     /**
@@ -758,7 +757,7 @@
         return "    /**\n" +
                 "     * Executes the RPC command.\n" +
                 "     *\n" +
-                "     * @param input input data to the RPC command\n" +
+                "     * @param rpcInput input data to the RPC command\n" +
                 "     * @param msgId of the RPC message to be executed\n" +
                 "     */";
     }
@@ -784,12 +783,13 @@
      */
     public static String getJavadocForRegisterRpcConstructor() {
         return "    /**\n" +
-                "     * Constructs a register rpc for the given store service, mode converter and\n" +
+                "     * Constructs a register rpc for the given cfg service, " +
+                "model converter and\n" +
                 "     * application service.\n" +
                 "     *\n" +
-                "     * @param store dynamic config service\n" +
+                "     * @param cfgService dynamic config service\n" +
                 "     * @param modelConverter model converter for convertion\n" +
-                "     * @param allService application service\n" +
+                "     * @param appService application service\n" +
                 "     */";
     }
 
diff --git a/compiler/plugin/maven/src/test/resources/augmentTranslator/test.yang b/compiler/plugin/maven/src/test/resources/augmentTranslator/test.yang
index 608482d..bf779f1 100644
--- a/compiler/plugin/maven/src/test/resources/augmentTranslator/test.yang
+++ b/compiler/plugin/maven/src/test/resources/augmentTranslator/test.yang
@@ -138,7 +138,7 @@
         }
      }
 
-   /* augment /test1:rpc-input/test1:input {
+   augment /test1:rpc-input/test1:input {
            leaf leaf2 {
                 type int32;
             }
@@ -160,8 +160,5 @@
            leaf leaf2 {
                 type int32;
             }
-   }*/
-
-
+   }
 }
-    
diff --git a/compiler/plugin/maven/src/test/resources/augmentTranslator/test2.yang b/compiler/plugin/maven/src/test/resources/augmentTranslator/test2.yang
index 5d19838..5208344 100644
--- a/compiler/plugin/maven/src/test/resources/augmentTranslator/test2.yang
+++ b/compiler/plugin/maven/src/test/resources/augmentTranslator/test2.yang
@@ -27,7 +27,7 @@
         }
     }
 
-    /* rpc rpc-input {
+    rpc rpc-input {
        input {
             leaf leaf1 {
                  type int32;
@@ -54,7 +54,5 @@
                  type int32;
              }
        }
-    }*/
-
+    }
 }
-    
diff --git a/compiler/plugin/maven/src/test/resources/choiceTranslator/all.yang b/compiler/plugin/maven/src/test/resources/choiceTranslator/all.yang
index e124d43..36611be 100644
--- a/compiler/plugin/maven/src/test/resources/choiceTranslator/all.yang
+++ b/compiler/plugin/maven/src/test/resources/choiceTranslator/all.yang
@@ -65,7 +65,7 @@
          }
    }
 
-    /* rpc r {
+    rpc r {
         input {
            choice name {
              case a {
@@ -94,9 +94,9 @@
              }
          }
         }
-     }*/
+    }
 
-     /*augment /name {
+    augment /name {
         choice name {
              case a {
                  leaf udp {
@@ -153,6 +153,5 @@
                           }
                       }
                   }
-     } */
-
+     }
 }
\ No newline at end of file
diff --git a/compiler/plugin/maven/src/test/resources/groupingNodeSameAsModule/portpair.yang b/compiler/plugin/maven/src/test/resources/groupingNodeSameAsModule/portpair.yang
index 65f9009..867263c 100644
--- a/compiler/plugin/maven/src/test/resources/groupingNodeSameAsModule/portpair.yang
+++ b/compiler/plugin/maven/src/test/resources/groupingNodeSameAsModule/portpair.yang
@@ -1,27 +1,22 @@
 module port-pair {
 
     yang-version 1;
-
     namespace "sfc.portpair";
-
     prefix "port-pair";
-   
+
      grouping port-pair {
         container  port-pair {
-
             leaf name {
                type string;
             }
-
             leaf description {
                type string;
             }
         }
     }
-   
-    /* rpc get-port-pair {
+    rpc get-port-pair {
       output {
           uses port-pair;
       }
-    } */
+    }
 }
diff --git a/compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-l3vpn.yang b/compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-l3vpn.yang
index 8721af1..11a895b 100644
--- a/compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-l3vpn.yang
+++ b/compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-l3vpn.yang
@@ -112,7 +112,7 @@
 
 
 
-     /*rpc create-l3vpn-instance {
+   rpc create-l3vpn-instance {
        description "Create l3vpn instance." ;
        input {
          container l3vpn-instance {
@@ -120,7 +120,7 @@
            uses l3vpn;
          }
        }
-     }
+   }
 
      rpc delete-l3vpn-instance {
        description "Delete l3vpn instance." ;
@@ -312,5 +312,5 @@
                }
              }
        }
-     } */
+     }
    }
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/DefaultResourceData.java b/model/src/main/java/org/onosproject/yang/model/DefaultResourceData.java
similarity index 94%
rename from runtime/src/main/java/org/onosproject/yang/runtime/DefaultResourceData.java
rename to model/src/main/java/org/onosproject/yang/model/DefaultResourceData.java
index ecf7971..503e782 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/DefaultResourceData.java
+++ b/model/src/main/java/org/onosproject/yang/model/DefaultResourceData.java
@@ -14,11 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.runtime;
-
-import org.onosproject.yang.model.DataNode;
-import org.onosproject.yang.model.ResourceData;
-import org.onosproject.yang.model.ResourceId;
+package org.onosproject.yang.model;
 
 import java.util.LinkedList;
 import java.util.List;
diff --git a/model/src/main/java/org/onosproject/yang/model/RpcCaller.java b/model/src/main/java/org/onosproject/yang/model/RpcCaller.java
new file mode 100644
index 0000000..7039fc8
--- /dev/null
+++ b/model/src/main/java/org/onosproject/yang/model/RpcCaller.java
@@ -0,0 +1,34 @@
+/*
+ * 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 com.google.common.annotations.Beta;
+
+/**
+ * Service for entities that would invoke RPCs and receive RPC responses,
+ * through the Dynamic Config brokerage.
+ */
+@Beta
+public interface RpcCaller {
+    /*
+     * Receives an RPC response.
+     *
+     * @param msgId of a previously invoked RPC
+     * @param output from the RPC execution
+     */
+    void receiveResponse(Integer msgId, RpcOutput output);
+}
\ No newline at end of file
diff --git a/model/src/main/java/org/onosproject/yang/model/RpcCommand.java b/model/src/main/java/org/onosproject/yang/model/RpcCommand.java
new file mode 100644
index 0000000..3aeb562
--- /dev/null
+++ b/model/src/main/java/org/onosproject/yang/model/RpcCommand.java
@@ -0,0 +1,55 @@
+/*
+ * 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 com.google.common.annotations.Beta;
+
+/**
+ * Abstract implementation of an RPC command.
+ */
+@Beta
+public abstract class RpcCommand {
+    /**
+     * Identifier of an RPC command.
+     */
+    ResourceId cmdId;
+
+    /**
+     * Creates an instance of RpcCommand.
+     *
+     * @param cmdId of RPC command
+     */
+    public RpcCommand(ResourceId cmdId) {
+        this.cmdId = cmdId;
+    }
+
+    /**
+     * Returns the RPC command id.
+     *
+     * @return cmdId
+     */
+    public ResourceId cmdId() {
+        return this.cmdId;
+    }
+
+    /**
+     * Executes the RPC command.
+     *
+     * @param input input data to the RPC command.
+     */
+    public abstract void execute(RpcInput input);
+}
\ No newline at end of file
diff --git a/model/src/main/java/org/onosproject/yang/model/RpcHandler.java b/model/src/main/java/org/onosproject/yang/model/RpcHandler.java
new file mode 100644
index 0000000..c1d92cd
--- /dev/null
+++ b/model/src/main/java/org/onosproject/yang/model/RpcHandler.java
@@ -0,0 +1,35 @@
+/*
+ * 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 com.google.common.annotations.Beta;
+
+/**
+ * Service for entities that would execute RPC methods invoked through
+ * Dynamic Config RPC brokerage.
+ */
+@Beta
+public interface RpcHandler {
+    /*
+     * Executes the RPC.
+     *
+     * @param msgId of the RPC message to be executed
+     * @param cmd to be executed
+     * @param input data to the RPC command
+     */
+    void executeRpc(Integer msgId, RpcCommand cmd, RpcInput input);
+}
\ No newline at end of file
diff --git a/model/src/main/java/org/onosproject/yang/model/RpcInput.java b/model/src/main/java/org/onosproject/yang/model/RpcInput.java
new file mode 100644
index 0000000..08e54bb
--- /dev/null
+++ b/model/src/main/java/org/onosproject/yang/model/RpcInput.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 com.google.common.annotations.Beta;
+
+/**
+ * Abstraction for RPC input.
+ */
+@Beta
+public class RpcInput {
+    /**
+     * Input data to the RPC execution.
+     */
+    DataNode input;
+
+    /**
+     * TODO
+     * Any other meta data or contextual information
+     * to help the RPC execution can be here.
+     * Examples: List<DataNodes> to provide multiple inputs
+     * Additional info for the broker, to choose a suitable executor
+     */
+
+    /**
+     * Creates an instance of RpcInput.
+     *
+     * @param input to RPC execution
+     */
+    public RpcInput(DataNode input) {
+        this.input = input;
+    }
+
+    /**
+     * Returns RPC input.
+     *
+     * @return DataNode
+     */
+    public DataNode input() {
+        return this.input;
+    }
+}
\ No newline at end of file
diff --git a/model/src/main/java/org/onosproject/yang/model/RpcOutput.java b/model/src/main/java/org/onosproject/yang/model/RpcOutput.java
new file mode 100644
index 0000000..8e6b255
--- /dev/null
+++ b/model/src/main/java/org/onosproject/yang/model/RpcOutput.java
@@ -0,0 +1,82 @@
+/*
+ * 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 com.google.common.annotations.Beta;
+
+/**
+ * Abstraction for RPC output.
+ */
+@Beta
+public class RpcOutput {
+    public enum Status {
+        /**
+         * RPC execution was successful.
+         */
+        RPC_SUCCESS,
+        /**
+         * RPC execution failed.
+         */
+        RPC_FAILURE,
+        /**
+         * RPC execution don't have any output data.
+         */
+        RPC_NODATA,
+        /**
+         * Failed to receive a response from the receiver, within the broker specified timeout.
+         */
+        RPC_TIMEOUT,
+    }
+
+    /**
+     * Status of RPC execution.
+     */
+    Status status;
+    /**
+     * Output data from the RPC execution.
+     */
+    DataNode output;
+
+    /**
+     * Creates an instance of RpcOutput.
+     *
+     * @param status of RPC execution
+     * @param output of RPC execution
+     */
+    public RpcOutput(Status status, DataNode output) {
+        this.status = status;
+        this.output = output;
+    }
+
+    /**
+     * Returns RPC status.
+     *
+     * @return Status
+     */
+    public RpcOutput.Status status() {
+        return this.status;
+    }
+
+    /**
+     * Returns RPC output.
+     *
+     * @return DataNode
+     */
+    public DataNode output() {
+        return this.output;
+    }
+}
\ No newline at end of file
diff --git a/model/src/main/java/org/onosproject/yang/model/YangRpcService.java b/model/src/main/java/org/onosproject/yang/model/YangRpcService.java
new file mode 100644
index 0000000..c9d28f2
--- /dev/null
+++ b/model/src/main/java/org/onosproject/yang/model/YangRpcService.java
@@ -0,0 +1,58 @@
+/*
+ * 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;
+
+/**
+ * Representation of an entity that provides YANG RPC service.
+ */
+public interface YangRpcService {
+
+    /**
+     * Registers an RPC handler.
+     *
+     * @param handler RPC handler
+     * @param command RPC command
+     */
+    void registerHandler(RpcHandler handler, RpcCommand command);
+
+    /**
+     * Unregisters an RPC receiver.
+     *
+     * @param handler RPC handler
+     * @param command RPC command
+     */
+    void unRegisterHandler(RpcHandler handler, RpcCommand command);
+
+    /**
+     * Invokes an RPC.
+     *
+     * @param caller  of the of the RPC
+     * @param msgId   RPC message id
+     * @param command RPC command
+     * @param input   RPC input
+     */
+    void invokeRpc(RpcCaller caller, Integer msgId, RpcCommand command,
+                   RpcInput input);
+
+    /**
+     * Provides response to a a previously invoked RPC.
+     *
+     * @param msgId  of a previously invoked RPC
+     * @param output data from the RPC execution
+     */
+    void rpcResponse(Integer msgId, RpcOutput output);
+}
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
index 0b25e83..ff7ba27 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
@@ -40,7 +40,7 @@
 import org.onosproject.yang.model.ModelObjectId;
 import org.onosproject.yang.model.ResourceData;
 import org.onosproject.yang.model.ResourceId;
-import org.onosproject.yang.runtime.DefaultResourceData;
+import org.onosproject.yang.model.DefaultResourceData;
 
 import java.util.Iterator;
 import java.util.List;
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobAugmentTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobAugmentTest.java
index 3572f0c..d075fc6 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobAugmentTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobAugmentTest.java
@@ -33,7 +33,7 @@
 import org.onosproject.yang.model.ModelObject;
 import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ResourceData;
-import org.onosproject.yang.runtime.DefaultResourceData;
+import org.onosproject.yang.model.DefaultResourceData;
 
 import java.util.List;
 
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobBasicYangConstructTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobBasicYangConstructTest.java
index be21b0c..11f90f7 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobBasicYangConstructTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobBasicYangConstructTest.java
@@ -28,7 +28,7 @@
 import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ResourceData;
 import org.onosproject.yang.model.ResourceId;
-import org.onosproject.yang.runtime.DefaultResourceData;
+import org.onosproject.yang.model.DefaultResourceData;
 
 import java.io.IOException;
 import java.util.List;
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobChoiceTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobChoiceTest.java
index a063b8a..5103f2f 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobChoiceTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobChoiceTest.java
@@ -27,7 +27,7 @@
 import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ResourceData;
 import org.onosproject.yang.model.ResourceId;
-import org.onosproject.yang.runtime.DefaultResourceData;
+import org.onosproject.yang.model.DefaultResourceData;
 
 import java.util.List;
 
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobGroupingUsesTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobGroupingUsesTest.java
index 13dec1a..6ba0a73 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobGroupingUsesTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobGroupingUsesTest.java
@@ -25,7 +25,7 @@
 import org.onosproject.yang.model.ModelObject;
 import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ResourceData;
-import org.onosproject.yang.runtime.DefaultResourceData;
+import org.onosproject.yang.model.DefaultResourceData;
 
 import java.util.List;
 
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobL3VpnSvcTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobL3VpnSvcTest.java
index 62d2693..e2cacda 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobL3VpnSvcTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobL3VpnSvcTest.java
@@ -43,7 +43,7 @@
 import org.onosproject.yang.model.ResourceData;
 import org.onosproject.yang.model.ResourceId;
 import org.onosproject.yang.model.SingleInstanceNode;
-import org.onosproject.yang.runtime.DefaultResourceData;
+import org.onosproject.yang.model.DefaultResourceData;
 
 import java.util.List;
 
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobRIdToMoIdConverterTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobRIdToMoIdConverterTest.java
index aa3938f..0d1bb61 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobRIdToMoIdConverterTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobRIdToMoIdConverterTest.java
@@ -38,7 +38,7 @@
 import org.onosproject.yang.model.ResourceId;
 import org.onosproject.yang.model.SingleInstanceLeaf;
 import org.onosproject.yang.model.SingleInstanceNode;
-import org.onosproject.yang.runtime.DefaultResourceData;
+import org.onosproject.yang.model.DefaultResourceData;
 
 import java.util.List;
 
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
index c219434..cc979e5 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
@@ -23,7 +23,7 @@
 import org.onosproject.yang.model.ModelObject;
 import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ResourceData;
-import org.onosproject.yang.runtime.DefaultResourceData;
+import org.onosproject.yang.model.DefaultResourceData;
 
 import java.util.List;
 
diff --git a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/JsonSerializer.java b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/JsonSerializer.java
index 84fb761..11f434c 100644
--- a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/JsonSerializer.java
+++ b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/JsonSerializer.java
@@ -27,7 +27,7 @@
 import org.onosproject.yang.runtime.CompositeStream;
 import org.onosproject.yang.runtime.DefaultCompositeData;
 import org.onosproject.yang.runtime.DefaultCompositeStream;
-import org.onosproject.yang.runtime.DefaultResourceData;
+import org.onosproject.yang.model.DefaultResourceData;
 import org.onosproject.yang.runtime.YangSerializer;
 import org.onosproject.yang.runtime.YangSerializerContext;
 import org.slf4j.Logger;
diff --git a/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java b/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java
index 62fce37..7ca6f9c 100644
--- a/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java
+++ b/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java
@@ -33,7 +33,7 @@
 import org.onosproject.yang.runtime.CompositeStream;
 import org.onosproject.yang.runtime.DefaultCompositeData;
 import org.onosproject.yang.runtime.DefaultCompositeStream;
-import org.onosproject.yang.runtime.DefaultResourceData;
+import org.onosproject.yang.model.DefaultResourceData;
 import org.onosproject.yang.runtime.DefaultRuntimeContext;
 import org.onosproject.yang.runtime.RuntimeContext;
 import org.onosproject.yang.runtime.YangSerializer;
diff --git a/serializers/xml/src/main/java/org/onosproject/yang/serializers/xml/XmlSerializer.java b/serializers/xml/src/main/java/org/onosproject/yang/serializers/xml/XmlSerializer.java
index 67bc423..b343fd0 100644
--- a/serializers/xml/src/main/java/org/onosproject/yang/serializers/xml/XmlSerializer.java
+++ b/serializers/xml/src/main/java/org/onosproject/yang/serializers/xml/XmlSerializer.java
@@ -30,7 +30,7 @@
 import org.onosproject.yang.runtime.CompositeStream;
 import org.onosproject.yang.runtime.DefaultCompositeData;
 import org.onosproject.yang.runtime.DefaultCompositeStream;
-import org.onosproject.yang.runtime.DefaultResourceData;
+import org.onosproject.yang.model.DefaultResourceData;
 import org.onosproject.yang.runtime.YangSerializer;
 import org.onosproject.yang.runtime.YangSerializerContext;
 
