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..04c2019 100644
--- a/apps/config/src/main/java/org/onosproject/config/DynamicConfigService.java
+++ b/apps/config/src/main/java/org/onosproject/config/DynamicConfigService.java
@@ -115,17 +115,6 @@
     /**
      * Invokes an RPC.
      *
-     * @param id of RPC node
-     * @param input RPC input
-     * @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
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..de397da 100644
--- a/apps/config/src/main/java/org/onosproject/config/DynamicConfigServiceAdapter.java
+++ b/apps/config/src/main/java/org/onosproject/config/DynamicConfigServiceAdapter.java
@@ -63,15 +63,8 @@
     }
 
     @Override
-    public CompletableFuture<RpcOutput> invokeRpc(ResourceId id,
-                                                  RpcInput input) {
-        return CompletableFuture.completedFuture(new RpcOutput(RPC_NODATA, null));
-    }
-
-    @Override
     public CompletableFuture<RpcOutput> invokeRpc(RpcInput input) {
-        //TODO: implement me, not sure about purpose of this adapter.
-        throw new UnsupportedOperationException();
+        return CompletableFuture.completedFuture(new RpcOutput(RPC_NODATA, null));
     }
 
     @Override
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..2289c63 100644
--- a/apps/config/src/main/java/org/onosproject/config/ForwardingDynamicConfigService.java
+++ b/apps/config/src/main/java/org/onosproject/config/ForwardingDynamicConfigService.java
@@ -81,12 +81,6 @@
     }
 
     @Override
-    public CompletableFuture<RpcOutput> invokeRpc(ResourceId id,
-                                                  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 3383d50..944cd02 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
@@ -185,19 +185,6 @@
     }
 
     @Override
-    public CompletableFuture<RpcOutput> invokeRpc(ResourceId id, RpcInput input) {
-        RpcContext context = contextProvider.getRpcContext(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));
-    }
-
-    @Override
     public CompletableFuture<RpcOutput> invokeRpc(RpcInput input) {
         checkNotNull(input);
         checkNotNull(input.id());
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..66721c3 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
@@ -111,12 +111,6 @@
     }
 
     @Override
-    public CompletableFuture<RpcOutput> invokeRpc(ResourceId id,
-                                                  RpcInput input) {
-        return super.invokeRpc(toAbsoluteId(id), input);
-    }
-
-    @Override
     public CompletableFuture<RpcOutput> invokeRpc(RpcInput input) {
         return super.invokeRpc(new RpcInput(toAbsoluteId(input.id()), input.data()));
     }
diff --git a/apps/config/src/test/java/org/onosproject/d/config/DynamicDeviceConfigServiceViewTest.java b/apps/config/src/test/java/org/onosproject/d/config/DynamicDeviceConfigServiceViewTest.java
index a9b0c31..d67792a 100644
--- a/apps/config/src/test/java/org/onosproject/d/config/DynamicDeviceConfigServiceViewTest.java
+++ b/apps/config/src/test/java/org/onosproject/d/config/DynamicDeviceConfigServiceViewTest.java
@@ -163,8 +163,8 @@
 
     @Test
     public void testInvokeRpc() {
-        RpcInput input = null;
-        view.invokeRpc(relIntf, input);
+        RpcInput input = new RpcInput(relIntf, null);
+        view.invokeRpc(input);
 
         assertTrue(ResourceIds.isPrefix(rid, realId));
     }
@@ -205,10 +205,9 @@
         }
 
         @Override
-        public CompletableFuture<RpcOutput> invokeRpc(ResourceId id,
-                                                      RpcInput input) {
-            realId = id;
-            return super.invokeRpc(id, input);
+        public CompletableFuture<RpcOutput> invokeRpc(RpcInput input) {
+            realId = input.id();
+            return super.invokeRpc(input);
         }
 
         public void post(DynamicConfigEvent event) {
