diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
index ab7c746..795211e 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
@@ -126,7 +126,7 @@
 
     @Override
     public String doRPC(String request) throws IOException {
-        String reply = doRequest(request);
+        String reply = doRequest(request + "\n" + endpattern);
         return checkReply(reply) ? reply : "ERROR " + reply;
     }
 
diff --git a/protocols/netconf/pom.xml b/protocols/netconf/pom.xml
index 7795a12..19b79c3 100644
--- a/protocols/netconf/pom.xml
+++ b/protocols/netconf/pom.xml
@@ -30,7 +30,6 @@
 
     <modules>
         <module>api</module>
-        <module>rfc</module>
         <module>ctl</module>
     </modules>
 
diff --git a/protocols/netconf/rfc/pom.xml b/protocols/netconf/rfc/pom.xml
deleted file mode 100644
index 7054028..0000000
--- a/protocols/netconf/rfc/pom.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2015 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.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.onosproject</groupId>
-        <artifactId>onos-netconf</artifactId>
-        <version>1.5.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>onos-netconf-rfc</artifactId>
-    <packaging>bundle</packaging>
-
-</project>
diff --git a/protocols/netconf/rfc/src/main/java/org/onosproject/netconf/rfc/Foo.java b/protocols/netconf/rfc/src/main/java/org/onosproject/netconf/rfc/Foo.java
deleted file mode 100644
index 06963b0..0000000
--- a/protocols/netconf/rfc/src/main/java/org/onosproject/netconf/rfc/Foo.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.onosproject.netconf.rfc;
-
-/**
- * Created by tom on 10/19/15.
- */
-public class Foo {
-}
diff --git a/protocols/netconf/rfc/src/main/java/org/onosproject/netconf/rfc/package-info.java b/protocols/netconf/rfc/src/main/java/org/onosproject/netconf/rfc/package-info.java
deleted file mode 100644
index 2adc767..0000000
--- a/protocols/netconf/rfc/src/main/java/org/onosproject/netconf/rfc/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2015 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.
- */
-
-/**
- * NETCONF libraries.
- */
-package org.onosproject.netconf.rfc;
diff --git a/providers/netconf/app/app.xml b/providers/netconf/app/app.xml
index d920d24..288f0ab 100644
--- a/providers/netconf/app/app.xml
+++ b/providers/netconf/app/app.xml
@@ -19,7 +19,6 @@
      features="${project.artifactId}">
     <description>${project.description}</description>
 
-    <artifact>mvn:${project.groupId}/onos-netconf-rfc/${project.version}</artifact>
     <artifact>mvn:${project.groupId}/onos-netconf-api/${project.version}</artifact>
     <artifact>mvn:${project.groupId}/onos-netconf-ctl/${project.version}</artifact>
     <artifact>mvn:${project.groupId}/onos-drivers/${project.version}</artifact>
diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
index 860b1f8..0aea67e 100644
--- a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
+++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
@@ -49,7 +49,6 @@
 import org.slf4j.Logger;
 
 import java.io.IOException;
-import java.util.Map;
 
 import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -65,8 +64,6 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected DeviceProviderRegistry providerRegistry;
 
-    //    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-//    protected DeviceService deviceService;
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected NetconfController controller; //where is initiated ?
 
@@ -102,7 +99,8 @@
         cfgService.registerConfigFactory(factory);
         cfgService.addListener(cfgLister);
         controller.addDeviceListener(innerNodeListener);
-        connectExistingDevices();
+        appId = coreService.registerApplication("org.onosproject.netconf");
+        connectDevices();
         log.info("Started");
     }
 
@@ -132,14 +130,7 @@
 
     @Override
     public boolean isReachable(DeviceId deviceId) {
-        Map<DeviceId, NetconfDevice> devices = controller.getDevicesMap();
-
-        NetconfDevice netconfDevice = null;
-        for (DeviceId key : devices.keySet()) {
-            if (key.equals(deviceId)) {
-                netconfDevice = controller.getDevicesMap().get(key);
-            }
-        }
+        NetconfDevice netconfDevice = controller.getNetconfDevice(deviceId);
         if (netconfDevice == null) {
             log.warn("BAD REQUEST: the requested device id: "
                              + deviceId.toString()
@@ -180,12 +171,6 @@
         }
     }
 
-    private void connectExistingDevices() {
-        //TODO consolidate
-        appId = coreService.registerApplication("org.onosproject.netconf");
-        connectDevices();
-    }
-
     private void connectDevices() {
         NetconfProviderConfig cfg = cfgService.getConfig(appId, NetconfProviderConfig.class);
         if (cfg != null) {
