diff --git a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/Formatter_Test.java b/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/Formatter_Test.java
index eadabcf..934e31b 100644
--- a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/Formatter_Test.java
+++ b/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/Formatter_Test.java
@@ -13,6 +13,7 @@
 
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.swt.SWT;
 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEclipseEditor;
 import org.junit.*;
@@ -31,7 +32,7 @@
 
   public @Rule CommentReaderRule commentReader = new CommentReaderRule();
 
-  @BeforeClass public static void setUpOnce() throws Exception {
+  @BeforeClass public static void setUpOnce() throws CoreException {
     robot = new ProtobufBot();
     robot.resetAll();
     robot.createGeneralProject("FormatterTest");
@@ -40,11 +41,37 @@
     editor.saveAndClose();
   }
 
+  // syntax = 'proto2';import 'google/protobuf/descriptor.proto';
+
+  // syntax = 'proto2';
+  //
+  // import 'google/protobuf/descriptor.proto';
+  @Test public void should_format_syntax() {
+    SWTBotEclipseEditor editor = robot.createFile("formatSyntax.proto");
+    Comments comments = commentsAbove();
+    editor.setText(comments.beforeFormatting);
+    formatAndSave(editor);
+    assertThat(editor.getText(), equalTo(comments.expected));
+  }
+
+  // package com.google.proto.test;import 'google/protobuf/descriptor.proto';
+
+  // package com.google.proto.test;
+  //
+  // import 'google/protobuf/descriptor.proto';
+  @Test public void should_format_package() {
+    SWTBotEclipseEditor editor = robot.createFile("formatPackage.proto");
+    Comments comments = commentsAbove();
+    editor.setText(comments.beforeFormatting);
+    formatAndSave(editor);
+    assertThat(editor.getText(), equalTo(comments.expected));
+  }
+
   // import 'dummy.proto';import 'google/protobuf/descriptor.proto';
 
   // import 'dummy.proto';
   // import 'google/protobuf/descriptor.proto';
-  @Test public void should_add_line_wrap_after_normal_import() throws Exception {
+  @Test public void should_format_normal_import() {
     SWTBotEclipseEditor editor = robot.createFile("formatNormalImport.proto");
     Comments comments = commentsAbove();
     editor.setText(comments.beforeFormatting);
@@ -56,7 +83,7 @@
 
   // import public 'dummy.proto';
   // import 'google/protobuf/descriptor.proto';
-  @Test public void should_add_line_wrap_after_public_import() throws Exception {
+  @Test public void should_format_public_import() {
     SWTBotEclipseEditor editor = robot.createFile("formatPublicImport.proto");
     Comments comments = commentsAbove();
     editor.setText(comments.beforeFormatting);
@@ -64,6 +91,30 @@
     assertThat(editor.getText(), equalTo(comments.expected));
   }
 
+  // import weak 'dummy.proto';import 'google/protobuf/descriptor.proto';
+
+  // import weak 'dummy.proto';
+  // import 'google/protobuf/descriptor.proto';
+  @Test public void should_format_weak_import() {
+    SWTBotEclipseEditor editor = robot.createFile("formatWeakImport.proto");
+    Comments comments = commentsAbove();
+    editor.setText(comments.beforeFormatting);
+    formatAndSave(editor);
+    assertThat(editor.getText(), equalTo(comments.expected));
+  }
+
+  // option java_package = "com.foo.bar";option optimize_for = CODE_SIZE;
+
+  // option java_package = "com.foo.bar";
+  // option optimize_for = CODE_SIZE;
+  @Test public void should_format_native_option() {
+    SWTBotEclipseEditor editor = robot.createFile("formatNativeOption.proto");
+    Comments comments = commentsAbove();
+    editor.setText(comments.beforeFormatting);
+    formatAndSave(editor);
+    assertThat(editor.getText(), equalTo(comments.expected));
+  }
+
   private Comments commentsAbove() {
     return new Comments(commentReader.commentsInCurrentTestMethod());
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/formatting/ProtobufFormatter.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/formatting/ProtobufFormatter.java
index 30cf32f..f7d94ba 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/formatting/ProtobufFormatter.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/formatting/ProtobufFormatter.java
@@ -27,9 +27,11 @@
   @Override protected void configureFormatting(FormattingConfig c) {
     ProtobufGrammarAccess g = (ProtobufGrammarAccess) getGrammarAccess();
     c.setLinewrap(0, 1, 2).before(g.getSL_COMMENTRule());
-    c.setLinewrap(1).after(g.getPackageRule());
+    c.setLinewrap(2).after(g.getSyntaxRule());
+    c.setLinewrap(2).after(g.getPackageRule());
     c.setLinewrap(1).after(g.getNormalImportRule());
     c.setLinewrap(1).after(g.getPublicImportRule());
+    c.setLinewrap(1).after(g.getWeakImportRule());
     c.setLinewrap(1).after(g.getNativeOptionRule());
     c.setLinewrap(1).after(g.getCustomOptionRule());
     c.setLinewrap(1).after(g.getGroupRule());
