diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/XtextRule.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/XtextRule.java
index aae9b9a..982e8ed 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/XtextRule.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/XtextRule.java
@@ -13,6 +13,7 @@
 import static org.eclipse.emf.ecore.util.EcoreUtil.resolveAll;
 import static org.eclipse.xtext.util.CancelIndicator.NullImpl;
 
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.Protobuf;
 import com.google.inject.Injector;
 
@@ -44,7 +45,7 @@
     return injector;
   }
 
-  public Protobuf parse(StringBuilder text) {
+  public Protobuf parse(MultiLineTextBuilder text) {
     return parse(text.toString());
   }
 
@@ -52,7 +53,6 @@
     XtextResource resource = resourceFrom(new StringInputStream(text));
     IParseResult parseResult = resource.getParseResult();
     if (!parseResult.hasSyntaxErrors()) return (Protobuf) parseResult.getRootASTElement();
-    Iterable<INode> syntaxErrors = parseResult.getSyntaxErrors();
     StringBuilder builder = new StringBuilder();
     builder.append("Syntax errors:");
     for (INode error : parseResult.getSyntaxErrors()) 
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/util/MultiLineTextBuilder.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/util/MultiLineTextBuilder.java
new file mode 100644
index 0000000..31890f9
--- /dev/null
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/util/MultiLineTextBuilder.java
@@ -0,0 +1,28 @@
+/*
+ * 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.junit.util;
+
+import static com.google.eclipse.protobuf.junit.util.SystemProperties.lineSeparator;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class MultiLineTextBuilder {
+
+  private final StringBuilder builder = new StringBuilder();
+  
+  public MultiLineTextBuilder append(String s) {
+    builder.append(s).append(lineSeparator());
+    return this;
+  }
+  
+  @Override public String toString() {
+    return builder.toString();
+  }
+}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider_getFullyQualifiedName_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider_getFullyQualifiedName_Test.java
index ff5ee63..99a401e 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider_getFullyQualifiedName_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider_getFullyQualifiedName_Test.java
@@ -17,6 +17,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
@@ -35,7 +36,7 @@
   }
   
   @Test public void should_include_existing_package_name_as_part_of_message_FQN() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("package fqn.test;          ")
          .append("                           ")
          .append("message Person {           ")
@@ -48,7 +49,7 @@
   }
 
   @Test public void should_include_existing_package_name_as_part_of_property_FQN() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("package fqn.test;          ")
          .append("                           ")
          .append("message Person {           ")
@@ -61,7 +62,7 @@
   }
 
   @Test public void should_not_include_package_name_as_part_of_message_FQN_if_package_is_not_specified() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  optional string name = 1;")
          .append("}                          ");
@@ -72,7 +73,7 @@
   }
 
   @Test public void should_not_include_package_name_as_part_of_property_FQN_if_package_is_not_specified() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  optional string name = 1;")
          .append("}                          ");
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/LocalNamesProvider_namesOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/LocalNamesProvider_namesOf_Test.java
index 55e1202..a49bdad 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/LocalNamesProvider_namesOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/LocalNamesProvider_namesOf_Test.java
@@ -16,11 +16,14 @@
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.xtext.naming.QualifiedName;
-import org.junit.*;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.protobuf.*;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.Enum;
+import com.google.eclipse.protobuf.protobuf.Protobuf;
 
 /**
  * Tests for <code>{@link LocalNamesProvider#namesOf(EObject)}</code>.
@@ -38,7 +41,7 @@
   }
 
   @Test public void should_return_all_possible_local_names() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("package test.alternative.names;                  ");
     proto.append("                                                 ");
     proto.append("message Person {                                 ");
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ModelNodes_firstNodeForFeature_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ModelNodes_firstNodeForFeature_Test.java
index 6da5d5b..3c8bd79 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ModelNodes_firstNodeForFeature_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ModelNodes_firstNodeForFeature_Test.java
@@ -14,6 +14,7 @@
 import static org.junit.Assert.assertThat;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.*;
 
 import org.eclipse.emf.ecore.*;
@@ -36,7 +37,7 @@
   }
   
   @Test public void should_return_first_node_for_feature() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  optional bool active = 1;")
          .append("}                          ");
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isBool_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isBool_Test.java
index e30879e..4015f3b 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isBool_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isBool_Test.java
@@ -15,6 +15,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.Property;
 import com.google.eclipse.protobuf.protobuf.Protobuf;
 
@@ -34,7 +35,7 @@
   }
 
   @Test public void should_return_true_if_property_is_bool() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  optional bool active = 1;")
          .append("}                          ");
@@ -44,7 +45,7 @@
   }
 
   @Test public void should_return_false_if_property_is_not_bool() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  optional string name = 1;")
          .append("}                          ");
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isPrimitive_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isPrimitive_Test.java
index 384664d..a5a657b 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isPrimitive_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isPrimitive_Test.java
@@ -15,6 +15,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.Property;
 import com.google.eclipse.protobuf.protobuf.Protobuf;
 
@@ -34,7 +35,7 @@
   }
 
   @Test public void should_return_true_if_property_is_primitive() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Primitives {             ")
          .append("  optional float float_1 = 1;    ")
          .append("  optional int32 int32_1 = 2;    ")
@@ -53,7 +54,7 @@
   }
 
   @Test public void should_return_false_if_property_is_not_primitive() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Types {                  ")
          .append("  optional string string_1 = 1;  ")
          .append("  optional bytes bytes_1 = 2;    ")
@@ -61,7 +62,7 @@
          .append("}                                ")
          .append("                                 ")
          .append("message Person {                 ")
-         .append("  optional string name = 1       ")
+         .append("  optional string name = 1;      ")
          .append("}                                ");
     Protobuf root = xtext.parse(proto);
     for (Property p : allProperties(root))
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isString_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isString_Test.java
index 595b89b..2965711 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isString_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_isString_Test.java
@@ -15,6 +15,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.Property;
 import com.google.eclipse.protobuf.protobuf.Protobuf;
 
@@ -34,7 +35,7 @@
   }
 
   @Test public void should_return_true_if_property_is_string() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  optional string name = 1;")
          .append("}                          ");
@@ -44,7 +45,7 @@
   }
 
   @Test public void should_return_false_if_property_is_not_string() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  optional bool active = 1;")
          .append("}                          ");
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_typeNameOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_typeNameOf_Test.java
index 1a08d4b..0a1aa33 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_typeNameOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Properties_typeNameOf_Test.java
@@ -15,6 +15,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.Property;
 import com.google.eclipse.protobuf.protobuf.Protobuf;
 
@@ -34,7 +35,7 @@
   }
 
   @Test public void should_return_name_of_scalar() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  optional string name = 1;")
          .append("}                          ");
@@ -44,7 +45,7 @@
   }
 
   @Test public void should_return_name_of_type() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {                  ")
          .append("  optional string name = 1;       ")
          .append("  optional PhoneNumber number = 2;")
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_enumTypeOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_enumTypeOf_Test.java
index 2c3cf12..d6207c4 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_enumTypeOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_enumTypeOf_Test.java
@@ -16,6 +16,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Enum;
 
@@ -35,7 +36,7 @@
   }
 
   @Test public void should_return_enum_if_property_type_is_enum() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("enum PhoneType {              ")
          .append("  MOBILE = 0;                 ")
          .append("  HOME = 1;                   ")
@@ -52,7 +53,7 @@
   }
 
   @Test public void should_return_null_if_property_type_is_not_enum() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  optional string name = 1;")
          .append("}                          ");
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_importsIn_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_importsIn_Test.java
index bc73f66..1fbf47c 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_importsIn_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_importsIn_Test.java
@@ -16,6 +16,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
@@ -34,9 +35,9 @@
   }
 
   @Test public void should_return_all_imports() {
-    StringBuilder proto = new StringBuilder();
-    proto.append("import \"luke.proto\"")
-         .append("import \"leia.proto\"");
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
+    proto.append("import \"luke.proto\";")
+         .append("import \"leia.proto\";");
     Protobuf root = xtext.parse(proto);
     List<Import> allImports = finder.importsIn(root);
     assertThat(allImports.size(), equalTo(2));
@@ -45,7 +46,7 @@
   }
 
   @Test public void should_return_empty_if_no_imports_found() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("enum PhoneType {")
          .append("  MOBILE = 0;   ")
          .append("  HOME = 1;     ")
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_packageOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_packageOf_Test.java
index 92cae55..3ac4bda 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_packageOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_packageOf_Test.java
@@ -17,6 +17,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Package;
 
@@ -36,7 +37,7 @@
   }
 
   @Test public void should_return_package_if_proto_has_one() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("package person.test;    ")
          .append("                        ")
          .append("message Person {        ")
@@ -49,7 +50,7 @@
   }
 
   @Test public void should_return_null_if_proto_does_not_have_package() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {        ")
          .append("  optional int32 id = 1;")
          .append("}                       ");
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_rootOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_rootOf_Test.java
index 4dfd649..475b9e6 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_rootOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_rootOf_Test.java
@@ -16,6 +16,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.Property;
 import com.google.eclipse.protobuf.protobuf.Protobuf;
 
@@ -35,7 +36,7 @@
   }
 
   @Test public void should_return_root_of_proto() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  optional string name = 1;")
          .append("}                          ");
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_scalarTypeOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_scalarTypeOf_Test.java
index 9aa0af3..8b6d071 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_scalarTypeOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/ProtobufElementFinder_scalarTypeOf_Test.java
@@ -16,6 +16,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
@@ -34,7 +35,7 @@
   }
 
   @Test public void should_return_scalar_if_property_type_is_scalar() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {        ")
          .append("  optional int32 id = 1;")
          .append("}                       ");
@@ -45,7 +46,7 @@
   }
 
   @Test public void should_return_null_if_property_type_is_not_scalar() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("enum PhoneType {              ")
          .append("  MOBILE = 0;                 ")
          .append("  HOME = 1;                   ")
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder_matchingCommentNode_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder_matchingCommentNode_Test.java
index faaf723..bbf9db4 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder_matchingCommentNode_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder_matchingCommentNode_Test.java
@@ -9,12 +9,12 @@
 package com.google.eclipse.protobuf.ui.commands;
 
 import static com.google.eclipse.protobuf.junit.util.Finder.findProperty;
-import static com.google.eclipse.protobuf.junit.util.SystemProperties.lineSeparator;
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.hamcrest.core.IsNull.notNullValue;
 import static org.junit.Assert.assertThat;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.*;
 
 import org.eclipse.emf.ecore.EObject;
@@ -39,11 +39,11 @@
   }
   
   @Test public void should_return_matching_single_line_comment_of_element() {
-    StringBuilder proto = new StringBuilder();
-    proto.append("message Person {           ").append(lineSeparator())
-         .append("  // Indicates whether the person is active or not.").append(lineSeparator())
-         .append("  optional bool active = 1;").append(lineSeparator())
-         .append("}                          ");
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
+    proto.append("message Person {                                   ")
+         .append("  // Indicates whether the person is active or not.")
+         .append("  optional bool active = 1;                        ")
+         .append("}                                                  ");
     Protobuf root = xtext.parse(proto);
     Property active = findProperty("active", root);
     INode node = finder.matchingCommentNode(active, Pattern.compile(".*"));
@@ -51,13 +51,13 @@
   }
 
   @Test public void should_return_matching_multi_line_comment_of_element() {
-    StringBuilder proto = new StringBuilder();
-    proto.append("message Person {           ").append(lineSeparator())
-         .append("  /*").append(lineSeparator())
-         .append("   * Indicates whether the person is active or not.").append(lineSeparator())
-         .append("   */").append(lineSeparator())
-         .append("  optional bool active = 1;").append(lineSeparator())
-         .append("}                          ");
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
+    proto.append("message Person {                                   ")
+         .append("  /*                                               ")
+         .append("   * Indicates whether the person is active or not.")
+         .append("   */                                              ")
+         .append("  optional bool active = 1;                        ")
+         .append("}                                                  ");
     Protobuf root = xtext.parse(proto);
     Property active = findProperty("active", root);
     INode node = finder.matchingCommentNode(active, Pattern.compile(".*"));
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider_getDocumentation_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider_getDocumentation_Test.java
index 99d5a9b..fa4c7f5 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider_getDocumentation_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/documentation/SingleLineCommentDocumentationProvider_getDocumentation_Test.java
@@ -9,11 +9,11 @@
 package com.google.eclipse.protobuf.ui.documentation;
 
 import static com.google.eclipse.protobuf.junit.util.Finder.findProperty;
-import static com.google.eclipse.protobuf.junit.util.SystemProperties.lineSeparator;
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertThat;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.*;
 
 import org.eclipse.emf.ecore.EObject;
@@ -35,11 +35,11 @@
   }
   
   @Test public void should_return_single_line_comment_of_element() {
-    StringBuilder proto = new StringBuilder();
-    proto.append("message Person {           ").append(lineSeparator())
-         .append("  // Indicates whether the person is active or not.").append(lineSeparator())
-         .append("  optional bool active = 1;").append(lineSeparator())
-         .append("}                          ");
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
+    proto.append("message Person {                                   ")
+         .append("  // Indicates whether the person is active or not.")
+         .append("  optional bool active = 1;                        ")
+         .append("}                                                  ");
     Protobuf root = xtext.parse(proto);
     Property active = findProperty("active", root);
     String documentation = provider.getDocumentation(active);
@@ -47,7 +47,7 @@
   }
   
   @Test public void should_return_empty_String_if_element_does_not_have_single_line_comment() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  optional bool active = 1;")
          .append("}                          ");
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Fields_calculateTagNumberOf_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Fields_calculateTagNumberOf_Test.java
index c117191..a045b1d 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Fields_calculateTagNumberOf_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Fields_calculateTagNumberOf_Test.java
@@ -15,6 +15,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
@@ -33,7 +34,7 @@
   }
 
   @Test public void should_return_one_for_first_and_only_property() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  required string name = 2;")
          .append("}                          ");
@@ -44,7 +45,7 @@
   }
 
   @Test public void should_return_max_tag_number_value_plus_one_for_new_property() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("message Person {           ")
          .append("  required string name = 6;")
          .append("  required int32 id = 8;   ")
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Literals_calculateIndexOf_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Literals_calculateIndexOf_Test.java
index 29b8c9c..be5b537 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Literals_calculateIndexOf_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Literals_calculateIndexOf_Test.java
@@ -15,6 +15,7 @@
 import org.junit.*;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.junit.util.MultiLineTextBuilder;
 import com.google.eclipse.protobuf.protobuf.Literal;
 import com.google.eclipse.protobuf.protobuf.Protobuf;
 
@@ -34,7 +35,7 @@
   }
 
   @Test public void should_return_zero_for_first_and_only_literal() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("enum PhoneType {")
          .append("  MOBILE = 1;   ")
          .append("}               ");
@@ -45,7 +46,7 @@
   }
 
   @Test public void should_return_max_index_value_plus_one_for_new_literal() {
-    StringBuilder proto = new StringBuilder();
+    MultiLineTextBuilder proto = new MultiLineTextBuilder();
     proto.append("enum PhoneType {")
          .append("  MOBILE = 1;   ")
          .append("  HOME = 5;     ")
