diff --git a/CHANGELOG.md b/CHANGELOG.md
index 634f85fb3e..c286390f8a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
# Svelte changelog
+## Unreleased
+
+* Fix unused export warning for props used as stores ([#4021](https://github.com/sveltejs/svelte/issues/4021))
+* Fix `{:then}` without resolved value containing `{#each}` ([#4022](https://github.com/sveltejs/svelte/issues/4022))
+* Fix incorrect code generated with `loopGuardTimeout` ([#4034](https://github.com/sveltejs/svelte/issues/4034))
+* Fix `{:then}` containing `{#if}` ([#4044](https://github.com/sveltejs/svelte/issues/4044))
+* Fix bare `import`s in `format: 'cjs'` output mode ([#4055](https://github.com/sveltejs/svelte/issues/4050))
+* Warn when using a known global as a component name ([#4070](https://github.com/sveltejs/svelte/issues/4070))
+
## 3.16.0
* Use bitmasks to track changes ([#3945](https://github.com/sveltejs/svelte/pull/3945))
diff --git a/site/content/blog/2017-12-31-sapper-towards-the-ideal-web-app-framework.md b/site/content/blog/2017-12-31-sapper-towards-the-ideal-web-app-framework.md
index 8799fdacce..cca200e966 100644
--- a/site/content/blog/2017-12-31-sapper-towards-the-ideal-web-app-framework.md
+++ b/site/content/blog/2017-12-31-sapper-towards-the-ideal-web-app-framework.md
@@ -53,7 +53,7 @@ What happens if we use the new model as a starting point?
The same 'hello world' app that took 204kb with React and Next weighs just 7kb with Sapper. That number is likely to fall further in the future as we explore the space of optimisation possibilities, such as not shipping any JavaScript *at all* for pages that aren't interactive, beyond the tiny Sapper runtime that handles client-side routing.
-What about a more 'real world' example? Conveniently, the [RealWorld](https://github.com/gothinkster/realworld) project, which challenges frameworks to develop an implementation of a Medium clone, gives us a way to find out. The [Sapper implementation](http://svelte-realworld.now.sh/) takes 39.6kb (11.8kb zipped) to render an interactive homepage.
+What about a more 'real world' example? Conveniently, the [RealWorld](https://github.com/gothinkster/realworld) project, which challenges frameworks to develop an implementation of a Medium clone, gives us a way to find out. The [Sapper implementation](https://github.com/sveltejs/realworld) takes 39.6kb (11.8kb zipped) to render an interactive homepage.
diff --git a/site/src/routes/_components/WhosUsingSvelte.svelte b/site/src/routes/_components/WhosUsingSvelte.svelte
index c1b80c0fe1..f27f1684e6 100644
--- a/site/src/routes/_components/WhosUsingSvelte.svelte
+++ b/site/src/routes/_components/WhosUsingSvelte.svelte
@@ -45,9 +45,11 @@
+ `);
+ }
+};
\ No newline at end of file
diff --git a/test/runtime/samples/await-then-if/main.svelte b/test/runtime/samples/await-then-if/main.svelte
new file mode 100644
index 0000000000..d292067b30
--- /dev/null
+++ b/test/runtime/samples/await-then-if/main.svelte
@@ -0,0 +1,13 @@
+
+
+{#await thePromise}
+ loading...
+{:then r}
+ {#if r.length < 1}
+
promise array is empty
+ {:else}
+
promise array is not empty
+ {/if}
+{/await}
\ No newline at end of file
diff --git a/test/runtime/samples/await-then-no-context/main.svelte b/test/runtime/samples/await-then-no-context/main.svelte
new file mode 100644
index 0000000000..c729512149
--- /dev/null
+++ b/test/runtime/samples/await-then-no-context/main.svelte
@@ -0,0 +1,12 @@
+
+
+{#await promise}
+
waiting
+{:then}
+ {#each test as t}
+
t
+ {/each}
+{/await}
diff --git a/test/runtime/samples/loop-protect-inner-function/_config.js b/test/runtime/samples/loop-protect-inner-function/_config.js
new file mode 100644
index 0000000000..862d4f4c0f
--- /dev/null
+++ b/test/runtime/samples/loop-protect-inner-function/_config.js
@@ -0,0 +1,7 @@
+export default {
+ html: '',
+ compileOptions: {
+ dev: true,
+ loopGuardTimeout: 100,
+ }
+};
diff --git a/test/runtime/samples/loop-protect-inner-function/main.svelte b/test/runtime/samples/loop-protect-inner-function/main.svelte
new file mode 100644
index 0000000000..cf5350efde
--- /dev/null
+++ b/test/runtime/samples/loop-protect-inner-function/main.svelte
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/test/validator/samples/missing-component-global/input.svelte b/test/validator/samples/missing-component-global/input.svelte
new file mode 100644
index 0000000000..5d17448bd4
--- /dev/null
+++ b/test/validator/samples/missing-component-global/input.svelte
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/test/validator/samples/missing-component-global/warnings.json b/test/validator/samples/missing-component-global/warnings.json
new file mode 100644
index 0000000000..c9de56619a
--- /dev/null
+++ b/test/validator/samples/missing-component-global/warnings.json
@@ -0,0 +1,15 @@
+[{
+ "code": "missing-declaration",
+ "message": "'String' is not defined. Consider adding a
+{$q}