diff --git a/drivers/src/main/java/org/onosproject/driver/XmlConfigParser.java b/drivers/src/main/java/org/onosproject/driver/XmlConfigParser.java
new file mode 100644
index 0000000..a5a05953
--- /dev/null
+++ b/drivers/src/main/java/org/onosproject/driver/XmlConfigParser.java
@@ -0,0 +1,174 @@
+/*
+ * 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.driver;
+
+import com.google.common.collect.Lists;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.configuration.tree.ConfigurationNode;
+import org.onlab.packet.IpAddress;
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.GridType;
+import org.onosproject.net.OchSignal;
+import org.onosproject.net.OduSignalType;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.SparseAnnotations;
+import org.onosproject.net.behaviour.ControllerInfo;
+import org.onosproject.net.device.OchPortDescription;
+import org.onosproject.net.device.PortDescription;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Parser for Netconf XML configurations and replys.
+ */
+public final class XmlConfigParser {
+    public static final Logger log = LoggerFactory
+            .getLogger(XmlConfigParser.class);
+
+    private XmlConfigParser() {
+        //not called, preventing any allocation
+    }
+
+
+    public static HierarchicalConfiguration loadXml(InputStream xmlStream) {
+        XMLConfiguration cfg = new XMLConfiguration();
+        try {
+            cfg.load(xmlStream);
+            return cfg;
+        } catch (ConfigurationException e) {
+            throw new IllegalArgumentException("Cannot load xml from Stream", e);
+        }
+    }
+
+    public static List<ControllerInfo> parseStreamControllers(HierarchicalConfiguration cfg) {
+        List<ControllerInfo> controllers = new ArrayList<>();
+        List<HierarchicalConfiguration> fields =
+                cfg.configurationsAt("data.capable-switch." +
+                                             "logical-switches." +
+                                             "switch.controllers.controller");
+        for (HierarchicalConfiguration sub : fields) {
+            controllers.add(new ControllerInfo(
+                    IpAddress.valueOf(sub.getString("ip-address")),
+                    Integer.parseInt(sub.getString("port")),
+                    sub.getString("protocol")));
+        }
+        return controllers;
+    }
+
+    public static String parseSwitchId(HierarchicalConfiguration cfg) {
+        HierarchicalConfiguration field =
+                cfg.configurationAt("data.capable-switch." +
+                                            "logical-switches." +
+                                            "switch");
+        return field.getProperty("id").toString();
+    }
+
+    public static String parseCapableSwitchId(HierarchicalConfiguration cfg) {
+        HierarchicalConfiguration field =
+                cfg.configurationAt("data.capable-switch");
+        return field.getProperty("id").toString();
+    }
+
+    public static String createControllersConfig(HierarchicalConfiguration cfg,
+                                                 HierarchicalConfiguration actualCfg,
+                                                 String target, String netconfOperation,
+                                                 String controllerOperation,
+                                                 List<ControllerInfo> controllers) {
+        //cfg.getKeys().forEachRemaining(key -> System.out.println(key));
+        cfg.setProperty("edit-config.target", target);
+        cfg.setProperty("edit-config.default-operation", netconfOperation);
+        cfg.setProperty("edit-config.config.capable-switch.id",
+                        parseCapableSwitchId(actualCfg));
+        cfg.setProperty("edit-config.config.capable-switch." +
+                                "logical-switches.switch.id", parseSwitchId(actualCfg));
+        List<ConfigurationNode> newControllers = new ArrayList<>();
+        for (ControllerInfo ci : controllers) {
+            XMLConfiguration controller = new XMLConfiguration();
+            controller.setRoot(new HierarchicalConfiguration.Node("controller"));
+            String id = ci.type() + ":" + ci.ip() + ":" + ci.port();
+            controller.setProperty("id", id);
+            controller.setProperty("ip-address", ci.ip());
+            controller.setProperty("port", ci.port());
+            controller.setProperty("protocol", ci.type());
+            newControllers.add(controller.getRootNode());
+        }
+        cfg.addNodes("edit-config.config.capable-switch.logical-switches." +
+                             "switch.controllers", newControllers);
+        XMLConfiguration editcfg = (XMLConfiguration) cfg;
+        StringWriter stringWriter = new StringWriter();
+        try {
+            editcfg.save(stringWriter);
+        } catch (ConfigurationException e) {
+            log.error("createControllersConfig()", e);
+        }
+        String s = stringWriter.toString()
+                .replaceAll("<controller>",
+                            "<controller nc:operation=\"" + controllerOperation + "\">");
+        s = s.replace("<target>" + target + "</target>",
+                      "<target><" + target + "/></target>");
+        return s;
+
+    }
+
+    public static List<HierarchicalConfiguration> parseWaveServerCienaPorts(HierarchicalConfiguration cfg) {
+        return cfg.configurationsAt("ws-ports.port-interface");
+    }
+
+    public static PortDescription parseWaveServerCienaOCHPorts(long portNumber, long oduPortSpeed,
+                                                               HierarchicalConfiguration config,
+                                                               SparseAnnotations annotations) {
+        final List<String> tunableType = Lists.newArrayList("Performance-Optimized", "Accelerated");
+        final String transmitterPath = "ptp-config.transmitter-state";
+        final String tunablePath = "ptp-config.adv-config.tx-tuning-mode";
+        final String gridTypePath = "ptp-config.adv-config.wl-spacing";
+        final String frequencyPath = "ptp-config.adv-config.frequency";
+
+        boolean isEnabled = config.getString(transmitterPath).equals("enabled");
+        boolean isTunable = tunableType.contains(config.getString(tunablePath));
+
+        //FIXME change when all optical types have two way information methods, see jira tickets
+        final int speed100GbpsinMbps = 100000;
+        OduSignalType oduSignalType = oduPortSpeed == speed100GbpsinMbps ? OduSignalType.ODU4 : null;
+        GridType gridType = config.getString(gridTypePath).equals("FlexGrid") ? GridType.FLEX : null;
+        ChannelSpacing chSpacing = gridType == GridType.FLEX ? ChannelSpacing.CHL_6P25GHZ : null;
+
+        //Working in Ghz //(Nominal central frequency - 193.1)/channelSpacing = spacingMultiplier
+        final int baseFrequency = 193100;
+        int spacingMult = (int) (toGbps((Integer.parseInt(config.getString(frequencyPath)) -
+                baseFrequency)) / toGbpsFromHz(chSpacing.frequency().asHz())); //FIXME is there a better way ?
+
+        return new OchPortDescription(PortNumber.portNumber(portNumber), isEnabled, oduSignalType, isTunable,
+                                      new OchSignal(gridType, chSpacing, spacingMult, 1), annotations);
+    }
+
+    //FIXME remove when all optical types have two way information methods, see jira tickets
+    private static long toGbps(long speed) {
+        return speed * 1000;
+    }
+
+    private static long toGbpsFromHz(long speed) {
+        return speed / 1000;
+    }
+    //TODO implement mor methods for parsing configuration when you need them
+}
