diff --git a/src/compiler/parse/read/script.ts b/src/compiler/parse/read/script.ts
index 130c346ba1..8260894215 100644
--- a/src/compiler/parse/read/script.ts
+++ b/src/compiler/parse/read/script.ts
@@ -37,7 +37,8 @@ export default function read_script(parser: Parser, start: number, attributes: N
 		message: `<script> must have a closing tag`
 	});
 
-	const source = ' '.repeat(script_start) + parser.template.slice(script_start, script_end);
+	const source = parser.template.slice(0, script_start).replace(/[^\n]/g, ' ') +
+		parser.template.slice(script_start, script_end);
 	parser.index = script_end + script_closing_tag.length;
 
 	let ast: Program;
diff --git a/test/sourcemaps/samples/script-after-comment/input.svelte b/test/sourcemaps/samples/script-after-comment/input.svelte
new file mode 100644
index 0000000000..1f06455678
--- /dev/null
+++ b/test/sourcemaps/samples/script-after-comment/input.svelte
@@ -0,0 +1,9 @@
+<!--
+	Multiline
+	comment
+-->
+<script>
+	function assertThisLine() {}
+</script>
+
+{foo.bar.baz}
diff --git a/test/sourcemaps/samples/script-after-comment/test.js b/test/sourcemaps/samples/script-after-comment/test.js
new file mode 100644
index 0000000000..b473970112
--- /dev/null
+++ b/test/sourcemaps/samples/script-after-comment/test.js
@@ -0,0 +1,16 @@
+export function test({ assert, smc, locateInSource, locateInGenerated }) {
+	const expected = locateInSource( 'assertThisLine' );
+	const start = locateInGenerated( 'assertThisLine' );
+
+	const actual = smc.originalPositionFor({
+		line: start.line + 1,
+		column: start.column
+	});
+
+	assert.deepEqual( actual, {
+		source: 'input.svelte',
+		name: null,
+		line: expected.line + 1,
+		column: expected.column
+	});
+}
diff --git a/test/sourcemaps/samples/two-scripts/input.svelte b/test/sourcemaps/samples/two-scripts/input.svelte
new file mode 100644
index 0000000000..4c869827c0
--- /dev/null
+++ b/test/sourcemaps/samples/two-scripts/input.svelte
@@ -0,0 +1,9 @@
+<script context="module">
+	export let first;
+</script>
+
+<script>
+	function assertThisLine() {}
+</script>
+
+{foo.bar.baz}
diff --git a/test/sourcemaps/samples/two-scripts/test.js b/test/sourcemaps/samples/two-scripts/test.js
new file mode 100644
index 0000000000..b473970112
--- /dev/null
+++ b/test/sourcemaps/samples/two-scripts/test.js
@@ -0,0 +1,16 @@
+export function test({ assert, smc, locateInSource, locateInGenerated }) {
+	const expected = locateInSource( 'assertThisLine' );
+	const start = locateInGenerated( 'assertThisLine' );
+
+	const actual = smc.originalPositionFor({
+		line: start.line + 1,
+		column: start.column
+	});
+
+	assert.deepEqual( actual, {
+		source: 'input.svelte',
+		name: null,
+		line: expected.line + 1,
+		column: expected.column
+	});
+}