diff --git a/lib/src/codegen/module_builder.dart b/lib/src/codegen/module_builder.dart
index 6e20cd3..2dba713 100644
--- a/lib/src/codegen/module_builder.dart
+++ b/lib/src/codegen/module_builder.dart
@@ -89,6 +89,7 @@
     moduleStatements.addAll(_flattenBlocks(moduleItems));
 
     if (_exports.isNotEmpty) {
+      moduleStatements.add(js.comment(''));
       moduleStatements.add(js.comment('Exports:'));
       // TODO(jmesserly): make these immutable in JS?
       _exports.forEach((name, exportName) {
@@ -148,6 +149,7 @@
     moduleStatements.addAll(_flattenBlocks(moduleItems));
 
     if (_exports.isNotEmpty) {
+      moduleStatements.add(js.comment(''));
       moduleStatements.add(js.comment('Exports:'));
       // TODO(jmesserly): make these immutable in JS?
       _exports.forEach((name, exportName) {
@@ -168,19 +170,22 @@
   JS.Program build(String jsPath, String jsModuleValue,
       JS.Identifier exportsVar, Iterable<JS.ModuleItem> moduleItems) {
     var moduleStatements = <JS.ModuleItem>[js.statement("'use strict';"),];
+    moduleStatements.add(js.comment(''));
 
     for (var i in _imports) {
+      var moduleName = js.string(_relativeModuleName(i.name, from: jsPath));
       if (i.libVar == null) {
-        moduleStatements.add(js.statement('require(#);', [js.string(i.name)]));
+        moduleStatements.add(js.statement('require(#);', [moduleName]));
       } else {
         moduleStatements.add(
-            js.statement('let # = require(#);', [i.libVar, js.string(i.name)]));
+            js.statement('let # = require(#);', [i.libVar, moduleName]));
       }
     }
 
     moduleStatements.addAll(_flattenBlocks(moduleItems));
 
     if (_exports.isNotEmpty) {
+      moduleStatements.add(js.comment(''));
       moduleStatements.add(js.comment('Exports:'));
       _exports.forEach((name, exportName) {
         moduleStatements
diff --git a/lib/src/codegen/side_effect_analysis.dart b/lib/src/codegen/side_effect_analysis.dart
index 3a51a46..08f5195 100644
--- a/lib/src/codegen/side_effect_analysis.dart
+++ b/lib/src/codegen/side_effect_analysis.dart
@@ -11,7 +11,7 @@
 import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
 import 'package:analyzer/src/generated/source.dart' show Source;
 
-/// True is the expression can be evaluated multiple times without causing
+/// True if the expression can be evaluated multiple times without causing
 /// code execution. This is true for final fields. This can be true for local
 /// variables, if:
 /// * they are not assigned within the [context].
diff --git a/lib/src/compiler.dart b/lib/src/compiler.dart
index 8e8d7b3..9eecf37 100644
--- a/lib/src/compiler.dart
+++ b/lib/src/compiler.dart
@@ -91,7 +91,7 @@
     _inputBaseDir = options.inputBaseDir;
     if (outputDir != null) {
       _jsGen = new JSGenerator(this);
-      _runtimeOutputDir = path.join(outputDir, 'dev_compiler', 'runtime');
+      _runtimeOutputDir = outputDir;
     }
     _dartCore = context.typeProvider.objectType.element.library;
   }
diff --git a/lib/src/js/printer.dart b/lib/src/js/printer.dart
index 955f6d9..4fb500b 100644
--- a/lib/src/js/printer.dart
+++ b/lib/src/js/printer.dart
@@ -570,6 +570,7 @@
   }
 
   visitFunctionDeclaration(FunctionDeclaration declaration) {
+    lineOut();
     indent();
     outClosureAnnotation(declaration);
     functionOut(declaration.function, declaration.name);
@@ -1088,6 +1089,7 @@
   }
 
   visitClassDeclaration(ClassDeclaration node) {
+    lineOut();
     indent();
     visit(node.classExpr);
     lineOut();
@@ -1332,12 +1334,15 @@
   void visitComment(Comment node) {
     if (shouldCompressOutput) return;
     String comment = node.comment.trim();
-    if (comment.isEmpty) return;
-    for (var line in comment.split('\n')) {
-      if (comment.startsWith('//')) {
-        outIndentLn(line.trim());
-      } else {
-        outIndentLn('// ${line.trim()}');
+    if (comment.isEmpty) {
+      lineOut();
+    } else {
+      for (var line in comment.split('\n')) {
+        if (comment.startsWith('//')) {
+          outIndentLn(line.trim());
+        } else {
+          outIndentLn('// ${line.trim()}');
+        }
       }
     }
   }
diff --git a/test/codegen_test.dart b/test/codegen_test.dart
index 01f5359..402b14b 100644
--- a/test/codegen_test.dart
+++ b/test/codegen_test.dart
@@ -222,8 +222,7 @@
     });
   }
 
-  var expectedRuntime =
-      defaultRuntimeFiles.map((f) => 'dev_compiler/runtime/$f');
+  var expectedRuntime = defaultRuntimeFiles.map((f) => f);
 
   test('devc jscodegen sunflower.html', () {
     var filePath = path.join(inputDir, 'sunflower', 'sunflower.html');
