diff --git a/_modules/apiclient/__init__.py b/_modules/__init__.py
similarity index 100%
rename from _modules/apiclient/__init__.py
rename to _modules/__init__.py
diff --git a/_modules/apiclient/creds.py b/_modules/creds.py
similarity index 100%
rename from _modules/apiclient/creds.py
rename to _modules/creds.py
diff --git a/_modules/apiclient/encode_json.py b/_modules/encode_json.py
similarity index 100%
rename from _modules/apiclient/encode_json.py
rename to _modules/encode_json.py
diff --git a/_modules/maas.py b/_modules/maas.py
index 5ad0a41..c2ba659 100644
--- a/_modules/maas.py
+++ b/_modules/maas.py
@@ -27,7 +27,7 @@
 # Import third party libs
 HAS_MASS = False
 try:
-    from apiclient.maas_client import MAASClient, MAASDispatcher, MAASOAuth
+    from maas_client import MAASClient, MAASDispatcher, MAASOAuth
     HAS_MASS = True
 except ImportError:
     LOG.exception('why??')
@@ -434,6 +434,128 @@
         return new
 
 
+#class SSHPrefs(MaasObject):
+#    def __init__(self):
+#        super(SSHPrefs, self).__init__()
+#        self._all_elements_url = u'api/2.0/machines/'
+#        self._create_url = u'api/2.0/account/prefs/sshkeys/'
+#        self._config_path = 'region.sshprefs'
+#        self._element_key = 'hostname'
+#        self._update_key = 'system_id'
+#
+#    def fill_data(self, value):
+#        data = {
+#            'key': value,
+#        }
+#        return data
+#
+#    def process(self):
+#        config = __salt__['config.get']('maas')
+#        for part in self._config_path.split('.'):
+#            config = config.get(part, {})
+#        extra = {}
+#        for name, url_call in self._extra_data_urls.iteritems():
+#            key = 'id'
+#            if isinstance(url_call, tuple):
+#                url_call, key = url_call[:]
+#            extra[name] = {v['name']: v[key] for v in
+#                            json.loads(self._maas.get(url_call).read())}
+#        if self._all_elements_url:
+#            all_elements = {}
+#            elements = self._maas.get(self._all_elements_url).read()
+#            res_json = json.loads(elements)
+#            for element in res_json:
+#                if isinstance(element, (str, unicode)):
+#                    all_elements[element] = {}
+#                else:
+#                    all_elements[element[self._element_key]] = element
+#        else:
+#            all_elements = {}
+#        ret = {
+#            'success': [],
+#            'errors': {},
+#            'updated': [],
+#        }
+#        for config_data in config:
+#            try:
+#                data = self.fill_data(config_data, **extra)
+#                self.send(data)
+#                ret['success'].append(name)
+#            except urllib2.HTTPError as e:
+#                etxt = e.read()
+#                LOG.exception('Failed for object %s reason %s', name, etxt)
+#                ret['errors'][name] = str(etxt)
+#            except Exception as e:
+#                LOG.exception('Failed for object %s reason %s', name, e)
+#                ret['errors'][name] = str(e)
+#        if ret['errors']:
+#            raise Exception(ret)
+#        return ret
+
+class Domain(MaasObject):
+    def __init__(self):
+        super(Domain, self).__init__()
+        self._all_elements_url = u'/api/2.0/domains/'
+        self._create_url = u'/api/2.0/domains/'
+        self._config_path = 'region.domain'
+        self._update_url = u'/api/2.0/domains/{0}/'
+
+    def fill_data(self, value):
+        data = {
+            'name': value,
+        }
+        self._update = True
+        return data
+
+    def update(self, new, old):
+        new['id'] = str(old['id'])
+        new['authoritative'] = str(old['authoritative'])
+        return new
+
+    def process(self):
+        config = __salt__['config.get']('maas')
+        for part in self._config_path.split('.'):
+            config = config.get(part, {})
+        extra = {}
+        for name, url_call in self._extra_data_urls.iteritems():
+            key = 'id'
+            if isinstance(url_call, tuple):
+                url_call, key = url_call[:]
+            extra[name] = {v['name']: v[key] for v in
+                            json.loads(self._maas.get(url_call).read())}
+        if self._all_elements_url:
+            all_elements = {}
+            elements = self._maas.get(self._all_elements_url).read()
+            res_json = json.loads(elements)
+            for element in res_json:
+                if isinstance(element, (str, unicode)):
+                    all_elements[element] = {}
+                else:
+                    all_elements[element[self._element_key]] = element
+        else:
+            all_elements = {}
+        ret = {
+            'success': [],
+            'errors': {},
+            'updated': [],
+        }
+        try:
+            data = self.fill_data(config, **extra)
+            data = self.update(data, all_elements.values()[0])
+            self.send(data)
+            ret['success'].append('domain')
+        except urllib2.HTTPError as e:
+            etxt = e.read()
+            LOG.exception('Failed for object %s reason %s', 'domain', etxt)
+            ret['errors']['domain'] = str(etxt)
+        except Exception as e:
+            LOG.exception('Failed for object %s reason %s', 'domain', e)
+            ret['errors']['domain'] = str(e)
+        if ret['errors']:
+            raise Exception(ret)
+        return ret
+
+
 def process_fabrics():
     return Fabric().process()
 
