diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocCommandFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocCommandFactory.java
index 43c9b7f..efa8277 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocCommandFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocCommandFactory.java
@@ -8,11 +8,14 @@
  */
 package com.google.eclipse.protobuf.ui.builder;
 
+import static com.google.eclipse.protobuf.util.CommonWords.space;
+
 import java.util.*;
 
 import org.eclipse.core.resources.*;
 
 import com.google.eclipse.protobuf.ui.preferences.pages.compiler.SupportedLanguage;
+import com.google.eclipse.protobuf.util.CommonWords;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -29,14 +32,14 @@
   String protocCommand(IFile protoFile, String protocPath, List<String> importRoots,
       OutputDirectories outputDirectories) {
     StringBuilder command = new StringBuilder();
-    command.append(protocPath).append(" ");
+    command.append(protocPath).append(space());
     for (String importRoot : importRoots) {
-      command.append("-I=").append(importRoot).append(" ");
+      command.append("-I=").append(importRoot).append(space());
     }
     for (SupportedLanguage language : SupportedLanguage.values()) {
       IFolder outputDirectory = outputDirectories.outputDirectoryFor(language);
       if (outputDirectory == null) continue;
-      command.append(langOutFlag(language)).append(outputDirectory.getLocation().toOSString()).append(" ");
+      command.append(langOutFlag(language)).append(outputDirectory.getLocation().toOSString()).append(space());
     }
     command.append(protoFile.getLocation().toOSString());
     return command.toString();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
index 1c661ff..abc31c1 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
@@ -19,6 +19,7 @@
 import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
 import org.eclipse.xtext.ui.editor.contentassist.antlr.ParserBasedContentAssistContextFactory;
 import org.eclipse.xtext.util.concurrent.IUnitOfWork;
+import org.eclipse.xtext.validation.IConcreteSyntaxValidator.InvalidConcreteSyntaxException;
 
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.ui.util.*;
@@ -51,9 +52,10 @@
       behaveLikeRegularEditing(styledText, originalCaretOffset);
       return;
     }
+    String content = contentToInsert(editor, originalCaretOffset);
+    if (content == null) return;
     int endOfLineOffset = offsetAtLine + line.length();
     styledText.setCaretOffset(endOfLineOffset);
-    String content = contentToInsert(editor, originalCaretOffset);
     insert(styledText, content, endOfLineOffset);
   }
 
