diff --git a/apps/config/src/main/java/org/onosproject/config/DynamicConfigService.java b/apps/config/src/main/java/org/onosproject/config/DynamicConfigService.java
index bb562e8..25bceb8 100644
--- a/apps/config/src/main/java/org/onosproject/config/DynamicConfigService.java
+++ b/apps/config/src/main/java/org/onosproject/config/DynamicConfigService.java
@@ -120,5 +120,15 @@
      * @return future that will be completed with RpcOutput
      * @throws FailedException if the RPC could not be invoked
      */
+    @Deprecated
     CompletableFuture<RpcOutput> invokeRpc(ResourceId id, RpcInput input);
+
+    /**
+     * Invokes an RPC.
+     *
+     * @param input RPC input with ResourceId and DataNode
+     * @return future that will be completed with RpcOutput
+     * @throws FailedException if the RPC could not be invoked
+     */
+    CompletableFuture<RpcOutput> invokeRpc(RpcInput input);
 }
\ No newline at end of file
diff --git a/apps/config/src/main/java/org/onosproject/config/DynamicConfigServiceAdapter.java b/apps/config/src/main/java/org/onosproject/config/DynamicConfigServiceAdapter.java
index 4dcd671..a74aaae 100644
--- a/apps/config/src/main/java/org/onosproject/config/DynamicConfigServiceAdapter.java
+++ b/apps/config/src/main/java/org/onosproject/config/DynamicConfigServiceAdapter.java
@@ -69,6 +69,12 @@
     }
 
     @Override
+    public CompletableFuture<RpcOutput> invokeRpc(RpcInput input) {
+        //TODO: implement me, not sure about purpose of this adapter.
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
     public void addListener(DynamicConfigListener listener) {
         listenerRegistry.addListener(listener);
     }
diff --git a/apps/config/src/main/java/org/onosproject/config/ForwardingDynamicConfigService.java b/apps/config/src/main/java/org/onosproject/config/ForwardingDynamicConfigService.java
index b8e9167..5fcdc04 100644
--- a/apps/config/src/main/java/org/onosproject/config/ForwardingDynamicConfigService.java
+++ b/apps/config/src/main/java/org/onosproject/config/ForwardingDynamicConfigService.java
@@ -85,4 +85,9 @@
                                                   RpcInput input) {
         return delegate.invokeRpc(id, input);
     }
+
+    @Override
+    public CompletableFuture<RpcOutput> invokeRpc(RpcInput input) {
+        return delegate.invokeRpc(input);
+    }
 }
diff --git a/apps/config/src/main/java/org/onosproject/config/impl/DynamicConfigManager.java b/apps/config/src/main/java/org/onosproject/config/impl/DynamicConfigManager.java
index d976a40..cdec56a 100644
--- a/apps/config/src/main/java/org/onosproject/config/impl/DynamicConfigManager.java
+++ b/apps/config/src/main/java/org/onosproject/config/impl/DynamicConfigManager.java
@@ -51,6 +51,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import org.slf4j.Logger;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onosproject.d.config.DeviceResourceIds.DCS_NAMESPACE;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -206,6 +207,21 @@
                                 context.rpcName(), RpcMessageId.generate(), input));
     }
 
+    @Override
+    public CompletableFuture<RpcOutput> invokeRpc(RpcInput input) {
+        checkNotNull(input);
+        checkNotNull(input.id());
+        RpcContext context = contextProvider.getRpcContext(input.id());
+        String srvcIntf = context.serviceIntf().getName();
+        RpcService handler = handlerRegistry.get(srvcIntf);
+        if (handler == null) {
+            throw new FailedException("No registered handler found, cannot invoke");
+        }
+        return CompletableFuture.supplyAsync(
+            new RpcExecutor(handler, getSvcId(handler, srvcIntf),
+                context.rpcName(), RpcMessageId.generate(), input));
+    }
+
     /**
      * Auxiliary store delegate to receive notification about changes in the store.
      */
diff --git a/apps/config/src/main/java/org/onosproject/d/config/DynamicDeviceConfigServiceView.java b/apps/config/src/main/java/org/onosproject/d/config/DynamicDeviceConfigServiceView.java
index c3f3e7b..2d25fcb 100644
--- a/apps/config/src/main/java/org/onosproject/d/config/DynamicDeviceConfigServiceView.java
+++ b/apps/config/src/main/java/org/onosproject/d/config/DynamicDeviceConfigServiceView.java
@@ -117,6 +117,11 @@
     }
 
     @Override
+    public CompletableFuture<RpcOutput> invokeRpc(RpcInput input) {
+        return super.invokeRpc(new RpcInput(toAbsoluteId(input.id()), input.data()));
+    }
+
+    @Override
     public void addListener(DynamicConfigListener listener) {
         super.addListener(wrapped.computeIfAbsent(listener,
                                                   DynamicDeviceConfigListener::new));
diff --git a/apps/restconf/restconfmgr/src/main/java/org/onosproject/restconf/restconfmanager/RestconfManager.java b/apps/restconf/restconfmgr/src/main/java/org/onosproject/restconf/restconfmanager/RestconfManager.java
index 0ad6b25..3ef0aca 100644
--- a/apps/restconf/restconfmgr/src/main/java/org/onosproject/restconf/restconfmanager/RestconfManager.java
+++ b/apps/restconf/restconfmgr/src/main/java/org/onosproject/restconf/restconfmanager/RestconfManager.java
@@ -276,12 +276,12 @@
         ResourceId resourceId = rpcInputNode.resourceId();
         List<DataNode> inputDataNodeList = rpcInputNode.dataNodes();
         DataNode inputDataNode = inputDataNodeList.get(0);
-        RpcInput rpcInput = new RpcInput(inputDataNode);
+        RpcInput rpcInput = new RpcInput(resourceId, inputDataNode);
 
         RestconfRpcOutput restconfOutput = null;
         try {
             CompletableFuture<RpcOutput> rpcFuture =
-                    dynamicConfigService.invokeRpc(resourceId, rpcInput);
+                    dynamicConfigService.invokeRpc(rpcInput);
             RpcOutput rpcOutput = rpcFuture.get();
             restconfOutput = RestconfUtils.convertRpcOutput(resourceId, rpcOutput);
         } catch (InterruptedException e) {