@@ -460,3 +582,6 @@
 
 def process_commissioning_scripts():
     return CommissioningScripts().process()
+
+def process_domain():
+    return Domain().process()
diff --git a/_modules/apiclient/maas_client.py b/_modules/maas_client.py
similarity index 98%
rename from _modules/apiclient/maas_client.py
rename to _modules/maas_client.py
index 6704597..97aeb8b 100644
--- a/_modules/apiclient/maas_client.py
+++ b/_modules/maas_client.py
@@ -22,9 +22,9 @@
 from io import BytesIO
 import urllib2
 
-from apiclient.encode_json import encode_json_data
-from apiclient.multipart import encode_multipart_data
-from apiclient.utils import urlencode
+from encode_json import encode_json_data
+from multipart import encode_multipart_data
+from utils import urlencode
 import oauth.oauth as oauth
 
 
diff --git a/_modules/apiclient/multipart.py b/_modules/multipart.py
similarity index 100%
rename from _modules/apiclient/multipart.py
rename to _modules/multipart.py
diff --git a/_modules/apiclient/testing/__init__.py b/_modules/testing/__init__.py
similarity index 100%
rename from _modules/apiclient/testing/__init__.py
rename to _modules/testing/__init__.py
diff --git a/_modules/apiclient/testing/credentials.py b/_modules/testing/credentials.py
similarity index 100%
rename from _modules/apiclient/testing/credentials.py
rename to _modules/testing/credentials.py
diff --git a/_modules/apiclient/testing/django.py b/_modules/testing/django.py
similarity index 100%
rename from _modules/apiclient/testing/django.py
rename to _modules/testing/django.py
diff --git a/_modules/apiclient/testing/django_client_proxy.py b/_modules/testing/django_client_proxy.py
similarity index 100%
rename from _modules/apiclient/testing/django_client_proxy.py
rename to _modules/testing/django_client_proxy.py
diff --git a/_modules/apiclient/utils.py b/_modules/utils.py
similarity index 100%
rename from _modules/apiclient/utils.py
rename to _modules/utils.py
diff --git a/maas/region.sls b/maas/region.sls
index aa55a51..f2a9e4f 100644
--- a/maas/region.sls
+++ b/maas/region.sls
@@ -143,4 +143,10 @@
   - require:
     - module: maas_config
 
+maas_domain:
+  module.run:
+  - name: maas.process_domain
+  - require:
+    - module: maas_config
+
 {%- endif %}
