diff --git a/modules.defs b/modules.defs
index 751ce70..e03e8f2 100644
--- a/modules.defs
+++ b/modules.defs
@@ -55,8 +55,8 @@
     '//protocols/lisp/msg:onos-protocols-lisp-msg',
     '//protocols/tl1/api:onos-protocols-tl1-api',
     '//protocols/tl1/ctl:onos-protocols-tl1-ctl',
-#    '//protocols/restconf/client/api:onos-protocols-restconf-client-api',
-#    '//protocols/restconf/client/ctl:onos-protocols-restconf-client-ctl',
+    '//protocols/restconf/client/api:onos-protocols-restconf-client-api',
+    '//protocols/restconf/client/ctl:onos-protocols-restconf-client-ctl',
 
     '//drivers/utilities:onos-drivers-utilities',
 
diff --git a/protocols/pom.xml b/protocols/pom.xml
index 537d3d9..152a0aa 100644
--- a/protocols/pom.xml
+++ b/protocols/pom.xml
@@ -42,9 +42,7 @@
         <module>snmp</module>
         <module>bmv2</module>
         <module>lisp</module>
-        <!-- This currently does not work
         <module>restconf</module>
-        -->
         <module>tl1</module>
     </modules>
 
diff --git a/protocols/restconf/client/api/BUCK b/protocols/restconf/client/api/BUCK
new file mode 100644
index 0000000..c1f3e2c
--- /dev/null
+++ b/protocols/restconf/client/api/BUCK
@@ -0,0 +1,10 @@
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//incubator/api:onos-incubator-api',
+    '//utils/rest:onlab-rest',
+    '//protocols/rest/api:onos-protocols-rest-api',
+]
+
+osgi_jar_with_tests (
+    deps = COMPILE_DEPS,
+)
diff --git a/protocols/restconf/client/ctl/BUCK b/protocols/restconf/client/ctl/BUCK
new file mode 100644
index 0000000..ce0292e
--- /dev/null
+++ b/protocols/restconf/client/ctl/BUCK
@@ -0,0 +1,19 @@
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//lib:jersey-client',
+    '//lib:jersey-common',
+    '//lib:httpclient-osgi',
+    '//lib:httpcore-osgi',
+    '//lib:javax.ws.rs-api',
+    '//lib:hk2-api',
+    '//lib:jersey-guava',
+    '//lib:aopalliance-repackaged',
+    '//lib:javax.inject',
+    '//protocols/restconf/client/api:onos-protocols-restconf-client-api',
+    '//protocols/rest/api:onos-protocols-rest-api',
+]
+
+osgi_jar_with_tests (
+    deps = COMPILE_DEPS,
+)
+
diff --git a/protocols/restconf/client/ctl/pom.xml b/protocols/restconf/client/ctl/pom.xml
index 159f582..c51054b 100644
--- a/protocols/restconf/client/ctl/pom.xml
+++ b/protocols/restconf/client/ctl/pom.xml
@@ -67,23 +67,6 @@
             <version>${project.version}</version>
             <type>bundle</type>
         </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-restconf-server-utils</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-app-yms-api</artifactId>
-            <version>${project.version}</version>
-            <type>bundle</type>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-ietfte-provider-utils</artifactId>
-            <version>${project.version}</version>
-            <type>bundle</type>
-        </dependency>
   </dependencies>
 
     <build>