@@ -67,41 +69,39 @@
   }
 
   private String contentToInsert(final XtextEditor editor, final int offset) {
-    return editor.getDocument().modify(new IUnitOfWork<String, XtextResource>() {
-      public String exec(XtextResource state) {
-        ContentAssistContext[] context = contextFactory.create(editor.getInternalSourceViewer(), offset, state);
-        if (context == null || context.length == 0) return semicolon;
-        for (ContentAssistContext c : context) {
-          EObject model = c.getCurrentModel();
-          if (model instanceof Literal)
-            return contentToInsert((Literal) model);
-          if (model instanceof Property)
-            return contentToInsert((Property) model);
+    try {
+      return editor.getDocument().modify(new IUnitOfWork<String, XtextResource>() {
+        public String exec(XtextResource state) {
+          ContentAssistContext[] context = contextFactory.create(editor.getInternalSourceViewer(), offset, state);
+          if (context == null || context.length == 0) return semicolon;
+          for (ContentAssistContext c : context) {
+            EObject model = c.getCurrentModel();
+            if (model instanceof Literal)
+              return contentToInsert((Literal) model);
+            if (model instanceof Property)
+              return contentToInsert((Property) model);
+          }
+          return semicolon;
         }
-        return semicolon;
-      }
-    });
+      });
+    } catch (InvalidConcreteSyntaxException e) {
+      return null;
+    }
   }
 
   private String contentToInsert(Literal literal) {
     INode indexNode = nodes.firstNodeForFeature(literal, LITERAL__INDEX);
     if (indexNode != null) return semicolon;
     int index = literals.calculateIndexOf(literal);
-    return defaultIndexAndSemicolonToInsert(index);
+    literal.setIndex(index);
+    return null;
   }
 
   private String contentToInsert(Property property) {
     INode indexNode = nodes.firstNodeForFeature(property, FIELD__INDEX);
     if (indexNode != null) return semicolon;
     int index = fields.calculateTagNumberOf(property);
-    return defaultIndexAndSemicolonToInsert(index);
-  }
-
-  private String defaultIndexAndSemicolonToInsert(int index) {
-    return indexAndSemicolonToInsert("= %d%s", index);
-  }
-
-  private String indexAndSemicolonToInsert(String format, int index) {
-    return String.format(format, index, semicolon);
+    property.setIndex(index);
+    return null;
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
index 60a82bc..95a4b49 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
@@ -12,6 +12,7 @@
 import static com.google.eclipse.protobuf.protobuf.Modifier.*;
 import static com.google.eclipse.protobuf.ui.grammar.CompoundElement.*;
 import static com.google.eclipse.protobuf.ui.util.Strings.firstCharToLowerCase;
+import static com.google.eclipse.protobuf.util.CommonWords.space;
 import static java.lang.String.valueOf;
 import static java.util.Collections.emptyList;
 import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
@@ -44,8 +45,6 @@
  */
 public class ProtobufProposalProvider extends AbstractProtobufProposalProvider {
 
-  private static final String SPACE = " ";
-
   @Inject private ProtobufElementFinder finder;
   @Inject private ProtoDescriptorProvider descriptorProvider;
   @Inject private PluginImageHelper imageHelper;
@@ -66,7 +65,7 @@
 
   @Override public void complete_Syntax(EObject model, RuleCall ruleCall, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
-    String proposal = SYNTAX + SPACE + EQUAL_PROTO2_IN_QUOTES;
+    String proposal = SYNTAX + space() + EQUAL_PROTO2_IN_QUOTES;
     proposeAndAccept(proposal, imageHelper.getImage(images.imageFor(Syntax.class)), context, acceptor);
   }
 
@@ -359,7 +358,7 @@
 
   private void proposeOption(Property option, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
     String displayString = option.getName();
-    String proposalText = displayString + SPACE + EQUAL + SPACE;
+    String proposalText = displayString + space() + EQUAL + space();
     boolean isStringOption = properties.isString(option);
     if (isStringOption) {
       proposalText = proposalText + EMPTY_STRING;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider.java
index 0efb3ed..58598c3 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider.java
@@ -8,6 +8,7 @@
  */
 package com.google.eclipse.protobuf.ui.documentation;
 
+import static com.google.eclipse.protobuf.util.CommonWords.space;
 import static org.eclipse.xtext.nodemodel.util.NodeModelUtils.getNode;
 
 import org.eclipse.emf.ecore.EObject;
@@ -17,6 +18,7 @@
 
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.scoping.*;
+import com.google.eclipse.protobuf.util.CommonWords;
 import com.google.inject.Inject;
 
 /**
@@ -76,7 +78,7 @@
 
   private String cleanUp(String comment) {
     return comment.replaceFirst(COMMENT_START, "")
-                  .replaceAll(WINDOWS_NEW_LINE, " ")
-                  .replaceAll(UNIX_NEW_LINE, " ");
+                  .replaceAll(WINDOWS_NEW_LINE, space())
+                  .replaceAll(UNIX_NEW_LINE, space());
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java
index 62b1046..03b555e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java
@@ -9,8 +9,10 @@
 package com.google.eclipse.protobuf.ui.grammar;
 
 import static com.google.eclipse.protobuf.grammar.CommonKeyword.*;
+import static com.google.eclipse.protobuf.util.CommonWords.space;
 
 import com.google.eclipse.protobuf.grammar.CommonKeyword;
+import com.google.eclipse.protobuf.util.CommonWords;
 
 /**
  * Element composed of one or more keywords.
@@ -28,8 +30,6 @@
   PROTO2_IN_QUOTES(join(QUOTE, "proto2", QUOTE, SEMICOLON)),
   EQUAL_PROTO2_IN_QUOTES(joinWithWhitespace(EQUAL, PROTO2_IN_QUOTES));
 
-  private static final String SPACE = " ";
-
   private final String value;
 
   private static String join(Object...objects) {
@@ -47,7 +47,7 @@
     for (int i = 0; i < count; i++) {
       String s = objects[i].toString();
       buffer.append(s);
-      if (i < count - 1 && !s.endsWith(SPACE)) buffer.append(SPACE);
+      if (i < count - 1 && !s.endsWith(space())) buffer.append(space());
     }
     return buffer.toString();
   }
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 a858b4d..a40797c 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
@@ -1,27 +1,90 @@
 /*
  * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * 
  * http://www.eclipse.org/legal/epl-v10.html
  */
 package com.google.eclipse.protobuf.formatting;
 
+import static com.google.eclipse.protobuf.grammar.CommonKeyword.*;
+import static com.google.eclipse.protobuf.util.CommonWords.space;
+
+import com.google.eclipse.protobuf.services.*;
+import com.google.eclipse.protobuf.services.ProtobufGrammarAccess.EnumElements;
+import com.google.eclipse.protobuf.services.ProtobufGrammarAccess.ExtendMessageElements;
+import com.google.eclipse.protobuf.services.ProtobufGrammarAccess.MessageElements;
+import com.google.eclipse.protobuf.services.ProtobufGrammarAccess.RpcElements;
+import com.google.eclipse.protobuf.services.ProtobufGrammarAccess.ServiceElements;
+
+import org.eclipse.xtext.Keyword;
 import org.eclipse.xtext.formatting.impl.*;
 
-import com.google.eclipse.protobuf.services.ProtobufGrammarAccess;
-
 /**
- * This class contains custom formatting description.
- *
+ * This class provides custom formatting.
+ * 
  * @see <a href="http://www.eclipse.org/Xtext/documentation/2_0_0/105-formatting.php">Xtext Formatting</a>
  */
 public class ProtobufFormatter extends AbstractDeclarativeFormatter {
 
-	@Override
-	protected void configureFormatting(FormattingConfig c) {
-	  ProtobufGrammarAccess g = (ProtobufGrammarAccess) getGrammarAccess();
-	  c.setLinewrap(0, 1, 2).before(g.getSL_COMMENTRule());
-	}
+  @Override protected void configureFormatting(FormattingConfig c) {
+    ProtobufGrammarAccess g = (ProtobufGrammarAccess) getGrammarAccess();
+    c.setLinewrap(0, 1, 2).before(g.getSL_COMMENTRule());
+    c.setLinewrap(1).after(g.getPropertyRule());
+    for (Keyword equal : g.findKeywords(EQUAL.toString())) {
+      c.setSpace(space()).around(equal);
+    }
+    for (Keyword semicolon : g.findKeywords(SEMICOLON.toString())) {
+      c.setNoSpace().before(semicolon);
+    }
+    for (Keyword openingBrace : g.findKeywords("{")) {
+      c.setLinewrap(1).after(openingBrace);
+    }
+    for (Keyword closingBrace : g.findKeywords("}")) {
+      c.setLinewrap(2).after(closingBrace);
+    }
+    for (Keyword openingBracket : g.findKeywords(OPENING_BRACKET.toString())) {
+      c.setNoSpace().after(openingBracket);
+    }
+    for (Keyword closingBracket : g.findKeywords(CLOSING_BRACKET.toString())) {
+      c.setNoSpace().before(closingBracket);
+    }
+    indentMessageElements(c, g);
+    indentExtendMessageElements(c, g);
+    indentEnumElements(c, g);
+    indentServiceElements(c, g);
+    indentRpcElements(c, g);
+  }
+
+  private void indentMessageElements(FormattingConfig c, ProtobufGrammarAccess g) {
+    MessageElements e = g.getMessageAccess();
+    c.setIndentationIncrement().after(e.getLeftCurlyBracketKeyword_2());
+    c.setIndentationDecrement().before(e.getRightCurlyBracketKeyword_4());
+  }
+  
+  private void indentExtendMessageElements(FormattingConfig c, ProtobufGrammarAccess g) {
+    ExtendMessageElements e = g.getExtendMessageAccess();
+    c.setIndentationIncrement().after(e.getLeftCurlyBracketKeyword_2());
+    c.setIndentationDecrement().before(e.getRightCurlyBracketKeyword_4());
+  }
+  
+  private void indentEnumElements(FormattingConfig c, ProtobufGrammarAccess g) {
+    EnumElements e = g.getEnumAccess();
+    c.setIndentationIncrement().after(e.getLeftCurlyBracketKeyword_2());
+    c.setIndentationDecrement().before(e.getRightCurlyBracketKeyword_4());
+  }
+
+  private void indentServiceElements(FormattingConfig c, ProtobufGrammarAccess g) {
+    ServiceElements e = g.getServiceAccess();
+    c.setIndentationIncrement().after(e.getLeftCurlyBracketKeyword_2());
+    c.setIndentationDecrement().before(e.getRightCurlyBracketKeyword_4());
+  }
+
+  private void indentRpcElements(FormattingConfig c, ProtobufGrammarAccess g) {
+    RpcElements e = g.getRpcAccess();
+    c.setIndentationIncrement().after(e.getLeftCurlyBracketKeyword_9_0_0_0());
+    c.setIndentationDecrement().before(e.getRightCurlyBracketKeyword_9_0_0_2());
+  }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Closeables.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Closeables.java
index 7fdb025..1065f29 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Closeables.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Closeables.java
@@ -1,6 +1,9 @@
 /*
- * Copyright (c) 2011 Google Inc. All rights reserved. This program and the accompanying materials are made available
- * under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
  * http://www.eclipse.org/legal/epl-v10.html
  */
 package com.google.eclipse.protobuf.util;
@@ -8,12 +11,17 @@
 import java.io.*;
 
 /**
- * Utility methods related to <code>{@link Closeable}</code>.
+ * Utility methods related to <code>{@link Closeable}</code>s.
  * 
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Closeables {
   
+  /**
+   * Invokes {@code close()} on the given <code>{@link Cloneable}</code>, ignoring any thrown exceptions.
+   * @param c the given {@code Closeable}.
+   * @return {@code false} if the given {@code Closeable} was {@code null}; {@code true} otherwise.
+   */
   public static boolean close(Closeable c) {
     if (c == null) return false;
     try {
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/CommonWords.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/CommonWords.java
new file mode 100644
index 0000000..4ad10b4
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/CommonWords.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.util;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public final class CommonWords {
+
+  private static final String SPACE = " ";
+  
+  /**
+   * Returns a single space.
+   * @return a single space.
+   */
+  public static String space() {
+    return SPACE;
+  }
+  
+  private CommonWords() {}
+}
