diff --git a/_modules/maas.py b/_modules/maas.py
new file mode 100644
index 0000000..ca4769b
--- /dev/null
+++ b/_modules/maas.py
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+'''
+Module for handling maas calls.
+
+:optdepends:    pyapi-maas Python adapter
+:configuration: This module is not usable until the following are specified
+                either in a pillar or in the minion's config file::
+
+        maas.url: 'https://maas.domain.com/'
+        maas.token: fdsfdsdsdsfa:fsdfae3fassd:fdsfdsfsafasdfsa
+
+'''
+
+from __future__ import absolute_import
+
+import logging
+import os
+
+LOG = logging.getLogger(__name__)
+
+# Import third party libs
+HAS_MASS = False
+try:
+    from apiclient.maas_client import MAASClient, MAASDispatcher, MAASOAuth
+    HAS_MASS = True
+except ImportError:
+    pass
+
+
+def __virtual__():
+    '''
+    Only load this module if maas-client
+    is installed on this minion.
+    '''
+    if HAS_MASS:
+        return 'maas'
+    return False
+
+__opts__ = {}
+
+
+def _auth(**connection_args):
+    '''
+    Set up maas credentials
+
+    Only intended to be used within maas-enabled modules
+    '''
+   
+    prefix = "maas."
+
+    # look in connection_args first, then default to config file
+    def get(key, default=None):
+        return connection_args.get('connection_' + key,
+            __salt__['config.get'](prefix + key, default))
+
+    api_token = get('token')
+    api_url = get('url', 'https://localhost/')
+
+    auth = MAASOAuth(*api_token.split(":"))
+    dispatcher = MAASDispatcher()
+    client = MAASClient(auth, dispatcher, api_url)
+
+    return client
+
+
+def cluster_get(cluster_name=None, **connection_args):
+    '''
+    Return a specific cluster
+
+    CLI Example:
+
+    .. code-block:: bash
+
+        salt '*' maas.cluster_get cluster
+    '''
+    maas = _auth(**connection_args)
+    if project_name:
+        project = _get_project(maas, project_name)
+    else:
+        project = _get_project_by_id(maas, project_id)
+    if not project:
+        return {'Error': 'Unable to resolve project'}
+    for cluster in maas.getprojectclusters(project.get('id'), per_page=PER_PAGE):
+        if cluster.get('url') == cluster_url:
+            return {cluster.get('url'): cluster}
+    return {'Error': 'Could not find cluster for the specified project'}
+
+
+def cluster_list(**connection_args):
+    '''
+    Return a list of available clusters for project
+
+    CLI Example:
+
+    .. code-block:: bash
+
+        salt '*' maas.cluster_list
+    '''
+    maas = _auth(**connection_args)
+    ret = {}
+
+    project = _get_project(maas, project)
+
+    if not project:
+        return {'Error': 'Unable to resolve project'}
+    for cluster in maas.getprojectclusters(project.get('id')):
+        ret[cluster.get('url')] = cluster
+    return ret
+
+
+def cluster_create(cluster_name=None, **connection_args):
+    '''
+    Create MAAS cluster
+
+    CLI Examples:
+
+    .. code-block:: bash
+
+        salt '*' maas.cluster_create cluster
+    '''
+    maas = auth(**connection_args)
+    if project_name:
+        project = _get_project(maas, project_name)
+    else:
+        project = _get_project_by_id(maas, project_id)
+    if not project:
+        return {'Error': 'Unable to resolve project'}
+    create = True
+    for cluster in maas.getprojectclusters(project.get('id')):
+        if cluster.get('url') == cluster_url:
+            create = False
+    if create:  
+        maas.addprojectcluster(project['id'], cluster_url)
+    return cluster_get(cluster_url, project_id=project['id'])
+
+
+def cluster_delete(cluster_name=None, **connection_args):
+    '''
+    Delete MAAS cluster
+
+    CLI Examples:
+
+    .. code-block:: bash
+
+        salt '*' maas.cluster_delete 'https://cluster.url/' project_id=300
+    '''
+    maas = _auth(**connection_args)
+    project = _get_project(maas, project_name)
+
+    for cluster in maas.getprojectclusters(project.get('id')):
+        if cluster.get('url') == cluster_url:
+            return maas.deleteprojectcluster(project['id'], cluster['id'])
+    return {'Error': 'Could not find cluster'}
diff --git a/_states/maas_cluster.py b/_states/maas_cluster.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/_states/maas_cluster.py