diff --git a/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/JsonYdtCodec.java b/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/JsonYdtCodec.java
deleted file mode 100644
index 6fda6cd..0000000
--- a/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/JsonYdtCodec.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright 2016 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.ctl;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.apache.commons.io.IOUtils;
-import org.onosproject.protocol.restconf.server.utils.parser.json.ParserUtils;
-import org.onosproject.provider.te.utils.YangCompositeEncodingImpl;
-import org.onosproject.yms.ych.YangCompositeEncoding;
-import org.onosproject.yms.ych.YangDataTreeCodec;
-import org.onosproject.yms.ych.YangResourceIdentifierType;
-import org.onosproject.yms.ydt.YdtBuilder;
-import org.onosproject.yms.ydt.YdtContext;
-import org.onosproject.yms.ydt.YmsOperationType;
-import org.onosproject.yms.ymsm.YmsService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import static org.onosproject.protocol.restconf.server.utils.parser.json.ParserUtils.convertYdtToJson;
-import static org.onosproject.protocol.restconf.server.utils.parser.json.ParserUtils.findTopNodeInCompositeYdt;
-import static org.onosproject.protocol.restconf.server.utils.parser.json.ParserUtils.getJsonNameFromYdtNode;
-import static org.onosproject.protocol.restconf.server.utils.parser.json.ParserUtils.getUriInCompositeYdt;
-import static org.onosproject.yms.ydt.YdtContextOperationType.NONE;
-
-
-/**
- * JSON/YDT Codec implementation.
- */
-public class JsonYdtCodec implements YangDataTreeCodec {
-    private static final String RESTCONF_ROOT = "restconf/data";
-    private static final String EMPTY_JSON_OBJECT = "{}";
-
-    protected final YmsService ymsService;
-
-    private final Logger log = LoggerFactory.getLogger(getClass());
-
-    public JsonYdtCodec(YmsService service) {
-        ymsService = service;
-    }
-
-    @Override
-    public String encodeYdtToProtocolFormat(YdtBuilder builder) {
-        return convertYdtToJson(getJsonNameFromYdtNode(builder.getRootNode()),
-                                builder.getRootNode(),
-                                ymsService.getYdtWalker()).textValue();
-    }
-
-    @Override
-    public YangCompositeEncoding encodeYdtToCompositeProtocolFormat(YdtBuilder builder) {
-        String uriString = getUriInCompositeYdt(builder);
-        YdtContext topNode = findTopNodeInCompositeYdt(builder);
-        if (topNode != null) {
-            ObjectNode objectNode = convertYdtToJson(getJsonNameFromYdtNode(topNode),
-                                                     topNode,
-                                                     ymsService.getYdtWalker());
-            return new YangCompositeEncodingImpl(YangResourceIdentifierType.URI,
-                                                 uriString,
-                                                 objectNode.toString());
-        }
-
-        return new YangCompositeEncodingImpl(YangResourceIdentifierType.URI,
-                                             uriString,
-                                             EMPTY_JSON_OBJECT);
-    }
-
-    @Override
-    public YdtBuilder decodeProtocolDataToYdt(String protocolData,
-                                              Object schemaRegistryForYdt,
-                                              YmsOperationType opType) {
-        // Get a new builder
-        YdtBuilder builder = ymsService.getYdtBuilder(RESTCONF_ROOT,
-                                                      null,
-                                                      opType,
-                                                      schemaRegistryForYdt);
-        ParserUtils.convertJsonToYdt(getObjectNode(protocolData), builder);
-        return builder;
-    }
-
-    @Override
-    public YdtBuilder decodeCompositeProtocolDataToYdt(YangCompositeEncoding protocolData,
-                                                       Object schemaRegistryForYdt,
-                                                       YmsOperationType opType) {
-        // opType should be QUERY_REPLY
-        // Get a new builder
-        YdtBuilder builder = ymsService.getYdtBuilder(RESTCONF_ROOT,
-                                                      null,
-                                                      opType,
-                                                      schemaRegistryForYdt);
-        // Convert the URI to ydtBuilder
-
-        // YdtContextOperationType should be NONE for URI in QUERY_RESPONSE.
-        ParserUtils.convertUriToYdt(protocolData.getResourceIdentifier(), builder, NONE);
-        // Set default operation type for the payload node, is this for resource data?
-        // NULL/EMPTY for Resource data
-        builder.setDefaultEditOperationType(null);
-
-        // Convert the payload json body to ydt
-        ParserUtils.convertJsonToYdt(getObjectNode(protocolData.getResourceInformation()), builder);
-        return builder;
-    }
-
-    // Returns an ObjectNode from s JSON string.
-    private ObjectNode getObjectNode(String json) {
-        InputStream stream = IOUtils.toInputStream(json);
-
-        ObjectNode rootNode;
-        ObjectMapper mapper = new ObjectMapper();
-        try {
-            rootNode = (ObjectNode) mapper.readTree(stream);
-        } catch (IOException e) {
-            log.error("Can't read stream as a JSON ObjectNode: {}", e);
-            return null;
-        }
-        return rootNode;
-    }
-}
diff --git a/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java b/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java
index 897f6c7..1d812b5 100644
--- a/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java
+++ b/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java
@@ -18,8 +18,6 @@
 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.client.ChunkedInput;
 import org.onlab.packet.IpAddress;
@@ -28,8 +26,6 @@
 import org.onosproject.protocol.rest.RestSBDevice;
 import org.onosproject.protocol.restconf.RestConfSBController;
 import org.onosproject.protocol.restconf.RestconfNotificationEventListener;
-import org.onosproject.yms.ych.YangProtocolEncodingFormat;
-import org.onosproject.yms.ymsm.YmsService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,19 +63,11 @@
             restconfNotificationListenerMap = new ConcurrentHashMap<>();
     private Map<DeviceId, GetChunksRunnable> runnableTable = new ConcurrentHashMap<>();
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected YmsService ymsService;
-
     ExecutorService executor = Executors.newCachedThreadPool();
 
     @Activate
     public void activate() {
         log.info("RESTCONF SBI Started");
-        if (ymsService != null) {
-            ymsService
-                    .registerDefaultCodec(new JsonYdtCodec(ymsService),
-                                          YangProtocolEncodingFormat.JSON);
-        }
     }
 
     @Deactivate
