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 be09d33..455003e 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
@@ -140,11 +140,7 @@
 
   private ContentToInsert newContent(Literal literal) {
     INode indexNode = nodes.firstNodeForFeature(literal, LITERAL__INDEX);
-    ContentToInsert content = newContent(indexNode);
-    if (content.equals(ContentToInsert.TAG_NUMBER_INSERTED)) {
-      literal.setIndex(-1); // reset to make at semicolon work when new index is zero (TODO fix bug.)
-    }
-    return content;
+    return newContent(indexNode);
   }
 
   private ContentToInsert newContent(MessageField field) {
@@ -204,7 +200,6 @@
       this.location = location;
     }
 
-    /** {@inheritDoc} */
     @Override public String toString() {
       return String.format("ContentToInsert [value=%s, location=%s]", value, location);
     }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ExtendedGenerator.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ExtendedGenerator.java
index b14a3c0..458741b 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ExtendedGenerator.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ExtendedGenerator.java
@@ -20,14 +20,18 @@
 @SuppressWarnings("restriction")
 public class ExtendedGenerator extends Generator {
   public ExtendedGenerator() {
-    new XtextStandaloneSetup() {
-      @Override public Injector createInjector() {
-        return Guice.createInjector(new XtextRuntimeModule() {
-            @Override public Class<? extends IXtext2EcorePostProcessor> bindIXtext2EcorePostProcessor() {
-              return ProtobufEcorePostProcessor.class;
-          }
-        });
-      }
-    }.createInjectorAndDoEMFRegistration();
+    new XtextStandaloneSetupExtension().createInjectorAndDoEMFRegistration();
+  }
+  
+  private static class XtextStandaloneSetupExtension extends XtextStandaloneSetup {
+    @Override public Injector createInjector() {
+      return Guice.createInjector(new XtextRuntimeModuleExtension());
+    }
+  }
+  
+  private static class XtextRuntimeModuleExtension extends XtextRuntimeModule {
+    @Override public Class<? extends IXtext2EcorePostProcessor> bindIXtext2EcorePostProcessor() {
+      return ProtobufEcorePostProcessor.class;
+    }
   }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufEcorePostProcessor.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufEcorePostProcessor.java
index cda0500..d0d9ea1 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufEcorePostProcessor.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufEcorePostProcessor.java
@@ -22,12 +22,12 @@
     EPackage p = metamodel.getEPackage();
     for (EClassifier c : p.getEClassifiers()) {
       if (c instanceof EClass && "Literal".equals(c.getName())) {
-        setDefaultValueOfIndexInLiteral((EClass) c);
+        processLiteralClass((EClass) c);
       }
     }
   }
 
-  private void setDefaultValueOfIndexInLiteral(EClass c) {
+  private void processLiteralClass(EClass c) {
     for (EAttribute a : c.getEAllAttributes()) {
       if ("index".equals(a.getName())) {
         a.setDefaultValue(-1L);
