diff --git a/ansible/roles/swift/tasks/start.yml b/ansible/roles/swift/tasks/start.yml
index a1abdcae55c3b184e951ddcd5552aef365118dfe..215aef0239fdf6a928f31e73e9c79c49a061f72c 100644
--- a/ansible/roles/swift/tasks/start.yml
+++ b/ansible/roles/swift/tasks/start.yml
@@ -43,18 +43,6 @@
       - "heka_socket:/var/lib/kolla/heka/"
   when: inventory_hostname not in groups['swift-proxy-server']
 
-- name: Starting swift-proxy-server container
-  kolla_docker:
-    action: "start_container"
-    common_options: "{{ docker_common_options }}"
-    image: "{{ swift_proxy_server_image_full }}"
-    name: "swift_proxy_server"
-    volumes:
-      - "{{ node_config_directory }}/swift/:/var/lib/kolla/swift/:ro"
-      - "{{ node_config_directory }}/swift-proxy-server/:{{ container_config_directory }}/:ro"
-      - "heka_socket:/var/lib/kolla/heka/"
-  when: inventory_hostname in groups['swift-proxy-server']
-
 - name: Starting swift-account-server container
   kolla_docker:
     action: "start_container"
@@ -223,3 +211,15 @@
       - "{{ swift_devices_mount_point }}:{{ swift_devices_mount_point }}"
       - "heka_socket:/var/lib/kolla/heka/"
   when: inventory_hostname in groups['swift-object-server']
+
+- name: Starting swift-proxy-server container
+  kolla_docker:
+    action: "start_container"
+    common_options: "{{ docker_common_options }}"
+    image: "{{ swift_proxy_server_image_full }}"
+    name: "swift_proxy_server"
+    volumes:
+      - "{{ node_config_directory }}/swift/:/var/lib/kolla/swift/:ro"
+      - "{{ node_config_directory }}/swift-proxy-server/:{{ container_config_directory }}/:ro"
+      - "heka_socket:/var/lib/kolla/heka/"
+  when: inventory_hostname in groups['swift-proxy-server']
diff --git a/ansible/roles/swift/tasks/stop_and_start.yml b/ansible/roles/swift/tasks/stop_and_start.yml
new file mode 100644
index 0000000000000000000000000000000000000000..fca139f57399b910c8a4be70a509fdb7f9728694
--- /dev/null
+++ b/ansible/roles/swift/tasks/stop_and_start.yml
@@ -0,0 +1,28 @@
+---
+# NOTE(pbourke): because the images that are used to start Swift containers
+# were refactored for Mitaka, we need to completely remove the existing
+# containers or we get a conflict when attempting to start the new ones.
+- name: "Cleaning out old Swift containers"
+  kolla_docker:
+    name: "{{ item }}"
+    # TODO(pbourke): Swift recommend using a SIGHUP to gracefully stop the
+    # services. Update once kolla_docker supports this.
+    action: remove_container
+  with_items:
+    - "swift_rsyncd"
+    - "swift_account_server"
+    - "swift_account_auditor"
+    - "swift_account_replicator"
+    - "swift_account_reaper"
+    - "swift_container_server"
+    - "swift_container_auditor"
+    - "swift_container_replicator"
+    - "swift_container_updater"
+    - "swift_object_server"
+    - "swift_object_auditor"
+    - "swift_object_replicator"
+    - "swift_object_updater"
+    - "swift_object_expirer"
+    - "swift_proxy_server"
+
+- include: start.yml
diff --git a/ansible/roles/swift/tasks/upgrade.yml b/ansible/roles/swift/tasks/upgrade.yml
index ed97d539c095cf1413af30cc23dea272095b97dd..d5206331e92067bee31b522ce5f661b32d20d59b 100644
--- a/ansible/roles/swift/tasks/upgrade.yml
+++ b/ansible/roles/swift/tasks/upgrade.yml
@@ -1 +1,5 @@
 ---
+- include: config.yml
+
+- include: stop_and_start.yml
+  serial: "30%"