Developement in master branch is tied to Eclipse 3.8 and Xtext 2.3.
diff --git a/com.google.eclipse.protobuf.feature/feature.xml b/com.google.eclipse.protobuf.feature/feature.xml
index 9d13594..b9ca702 100644
--- a/com.google.eclipse.protobuf.feature/feature.xml
+++ b/com.google.eclipse.protobuf.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="com.google.eclipse.protobuf"
       label="%featureName"
-      version="1.2.5.qualifier"
+      version="1.3.1.qualifier"
       provider-name="%providerName">
 
    <description url="https://code.google.com/p/protobuf-dt/">
@@ -22,7 +22,6 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.xtext" version="2.2.1" match="greaterOrEqual"/>
       <import plugin="org.eclipse.xtext.util"/>
       <import plugin="org.eclipse.emf.ecore"/>
       <import plugin="org.eclipse.emf.common"/>
@@ -30,7 +29,6 @@
       <import plugin="org.eclipse.core.runtime" version="3.7.0" match="greaterOrEqual"/>
       <import plugin="org.apache.log4j"/>
       <import plugin="org.apache.commons.logging"/>
-      <import plugin="org.eclipse.xtext.ui"/>
       <import plugin="org.eclipse.ui.editors" version="3.7.0" match="greaterOrEqual"/>
       <import plugin="org.eclipse.ui.ide" version="3.7.0" match="greaterOrEqual"/>
       <import plugin="org.eclipse.xtext.ui.shared"/>
@@ -43,6 +41,8 @@
       <import plugin="org.eclipse.compare.core" version="3.5.200" match="greaterOrEqual"/>
       <import plugin="org.eclipse.ui.console" version="3.5.100" match="greaterOrEqual"/>
       <import plugin="org.eclipse.ui.workbench.texteditor"/>
+      <import plugin="org.eclipse.xtext" version="2.3.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.xtext.ui" version="2.3.0" match="greaterOrEqual"/>
    </requires>
 
    <plugin
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/resources/FileStub.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/resources/FileStub.java
index d1c59ee..b118d40 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/resources/FileStub.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/resources/FileStub.java
@@ -543,4 +543,9 @@
     }
     markers.add(marker);
   }
+
+  /** {@inheritDoc} */
+  @Override public void accept(IResourceProxyVisitor visitor, int depth, int memberFlags) throws CoreException {
+    throw new UnsupportedOperationException();
+  }
 }
diff --git a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlinking_Test.java b/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlinking_Test.java
index 61636dd..ad7e51c 100644
--- a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlinking_Test.java
+++ b/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlinking_Test.java
@@ -13,7 +13,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEclipseEditor;
 import org.junit.*;
-import org.junit.rules.TemporaryFolder;
 
 import com.google.eclipse.protobuf.ui.junit.CommentReaderRule;
 import com.google.eclipse.protobuf.ui.swtbot.ProtobufBot;
@@ -33,7 +32,6 @@
   }
 
   @Rule public CommentReaderRule commentReader = new CommentReaderRule();
-  @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder();
 
   // import 'google/protobuf/descriptor.proto';
   @Test public void should_open_file_in_plugIn() throws InterruptedException {
@@ -45,6 +43,8 @@
 
   private void navigateToImportedFile(SWTBotEclipseEditor editor) {
     editor.navigateTo(0, 10);
+    // for "F3" to work on Mac OS, go to "System Preferences" > "Keyboard" and ensure
+    // "Use all F1, F2, etc keys as standard function keys" is checked
     editor.pressShortcut(F3);
   }
 }
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/protoc/output/ProtocMarkerFactory_createErrorIfNecessary_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/protoc/output/ProtocMarkerFactory_createErrorIfNecessary_Test.java
index 4f52d6a..c3fe98e 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/protoc/output/ProtocMarkerFactory_createErrorIfNecessary_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/protoc/output/ProtocMarkerFactory_createErrorIfNecessary_Test.java
@@ -9,7 +9,7 @@
 package com.google.eclipse.protobuf.ui.protoc.output;
 
 import static com.google.eclipse.protobuf.junit.stubs.resources.MarkerStub.error;
