diff --git a/apps/restconf/api/pom.xml b/apps/restconf/api/pom.xml
index 498f4f7..57c9bf3 100644
--- a/apps/restconf/api/pom.xml
+++ b/apps/restconf/api/pom.xml
@@ -21,12 +21,12 @@
 
     <parent>
         <groupId>org.onosproject</groupId>
-        <artifactId>onos-app-restconf</artifactId>
+        <artifactId>onos-restconf-parent</artifactId>
         <version>1.10.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>onos-restconf-api</artifactId>
+    <artifactId>onos-app-restconf-api</artifactId>
     <packaging>bundle</packaging>
 
     <dependencies>
diff --git a/apps/restconf/app/app.xml b/apps/restconf/app/app.xml
index d5f0ecd..187f12c 100644
--- a/apps/restconf/app/app.xml
+++ b/apps/restconf/app/app.xml
@@ -19,6 +19,6 @@
      featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
      features="${project.artifactId}" >
     <description>${project.description}</description>
-    <artifact>mvn:${project.groupId}/onos-restconf-api/${project.version}</artifact>
-    <artifact>mvn:${project.groupId}/onos-restconf-restconfmanager/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/onos-app-restconf-api/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/onos-app-restconf-restconfmanager/${project.version}</artifact>
 </app>
diff --git a/apps/restconf/app/features.xml b/apps/restconf/app/features.xml
index 1cbad5a..43dd645 100644
--- a/apps/restconf/app/features.xml
+++ b/apps/restconf/app/features.xml
@@ -18,7 +18,7 @@
     <feature name="${project.artifactId}" version="${project.version}"
              description="${project.description}">
         <feature>onos-api</feature>
-        <bundle>mvn:${project.groupId}/onos-restconf-api/${project.version}</bundle>
-        <bundle>mvn:${project.groupId}/onos-restconf-restconfmanager/${project.version}</bundle>
+        <bundle>mvn:${project.groupId}/onos-app-restconf-api/${project.version}</bundle>
+        <bundle>mvn:${project.groupId}/onos-app-restconf-restconfmanager/${project.version}</bundle>
     </feature>
 </features>
diff --git a/apps/restconf/app/pom.xml b/apps/restconf/app/pom.xml
index 6f5228e..88257ec 100644
--- a/apps/restconf/app/pom.xml
+++ b/apps/restconf/app/pom.xml
@@ -21,12 +21,12 @@
 
     <parent>
         <groupId>org.onosproject</groupId>
-        <artifactId>onos-app-restconf</artifactId>
+        <artifactId>onos-restconf-parent</artifactId>
         <version>1.10.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>onos-restconf-app</artifactId>
+    <artifactId>onos-app-restconf</artifactId>
     <packaging>pom</packaging>
 
     <properties>
@@ -38,12 +38,12 @@
     <dependencies>
         <dependency>
             <groupId>org.onosproject</groupId>
-            <artifactId>onos-restconf-api</artifactId>
+            <artifactId>onos-app-restconf-api</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
-            <artifactId>onos-restconf-restconfmanager</artifactId>
+            <artifactId>onos-app-restconf-restconfmanager</artifactId>
             <version>${project.version}</version>
         </dependency>
     </dependencies>
diff --git a/apps/restconf/pom.xml b/apps/restconf/pom.xml
index 24ac069..e478c32 100644
--- a/apps/restconf/pom.xml
+++ b/apps/restconf/pom.xml
@@ -25,7 +25,7 @@
         <version>1.10.0-SNAPSHOT</version>
     </parent>
 
-    <artifactId>onos-app-restconf</artifactId>
+    <artifactId>onos-restconf-parent</artifactId>
     <packaging>pom</packaging>
 
     <modules>
diff --git a/apps/restconf/restconfmgr/pom.xml b/apps/restconf/restconfmgr/pom.xml
index db856ea..c79d6d1 100644
--- a/apps/restconf/restconfmgr/pom.xml
+++ b/apps/restconf/restconfmgr/pom.xml
@@ -21,18 +21,18 @@
 
     <parent>
         <groupId>org.onosproject</groupId>
-        <artifactId>onos-app-restconf</artifactId>
+        <artifactId>onos-restconf-parent</artifactId>
         <version>1.10.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>onos-restconf-restconfmanager</artifactId>
