diff --git a/cluster.yml b/cluster.yml
index aa79ff5a583ea414041eed4e6c5815b23fa528bf..45d4183b911c451679e75fc0f24384bc437ba581 100644
--- a/cluster.yml
+++ b/cluster.yml
@@ -5,19 +5,18 @@
 - hosts: etcd:!k8s-cluster
   roles:
     - { role: kubernetes/preinstall, tags: preinstall }
-    - { role: docker, tags: docker }
     - { role: etcd, tags: etcd }
 
 - hosts: k8s-cluster
   roles:
     - { role: kubernetes/preinstall, tags: preinstall }
-    - { role: docker, tags: docker }
     - { role: etcd, tags: etcd }
     - { role: kubernetes/node, tags: node }
     - { role: network_plugin, tags: network }
 
 - hosts: kube-master
   roles:
+    - { role: kubernetes/preinstall, tags: preinstall }
     - { role: kubernetes/master, tags: master }
 
 - hosts: k8s-cluster
diff --git a/roles/etcd/meta/main.yml b/roles/etcd/meta/main.yml
index de3461e70c281148c08e9b7df7e7eeeaae098607..8e4cb5846de2f8840ad0b67f58d957542e086f37 100644
--- a/roles/etcd/meta/main.yml
+++ b/roles/etcd/meta/main.yml
@@ -7,5 +7,4 @@ dependencies:
     file: "{{ downloads.etcd }}"
     when: etcd_deployment_type == "host"
   - role: docker
-    when: (ansible_os_family != "CoreOS" and etcd_deployment_type == "docker")
-  - role: "kubernetes/preinstall"
+    when: (ansible_os_family != "CoreOS" and etcd_deployment_type == "docker" or inventory_hostname in groups['k8s-cluster'])
diff --git a/roles/kubernetes/master/defaults/main.yml b/roles/kubernetes/master/defaults/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ac23c0ada8a4c86a352d484a177aa57af5231f2f
--- /dev/null
+++ b/roles/kubernetes/master/defaults/main.yml
@@ -0,0 +1,15 @@
+# This is where all the cert scripts and certs will be located
+kube_cert_dir: "{{ kube_config_dir }}/ssl"
+
+# This is where all of the bearer tokens will be stored
+kube_token_dir: "{{ kube_config_dir }}/tokens"
+
+# This is where to save basic auth file
+kube_users_dir: "{{ kube_config_dir }}/users"
+
+# An experimental dev/test only dynamic volumes provisioner,
+# for PetSets. Works for kube>=v1.3 only.
+kube_hostpath_dynamic_provisioner: "false"
+
+hyperkube_image_repo: "quay.io/coreos/hyperkube"
+hyperkube_image_tag: "{{ kube_version }}_coreos.0"
diff --git a/roles/kubernetes/master/handlers/main.yml b/roles/kubernetes/master/handlers/main.yml
index 87e3adc69d239549f5f50caadcd16d174bad64a7..d1787be2d0bacd50ea015c353b817af77abcd94d 100644
--- a/roles/kubernetes/master/handlers/main.yml
+++ b/roles/kubernetes/master/handlers/main.yml
@@ -2,8 +2,8 @@
 - name: Master | restart kubelet
   command: /bin/true
   notify:
-    - Kubelet | reload systemd
-    - Kubelet | reload kubelet
+    - Master | reload systemd
+    - Master | reload kubelet
 
 - name: wait for master static pods
   command: /bin/true
diff --git a/roles/kubernetes/master/meta/main.yml b/roles/kubernetes/master/meta/main.yml
index 0eb0b867eba90a4f9b10ec1ed6eae209f9f861f2..021c01de4b5d6f3ffd229b1d39d9b3db0f1a67a7 100644
--- a/roles/kubernetes/master/meta/main.yml
+++ b/roles/kubernetes/master/meta/main.yml
@@ -2,5 +2,3 @@
 dependencies:
   - role: download # For kube_version variable
     file: "{{ downloads.nothing }}"
-  - { role: etcd }
-  - { role: kubernetes/node }
diff --git a/roles/kubernetes/node/defaults/main.yml b/roles/kubernetes/node/defaults/main.yml
index 1ae008e933c715cf375f5211c72164723cefdc92..96b941a5efec0a02cc78eeb52ec2cd3720db5d0b 100644
--- a/roles/kubernetes/node/defaults/main.yml
+++ b/roles/kubernetes/node/defaults/main.yml
@@ -1,12 +1,6 @@
 # This is where all the cert scripts and certs will be located
 kube_cert_dir: "{{ kube_config_dir }}/ssl"
 
-# This is where all of the bearer tokens will be stored
-kube_token_dir: "{{ kube_config_dir }}/tokens"
-
-# This is where to save basic auth file
-kube_users_dir: "{{ kube_config_dir }}/users"
-
 dns_domain: "{{ cluster_name }}"
 
 # resolv.conf to base dns config
@@ -14,10 +8,6 @@ kube_resolv_conf: "/etc/resolv.conf"
 
 kube_proxy_mode: iptables
 
-# An experimental dev/test only dynamic volumes provisioner,
-# for PetSets. Works for kube>=v1.3 only.
-kube_hostpath_dynamic_provisioner: "false"
-
 hyperkube_image_repo: "quay.io/coreos/hyperkube"
 hyperkube_image_tag: "{{ kube_version }}_coreos.0"
 
diff --git a/roles/kubernetes/secrets/defaults/main.yml b/roles/kubernetes/secrets/defaults/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a5b88d7ac58a5dfc1a13bc2849fc7c14bfdc4aac
--- /dev/null
+++ b/roles/kubernetes/secrets/defaults/main.yml
@@ -0,0 +1,8 @@
+# This is where all the cert scripts and certs will be located
+kube_cert_dir: "{{ kube_config_dir }}/ssl"
+
+# This is where all of the bearer tokens will be stored
+kube_token_dir: "{{ kube_config_dir }}/tokens"
+
+# This is where to save basic auth file
+kube_users_dir: "{{ kube_config_dir }}/users"
diff --git a/roles/network_plugin/meta/main.yml b/roles/network_plugin/meta/main.yml
index 0dd36511b518c3d4d0fbfc88ebf05e7eab4814d0..736262ab01530d6efeee777c788cb3770f0081da 100644
--- a/roles/network_plugin/meta/main.yml
+++ b/roles/network_plugin/meta/main.yml
@@ -6,4 +6,3 @@ dependencies:
    when: kube_network_plugin == 'flannel'
  - role: network_plugin/weave
    when: kube_network_plugin == 'weave'
- - role: docker