diff --git a/cli/src/main/java/org/onosproject/cli/net/DeviceConfigGetterCommand.java b/cli/src/main/java/org/onosproject/cli/net/DeviceConfigGetterCommand.java
new file mode 100644
index 0000000..31ec9f4
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/net/DeviceConfigGetterCommand.java
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ */
+package org.onosproject.cli.net;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.behaviour.ConfigGetter;
+import org.onosproject.net.driver.DriverHandler;
+import org.onosproject.net.driver.DriverService;
+
+/**
+ * Command that gets the configuration of the specified type from the specified
+ * device. If configuration cannot be retrieved it prints an error string.
+ *
+ * This is a temporary development tool for use until yang integration is complete.
+ * This uses a not properly specified behavior. DO NOT USE AS AN EXAMPLE.
+ */
+
+//FIXME this should eventually be removed.
+
+@Command(scope = "onos", name = "device-configuration",
+        description = "Gets the configuration of the specified type from the" +
+                "specified device.")
+public class DeviceConfigGetterCommand extends AbstractShellCommand {
+
+    @Argument(index = 0, name = "uri", description = "Device ID",
+            required = true, multiValued = false)
+    String uri = null;
+    @Argument(index = 1, name = "cfgType", description = "Configuration type",
+            required = true, multiValued = false)
+    String cfgType = null;
+    private DeviceId deviceId;
+
+    @Override
+    protected void execute() {
+        DriverService service = get(DriverService.class);
+        deviceId = DeviceId.deviceId(uri);
+        DriverHandler h = service.createHandler(deviceId);
+        ConfigGetter config = h.behaviour(ConfigGetter.class);
+        print(config.getConfiguration(cfgType));
+    }
+
+}
diff --git a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 09b273e..0d6c229 100644
--- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -121,6 +121,12 @@
             </completers>
         </command>
         <command>
+            <action class="org.onosproject.cli.net.DeviceConfigGetterCommand"/>
+            <completers>
+                <ref component-id="deviceIdCompleter"/>
+            </completers>
+        </command>
+        <command>
             <action class="org.onosproject.cli.net.DeviceRemoveCommand"/>
             <completers>
                 <ref component-id="deviceIdCompleter"/>
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/ConfigGetter.java b/core/api/src/main/java/org/onosproject/net/behaviour/ConfigGetter.java
new file mode 100644
index 0000000..e7f7072
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/ConfigGetter.java
@@ -0,0 +1,21 @@
+package org.onosproject.net.behaviour;
+
+import org.onosproject.net.driver.HandlerBehaviour;
+
+/**
+ * Behaviour that gets the configuration of the specified type from the device.
+ *
+ * This is a temporary development tool for use until yang integration is complete.
+ * This is not a properly specified behavior. DO NOT USE AS AN EXAMPLE.
+ */
+//FIXME this should eventually be removed.
+public interface ConfigGetter extends HandlerBehaviour {
+
+    /**
+     * Returns the string representation of a device configuration, returns a
+     * failure string if the configuration cannot be retreived.
+     * @param type the type of configuration to get (i.e. running).
+     * @return string representation of the configuration or an error string.
+     */
+    public String getConfiguration(String type);
+}
diff --git a/drivers/src/main/java/org/onosproject/driver/netconf/NetconfConfigGetter.java b/drivers/src/main/java/org/onosproject/driver/netconf/NetconfConfigGetter.java
new file mode 100644
index 0000000..8956060
--- /dev/null
+++ b/drivers/src/main/java/org/onosproject/driver/netconf/NetconfConfigGetter.java
@@ -0,0 +1,51 @@
+package org.onosproject.driver.netconf;
+
+import com.google.common.base.Preconditions;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.behaviour.ConfigGetter;
+import org.onosproject.net.driver.AbstractHandlerBehaviour;
+import org.onosproject.net.driver.DriverHandler;
+import org.onosproject.netconf.NetconfController;
+import org.slf4j.Logger;
+
+import java.io.IOException;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Gets the configuration of the specified type from the specified device. If a
+ * failure occurs it returns the error string found in UNABLE_TO_READ_CONFIG.
+ *
+ * This is a temporary development tool for use until yang integration is complete.
+ * This is not a properly specified behavior implementation. DO NOT USE AS AN EXAMPLE.
+ */
+//FIXME this should eventually be removed.
+
+public class NetconfConfigGetter extends AbstractHandlerBehaviour
+        implements ConfigGetter {
+
+    private final Logger log = getLogger(NetconfControllerConfig.class);
+
+    //FIXME the error string should be universal for all implementations of
+    // ConfigGetter
+    public static final String UNABLE_TO_READ_CONFIG = "config retrieval error";
+
+    @Override
+    public String getConfiguration(String type) {
+        DriverHandler handler = handler();
+        NetconfController controller = handler.get(NetconfController.class);
+        DeviceId ofDeviceId = handler.data().deviceId();
+        Preconditions.checkNotNull(controller, "Netconf controller is null");
+        try {
+            return controller.getDevicesMap().
+                    get(ofDeviceId).
+                    getSession().
+                    getConfig(type);
+        } catch (IOException e) {
+            log.error("Configuration could not be retrieved {}",
+                      e.getStackTrace().toString());
+        }
+        return UNABLE_TO_READ_CONFIG;
+    }
+
+}
diff --git a/drivers/src/main/resources/onos-drivers.xml b/drivers/src/main/resources/onos-drivers.xml
index 017be0c..b60efbc 100644
--- a/drivers/src/main/resources/onos-drivers.xml
+++ b/drivers/src/main/resources/onos-drivers.xml
@@ -52,6 +52,12 @@
                    impl="org.onosproject.driver.handshaker.NiciraSwitchHandshaker"/>
         <behaviour api="org.onosproject.net.behaviour.ControllerConfig"
                    impl="org.onosproject.driver.netconf.NetconfControllerConfig"/>
+        <behaviour api="org.onosproject.net.behaviour.ConfigGetter"
+                   impl="org.onosproject.driver.netconf.NetconfConfigGetter"/>
+    </driver>
+    <driver name="netconf" extends="default">
+        <behaviour api="org.onosproject.net.behaviour.ConfigGetter"
+                   impl="org.onosproject.driver.netconf.NetconfConfigGetter"/>
     </driver>
     <driver name="ovs-corsa" extends="ovs"
             manufacturer="Corsa" hwVersion="emulation" swVersion="0.0.0">
