diff --git a/cluster.yml b/cluster.yml
index 45d4183b911c451679e75fc0f24384bc437ba581..091bdc103a6df90dcf8865ca29b83364154145c6 100644
--- a/cluster.yml
+++ b/cluster.yml
@@ -25,4 +25,4 @@
 
 - hosts: kube-master[0]
   roles:
-    - {role: kubernetes-apps, tags: apps}
+    - { role: kubernetes-apps, tags: apps }
\ No newline at end of file
diff --git a/inventory/group_vars/all.yml b/inventory/group_vars/all.yml
index 547a9d6129fe9a36d3079397efdc82d2f8c107be..59c5721981c1fe91053399a1cc23b197e9a055f0 100644
--- a/inventory/group_vars/all.yml
+++ b/inventory/group_vars/all.yml
@@ -130,9 +130,5 @@ dns_server: "{{ kube_service_addresses|ipaddr('net')|ipaddr(2)|ipaddr('address')
 docker_options: "--insecure-registry={{ kube_service_addresses }}"
 
 # default packages to install within the cluster
-kpm_packages:
-  - name: kube-system/kubedns
-    namespace: kube-system
-    variables:
-      cluster_ip: "{{skydns_server}}"
+kpm_packages: []
 #  - name: kube-system/grafana
diff --git a/roles/kubernetes-apps/library/kube.py b/roles/kubernetes-apps/ansible/library/kube.py
similarity index 100%
rename from roles/kubernetes-apps/library/kube.py
rename to roles/kubernetes-apps/ansible/library/kube.py
diff --git a/roles/kubernetes-apps/tasks/main.yaml b/roles/kubernetes-apps/ansible/tasks/main.yaml
similarity index 100%
rename from roles/kubernetes-apps/tasks/main.yaml
rename to roles/kubernetes-apps/ansible/tasks/main.yaml
diff --git a/roles/kubernetes-apps/templates/kubedns-rc.yml b/roles/kubernetes-apps/ansible/templates/kubedns-rc.yml
similarity index 100%
rename from roles/kubernetes-apps/templates/kubedns-rc.yml
rename to roles/kubernetes-apps/ansible/templates/kubedns-rc.yml
diff --git a/roles/kubernetes-apps/templates/kubedns-svc.yml b/roles/kubernetes-apps/ansible/templates/kubedns-svc.yml
similarity index 100%
rename from roles/kubernetes-apps/templates/kubedns-svc.yml
rename to roles/kubernetes-apps/ansible/templates/kubedns-svc.yml
diff --git a/roles/kubernetes-apps/helm/.gitkeep b/roles/kubernetes-apps/helm/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/roles/kubernetes-apps/helm/tasks/main.yml b/roles/kubernetes-apps/helm/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9fd691ddd92887b9d52a5961335c1219ae2caa10
--- /dev/null
+++ b/roles/kubernetes-apps/helm/tasks/main.yml
@@ -0,0 +1,2 @@
+---
+- debug: msg="No helm charts"
diff --git a/library/kpm.py b/roles/kubernetes-apps/kpm/library/kpm.py
similarity index 100%
rename from library/kpm.py
rename to roles/kubernetes-apps/kpm/library/kpm.py
diff --git a/roles/kubernetes-apps/kpm/tasks/main.yaml b/roles/kubernetes-apps/kpm/tasks/main.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..7e88cc30db2b363d6c6af8409dbaf8363908f63b
--- /dev/null
+++ b/roles/kubernetes-apps/kpm/tasks/main.yaml
@@ -0,0 +1,20 @@
+---
+- name: install kpm
+  pip:
+    name: "kpm"
+    state: "present"
+    version: "0.16.1"
+  when: kpm_packages | length > 0
+
+- name: manage kubernetes applications
+  kpm:
+    namespace: "{{item.namespace | default(kpm_namespace | default('default'))}}"
+    registry: "{{item.registry | default(kpm_registry | default('https://api.kpm.sh'))}}"
+    state: "{{item.state | default(omit)}}"
+    version: "{{item.version | default(omit)}}"
+    variables: "{{item.variables | default(omit)}}"
+    name: "{{item.name}}"
+  with_items: "{{kpm_packages}}"
+  register: kpmresults
+  environment:
+    PATH: "{{ ansible_env.PATH }}:{{ bin_dir }}"
diff --git a/roles/kubernetes-apps/meta/main.yaml b/roles/kubernetes-apps/meta/main.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..496517d72a6f8a83111b07aae3fa5ca38c063869
--- /dev/null
+++ b/roles/kubernetes-apps/meta/main.yaml
@@ -0,0 +1,3 @@
+dependencies:
+  - {role: kubernetes-apps/ansible, tags: apps}
+  - {role: kubernetes-apps/kpm, tags: [apps, kpm]}