diff --git a/novaclient/openstack/common/py3kcompat/__init__.py b/novaclient/openstack/common/py3kcompat/__init__.py
new file mode 100644
index 000000000..be894cf50
--- /dev/null
+++ b/novaclient/openstack/common/py3kcompat/__init__.py
@@ -0,0 +1,17 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+# Copyright 2013 Canonical Ltd.
+# All Rights Reserved.
+#
+#    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.
+#
diff --git a/novaclient/openstack/common/py3kcompat/urlutils.py b/novaclient/openstack/common/py3kcompat/urlutils.py
new file mode 100644
index 000000000..447102170
--- /dev/null
+++ b/novaclient/openstack/common/py3kcompat/urlutils.py
@@ -0,0 +1,47 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+# Copyright 2013 Canonical Ltd.
+# All Rights Reserved.
+#
+#    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.
+#
+
+"""
+Python2/Python3 compatibility layer for openstack
+"""
+
+import six
+
+if six.PY3:
+    # python3
+    import urllib.parse
+
+    urlencode = urllib.parse.urlencode
+    quote = urllib.parse.quote
+    parse_qsl = urllib.parse.parse_qsl
+    urlparse = urllib.parse.urlparse
+    urlsplit = urllib.parse.urlsplit
+    urlunsplit = urllib.parse.urlunsplit
+else:
+    # python2
+    import urllib
+    import urlparse
+
+    urlencode = urllib.urlencode
+    quote = urllib.quote
+
+    parse = urlparse
+    parse_qsl = parse.parse_qsl
+    urlparse = parse.urlparse
+    urlsplit = parse.urlsplit
+    urlunsplit = parse.urlunsplit
diff --git a/openstack-common.conf b/openstack-common.conf
index 33f18d3a8..8b60c5b5d 100644
--- a/openstack-common.conf
+++ b/openstack-common.conf
@@ -5,6 +5,7 @@ module=install_venv_common
 module=strutils
 module=timeutils
 module=uuidutils
+module=py3kcompat
 
 # The base module to hold the copy of openstack.common
 base=novaclient