diff --git a/_states/artifactory.py b/_states/artifactory.py
new file mode 100644
index 0000000..ac40b1a
--- /dev/null
+++ b/_states/artifactory.py
@@ -0,0 +1,129 @@
+# -*- coding: utf-8 -*-
+'''
+Management of artifactory configuration
+=======================================
+'''
+
+
+def __virtual__():
+    if 'artifactory.get_license' in __salt__:
+        return 'artifactory'
+    else:
+        return False, 'Execution module "artifactory" is not loaded'
+
+
+def add_license_key(name, license_key, **kwargs):
+
+    kwargs = __salt__['pillar.get']('artifactory:client:server')
+    kwargs.pop('license_key', None)
+
+    result, old_license_data = __salt__['artifactory.get_license'](**kwargs)
+
+    result, res_data = __salt__['artifactory.add_license'](
+        license_key,
+        **kwargs
+    )
+
+    # Prepare data to return
+    ret = {
+        'name': name,
+        'changes': {},
+        'result': result,
+        'comment': '',
+        'pchanges': {},
+    }
+
+    if result:
+        result, new_license_data = __salt__['artifactory.get_license'](**kwargs)
+
+        if old_license_data != new_license_data:
+            ret['changes'] = {
+                'old': json.dumps(old_license_data),
+                'new': json.dumps(new_license_data),
+            }
+        ret['comment'] = res_data
+    else:
+        ret['comment'] = res_data['message']
+        if ret['comment'] == ('License could not be installed due '
+                              'to an error: License already exists.'):
+            ret['result'] = True
+
+    return ret
+
+def configure_ldap(name, uri, base=None, enabled=True, dn_pattern=None,
+                   manager_dn=None, manager_pass=None, search_subtree=True,
+                   search_filter='(&(objectClass=inetOrgPerson)(uid={0}))',
+                   attr_mail='mail', create_users=True, safe_search=True):
+
+    kwargs = __salt__['pillar.get']('artifactory:client:server')
+
+    result, ldap_config_old = __salt__['artifactory.get_ldap_config'](name, **kwargs)
+
+    result, res_data = __salt__['artifactory.set_ldap_config'](
+        name, uri, base, enabled, dn_pattern, manager_dn, manager_pass,
+        search_subtree, search_filter, attr_mail, create_users, safe_search,
+        **kwargs
+    )
+
+    # Prepare data to return
+    ret = {
+        'name': name,
+        'changes': {},
+        'result': result,
+        'comment': '',
+        'pchanges': {},
+    }
+
+    if result:
+        result, ldap_config_new = __salt__['artifactory.get_ldap_config'](name, **kwargs)
+        if ldap_config_old != ldap_config_new:
+            ret['changes'] = {
+                'old': ldap_config_old,
+                'new': ldap_config_new,
+            }
+        ret['comment'] = res_data
+    else:
+        ret['comment'] = res_data.get('errors')[0]['message']
+
+    return ret
+
+def configure_repo(name, **kwargs):
+
+    repo_config = kwargs
+    repo_name = repo_config['key']
+
+    rclass = repo_config.pop('repo_type', 'local')
+    if 'rclass' not in repo_config:
+        repo_config['rclass'] = rclass
+
+    packageType = repo_config.pop('package_type', 'generic')
+    if 'packageType' not in repo_config:
+        repo_config['packageType'] = packageType
+
+    kwargs = __salt__['pillar.get']('artifactory:client:server')
+
+    result, repo_config_old = __salt__['artifactory.get_repo'](repo_name, **kwargs)
+
+    # Prepare data to return
+    ret = {
+        'name': name,
+        'changes': {},
+        'result': result,
+        'comment': '',
+        'pchanges': {},
+    }
+
+    result, res_data = __salt__['artifactory.set_repo'](repo_name, repo_config, **kwargs)
+
+    if result:
+        result, repo_config_new = __salt__['artifactory.get_repo'](repo_name, **kwargs)
+        if repo_config_old != repo_config_new:
+            ret['changes'] = {
+                'old': repo_config_old,
+                'new': repo_config_new,
+            }
+        ret['comment'] = res_data
+    else:
+        ret['comment'] = res_data.get('errors')[0]['message']
+
+    return ret
diff --git a/_states/artifactory_config.py b/_states/artifactory_config.py
deleted file mode 100644
index 683ccc9..0000000
--- a/_states/artifactory_config.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Management of artifactory configuration
-======================================
-
-:depends:   - requests Python module
-:configuration: See :py:mod:`salt.modules.artifactory` for setup instructions.
-'''
-
-def __virtual__():
-    '''
-    Only load if the artifactory module is in __salt__
-    '''
-    return True
-
-
-def artifactory_init( **kwargs):
-    
-    out = __salt__['artifactory_config.artifactory_init']( **kwargs)
-
-    return out
diff --git a/_states/artifactory_repo.py b/_states/artifactory_repo.py
deleted file mode 100644
index e6265c5..0000000
--- a/_states/artifactory_repo.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Management of artifactory repositories
-======================================
-
-:depends:   - requests Python module
-:configuration: See :py:mod:`salt.modules.artifactory` for setup instructions.
-
-.. code-block:: yaml
-
-    local_artifactory_repo:
-      artifactory_repo.repo_present:
-      - name: remote_artifactory_repo
-      - package_type: generic
-      - repo_type: local
-    remote_artifactory_repo:
-      artifactory_repo.repo_present:
-      - name: remote_artifactory_repo
-      - repo_type: remote
-      - url: "http://totheremoterepo:80/"
-
-'''
-
-def __virtual__():
-    '''
-    Only load if the artifactory module is in __salt__
-    '''
-    return True
-
-
-def repo_present(name, repo_type, package_type, url=None, **kwargs):
-    '''
-    Ensures that the artifactory repo exists
-    
-    :param name: new repo name
-    :param description: short repo description
-    '''
-    ret = {'name': name,
-           'changes': {},
-           'result': True,
-           'comment': 'Repository "{0}" already exists'.format(name)}
-
-    # Check if repo is already present
-    repo = __salt__['artifactory_repo.repo_get'](name=name, **kwargs)
-
-    if 'Error' not in repo:
-        #update repo
-        pass
-    else:
-        # Create repo
-        __salt__['artifactory_repo.repo_create'](name, repo_type, package_type, url, **kwargs)
-        ret['comment'] = 'Repository "{0}" has been added'.format(name)
-        ret['changes']['repo'] = 'Created'
-    return ret
