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 25bceb8..bb562e8 100644
--- a/apps/config/src/main/java/org/onosproject/config/DynamicConfigService.java
+++ b/apps/config/src/main/java/org/onosproject/config/DynamicConfigService.java
@@ -120,15 +120,5 @@
      * @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 a74aaae..4dcd671 100644
--- a/apps/config/src/main/java/org/onosproject/config/DynamicConfigServiceAdapter.java
+++ b/apps/config/src/main/java/org/onosproject/config/DynamicConfigServiceAdapter.java
@@ -69,12 +69,6 @@
     }
 
     @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 5fcdc04..b8e9167 100644
--- a/apps/config/src/main/java/org/onosproject/config/ForwardingDynamicConfigService.java
+++ b/apps/config/src/main/java/org/onosproject/config/ForwardingDynamicConfigService.java
@@ -85,9 +85,4 @@
                                                   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 cdec56a..d976a40 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,7 +51,6 @@
 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;
 
@@ -207,21 +206,6 @@
                                 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 2d25fcb..c3f3e7b 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,11 +117,6 @@
     }
 
     @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 3ef0aca..0ad6b25 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(resourceId, inputDataNode);
+        RpcInput rpcInput = new RpcInput(inputDataNode);
 
         RestconfRpcOutput restconfOutput = null;
         try {
             CompletableFuture<RpcOutput> rpcFuture =
-                    dynamicConfigService.invokeRpc(rpcInput);
+                    dynamicConfigService.invokeRpc(resourceId, rpcInput);
             RpcOutput rpcOutput = rpcFuture.get();
             restconfOutput = RestconfUtils.convertRpcOutput(resourceId, rpcOutput);
         } catch (InterruptedException e) {
