diff --git a/netconf/nc_common/__init__.py b/netconf/nc_common/__init__.py
index 7398217..e69de29 100644
--- a/netconf/nc_common/__init__.py
+++ b/netconf/nc_common/__init__.py
@@ -1,44 +0,0 @@
-# -*- coding: utf-8 -*-#
-#
-# December 23 2014, Christian Hopps <chopps@gmail.com>
-#
-# Copyright (c) 2015, Deutsche Telekom AG
-#
-# 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.
-#
-from __future__ import absolute_import, division, unicode_literals, print_function, nested_scopes
-from lxml.etree import register_namespace
-
-MAXSSHBUF = 16 * 1024
-NSMAP = { }
-
-
-def nsmap_add (prefix, namespace):
-    "Add a prefix namespace mapping to the modules mapping dictionary"
-    NSMAP[prefix] = namespace
-    register_namespace(prefix, namespace)
-
-
-def nsmap_update (nsdict):
-    "Add a dicitonary of prefx namespace mappings to the modules mapping dictionary"
-    NSMAP.update(nsdict)
-    for key, val in nsdict.items():
-        register_namespace(key, val)
-
-
-def qmap (key):
-    return "{" + NSMAP[key] + "}"
-
-
-# Add base spec namespace
-nsmap_add('nc', "urn:ietf:params:xml:ns:netconf:base:1.0")
diff --git a/netconf/nc_common/error.py b/netconf/nc_common/error.py
index 802cbe9..bb28490 100644
--- a/netconf/nc_common/error.py
+++ b/netconf/nc_common/error.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2016 the original author or authors.
+# Copyright 2017 the original author or authors.
 #
 # Adapted from https://github.com/choppsv1/netconf/error.py
 #
diff --git a/netconf/nc_common/utils.py b/netconf/nc_common/utils.py
new file mode 100644
index 0000000..3af31bd
--- /dev/null
+++ b/netconf/nc_common/utils.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+#
+# Copyright 2017 the original author or authors.
+#
+# Code adapted from https://github.com/choppsv1/netconf
+#
+# 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.
+#
+from netconf.constants import Constants as C
+from lxml import etree
+
+ns_map = C.NS_MAP
+
+def qmap(key):
+    if ns_map.has_key(key):
+        return ''.join(['{', ns_map[key], '}'])
+
+def ns(key):
+    if ns_map.has_key(key):
+        return ns_map[key]
+
+def qname(tag):
+    try:
+        return etree.QName(tag)
+    except ValueError:
+        prefix, base = tag.split(":")
+        return etree.QName(ns(prefix), base)
+
+def elm(tag, attrib=None, **extra):
+    if attrib is None:
+        attrib = dict()
+    return etree.Element(qname(tag), attrib, **extra)
+
