diff --git a/update.yaml b/update.yaml
index ec8b786099f75ffbf8cd3cf15738da6f01377640..e8e678b2ca2c6f1596d9f751a6814d26fb2c5f3b 100644
--- a/update.yaml
+++ b/update.yaml
@@ -1,127 +1,121 @@
 ---
-- name: Group hosts by package manager
+- name: Update hosts
+  strategy: host_pinned
   hosts:
     - all:!localhost
-  tasks:
-    - name: Group hosts by package manager
-      group_by:
-        key: pkg_mgr_{{ ansible_pkg_mgr }}
-      changed_when: false
-      tags:
-        - always
-
-- name: Update Debian hosts
-  hosts:
-    - pkg_mgr_apt
-  tasks:
-    - name: Update packages
-      apt:
-        autoclean: true
-        purge: true
-        update_cache: true
-        upgrade: dist
-      register: apt_upgrade
-
-    - name: Remove no-longer needed dependecies
-      apt:
-        autoremove: true
-        purge: true
-
-    - name: Update firmware
-      command: fwupdmgr --assume-yes update
-      register: fwupdmgr
-      changed_when: fwupdmgr.stdout_lines|length > 0
-
-    - name: Update Flatpaks appstream
-      command:
-        cmd: flatpak update --appstream
-      ignore_errors: true
-      changed_when: false
-
-    - name: Update Flatpaks
-      command:
-        cmd: flatpak update --assumeyes
-      register: flatpak_update
-      ignore_errors: true
-      changed_when: |-
-        "Nothing to do" not in flatpak_update.stdout
-
-    - name: Remove unused Flatpaks
-      command:
-        cmd: flatpak uninstall --unused --assumeyes
-      register: flatpak_unused
-      ignore_errors: true
-      changed_when: |-
-        "Nothing" not in flatpak_unused.stdout
-
-    - name: Set reboot needed fact
-      set_fact:
-        reboot_needed: >-
-          {{ apt_upgrade is changed or
-          fwupdmgr is changed or
-          flatpak_update is changed }}
   tags:
-    - debian
     - update
-
-- name: Update OpenWRT hosts
-  hosts:
-    - pkg_mgr_opkg
   tasks:
-    - name: Update package list
-      command: opkg update
-      changed_when: false
-
-    - name: Update packages
-      # We run through sort so that we don't run 2 instances fo opkg at once.
-      shell: |-
-        opkg list-upgradable | awk '{print $1}' | sort | xargs -rn1 opkg upgrade
-      register: opkg_upgrade
-      changed_when: opkg_upgrade.stdout_lines|length > 0
-
-    - name: Set reboot needed fact
-      set_fact:
-        reboot_needed: "{{ opkg_upgrade is changed }}"
-  tags:
-    - openwrt
-    - update
-
-- name: Update OpenBSD hosts
-  hosts:
-    - pkg_mgr_openbsd_pkg
-  tasks:
-    - name: Apply system patches
-      command: syspatch
-      register: syspatch
-      changed_when: syspatch.stdout_lines|length > 0
-
-    - name: Update packages
-      openbsd_pkg:
-        name: "*"
-        state: latest
-      register: pkg_upgrade
-
-    - name: Update firmware
-      command: fw_update -a
-      register: fw_update
-      changed_when: fw_update.stdout_lines|length > 0
-
-    - name: Set reboot needed fact
-      set_fact:
-        reboot_needed: >-
-          {{ syspatch is changed or
-          pkg_upgrade is changed or
-          fw_update is changed }}
-  tags:
-    - openbsd
-    - update
+    - name: Update Debian-based hosts
+      when: ansible_pkg_mgr == 'apt'
+      tags:
+        - debian
+      block:
+        - name: Update packages
+          apt:
+            autoclean: true
+            purge: true
+            update_cache: true
+            upgrade: dist
+          register: apt_upgrade
+
+        - name: Remove no-longer needed dependecies
+          apt:
+            autoremove: true
+            purge: true
+
+        - name: Update firmware
+          command: fwupdmgr --assume-yes update
+          register: fwupdmgr
+          changed_when: fwupdmgr.stdout_lines|length > 0
+
+        - name: Update Flatpaks appstream
+          command:
+            cmd: flatpak update --appstream
+          ignore_errors: true
+          changed_when: false
+
+        - name: Update Flatpaks
+          command:
+            cmd: flatpak update --assumeyes
+          register: flatpak_update
+          ignore_errors: true
+          changed_when: |-
+            "Nothing to do" not in flatpak_update.stdout
+
+        - name: Remove unused Flatpaks
+          command:
+            cmd: flatpak uninstall --unused --assumeyes
+          register: flatpak_unused
+          ignore_errors: true
+          changed_when: |-
+            "Nothing" not in flatpak_unused.stdout
+
+        - name: Set reboot needed fact
+          set_fact:
+            reboot_needed: >-
+              {{ apt_upgrade is changed or
+              fwupdmgr is changed or
+              flatpak_update is changed }}
+
+    - name: Update OpenWRT hosts
+      when: ansible_pkg_mgr == 'opkg'
+      tags:
+        - openwrt
+      block:
+        - name: Update package list
+          command: opkg update
+          changed_when: false
+
+        - name: Update packages
+          # We run through sort so that we don't run 2 instances of opkg at
+          # once.
+          shell: >-
+            opkg list-upgradable |
+            awk '{print $1}' |
+            sort |
+            xargs -rn1 opkg upgrade
+          register: opkg_upgrade
+          changed_when: opkg_upgrade.stdout_lines|length > 0
+
+        - name: Set reboot needed fact
+          set_fact:
+            reboot_needed: "{{ opkg_upgrade is changed }}"
+
+    - name: Update OpenWRT hosts
+      when: ansible_pkg_mgr == 'openbsd_pkg'
+      tags:
+        - openbsd
+      block:
+        - name: Apply system patches
+          command: syspatch
+          register: syspatch
+          changed_when: syspatch.stdout_lines|length > 0
+
+        - name: Update packages
+          openbsd_pkg:
+            name: "*"
+            state: latest
+          register: pkg_upgrade
+
+        - name: Update firmware
+          command: fw_update -a
+          register: fw_update
+          changed_when: fw_update.stdout_lines|length > 0
+
+        - name: Set reboot needed fact
+          set_fact:
+            reboot_needed: >-
+              {{ syspatch is changed or
+              pkg_upgrade is changed or
+              fw_update is changed }}
 
 - name: Reboot NS1
   hosts:
     - ns1
   tasks:
     - name: Reboot
-      when: reboot_needed
+      when: reboot_needed|default(false)
       reboot:
   tags:
     - reboot
@@ -131,7 +125,7 @@
     - ea6350
   tasks:
     - name: Reboot
-      when: reboot_needed
+      when: reboot_needed|default(false)
       command: reboot
 
     - name: Wait to re-establish the connection
@@ -147,7 +141,7 @@
       wait_for_connection:
 
     - name: Reboot
-      when: reboot_needed
+      when: reboot_needed|default(false)
       reboot:
   tags:
     - reboot