diff --git a/src/generators/dom/index.ts b/src/generators/dom/index.ts
index e3263e2552..9ae999d669 100644
--- a/src/generators/dom/index.ts
+++ b/src/generators/dom/index.ts
@@ -47,7 +47,7 @@ export class DomGenerator extends Generator {
 		this.legacy = options.legacy;
 		this.needsEncapsulateHelper = false;
 
-		// initial values for e.g. window.innerWidth, if there's a <:Window> meta tag
+		// initial values for e.g. window.innerWidth, if there's a <svelte:window> meta tag
 		this.metaBindings = [];
 	}
 }
@@ -89,7 +89,7 @@ export default function dom(
 			});
 
 			if (generator.readonly.has(key)) {
-				// <:Window> bindings
+				// <svelte:window> bindings
 				throw new Error(
 					`Cannot have a computed value '${key}' that clashes with a read-only property`
 				);
diff --git a/src/generators/nodes/shared/Node.ts b/src/generators/nodes/shared/Node.ts
index 1dad916983..392a50823d 100644
--- a/src/generators/nodes/shared/Node.ts
+++ b/src/generators/nodes/shared/Node.ts
@@ -58,7 +58,7 @@ export default class Node {
 			if (child.type === 'Comment') return;
 
 			// special case — this is an easy way to remove whitespace surrounding
-			// <:Window/>. lil hacky but it works
+			// <svelte:window/>. lil hacky but it works
 			if (child.type === 'Window') {
 				windowComponent = child;
 				return;
diff --git a/src/validate/html/validateHead.ts b/src/validate/html/validateHead.ts
index 48756f9150..aca0fd87ad 100644
--- a/src/validate/html/validateHead.ts
+++ b/src/validate/html/validateHead.ts
@@ -6,7 +6,7 @@ export default function validateHead(validator: Validator, node: Node, refs: Map
 	if (node.attributes.length) {
 		validator.error(node.attributes[0], {
 			code: `invalid-attribute`,
-			message: `<:Head> should not have any attributes or directives`
+			message: `<svelte:head> should not have any attributes or directives`
 		});
 	}
 
diff --git a/src/validate/html/validateWindow.ts b/src/validate/html/validateWindow.ts
index 29b5f2a7df..6f312e0407 100644
--- a/src/validate/html/validateWindow.ts
+++ b/src/validate/html/validateWindow.ts
@@ -23,7 +23,7 @@ export default function validateWindow(validator: Validator, node: Node, refs: M
 
 				validator.error(attribute.value, {
 					code: `invalid-binding`,
-					message: `Bindings on <:Window/> must be to top-level properties, e.g. '${parts[parts.length - 1]}' rather than '${parts.join('.')}'`
+					message: `Bindings on <svelte:window> must be to top-level properties, e.g. '${parts[parts.length - 1]}' rather than '${parts.join('.')}'`
 				});
 			}
 
@@ -34,7 +34,7 @@ export default function validateWindow(validator: Validator, node: Node, refs: M
 						? 'innerHeight'
 						: fuzzymatch(attribute.name, validBindings);
 
-				const message = `'${attribute.name}' is not a valid binding on <:Window>`;
+				const message = `'${attribute.name}' is not a valid binding on <svelte:window>`;
 
 				if (match) {
 					validator.error(attribute, {
diff --git a/test/custom-elements/samples/html/main.html b/test/custom-elements/samples/html/main.html
index 6cc7a9e7af..67b0fa792c 100644
--- a/test/custom-elements/samples/html/main.html
+++ b/test/custom-elements/samples/html/main.html
@@ -1,4 +1,4 @@
-<h1>Hello {{name}}!</h1>
+<h1>Hello {name}!</h1>
 
 <script>
 	export default {
diff --git a/test/custom-elements/samples/nested/Counter.html b/test/custom-elements/samples/nested/Counter.html
index fa6132f0f5..c25db21ac8 100644
--- a/test/custom-elements/samples/nested/Counter.html
+++ b/test/custom-elements/samples/nested/Counter.html
@@ -1,4 +1,4 @@
-<button on:click='set({ count: count + 1 })'>count: {{count}}</button>
+<button on:click='set({ count: count + 1 })'>count: {count}</button>
 
 <script>
 	export default {
diff --git a/test/custom-elements/samples/nested/main.html b/test/custom-elements/samples/nested/main.html
index 3be7e91177..f930d78a28 100644
--- a/test/custom-elements/samples/nested/main.html
+++ b/test/custom-elements/samples/nested/main.html
@@ -1,5 +1,5 @@
 <Counter bind:count/>
-<p>clicked {{count}} times</p>
+<p>clicked {count} times</p>
 
 <script>
 	import Counter from './Counter.html';
diff --git a/test/custom-elements/samples/new/main.html b/test/custom-elements/samples/new/main.html
index 6cc7a9e7af..67b0fa792c 100644
--- a/test/custom-elements/samples/new/main.html
+++ b/test/custom-elements/samples/new/main.html
@@ -1,4 +1,4 @@
-<h1>Hello {{name}}!</h1>
+<h1>Hello {name}!</h1>
 
 <script>
 	export default {
diff --git a/test/custom-elements/samples/no-missing-prop-warnings/main.html b/test/custom-elements/samples/no-missing-prop-warnings/main.html
index 088c96947a..61d4e837f8 100644
--- a/test/custom-elements/samples/no-missing-prop-warnings/main.html
+++ b/test/custom-elements/samples/no-missing-prop-warnings/main.html
@@ -1,5 +1,5 @@
-<p>foo: {{foo}}</p>
-<p>bar: {{bar}}</p>
+<p>foo: {foo}</p>
+<p>bar: {bar}</p>
 
 <script>
 	export default {
diff --git a/test/formats/index.js b/test/formats/index.js
index 91b2d1dc33..e61cf02bc7 100644
--- a/test/formats/index.js
+++ b/test/formats/index.js
@@ -85,7 +85,7 @@ describe("formats", () => {
 	describe("amd", () => {
 		it("generates an AMD module", () => {
 			const source = deindent`
-				<div>{{answer}}</div>
+				<div>{answer}</div>
 
 				<script>
 					import answer from 'answer';
@@ -110,7 +110,7 @@ describe("formats", () => {
 	describe("cjs", () => {
 		it("generates a CommonJS module", () => {
 			const source = deindent`
-				<div>{{answer}}</div>
+				<div>{answer}</div>
 
 				<script>
 					import answer from 'answer';
@@ -134,7 +134,7 @@ describe("formats", () => {
 	describe("iife", () => {
 		it("generates a self-executing script", () => {
 			const source = deindent`
-				<div>{{answer}}</div>
+				<div>{answer}</div>
 
 				<script>
 					import answer from 'answer';
@@ -208,7 +208,7 @@ describe("formats", () => {
 	describe("umd", () => {
 		it("generates a UMD build", () => {
 			const source = deindent`
-				<div>{{answer}}</div>
+				<div>{answer}</div>
 
 				<script>
 					import answer from 'answer';
@@ -249,7 +249,7 @@ describe("formats", () => {
 	describe("eval", () => {
 		it("generates a self-executing script that returns the component on eval", () => {
 			const source = deindent`
-				<div>{{answer}}</div>
+				<div>{answer}</div>
 
 				<script>
 					import answer from 'answer';
diff --git a/test/js/samples/collapses-text-around-comments/expected-bundle.js b/test/js/samples/collapses-text-around-comments/expected-bundle.js
index ed6fef0f3d..6786d1c2dc 100644
--- a/test/js/samples/collapses-text-around-comments/expected-bundle.js
+++ b/test/js/samples/collapses-text-around-comments/expected-bundle.js
@@ -148,7 +148,7 @@ function data() {
 function add_css() {
 	var style = createElement("style");
 	style.id = 'svelte-1a7i8ec-style';
-	style.textContent = "p.svelte-1a7i8ec,.svelte-1a7i8ec p{color:red}";
+	style.textContent = "p.svelte-1a7i8ec{color:red}";
 	appendNode(style, document.head);
 }
 
diff --git a/test/js/samples/collapses-text-around-comments/expected.js b/test/js/samples/collapses-text-around-comments/expected.js
index 7bab86334e..2f50f85a68 100644
--- a/test/js/samples/collapses-text-around-comments/expected.js
+++ b/test/js/samples/collapses-text-around-comments/expected.js
@@ -8,7 +8,7 @@ function data() {
 function add_css() {
 	var style = createElement("style");
 	style.id = 'svelte-1a7i8ec-style';
-	style.textContent = "p.svelte-1a7i8ec,.svelte-1a7i8ec p{color:red}";
+	style.textContent = "p.svelte-1a7i8ec{color:red}";
 	appendNode(style, document.head);
 }
 
diff --git a/test/js/samples/css-media-query/expected-bundle.js b/test/js/samples/css-media-query/expected-bundle.js
index 8802fe3002..6b1455f9c6 100644
--- a/test/js/samples/css-media-query/expected-bundle.js
+++ b/test/js/samples/css-media-query/expected-bundle.js
@@ -141,7 +141,7 @@ var proto = {
 function add_css() {
 	var style = createElement("style");
 	style.id = 'svelte-1slhpfn-style';
-	style.textContent = "@media(min-width: 1px){div.svelte-1slhpfn,.svelte-1slhpfn div{color:red}}";
+	style.textContent = "@media(min-width: 1px){div.svelte-1slhpfn{color:red}}";
 	appendNode(style, document.head);
 }
 
diff --git a/test/js/samples/css-media-query/expected.js b/test/js/samples/css-media-query/expected.js
index b5c91f76a9..893af23035 100644
--- a/test/js/samples/css-media-query/expected.js
+++ b/test/js/samples/css-media-query/expected.js
@@ -4,7 +4,7 @@ import { appendNode, assign, createElement, detachNode, init, insertNode, noop,
 function add_css() {
 	var style = createElement("style");
 	style.id = 'svelte-1slhpfn-style';
-	style.textContent = "@media(min-width: 1px){div.svelte-1slhpfn,.svelte-1slhpfn div{color:red}}";
+	style.textContent = "@media(min-width: 1px){div.svelte-1slhpfn{color:red}}";
 	appendNode(style, document.head);
 }
 
diff --git a/test/js/samples/window-binding-scroll/input.html b/test/js/samples/window-binding-scroll/input.html
index 74ace567ab..f2f6e2c91c 100644
--- a/test/js/samples/window-binding-scroll/input.html
+++ b/test/js/samples/window-binding-scroll/input.html
@@ -1,3 +1,3 @@
-<:Window bind:scrollY=y/>
+<svelte:window bind:scrollY=y/>
 
 <p>scrolled to {y}</p>
\ No newline at end of file
diff --git a/test/server-side-rendering/samples/styles-nested/_expected.css b/test/server-side-rendering/samples/styles-nested/_expected.css
index 737a93edff..775ae8a91c 100644
--- a/test/server-side-rendering/samples/styles-nested/_expected.css
+++ b/test/server-side-rendering/samples/styles-nested/_expected.css
@@ -1,2 +1,2 @@
-div.svelte-bzh57p,.svelte-bzh57p div{color:red}
-div.svelte-4yw8vx,.svelte-4yw8vx div{color:green}
\ No newline at end of file
+div.svelte-bzh57p{color:red}
+div.svelte-4yw8vx{color:green}
\ No newline at end of file
diff --git a/test/server-side-rendering/samples/styles/_expected.css b/test/server-side-rendering/samples/styles/_expected.css
index f54b1b3d50..2025c64f84 100644
--- a/test/server-side-rendering/samples/styles/_expected.css
+++ b/test/server-side-rendering/samples/styles/_expected.css
@@ -1 +1 @@
-div.svelte-bzh57p,.svelte-bzh57p div{color:red}
\ No newline at end of file
+div.svelte-bzh57p{color:red}
\ No newline at end of file
diff --git a/test/sourcemaps/samples/basic/input.html b/test/sourcemaps/samples/basic/input.html
index ed83093fa9..efaf9ef826 100644
--- a/test/sourcemaps/samples/basic/input.html
+++ b/test/sourcemaps/samples/basic/input.html
@@ -1 +1 @@
-{{foo.bar.baz}}
+{foo.bar.baz}
diff --git a/test/sourcemaps/samples/each-block/input.html b/test/sourcemaps/samples/each-block/input.html
index 8144479672..bf2f0609bd 100644
--- a/test/sourcemaps/samples/each-block/input.html
+++ b/test/sourcemaps/samples/each-block/input.html
@@ -1,3 +1,3 @@
-{{#each foo as bar}}
-	<span>{{bar}}</span>
-{{/each}}
\ No newline at end of file
+{#each foo as bar}
+	<span>{bar}</span>
+{/each}
\ No newline at end of file
diff --git a/test/validator/samples/component-slot-dynamic-attribute/input.html b/test/validator/samples/component-slot-dynamic-attribute/input.html
index 0c0866459f..436bb32f46 100644
--- a/test/validator/samples/component-slot-dynamic-attribute/input.html
+++ b/test/validator/samples/component-slot-dynamic-attribute/input.html
@@ -1,3 +1,11 @@
 <Nested>
 	<button slot='{foo}'>click me</button>
-</Nested>
\ No newline at end of file
+</Nested>
+
+<script>
+	import Nested from './Nested.html';
+
+	export default {
+		components: { Nested }
+	};
+</script>
\ No newline at end of file
diff --git a/test/validator/samples/missing-component/warnings.json b/test/validator/samples/missing-component/errors.json
similarity index 100%
rename from test/validator/samples/missing-component/warnings.json
rename to test/validator/samples/missing-component/errors.json
diff --git a/test/validator/samples/window-binding-invalid-innerwidth/errors.json b/test/validator/samples/window-binding-invalid-innerwidth/errors.json
index a91a928c60..e5bc0c7d34 100644
--- a/test/validator/samples/window-binding-invalid-innerwidth/errors.json
+++ b/test/validator/samples/window-binding-invalid-innerwidth/errors.json
@@ -1,6 +1,6 @@
 [{
 	"code": "invalid-binding",
-	"message": "'innerwidth' is not a valid binding on <:Window> (did you mean 'innerWidth'?)",
+	"message": "'innerwidth' is not a valid binding on <svelte:window> (did you mean 'innerWidth'?)",
 	"loc": {
 		"line": 1,
 		"column": 15
diff --git a/test/validator/samples/window-binding-invalid-value/errors.json b/test/validator/samples/window-binding-invalid-value/errors.json
index 32009552d6..49b2fa517f 100644
--- a/test/validator/samples/window-binding-invalid-value/errors.json
+++ b/test/validator/samples/window-binding-invalid-value/errors.json
@@ -1,6 +1,6 @@
 [{
 	"code": "invalid-binding",
-	"message": "Bindings on <:Window/> must be to top-level properties, e.g. 'baz' rather than 'foo.bar.baz'",
+	"message": "Bindings on <svelte:window> must be to top-level properties, e.g. 'baz' rather than 'foo.bar.baz'",
 	"loc": {
 		"line": 1,
 		"column": 32
diff --git a/test/validator/samples/window-binding-invalid-width/errors.json b/test/validator/samples/window-binding-invalid-width/errors.json
index 1ac57e825e..c340fe3f7d 100644
--- a/test/validator/samples/window-binding-invalid-width/errors.json
+++ b/test/validator/samples/window-binding-invalid-width/errors.json
@@ -1,6 +1,6 @@
 [{
 	"code": "invalid-binding",
-	"message": "'width' is not a valid binding on <:Window> (did you mean 'innerWidth'?)",
+	"message": "'width' is not a valid binding on <svelte:window> (did you mean 'innerWidth'?)",
 	"loc": {
 		"line": 1,
 		"column": 15
diff --git a/test/validator/samples/window-binding-invalid/errors.json b/test/validator/samples/window-binding-invalid/errors.json
index 9bebff624d..7d5f049b79 100644
--- a/test/validator/samples/window-binding-invalid/errors.json
+++ b/test/validator/samples/window-binding-invalid/errors.json
@@ -1,6 +1,6 @@
 [{
 	"code": "invalid-binding",
-	"message": "'potato' is not a valid binding on <:Window> — valid bindings are innerWidth, innerHeight, outerWidth, outerHeight, scrollX, scrollY or online",
+	"message": "'potato' is not a valid binding on <svelte:window> — valid bindings are innerWidth, innerHeight, outerWidth, outerHeight, scrollX, scrollY or online",
 	"loc": {
 		"line": 1,
 		"column": 15