diff --git a/defaults/main.yml b/defaults/main.yml
index 01622b57f2fdd2a8fd980194f21b18e0d7c7b4cd..92723cb361d7943c9a03ea8c0c1d7748a070701e 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -12,25 +12,27 @@ valkey: false
 valkey_enabled: true
 valkey_pkgs:
   - name: bookworm
-    pkgs_present: []
+    pkgs_absent:
+      - redis-server
+      - redis-tools
     pkgs_present_backports:
       - valkey-server
       - valkey-tools
+    pkgs_present: []
+  - name: noble
     pkgs_absent:
       - redis-server
       - redis-tools
-  - name: noble
+    pkgs_present_backports: []
     pkgs_present:
       - valkey-server
       - valkey-tools
+  - name: trixie
     pkgs_absent:
       - redis-server
       - redis-tools
-  - name: trixie
+    pkgs_present_backports: []
     pkgs_present:
       - valkey-server
       - valkey-tools
-    pkgs_absent:
-      - redis-server
-      - redis-tools
 ...
diff --git a/meta/argument_specs.yml b/meta/argument_specs.yml
index 68f22562718449dd3fd2e560245ce0af836e8427..bb2eda5b76cba24f0e4d737832c3ee4cb09c85e5 100644
--- a/meta/argument_specs.yml
+++ b/meta/argument_specs.yml
@@ -50,7 +50,7 @@ argument_specs:
             description: A list of deb packages that should be present.
           pkgs_present_backports:
             type: list
-            required: false
+            required: true
             description: A list of deb packages that should be present from backports.
       valkey_verify:
         type: bool
diff --git a/tasks/main.yml b/tasks/main.yml
index 6174d633d968aadddf9c22b1cfe594f2395ef73f..ad548cf419f52752485b0a2f36ffdc03e9d069ee 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -29,6 +29,7 @@
     - name: Include Valkey package tasks
       ansible.builtin.include_tasks: pkg.yml
       tags:
+        - valkey_install
         - valkey_pkg
 
   when: valkey | bool
diff --git a/tasks/pkg.yml b/tasks/pkg.yml
index a9a78eaa04ed6e6c835ea2757eb88ab22e6d21f8..a4603cc904570c5cf30a3c3e5c328275a482d022 100644
--- a/tasks/pkg.yml
+++ b/tasks/pkg.yml
@@ -11,6 +11,19 @@
 - name: Valkey packages present and absent
   block:
 
+    - name: Update apt cache
+      ansible.builtin.apt:
+        update_cache: true
+      check_mode: false
+      changed_when: false
+
+    - name: Requirements present
+      ansible.builtin.apt:
+        pkg:
+          - gnupg
+          - python3-debian
+        state: present
+
     - name: Update package facts
       ansible.builtin.package_facts:
         manager: apt
@@ -34,18 +47,6 @@
           The distro {{ ansible_facts.distribution_release }} needs to be listed in the valkey_pkgs array, currently the array contains
           {{ (valkey_pkgs | community.general.json_query('[].name')) | join(', ') }}
 
-    - name: Update apt cache
-      ansible.builtin.apt:
-        update_cache: true
-      check_mode: false
-      changed_when: false
-
-    - name: Run apt-cache policy
-      ansible.builtin.command: apt-cache policy
-      check_mode: false
-      changed_when: false
-      register: valkey_apt_cache_policy
-
     - name: Debug packages absent JMESPath query
       ansible.builtin.debug:
         var: valkey_jpq.pkgs_absent
@@ -81,30 +82,20 @@
         var: valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present)
         verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}0{% else %}1{% endif %}"
 
-    - name: Check that lists of packages present and absent are defined
+    - name: Run apt-cache policy
+      ansible.builtin.command: apt-cache policy
+      check_mode: false
+      changed_when: false
+      register: valkey_apt_cache_policy
+
+    - name: Check that backports are available when backports packages are specified
       ansible.builtin.assert:
         that:
-          - (valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_absent)) | type_debug == "list"
-          - (valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present)) | type_debug == "list"
+          - valkey_apt_backports in valkey_apt_cache_policy.stdout
         quiet: "{% if ansible_check_mode or ansible_verbosity >= 1 %}false{% else %}true{% endif %}"
-
-    - name: Backports checks
-      block:
-
-        - name: Check that backport packages present is a list when defined
-          ansible.builtin.assert:
-            that:
-              - (valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present_backports)) | type_debug == "list"
-            quiet: "{% if ansible_check_mode or ansible_verbosity >= 1 %}false{% else %}true{% endif %}"
-
-        - name: Check that backports are available when backports packages are specified
-          ansible.builtin.assert:
-            that:
-              - valkey_apt_backports in valkey_apt_cache_policy.stdout
-            quiet: "{% if ansible_check_mode or ansible_verbosity >= 1 %}false{% else %}true{% endif %}"
-          when: valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present_backports) != []
-
-      when: valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present_backports) is defined
+      when:
+        - valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present_backports) is defined
+        - valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present_backports) != []
 
     - name: Valkey packages absent
       ansible.builtin.apt: