diff --git a/drivers/netconf/src/main/java/org/onosproject/drivers/netconf/NetconfConfigGetter.java b/drivers/netconf/src/main/java/org/onosproject/drivers/netconf/NetconfConfigGetter.java
index 4f42a96..30f71fb 100644
--- a/drivers/netconf/src/main/java/org/onosproject/drivers/netconf/NetconfConfigGetter.java
+++ b/drivers/netconf/src/main/java/org/onosproject/drivers/netconf/NetconfConfigGetter.java
@@ -39,7 +39,7 @@
 public class NetconfConfigGetter extends AbstractHandlerBehaviour
         implements ConfigGetter {
 
-    private final Logger log = getLogger(NetconfControllerConfig.class);
+    private final Logger log = getLogger(getClass());
 
     //FIXME the error string should be universal for all implementations of
     // ConfigGetter
@@ -58,7 +58,7 @@
                     getConfig(type);
         } catch (IOException e) {
             log.error("Configuration could not be retrieved {}",
-                      e.getStackTrace().toString());
+                      e.getMessage());
         }
         return UNABLE_TO_READ_CONFIG;
     }
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceFactory.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceFactory.java
new file mode 100644
index 0000000..3baa704
--- /dev/null
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceFactory.java
@@ -0,0 +1,33 @@
+/*
+ * 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.netconf;
+
+/**
+ * Abstract interface for the creation of a NETCONF device.
+ */
+public interface NetconfDeviceFactory {
+
+    /**
+     * Creates a new NETCONF device based on the supplied information.
+     * @param netconfDeviceInfo information of the device to create.
+     * @return Instance of NetconfDevice.
+     * @throws NetconfException when problems arise creating the device and establishing
+     * the connection.
+     */
+    NetconfDevice createNetconfDevice(NetconfDeviceInfo netconfDeviceInfo)
+            throws NetconfException;
+}
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfSessionFactory.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfSessionFactory.java
index a899676..834ddfe 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfSessionFactory.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfSessionFactory.java
@@ -21,6 +21,12 @@
  */
 public interface NetconfSessionFactory {
 
+    /**
+     * Creates a new NETCONF session for the specified device.
+     * @param netconfDeviceInfo information of the device to create the session for.
+     * @return Instance of NetconfSession.
+     * @throws NetconfException when problems arise establishing the connection.
+     */
     NetconfSession createNetconfSession(NetconfDeviceInfo netconfDeviceInfo)
             throws NetconfException;
 }
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfDeviceImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/DefaultNetconfDevice.java
similarity index 80%
rename from protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfDeviceImpl.java
rename to protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/DefaultNetconfDevice.java
index bbc3320..a7b7717 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfDeviceImpl.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/DefaultNetconfDevice.java
@@ -27,9 +27,9 @@
 import java.io.IOException;
 
 /**
- * Implementation of a NETCONF device.
+ * Defautl implementation of a NETCONF device.
  */
-public class NetconfDeviceImpl implements NetconfDevice {
+public class DefaultNetconfDevice implements NetconfDevice {
 
     public static final Logger log = LoggerFactory
             .getLogger(NetconfSessionImpl.class);
@@ -39,8 +39,15 @@
     protected NetconfSessionFactory sessionFactory = new SshNetconfSessionFactory();
     private NetconfSession netconfSession;
 
-
-    public NetconfDeviceImpl(NetconfDeviceInfo deviceInfo)
+    /**
+     * Creates a new default NETCONF device with the information provided.
+     * The device gets created only if no exception is thrwn while connecting to
+     * it and establishing the NETCONF session.
+     * @param deviceInfo information about the device to be created.
+     * @throws NetconfException if there are problems in creating or establishing
+     * the underlying NETCONF connection and session.
+     */
+    public DefaultNetconfDevice(NetconfDeviceInfo deviceInfo)
             throws NetconfException {
         netconfDeviceInfo = deviceInfo;
         try {
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java
index 0d83978..988bce4 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfControllerImpl.java
@@ -24,6 +24,7 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.netconf.NetconfController;
 import org.onosproject.netconf.NetconfDevice;
+import org.onosproject.netconf.NetconfDeviceFactory;
 import org.onosproject.netconf.NetconfDeviceInfo;
 import org.onosproject.netconf.NetconfDeviceListener;
 import org.onosproject.netconf.NetconfException;
@@ -49,6 +50,7 @@
     private Map<DeviceId, NetconfDevice> netconfDeviceMap = new ConcurrentHashMap<>();
 
     protected Set<NetconfDeviceListener> netconfDeviceListeners = new CopyOnWriteArraySet<>();
+    protected NetconfDeviceFactory deviceFactory = new DefaultNetconfDeviceFactory();
 
     @Activate
     public void activate(ComponentContext context) {
@@ -109,7 +111,7 @@
     }
 
     private NetconfDevice createDevice(NetconfDeviceInfo deviceInfo) throws NetconfException {
-        NetconfDevice netconfDevice = new NetconfDeviceImpl(deviceInfo);
+        NetconfDevice netconfDevice = deviceFactory.createNetconfDevice(deviceInfo);
         for (NetconfDeviceListener l : netconfDeviceListeners) {
             l.deviceAdded(deviceInfo);
         }
@@ -129,4 +131,13 @@
     public Map<DeviceId, NetconfDevice> getDevicesMap() {
         return netconfDeviceMap;
     }
+
+    //Device factory for the specific NetconfDeviceImpl
+    private class DefaultNetconfDeviceFactory implements NetconfDeviceFactory {
+
+        @Override
+        public NetconfDevice createNetconfDevice(NetconfDeviceInfo netconfDeviceInfo) throws NetconfException {
+            return new DefaultNetconfDevice(netconfDeviceInfo);
+        }
+    }
 }
