diff --git a/.travis.yml b/.travis.yml
index 02b78b07c33bf6f479e5a47a4f1a80c683da8d4d..578bac4cccf3add0287e9932aec5bec42c55b0d5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,7 +9,6 @@ addons:
 
 env:
   - SITE=cluster.yml ANSIBLE_VERSION=2.0.0
-  - SITE=cluster.yml ANSIBLE_VERSION=1.9.4
 
 install:
   # Install Ansible.
diff --git a/README.md b/README.md
index c2e3432ba865275f07473bff99864d22f04d5583..94676bb7cc96aff22c47e65fd107bd30c30fe265 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ Linux distributions tested:
 * The firewalls are not managed, you'll need to implement your own rules the way you used to.
 in order to avoid any issue during deployment you should **disable your firewall**
 * **Copy your ssh keys** to all the servers part of your inventory.
-* **Ansible v1.9.x/v2.x and python-netaddr**
+* **Ansible v2.x and python-netaddr**
 * Base knowledge on Ansible. Please refer to [Ansible documentation](http://www.ansible.com/how-ansible-works)
 
 ### Components
diff --git a/roles/kubernetes/master/handlers/main.yml b/roles/kubernetes/master/handlers/main.yml
index e5d5f7739721d6d8bea0317af7208b797a184f0a..a4082887b32c479a620431059dc39a1c89f9f92e 100644
--- a/roles/kubernetes/master/handlers/main.yml
+++ b/roles/kubernetes/master/handlers/main.yml
@@ -1,16 +1,4 @@
 ---
-
 - name: restart kube-apiserver
-  command: /bin/true
-  notify:
-    - reload systemd
-    - reload kube-apiserver
-
-- name: reload systemd
-  command: systemctl daemon-reload
-  when: init_system == "systemd"
-
-- name: reload kube-apiserver
-  service:
-    name: kube-apiserver
-    state: restarted
+  set_fact:
+    restart_apimaster: True
diff --git a/roles/kubernetes/master/tasks/main.yml b/roles/kubernetes/master/tasks/main.yml
index 430fb7c976b9140f537967d6d8142138a5c65b26..5dfa7c49b41ca933c3784d76fa544be576f661e8 100644
--- a/roles/kubernetes/master/tasks/main.yml
+++ b/roles/kubernetes/master/tasks/main.yml
@@ -76,11 +76,9 @@
 
 - meta: flush_handlers
 
-- name: Enable apiserver
-  service:
-    name: kube-apiserver
-    enabled: yes
-    state: started
+- include: start.yml
+  with_items: groups['kube-master']
+  when: "{{ hostvars[item].inventory_hostname == inventory_hostname }}"
 
 # Create kube-system namespace
 - name: copy 'kube-system' namespace manifest
diff --git a/roles/kubernetes/master/tasks/start.yml b/roles/kubernetes/master/tasks/start.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7fa4f2764185d9587eee712860094d0910a372f6
--- /dev/null
+++ b/roles/kubernetes/master/tasks/start.yml
@@ -0,0 +1,21 @@
+---
+- name: Pause
+  pause: seconds=10
+
+- name: reload systemd
+  command: systemctl daemon-reload
+  when: init_system == "systemd" and restart_apimaster is defined and restart_apimaster == True
+
+- name: reload kube-apiserver
+  service:
+    name: kube-apiserver
+    state: restarted
+    enabled: yes
+  when: restart_apimaster is defined and restart_apimaster == True
+
+- name: Enable apiserver
+  service:
+    name: kube-apiserver
+    enabled: yes
+    state: started
+  when: restart_apimaster is not defined or restart_apimaster == False
\ No newline at end of file
diff --git a/roles/network_plugin/tasks/calico.yml b/roles/network_plugin/tasks/calico.yml
index ae306d973d4948e54ffea7babf4e63b57458b9f0..225c202223fbd4257e7a5fb0943a98260663f038 100644
--- a/roles/network_plugin/tasks/calico.yml
+++ b/roles/network_plugin/tasks/calico.yml
@@ -25,13 +25,11 @@
     status_code: 200,404
   register: calico_conf
   run_once: true
-  delegate_to: "{{ groups['etcd'][0] }}"
 
 - name: Calico | Configure calico network pool
   shell: calicoctl pool add {{ kube_pods_subnet }}
   run_once: true
   when: calico_conf.status == 404
-  delegate_to: "{{ groups['etcd'][0] }}"
 
 - name: Calico | Get calico configuration from etcd
   uri:
@@ -39,7 +37,6 @@
     return_content: yes
   register: calico_pools
   run_once: true
-  delegate_to: "{{ groups['etcd'][0] }}"
 
 - name: Calico | Check if calico pool is properly configured
   fail:
@@ -48,7 +45,6 @@
   when: ( calico_pools.json['node']['nodes'] | length > 1 ) or
         ( not calico_pools.json['node']['nodes'][0]['key'] | search(".*{{ kube_pods_subnet | ipaddr('network') }}.*") )
   run_once: true
-  delegate_to: "{{ groups['etcd'][0] }}"
 
 - name: Calico | Write calico-node configuration
   template: src=calico/calico.conf.j2 dest=/usr/libexec/kubernetes/kubelet-plugins/net/exec/calico/calico_kubernetes.ini
@@ -83,12 +79,12 @@
 - name: Calico | Disable node mesh
   shell: calicoctl bgp node-mesh off
   environment:
-     ETCD_AUTHORITY: "{{ groups['etcd'][0] }}:2379"
+     ETCD_AUTHORITY: "127.0.0.1:2379"
   when: peer_with_router|default(false) and inventory_hostname in groups['kube-node']
 
 - name: Calico | Configure peering with router(s)
   shell: calicoctl node bgp peer add {{ item.router_id }} as {{ item.as }}
   environment:
-     ETCD_AUTHORITY: "{{ groups['etcd'][0] }}:2379"
+     ETCD_AUTHORITY: "127.0.0.1:2379"
   with_items: peers
   when: peer_with_router|default(false) and inventory_hostname in groups['kube-node']