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 829ddb8..59aac5a 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
@@ -223,6 +223,11 @@
             while (child != null && !(child instanceof YangRpc)) {
                 child = child.getNextSibling();
             }
+            while (child != null && child instanceof YangRpc &&
+                    !name.contains(child.getJavaPackage() + "."
+                    + child.getJavaClassNameOrBuiltInType().toLowerCase())) {
+                child = child.getNextSibling();
+            }
             if (child != null) {
                 //Rpc should be part of resource identifier for input/output
                 // nodes.
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/MoIdToRscIdTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/MoIdToRscIdTest.java
index 6bc150e..acba744 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/MoIdToRscIdTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/MoIdToRscIdTest.java
@@ -782,7 +782,7 @@
         YangRpc rpc = new YangRpc() {
             @Override
             public String getJavaPackage() {
-                return null;
+                return "org.onosproject.yang.runtime.mockclass.testmodule";
             }
 
             @Override
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/RpcContextTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/RpcContextTest.java
index 573c04c..225c883 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/RpcContextTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/RpcContextTest.java
@@ -15,12 +15,22 @@
  */
 package org.onosproject.yang.runtime.impl;
 
+import org.junit.Before;
 import org.junit.Test;
-import org.onosproject.yang.model.DataNode;
+import org.onosproject.yang.gen.v1.hello.rev20150105.hello.hellosecond.DefaultHelloSecondInput;
+import org.onosproject.yang.gen.v1.hello.rev20150105.hello.hellosecond.HelloSecondInput;
+import org.onosproject.yang.gen.v1.hello.rev20150105.hello.helloworld.DefaultHelloWorldInput;
+import org.onosproject.yang.gen.v1.hello.rev20150105.hello.helloworld.HelloWorldInput;
+import org.onosproject.yang.model.DefaultModelObjectData;
+import org.onosproject.yang.model.ModelConverter;
+import org.onosproject.yang.model.ModelObject;
+import org.onosproject.yang.model.ModelObjectData;
+import org.onosproject.yang.model.ResourceData;
 import org.onosproject.yang.model.ResourceId;
 import org.onosproject.yang.model.RpcContext;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.onosproject.yang.runtime.SerializerHelper.addToResourceId;
 import static org.onosproject.yang.runtime.SerializerHelper.initializeResourceId;
 import static org.onosproject.yang.runtime.impl.MockYangSchemaNodeProvider.processSchemaRegistry;
@@ -35,12 +45,12 @@
     public static final String NS = "urn:params:xml:ns:yang:hello";
     String value = null;
     TestYangSerializerContext context = new TestYangSerializerContext();
-    DataNode.Builder dBlr;
 
     /**
      * Sets up all prerequisite.
      */
-    private void setUp() {
+    @Before
+    public void setUp() {
         processSchemaRegistry();
         reg = registry();
         builder = new ModIdToRscIdConverter(reg);
@@ -51,7 +61,6 @@
      */
     @Test
     public void checkRpcContext() {
-        setUp();
         ResourceId.Builder rIdBlr = initializeResourceId(context);
         rIdBlr = addToResourceId(rIdBlr, "hello-world", NS, value);
 
@@ -63,4 +72,30 @@
         assertEquals(context.serviceIntf().toString(), "interface org.onosproject" +
                 ".yang.gen.v1.hello.rev20150105.HelloService");
     }
+
+    /*
+     * Test the file rpc_test.yang.
+     * This specifically tests that when 2 RPC's are specified in a single
+     * YANG file that both RPC inputs can be handled through the ModelConverter
+     */
+    @Test
+    public void checkRpcConverter() {
+        ModelConverter mc = new DefaultModelConverter(reg);
+        HelloWorldInput hwInput = new DefaultHelloWorldInput();
+        hwInput.x("input-sample");
+        ModelObjectData hwInputMod = DefaultModelObjectData.builder().
+                            addModelObject((ModelObject) hwInput).build();
+        assertNotNull(hwInputMod);
+        ResourceData rd = mc.createDataNode(hwInputMod);
+        assertNotNull(rd);
+
+        //Now test converting to a second RPC in the same YANG
+        HelloSecondInput hsInput = new DefaultHelloSecondInput();
+        hsInput.x("second-input");
+        ModelObjectData hsInputMod = DefaultModelObjectData.builder().
+                addModelObject((ModelObject) hsInput).build();
+        assertNotNull(hsInputMod);
+        ResourceData rdSecond = mc.createDataNode(hsInputMod);
+        assertNotNull(rdSecond);
+    }
 }
diff --git a/runtime/src/test/resources/schemaProviderTestYangFiles/rpc_test.yang b/runtime/src/test/resources/schemaProviderTestYangFiles/rpc_test.yang
index c1968a3..fdd4a43 100644
--- a/runtime/src/test/resources/schemaProviderTestYangFiles/rpc_test.yang
+++ b/runtime/src/test/resources/schemaProviderTestYangFiles/rpc_test.yang
@@ -20,4 +20,18 @@
             }
         }
     }
+
+    rpc hello-second {
+        input {
+            leaf x {
+                type string;
+            }
+        }
+
+        output {
+            leaf greeting {
+                type string;
+            }
+        }
+    }
 }
\ No newline at end of file