-import static com.google.eclipse.protobuf.ui.validation.ProtobufResourceUIValidatorExtension.EDITOR_CHECK;
+import static com.google.eclipse.protobuf.ui.validation.MarkerTypes.EDITOR_CHECK;
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertThat;
 
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension_createMarkers_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension_createMarkers_Test.java
deleted file mode 100644
index dc74956..0000000
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension_createMarkers_Test.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.ui.validation;
-
-import static com.google.common.collect.Lists.newArrayList;
-import static com.google.eclipse.protobuf.ui.validation.ProtobufResourceUIValidatorExtension.EDITOR_CHECK;
-import static org.mockito.Mockito.*;
-
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.*;
-import org.eclipse.xtext.ui.editor.validation.MarkerCreator;
-import org.eclipse.xtext.validation.Issue;
-import org.junit.*;
-
-/**
- * Tests for <code>{@link ProtobufResourceUIValidatorExtension#createMarkers(IFile, List, IProgressMonitor)}</code>
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class ProtobufResourceUIValidatorExtension_createMarkers_Test {
-  private static IFile file;
-  private static List<Issue> issues;
-  private static IProgressMonitor monitor;
-
-  @BeforeClass public static void setUpOnce() {
-    file = mock(IFile.class);
-    issues = newArrayList(mock(Issue.class), mock(Issue.class));
-    monitor = mock(IProgressMonitor.class);
-  }
-
-  private MarkerCreator markerCreator;
-  private ProtobufResourceUIValidatorExtension validator;
-
-  @Before public void setUp() {
-    markerCreator = mock(MarkerCreator.class);
-    validator = new ProtobufResourceUIValidatorExtension();
-    validator.markerCreator = markerCreator;
-  }
-
-  @Test public void should_create_markers_using_proto_editor_marker_type() throws CoreException {
-    validator.createMarkers(file, issues, monitor);
-    for (Issue issue : issues) {
-      verify(markerCreator).createMarker(issue, file, EDITOR_CHECK);
-    }
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension_deleteMarkers_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension_deleteMarkers_Test.java
deleted file mode 100644
index 67faf47..0000000
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension_deleteMarkers_Test.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.ui.validation;
-
-import static com.google.eclipse.protobuf.ui.validation.ProtobufResourceUIValidatorExtension.EDITOR_CHECK;
-import static org.eclipse.core.resources.IResource.DEPTH_ZERO;
-import static org.eclipse.xtext.ui.MarkerTypes.*;
-import static org.mockito.Mockito.*;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.*;
-import org.eclipse.xtext.validation.CheckMode;
-import org.junit.*;
-
-/**
- * Tests for <code>{@link ProtobufResourceUIValidatorExtension#deleteMarkers(IFile, CheckMode, IProgressMonitor)}</code>.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class ProtobufResourceUIValidatorExtension_deleteMarkers_Test {
-  private static CheckMode checkMode;
-  private static IProgressMonitor monitor;
-
-  @BeforeClass public static void setUpOnce() {
-    checkMode = mock(CheckMode.class);
-    monitor = mock(IProgressMonitor.class);
-  }
-
-  private IFile file;
-  private ProtobufResourceUIValidatorExtension validator;
-
-  @Before public void setUp() {
-    file = mock(IFile.class);
-    validator = new ProtobufResourceUIValidatorExtension();
-  }
-
-  @Test public void should_delete_all_xtext_and_protocol_buffer_editor_markers() throws CoreException {
-    validator.deleteMarkers(file, checkMode, monitor);
-    verifyDeletionOfMarkers(FAST_VALIDATION, NORMAL_VALIDATION, EDITOR_CHECK);
-  }
-
-  private void verifyDeletionOfMarkers(String...markerTypes) throws CoreException {
-    for (String markerType : markerTypes) {
-      verify(file).deleteMarkers(markerType, true, DEPTH_ZERO);
-    }
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF
index 646b74f..fd56229 100644
--- a/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF
+++ b/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: %Bundle-Name

 Bundle-Vendor: %Bundle-Vendor

-Bundle-Version: 1.2.5.qualifier

+Bundle-Version: 1.3.1.qualifier

 Bundle-SymbolicName: com.google.eclipse.protobuf.ui; singleton:=true

 Bundle-ActivationPolicy: lazy

 Require-Bundle: com.google.eclipse.protobuf;visibility:=reexport,

- org.eclipse.xtext.ui,

+ org.eclipse.xtext.ui;bundle-version="2.3.0",

  org.eclipse.ui.editors;bundle-version="3.7.0",

  org.eclipse.ui.ide;bundle-version="3.7.0",

  org.eclipse.xtext.ui.shared,

@@ -17,9 +17,9 @@
  com.ibm.icu,

  org.eclipse.emf.databinding,

  org.eclipse.core.resources,

- org.eclipse.core.filesystem;bundle-version="1.3.100",

- org.eclipse.compare.core;bundle-version="3.5.200",

- org.eclipse.ui.console;bundle-version="3.5.100"

+ org.eclipse.core.filesystem,

+ org.eclipse.compare.core,

+ org.eclipse.ui.console

 Import-Package: org.apache.commons.logging,

  org.apache.log4j,

  org.eclipse.ui.texteditor.spelling

diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
index 003ef12..98b870a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
@@ -13,7 +13,6 @@
 import static org.eclipse.ui.PlatformUI.isWorkbenchRunning;
 
 import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
-import org.eclipse.jface.text.reconciler.IReconciler;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
@@ -25,9 +24,8 @@
 import org.eclipse.xtext.ui.editor.model.XtextDocumentProvider;
 import org.eclipse.xtext.ui.editor.outline.actions.IOutlineContribution;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
-import org.eclipse.xtext.ui.editor.quickfix.XtextQuickAssistProcessor;
 import org.eclipse.xtext.ui.editor.syntaxcoloring.*;
-import org.eclipse.xtext.ui.validation.IResourceUIValidatorExtension;
+import org.eclipse.xtext.ui.validation.MarkerTypeProvider;
 
 import com.google.eclipse.protobuf.resource.IResourceVerifier;
 import com.google.eclipse.protobuf.scoping.IFileUriResolver;
@@ -36,7 +34,6 @@
 import com.google.eclipse.protobuf.ui.editor.*;
 import com.google.eclipse.protobuf.ui.editor.hyperlinking.ProtobufHyperlinkDetector;
 import com.google.eclipse.protobuf.ui.editor.model.ProtobufDocumentProvider;
-import com.google.eclipse.protobuf.ui.editor.spelling.ProtobufReconciler;
 import com.google.eclipse.protobuf.ui.editor.syntaxcoloring.*;
 import com.google.eclipse.protobuf.ui.internal.ProtobufActivator;
 import com.google.eclipse.protobuf.ui.outline.*;
@@ -48,7 +45,6 @@
 import com.google.eclipse.protobuf.ui.preferences.general.GeneralPreferences;
 import com.google.eclipse.protobuf.ui.preferences.misc.MiscellaneousPreferences;
 import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
-import com.google.eclipse.protobuf.ui.quickfix.ProtobufQuickAssistProcessor;
 import com.google.eclipse.protobuf.ui.resource.*;
 import com.google.eclipse.protobuf.ui.scoping.FileUriResolver;
 import com.google.eclipse.protobuf.ui.validation.*;
@@ -89,10 +85,6 @@
     return PreferenceDrivenProtobufParser.class;
   }
 
-  @Override public Class<? extends IReconciler> bindIReconciler() {
-    return ProtobufReconciler.class;
-  }
-
   public Class<? extends IResourceServiceProvider> bindIResourceServiceProvider() {
     return ProtobufServiceProvider.class;
   }
@@ -101,10 +93,6 @@
     return ResourceVerifier.class;
   }
 
-  public Class<? extends IResourceUIValidatorExtension> bindIResourceUIValidatorExtension() {
-    return ProtobufResourceUIValidatorExtension.class;
-  }
-
   public Class<? extends ISemanticHighlightingCalculator> bindISemanticHighlightingCalculator() {
     return ProtobufSemanticHighlightingCalculator.class;
   }
@@ -113,12 +101,12 @@
     return AutoAddNatureEditorCallback.class;
   }
 
-  public Class<? extends XtextDocumentProvider> bindXtextDocumentProvider() {
-    return ProtobufDocumentProvider.class;
+  @Override public Class<? extends MarkerTypeProvider> bindMarkerTypeProvider() {
+    return ProtobufMarkerTypeProvider.class;
   }
 
-  public Class<? extends XtextQuickAssistProcessor> bindXtextQuickAssistProcessor(){
-    return ProtobufQuickAssistProcessor.class;
+  public Class<? extends XtextDocumentProvider> bindXtextDocumentProvider() {
+    return ProtobufDocumentProvider.class;
   }
 
   public void configureFileOutsideWorkspaceIconUpdater(Binder binder) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconcileStrategy.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconcileStrategy.java
deleted file mode 100644
index 949f840..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconcileStrategy.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.ui.editor.spelling;
-
-import org.eclipse.jface.text.*;
-import org.eclipse.jface.text.reconciler.DirtyRegion;
-import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.ui.texteditor.spelling.SpellingService;
-import org.eclipse.xtext.ui.editor.reconciler.XtextDocumentReconcileStrategy;
-
-import com.google.eclipse.protobuf.model.util.INodes;
-import com.google.inject.Inject;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class ProtobufReconcileStrategy extends XtextDocumentReconcileStrategy {
-  private ProtobufSpelling spellingStrategy;
-
-  @Inject private INodes nodes;
-
-  @Override public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) {
-    super.reconcile(dirtyRegion, subRegion);
-    if (spellingStrategy == null) {
-      return;
-    }
-    spellingStrategy.reconcile(dirtyRegion, subRegion);
-  }
-
-  @Override public void reconcile(IRegion subRegion) {
-    super.reconcile(subRegion);
-    initialReconcile();
-  }
-
-  @Override public void setDocument(IDocument document) {
-    super.setDocument(document);
-    if (spellingStrategy == null) {
-      return;
-    }
-    spellingStrategy.setDocument(document);
-    initialReconcile();
-  }
-
-  private void initialReconcile() {
-    if (spellingStrategy == null) {
-      return;
-    }
-    spellingStrategy.initialReconcile();
-  }
-
-  void addSpellSupport(ISourceViewer viewer, SpellingService spellingService) {
-    if (spellingStrategy != null) {
-      return;
-    }
-    spellingStrategy = new ProtobufSpelling(viewer, spellingService, nodes);
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconciler.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconciler.java
deleted file mode 100644
index 0b4a145..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconciler.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.ui.editor.spelling;
-
-import static org.eclipse.ui.editors.text.EditorsUI.getSpellingService;
-
-import org.eclipse.jface.text.ITextViewer;
-import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.xtext.ui.editor.reconciler.XtextReconciler;
-
-import com.google.inject.Inject;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class ProtobufReconciler extends XtextReconciler {
-  private boolean installed;
-
-  @Inject public ProtobufReconciler(ProtobufReconcileStrategy strategy) {
-    super(strategy);
-  }
-
-  @Override public void install(ITextViewer textViewer) {
-    if (installed) {
-      return;
-    }
-    super.install(textViewer);
-    if (textViewer instanceof ISourceViewer) {
-      ISourceViewer viewer = (ISourceViewer) textViewer;
-      ProtobufReconcileStrategy strategy = (ProtobufReconcileStrategy) getReconcilingStrategy("");
-      strategy.addSpellSupport(viewer, getSpellingService());
-    }
-    installed = true;
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java
deleted file mode 100644
index 14bdda8..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.ui.editor.spelling;
-
-import static org.eclipse.xtext.nodemodel.util.NodeModelUtils.*;
-
-import java.util.Iterator;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.text.*;
-import org.eclipse.jface.text.source.*;
-import org.eclipse.ui.texteditor.spelling.*;
-import org.eclipse.xtext.nodemodel.*;
-import org.eclipse.xtext.parser.IParseResult;
-import org.eclipse.xtext.resource.XtextResource;
-import org.eclipse.xtext.ui.editor.model.XtextDocument;
-import org.eclipse.xtext.util.concurrent.IUnitOfWork;
-
-import com.google.eclipse.protobuf.model.util.INodes;
-import com.google.eclipse.protobuf.protobuf.Import;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class ProtobufSpelling extends SpellingReconcileStrategy {
-  private final INodes nodes;
-
-  ProtobufSpelling(ISourceViewer viewer, SpellingService spellingService, INodes nodes) {
-    super(viewer, spellingService);
-    this.nodes = nodes;
-  }
-
-  @Override public void setDocument(IDocument document) {
-    super.setDocument(document);
-  }
-
-  @Override public void reconcile(IRegion region) {
-    IAnnotationModel model = getAnnotationModel();
-    if (model == null) {
-      return;
-    }
-    super.reconcile(new Region(0, xtextDocument().getLength()));
-    removeUnwantedAnnotations(model);
-  }
-
-  private void removeUnwantedAnnotations(final IAnnotationModel model) {
-    xtextDocument().readOnly(new IUnitOfWork.Void<XtextResource>() {
-      @Override public void process(XtextResource resource) throws Exception {
-        IParseResult parseResult = resource.getParseResult();
-        if (parseResult != null) {
-          removeUnwantedAnnotations(parseResult.getRootNode(), model);
-        }
-      }
-    });
-  }
-
-  private XtextDocument xtextDocument() {
-    return (XtextDocument) super.getDocument();
-  }
-
-  @SuppressWarnings("unchecked")
-  private void removeUnwantedAnnotations(INode rootNode, IAnnotationModel model) {
-    Iterator<Annotation> iterator = model.getAnnotationIterator();
-    while (iterator.hasNext()) {
-      Annotation annotation = iterator.next();
-      if (shouldRemoveFromModel(annotation, model, rootNode)) {
-        model.removeAnnotation(annotation);
-      }
-    }
-  }
-
-  private boolean shouldRemoveFromModel(Annotation annotation, IAnnotationModel model, INode rootNode) {
-    if (!(annotation instanceof SpellingAnnotation)) {
-      return false;
-    }
-    SpellingAnnotation spellingAnnotation = (SpellingAnnotation) annotation;
-    Position position = model.getPosition(spellingAnnotation);
-    ILeafNode node = findLeafNodeAtOffset(rootNode, position.getOffset());
-    return !shouldSpellCheck(node);
-  }
-
-  private boolean shouldSpellCheck(INode node) {
-    if (node == null) {
-      return false;
-    }
-    if (nodes.isComment(node)) {
-      return true;
-    }
-    if (nodes.isString(node)) {
-      EObject o = findActualSemanticObjectFor(node);
-      return !(o instanceof Import);
-    }
-    return false;
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/output/ProtocMarkerFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/output/ProtocMarkerFactory.java
index 58f2af2..2b5e833 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/output/ProtocMarkerFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/output/ProtocMarkerFactory.java
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.ui.protoc.output;
 
-import static com.google.eclipse.protobuf.ui.validation.ProtobufResourceUIValidatorExtension.EDITOR_CHECK;
+import static com.google.eclipse.protobuf.ui.validation.MarkerTypes.*;
 import static org.eclipse.core.resources.IMarker.*;
 import static org.eclipse.core.resources.IResource.DEPTH_INFINITE;
 
@@ -21,8 +21,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtocMarkerFactory {
-  private static final String PROTOC_CHECK = "com.google.eclipse.protobuf.ui.protocMarker";
-
   private final IFile protoFile;
   private final IMarker[] markers;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickAssistProcessor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickAssistProcessor.java
deleted file mode 100644
index 2b4296b..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickAssistProcessor.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.ui.quickfix;
-
-import static com.google.common.collect.Lists.newArrayList;
-import static java.util.Collections.emptyList;
-
-import java.util.List;
-
-import org.eclipse.jface.text.contentassist.ICompletionProposal;
-import org.eclipse.jface.text.quickassist.IQuickAssistInvocationContext;
-import org.eclipse.ui.texteditor.spelling.SpellingCorrectionProcessor;
-import org.eclipse.xtext.ui.editor.quickfix.XtextQuickAssistProcessor;
-
-import com.google.inject.Inject;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class ProtobufQuickAssistProcessor extends XtextQuickAssistProcessor {
-  @Inject private SpellingCorrectionProcessor spellingCorrectionProcessor;
-
-  @Override public ICompletionProposal[] computeQuickAssistProposals(IQuickAssistInvocationContext context) {
-    List<ICompletionProposal> proposals = newArrayList();
-    proposals.addAll(spellingFixes(context));
-    proposals.addAll(newArrayList(super.computeQuickAssistProposals(context)));
-    return proposals.toArray(new ICompletionProposal[proposals.size()]);
-  }
-
-  private List<ICompletionProposal> spellingFixes(IQuickAssistInvocationContext context) {
-    ICompletionProposal[] spellingFixes = spellingCorrectionProcessor.computeQuickAssistProposals(context);
-    if (spellingFixes.length == 0) {
-      return emptyList();
-    }
-    if (spellingFixes.length == 1 && isNoCompletionsProposal(spellingFixes[0])) {
-      return emptyList();
-    }
-    return newArrayList(spellingFixes);
-  }
-
-  private boolean isNoCompletionsProposal(ICompletionProposal p) {
-    return p.getClass().getSimpleName().equals("NoCompletionsProposal");
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/MarkerTypes.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/MarkerTypes.java
new file mode 100644
index 0000000..20b3937
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/MarkerTypes.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2012 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.ui.validation;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public final class MarkerTypes {
+  public static final String EDITOR_CHECK = "com.google.eclipse.protobuf.ui.editorMarker";
+  public static final String PROTOC_CHECK = "com.google.eclipse.protobuf.ui.protocMarker";
+
+  private MarkerTypes() {}
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufMarkerTypeProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufMarkerTypeProvider.java
new file mode 100644
index 0000000..230dcfe
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufMarkerTypeProvider.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2012 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.ui.validation;
+
+import static com.google.eclipse.protobuf.ui.validation.MarkerTypes.EDITOR_CHECK;
+
+import org.eclipse.xtext.ui.validation.MarkerTypeProvider;
+import org.eclipse.xtext.validation.Issue;
+
+import com.google.inject.Singleton;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@Singleton
+public class ProtobufMarkerTypeProvider extends MarkerTypeProvider {
+  @Override public String getMarkerType(Issue issue) {
+    return EDITOR_CHECK;
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension.java
deleted file mode 100644
index 621d9a6..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.ui.validation;
-
-import static org.eclipse.core.resources.IResource.DEPTH_ZERO;
-
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.*;
-import org.eclipse.xtext.ui.editor.validation.MarkerCreator;
-import org.eclipse.xtext.ui.validation.DefaultResourceUIValidatorExtension;
-import org.eclipse.xtext.validation.*;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.inject.Inject;
-
-/**
- * Creates/deletes markers of type "Protocol Buffer Problem" instead of the default "Xtext Check."
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class ProtobufResourceUIValidatorExtension extends DefaultResourceUIValidatorExtension {
-  public static final String EDITOR_CHECK = "com.google.eclipse.protobuf.ui.editorMarker";
-
-  @VisibleForTesting @Inject MarkerCreator markerCreator;
-
-  @Override protected void createMarkers(IFile file, List<Issue> list, IProgressMonitor monitor) throws CoreException {
-    for (Issue issue : list) {
-      markerCreator.createMarker(issue, file, EDITOR_CHECK);
-    }
-  }
-
-  @Override protected void deleteMarkers(IFile file, CheckMode checkMode, IProgressMonitor monitor)
-      throws CoreException {
-    super.deleteMarkers(file, checkMode, monitor);
-    file.deleteMarkers(EDITOR_CHECK, true, DEPTH_ZERO);
-  }
-}
diff --git a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
index 70bcaf1..400a480 100644
--- a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
+++ b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
@@ -3,10 +3,10 @@
 Eclipse-ExtensibleAPI: true

 Bundle-Name: %Bundle-Name

 Bundle-Vendor: %Bundle-Vendor

-Bundle-Version: 1.2.5.qualifier

+Bundle-Version: 1.3.1.qualifier

 Bundle-SymbolicName: com.google.eclipse.protobuf; singleton:=true

 Bundle-ActivationPolicy: lazy

-Require-Bundle: org.eclipse.xtext;bundle-version="2.2.1",

+Require-Bundle: org.eclipse.xtext;bundle-version="2.3.0",

  org.eclipse.xtext.generator;resolution:=optional,

  org.eclipse.emf.codegen.ecore;resolution:=optional,

  org.eclipse.emf.mwe.utils;resolution:=optional,