+    <artifactId>onos-app-restconf-restconfmanager</artifactId>
     <packaging>bundle</packaging>
 
     <dependencies>
         <dependency>
             <groupId>org.onosproject</groupId>
-            <artifactId>onos-restconf-api</artifactId>
+            <artifactId>onos-app-restconf-api</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
diff --git a/protocols/restconf/server/api/src/main/java/org/onosproject/protocol/restconf/server/api/RestconfService.java b/protocols/restconf/server/api/src/main/java/org/onosproject/protocol/restconf/server/api/RestconfService.java
index 053356b..fb8a975 100644
--- a/protocols/restconf/server/api/src/main/java/org/onosproject/protocol/restconf/server/api/RestconfService.java
+++ b/protocols/restconf/server/api/src/main/java/org/onosproject/protocol/restconf/server/api/RestconfService.java
@@ -21,7 +21,11 @@
 /**
  * Abstraction of RESTCONF Server functionality according to the
  * RESTCONF RFC (no official RFC number yet).
+ * <p>
+ * NOTE: This interface will be obsolete and will be replaced by the one
+ * in the RESTCONF application.
  */
+@Deprecated
 public interface RestconfService {
     /**
      * Processes a GET request against a data resource. The
diff --git a/protocols/restconf/server/api/src/main/java/org/onosproject/protocol/restconf/server/api/RestconfServiceBroker.java b/protocols/restconf/server/api/src/main/java/org/onosproject/protocol/restconf/server/api/RestconfServiceBroker.java
new file mode 100644
index 0000000..b5a0c53
--- /dev/null
+++ b/protocols/restconf/server/api/src/main/java/org/onosproject/protocol/restconf/server/api/RestconfServiceBroker.java
@@ -0,0 +1,130 @@
+/*
+ * 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.protocol.restconf.server.api;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.glassfish.jersey.server.ChunkedOutput;
+
+/**
+ * Representation of a RESTCONF service broker. The broker
+ * provides services to the RESTCONF protocol proxy.
+ */
+public interface RestconfServiceBroker {
+    /**
+     * Processes a GET request against a data resource. The
+     * target data resource is identified by its URI. If the
+     * GET operation cannot be fulfilled due to reasons such
+     * as the nonexistence of the target resource, then a
+     * RestconfException exception is raised. The proper
+     * HTTP error status code is enclosed in the exception, so
+     * that the caller may return it to the RESTCONF client to
+     * display.
+     *
+     * @param uri URI of the target data resource
+     * @return JSON representation of the data resource
+     * @throws RestconfException if the GET operation cannot be fulfilled
+     */
+    ObjectNode runGetOperationOnDataResource(String uri)
+            throws RestconfException;
+
+    /**
+     * Processes a POST request against a data resource. The location of
+     * the target resource is passed in as a URI. And the resource's
+     * content is passed in as a JSON ObjectNode. If the POST operation
+     * cannot be fulfilled due to reasons such as wrong input URIs or
+     * syntax errors in the JSON payloads, a RestconfException exception
+     * is raised. The proper HTTP error status code is enclosed in the
+     * exception.
+     *
+     * @param uri      URI of the data resource to be created
+     * @param rootNode JSON representation of the data resource
+     * @throws RestconfException if the POST operation cannot be fulfilled
+     */
+    void runPostOperationOnDataResource(String uri, ObjectNode rootNode)
+            throws RestconfException;
+
+    /**
+     * Processes a PUT request against a data resource. The location of
+     * the target resource is passed in as a URI. And the resource's
+     * content is passed in as a JSON ObjectNode. If the PUT operation
+     * cannot be fulfilled due to reasons such as wrong input URIs or
+     * syntax errors in the JSON payloads, a RestconfException exception
+     * is raised. The proper HTTP error status code is enclosed in the
+     * exception.
+     *
+     * @param uri      URI of the data resource to be created or updated
+     * @param rootNode JSON representation of the data resource
+     * @throws RestconfException if the PUT operation cannot be fulfilled
+     */
+    void runPutOperationOnDataResource(String uri, ObjectNode rootNode)
+            throws RestconfException;
+
+    /**
+     * Processes the DELETE operation against a data resource. The target
+     * data resource is identified by its URI. If the DELETE operation
+     * cannot be fulfilled due reasons such as the nonexistence of the
+     * target resource, a RestconfException exception is raised. The
+     * proper HTTP error status code is enclosed in the exception.
+     *
+     * @param uri URI of the data resource to be deleted
+     * @throws RestconfException if the DELETE operation cannot be fulfilled
+     */
+    void runDeleteOperationOnDataResource(String uri) throws RestconfException;
+
+    /**
+     * Processes a PATCH operation on a data resource. The target data
+     * resource is identified by its URI passed in by the caller.
+     * And the content of the data resource is passed in as a JSON ObjectNode.
+     * If the PATCH operation cannot be fulfilled due reasons such as
+     * the nonexistence of the target resource, a RestconfException
+     * exception is raised. The proper HTTP error status code is
+     * enclosed in the exception.
+     *
+     * @param uri      URI of the data resource to be patched
+     * @param rootNode JSON representation of the data resource
+     * @throws RestconfException if the PATCH operation cannot be fulfilled
+     */
+    void runPatchOperationOnDataResource(String uri, ObjectNode rootNode)
+            throws RestconfException;
+
+    /**
+     * Retrieves the RESTCONF Root directory.
+     *
+     * @return the RESTCONF Root directory
+     */
+    String getRestconfRootPath();
+
+    /**
+     * Handles an Event Stream subscription request. This function creates
+     * a worker thread to listen to events and writes to a ChunkedOutput,
+     * which is passed in from the caller. (The worker thread blocks if
+     * no events arrive.) The ChuckedOutput is a pipe to which this
+     * function acts as the writer and the caller the reader.
+     * <p>
+     * If the Event Stream cannot be subscribed due to reasons such as
+     * the nonexistence of the target stream or failure to allocate
+     * worker thread to handle the request, a RestconfException exception
+     * is raised. The proper HTTP error status code is enclosed in the
+     * exception, so that the caller may return it to the RESTCONF client
+     * to display.
+     *
+     * @param streamId ID of the RESTCONF stream to subscribe
+     * @param output   A string data stream
+     * @throws RestconfException if the Event Stream cannot be subscribed
+     */
+    void subscribeEventStream(String streamId, ChunkedOutput<String> output)
+            throws RestconfException;
+}
diff --git a/protocols/restconf/server/restconfmgr/BUCK b/protocols/restconf/server/restconfmgr/BUCK
index 26d8076..8b01d0e 100644
--- a/protocols/restconf/server/restconfmgr/BUCK
+++ b/protocols/restconf/server/restconfmgr/BUCK
@@ -5,6 +5,8 @@
     '//lib:javax.ws.rs-api',
     '//utils/rest:onlab-rest',
     '//core/store/serializers:onos-core-serializers',
+    '//incubator/api:onos-incubator-api',
+    '//apps/restconf/api:onos-apps-restconf-api',
     '//protocols/restconf/server/api:onos-protocols-restconf-server-api',
     '//protocols/restconf/server/utils:onos-protocols-restconf-server-utils',
     '//apps/yms/api:onos-apps-yms-api',
diff --git a/protocols/restconf/server/restconfmgr/pom.xml b/protocols/restconf/server/restconfmgr/pom.xml
index 750bfe0..aaed7cc 100644
--- a/protocols/restconf/server/restconfmgr/pom.xml
+++ b/protocols/restconf/server/restconfmgr/pom.xml
@@ -68,6 +68,11 @@
             <artifactId>onos-app-yms-api</artifactId>
             <version>${project.version}</version>
         </dependency>
+       <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-app-restconf-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
     <build>
         <plugins>
diff --git a/protocols/restconf/server/restconfmgr/src/main/java/org/onosproject/protocol/restconf/server/restconfmanager/RestconfBrokerImpl.java b/protocols/restconf/server/restconfmgr/src/main/java/org/onosproject/protocol/restconf/server/restconfmanager/RestconfBrokerImpl.java
new file mode 100644
index 0000000..c204413
--- /dev/null
+++ b/protocols/restconf/server/restconfmgr/src/main/java/org/onosproject/protocol/restconf/server/restconfmanager/RestconfBrokerImpl.java
@@ -0,0 +1,184 @@
+/*
+ * 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.protocol.restconf.server.restconfmanager;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
+import org.glassfish.jersey.server.ChunkedOutput;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
+import org.onosproject.incubator.net.config.basics.ConfigException;
+import org.onosproject.net.config.ConfigFactory;
+import org.onosproject.net.config.NetworkConfigEvent;
+import org.onosproject.net.config.NetworkConfigListener;
+import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.protocol.restconf.server.api.RestconfException;
+import org.onosproject.protocol.restconf.server.api.RestconfServiceBroker;
+import org.onosproject.restconf.api.RestconfService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_ADDED;
+import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_UPDATED;
+import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
+
+/**
+ * Implementation of the RestconfServiceBroker interface.
+ */
+@Component(immediate = false)
+@Service
+public class RestconfBrokerImpl implements RestconfServiceBroker {
+
+    private static final String APP_NAME = "org.onosproject.protocols.restconfserver";
+    private static final String CONFIG_KEY = "restconfCfg";
+    private static final String DYN_CONFIG_MODE = "true";
+    private static final String RESTCONF_ROOT = "/onos/restconf";
+
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected CoreService coreService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected NetworkConfigRegistry cfgService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected org.onosproject.protocol.restconf.server.api.RestconfService restconfYms;
+
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected RestconfService restconfDynConfig;
+
+    private ApplicationId appId;
+    private boolean useDynamicConfig = false;
+
+    private final NetworkConfigListener cfgLister = new InternalConfigListener();
+    private final ConfigFactory<ApplicationId, RestconfConfig> factory =
+            new ConfigFactory<ApplicationId, RestconfConfig>(APP_SUBJECT_FACTORY,
+                                                             RestconfConfig.class,
+                                                             CONFIG_KEY,
+                                                             false) {
+                @Override
+                public RestconfConfig createConfig() {
+                    return new RestconfConfig();
+                }
+            };
+
+    @Activate
+    protected void activate() {
+        appId = coreService.registerApplication(APP_NAME);
+        cfgService.registerConfigFactory(factory);
+        cfgService.addListener(cfgLister);
+        log.info("Started");
+    }
+
+    @Deactivate
+    protected void deactivate() {
+        cfgService.removeListener(cfgLister);
+        cfgService.unregisterConfigFactory(factory);
+        log.info("Stopped");
+    }
+
+    @Override
+    public ObjectNode runGetOperationOnDataResource(String uri)
+            throws RestconfException {
+        return useDynamicConfig ?
+                restconfDynConfig.runGetOperationOnDataResource(uri) :
+                restconfYms.runGetOperationOnDataResource(uri);
+    }
+
+
+    @Override
+    public void runPostOperationOnDataResource(String uri, ObjectNode rootNode)
+            throws RestconfException {
+        if (useDynamicConfig) {
+            restconfDynConfig.runPostOperationOnDataResource(uri, rootNode);
+        } else {
+            restconfYms.runPostOperationOnDataResource(uri, rootNode);
+        }
+    }
+
+    @Override
+    public void runPutOperationOnDataResource(String uri, ObjectNode rootNode)
+            throws RestconfException {
+        if (useDynamicConfig) {
+            restconfDynConfig.runPutOperationOnDataResource(uri, rootNode);
+        } else {
+            restconfYms.runPutOperationOnDataResource(uri, rootNode);
+        }
+    }
+
+    @Override
+    public void runDeleteOperationOnDataResource(String uri)
+            throws RestconfException {
+        if (useDynamicConfig) {
+            restconfDynConfig.runDeleteOperationOnDataResource(uri);
+        } else {
+            restconfYms.runDeleteOperationOnDataResource(uri);
+        }
+    }
+
+    @Override
+    public void runPatchOperationOnDataResource(String uri, ObjectNode rootNode)
+            throws RestconfException {
+        if (useDynamicConfig) {
+            restconfDynConfig.runPatchOperationOnDataResource(uri, rootNode);
+        } else {
+            restconfYms.runPatchOperationOnDataResource(uri, rootNode);
+        }
+    }
+
+    @Override
+    public String getRestconfRootPath() {
+        return RESTCONF_ROOT;
+    }
+
+    @Override
+    public void subscribeEventStream(String streamId,
+                                     ChunkedOutput<String> output)
+            throws RestconfException {
+        if (useDynamicConfig) {
+            restconfDynConfig.subscribeEventStream(streamId, output);
+        } else {
+            restconfYms.subscribeEventStream(streamId, output);
+        }
+    }
+
+    private class InternalConfigListener implements NetworkConfigListener {
+
+        @Override
+        public void event(NetworkConfigEvent event) {
+            try {
+                useDynamicConfig = cfgService.getConfig(appId, RestconfConfig.class)
+                        .useDynamicConfig().equals(DYN_CONFIG_MODE);
+            } catch (ConfigException e) {
+                log.error("Configuration error {}", e);
+            }
+        }
+
+        @Override
+        public boolean isRelevant(NetworkConfigEvent event) {
+            return event.configClass().equals(RestconfConfig.class) &&
+                    (event.type() == CONFIG_ADDED ||
+                            event.type() == CONFIG_UPDATED);
+        }
+    }
+}
diff --git a/protocols/restconf/server/restconfmgr/src/main/java/org/onosproject/protocol/restconf/server/restconfmanager/RestconfConfig.java b/protocols/restconf/server/restconfmgr/src/main/java/org/onosproject/protocol/restconf/server/restconfmanager/RestconfConfig.java
new file mode 100644
index 0000000..2dd6bb0
--- /dev/null
+++ b/protocols/restconf/server/restconfmgr/src/main/java/org/onosproject/protocol/restconf/server/restconfmanager/RestconfConfig.java
@@ -0,0 +1,45 @@
+/*
+ * 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.protocol.restconf.server.restconfmanager;
+
+import org.onosproject.core.ApplicationId;
+import org.onosproject.incubator.net.config.basics.ConfigException;
+import org.onosproject.net.config.Config;
+
+/**
+ * Configuration for TE Topology parameters.
+ */
+public class RestconfConfig extends Config<ApplicationId> {
+    private static final String CONFIG_VALUE_ERROR = "Error parsing config value";
+    private static final String USE_DNY_CONFIG = "use-dyn-config";
+
+
+    /**
+     * Retrieves whether RESTCONF should use Dynamic Config service.
+     *
+     * @return string value of true or false
+     * @throws ConfigException if the parameters are not correctly configured or
+     *                         conversion of the parameters fails
+     */
+    public String useDynamicConfig() throws ConfigException {
+        try {
+            return object.path(USE_DNY_CONFIG).asText();
+        } catch (IllegalArgumentException e) {
+            throw new ConfigException(CONFIG_VALUE_ERROR, e);
+        }
+    }
+
+}
diff --git a/protocols/restconf/server/restconfmgr/src/main/java/org/onosproject/protocol/restconf/server/restconfmanager/RestconfManager.java b/protocols/restconf/server/restconfmgr/src/main/java/org/onosproject/protocol/restconf/server/restconfmanager/RestconfManager.java
index 5d398c3..e041f1c 100644
--- a/protocols/restconf/server/restconfmgr/src/main/java/org/onosproject/protocol/restconf/server/restconfmanager/RestconfManager.java
+++ b/protocols/restconf/server/restconfmgr/src/main/java/org/onosproject/protocol/restconf/server/restconfmanager/RestconfManager.java
@@ -84,6 +84,9 @@
  *    It provides the main logic of the RESTCONF server. It interacts with
  *    the YMS (YANG Management System) to run operations on the YANG data
  *    objects (i.e., data resources).
+ *
+ * NOTE: This implementation will be obsolete and will be replaced by the
+ *       RESTCONF application.
  */
 
 /**
diff --git a/protocols/restconf/server/rpp/src/main/java/org/onosproject/protocol/restconf/server/rpp/RestconfWebResource.java b/protocols/restconf/server/rpp/src/main/java/org/onosproject/protocol/restconf/server/rpp/RestconfWebResource.java
index 35abdb0..0e0a686 100644
--- a/protocols/restconf/server/rpp/src/main/java/org/onosproject/protocol/restconf/server/rpp/RestconfWebResource.java
+++ b/protocols/restconf/server/rpp/src/main/java/org/onosproject/protocol/restconf/server/rpp/RestconfWebResource.java
@@ -21,7 +21,7 @@
 import org.glassfish.jersey.server.ChunkedOutput;
 import org.onosproject.protocol.restconf.server.api.Patch;
 import org.onosproject.protocol.restconf.server.api.RestconfException;
-import org.onosproject.protocol.restconf.server.api.RestconfService;
+import org.onosproject.protocol.restconf.server.api.RestconfServiceBroker;
 import org.onosproject.rest.AbstractWebResource;
 import org.slf4j.Logger;
 
@@ -62,7 +62,7 @@
     @Context
     UriInfo uriInfo;
 
-    private final RestconfService service = get(RestconfService.class);
+    private final RestconfServiceBroker service = get(RestconfServiceBroker.class);
     private final Logger log = getLogger(getClass());
 
     /**
