diff --git a/src/compiler/compile/render_dom/wrappers/EachBlock.ts b/src/compiler/compile/render_dom/wrappers/EachBlock.ts
index ad5c5518d1..2c0f5f68b4 100644
--- a/src/compiler/compile/render_dom/wrappers/EachBlock.ts
+++ b/src/compiler/compile/render_dom/wrappers/EachBlock.ts
@@ -447,6 +447,8 @@ export default class EachBlockWrapper extends Wrapper {
: '@destroy_block';
if (this.dependencies.size) {
+ this.block.maintain_context = true;
+
this.updates.push(b`
const ${this.vars.each_block_value} = ${snippet};
${this.renderer.options.dev && b`@validate_each_argument(${this.vars.each_block_value});`}
diff --git a/test/runtime/samples/each-block-keyed-bind-group/_config.js b/test/runtime/samples/each-block-keyed-bind-group/_config.js
new file mode 100644
index 0000000000..d02730b7f9
--- /dev/null
+++ b/test/runtime/samples/each-block-keyed-bind-group/_config.js
@@ -0,0 +1,65 @@
+export default {
+ html: `
+
+
+
+
+
+ `,
+
+ async test({ assert, target, window }) {
+ const [input1, input2, input3, input4, input5] = target.querySelectorAll('input');
+ const event = new window.Event('change');
+
+ input3.checked = true;
+ await input3.dispatchEvent(event);
+
+ assert.htmlEqual(target.innerHTML, `
+
+
+
+
+
+ `);
+
+ assert.equal(input1.checked, false);
+ assert.equal(input2.checked, false);
+ assert.equal(input3.checked, true);
+ assert.equal(input4.checked, false);
+ assert.equal(input5.checked, false);
+
+ input4.checked = true;
+ await input4.dispatchEvent(event);
+
+ assert.htmlEqual(target.innerHTML, `
+
+
+
+
+
+ `);
+
+ assert.equal(input1.checked, false);
+ assert.equal(input2.checked, false);
+ assert.equal(input3.checked, true);
+ assert.equal(input4.checked, true);
+ assert.equal(input5.checked, false);
+
+ input3.checked = false;
+ await input3.dispatchEvent(event);
+
+ assert.htmlEqual(target.innerHTML, `
+
+
+
+
+
+ `);
+
+ assert.equal(input1.checked, false);
+ assert.equal(input2.checked, false);
+ assert.equal(input3.checked, false);
+ assert.equal(input4.checked, true);
+ assert.equal(input5.checked, false);
+ }
+};
diff --git a/test/runtime/samples/each-block-keyed-bind-group/main.svelte b/test/runtime/samples/each-block-keyed-bind-group/main.svelte
new file mode 100644
index 0000000000..26e1cfb2f3
--- /dev/null
+++ b/test/runtime/samples/each-block-keyed-bind-group/main.svelte
@@ -0,0 +1,21 @@
+
+
+{#each flavours as flavour (flavour)}
+
+{/each}