diff --git a/src/govuk/components/checkboxes/checkboxes.yaml b/src/govuk/components/checkboxes/checkboxes.yaml
index 442fd5e4d2..9c648f93df 100644
--- a/src/govuk/components/checkboxes/checkboxes.yaml
+++ b/src/govuk/components/checkboxes/checkboxes.yaml
@@ -899,3 +899,17 @@ examples:
text: British
- value: irish
text: Irish
+
+- name: item checked overrides values
+ hidden: true
+ data:
+ name: colors
+ items:
+ - value: red
+ text: Red
+ - value: green
+ text: Green
+ checked: false
+ - value: blue
+ text: Blue
+ values: [red, green]
diff --git a/src/govuk/components/checkboxes/template.njk b/src/govuk/components/checkboxes/template.njk
index 665e7e8fa6..898ebd03d8 100644
--- a/src/govuk/components/checkboxes/template.njk
+++ b/src/govuk/components/checkboxes/template.njk
@@ -63,7 +63,7 @@
{%- if item.divider %}
{{ item.divider }}
{%- else %}
- {% set isChecked = item.checked or (params.values and item.value in params.values) %}
+ {% set isChecked = item.checked | default(params.values and item.value in params.values) %}
{% set hasHint = true if item.hint.text or item.hint.html %}
{% set itemHintId = id + "-item-hint" if hasHint else "" %}
{% set itemDescribedBy = describedBy if not hasFieldset else "" %}
diff --git a/src/govuk/components/checkboxes/template.test.js b/src/govuk/components/checkboxes/template.test.js
index d0e3624c34..6dff7904a6 100644
--- a/src/govuk/components/checkboxes/template.test.js
+++ b/src/govuk/components/checkboxes/template.test.js
@@ -194,6 +194,13 @@ describe('Checkboxes', () => {
expect($other.attr('checked')).toEqual('checked')
})
+ it('allows item.checked to override values', () => {
+ const $ = render('checkboxes', examples['item checked overrides value'])
+
+ const $green = $('.govuk-checkboxes').find('input[value="green"]')
+ expect($green.attr('checked')).toBeUndefined()
+ })
+
describe('when they include attributes', () => {
it('it renders the attributes', () => {
const $ = render('checkboxes', examples['items with attributes'])
diff --git a/src/govuk/components/radios/radios.yaml b/src/govuk/components/radios/radios.yaml
index b1a6ae2f31..af3856023b 100644
--- a/src/govuk/components/radios/radios.yaml
+++ b/src/govuk/components/radios/radios.yaml
@@ -879,3 +879,17 @@ examples:
- value: no
text: No
checked: true
+
+- name: item checked overrides value
+ hidden: true
+ data:
+ name: colors
+ items:
+ - value: red
+ text: Red
+ - value: green
+ text: Green
+ checked: false
+ - value: blue
+ text: Blue
+ value: green
diff --git a/src/govuk/components/radios/template.njk b/src/govuk/components/radios/template.njk
index 17dbb63ec7..a7f677915e 100644
--- a/src/govuk/components/radios/template.njk
+++ b/src/govuk/components/radios/template.njk
@@ -56,7 +56,7 @@
{%- if item.divider %}
{{ item.divider }}
{%- else %}
- {% set isChecked = item.checked or (params.value and item.value == params.value) %}
+ {% set isChecked = item.checked | default(params.value and item.value == params.value) %}
{% set hasHint = true if item.hint.text or item.hint.html %}
{% set itemHintId = id + '-item-hint' %}