diff --git a/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF
index 3cea5df..851a715 100644
--- a/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF
+++ b/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
-Bundle-Version: 1.2.2.qualifier
+Bundle-Version: 1.2.3.qualifier
 Bundle-SymbolicName: com.google.eclipse.protobuf.ui; singleton:=true
 Bundle-ActivationPolicy: lazy
 Require-Bundle: com.google.eclipse.protobuf;visibility:=reexport,
diff --git a/com.google.eclipse.protobuf.ui/plugin.xml b/com.google.eclipse.protobuf.ui/plugin.xml
index 54a8999..f2fcf19 100644
--- a/com.google.eclipse.protobuf.ui/plugin.xml
+++ b/com.google.eclipse.protobuf.ui/plugin.xml
@@ -296,4 +296,10 @@
       </command>
     </menuContribution>
   </extension>
-</plugin>
\ No newline at end of file
+  <extension
+        point="org.eclipse.xtext.ui.shared.overridingGuiceModule">
+     <module
+           class="com.google.eclipse.protobuf.ui.ProtobufSharedModule">
+     </module>
+  </extension>
+</plugin>
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufSharedModule.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufSharedModule.java
new file mode 100644
index 0000000..9b58bd0
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufSharedModule.java
@@ -0,0 +1,90 @@
+/*
+ * 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;
+
+import com.google.eclipse.protobuf.ui.builder.ProtobufBuilderState;
+import com.google.inject.*;
+import com.google.inject.name.Names;
+
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.ui.*;
+import org.eclipse.xtext.builder.builderState.IBuilderState;
+import org.eclipse.xtext.builder.clustering.ClusteringBuilderState;
+import org.eclipse.xtext.builder.impl.*;
+import org.eclipse.xtext.builder.resourceloader.*;
+import org.eclipse.xtext.resource.*;
+import org.eclipse.xtext.ui.editor.*;
+import org.eclipse.xtext.ui.notification.*;
+import org.eclipse.xtext.ui.resource.*;
+import org.eclipse.xtext.ui.shared.JdtHelper;
+import org.eclipse.xtext.ui.shared.internal.SharedModule;
+import org.eclipse.xtext.ui.util.IJdtHelper;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@SuppressWarnings("restriction")
+public class ProtobufSharedModule extends SharedModule {
+
+  @Override protected void configure() {
+    bind(IBuilderState.class).to(ProtobufBuilderState.class).in(Scopes.SINGLETON);
+    bind(IResourceDescriptions.class).to(DirtyStateAwareResourceDescriptions.class).in(Scopes.SINGLETON);
+    bind(IResourceServiceProvider.Registry.class).toInstance(IResourceServiceProvider.Registry.INSTANCE);
+    bind(IResourceSetProvider.class).to(SimpleResourceSetProvider.class);
+    bind(IExtensionRegistry.class).toInstance(Platform.getExtensionRegistry());
+    bind(IResourceChangeListener.class).annotatedWith(Names.named(ProjectOpenedOrClosedListener.class.getName()))
+        .to(ProjectOpenedOrClosedListener.class);
+
+    bind(IExternalContentSupport.IExternalContentProvider.class).to(IDirtyStateManager.class).in(Scopes.SINGLETON);
+    bind(IDirtyStateManager.class).to(DirtyStateManager.class).in(Scopes.SINGLETON);
+    bind(IStateChangeEventBroker.class).to(StateChangeEventBroker.class).in(Scopes.SINGLETON);
+
+    bind(IncrementalProjectBuilder.class).to(XtextBuilder.class);
+    bind(IStorage2UriMapper.class).to(Storage2UriMapperImpl.class).in(Scopes.SINGLETON);
+
+    bind(IWorkbench.class).toProvider(new Provider<IWorkbench>() {
+      @Override public IWorkbench get() {
+        if (PlatformUI.isWorkbenchRunning()) {
+          return PlatformUI.getWorkbench();
+        }
+        return null;
+      }
+    });
+
+    bind(IWorkspace.class).toProvider(new Provider<IWorkspace>() {
+      @Override public IWorkspace get() {
+        return ResourcesPlugin.getWorkspace();
+      }
+    });
+
+    bind(IJdtHelper.class).to(JdtHelper.class).asEagerSingleton();
+
+    boolean parallel = false;
+    if (parallel) {
+      bind(IResourceLoader.class).toProvider(ResourceLoaderProviders.getParallelLoader());
+
+      bind(IResourceLoader.class).annotatedWith(Names.named(ClusteringBuilderState.RESOURCELOADER_GLOBAL_INDEX))
+          .toProvider(ResourceLoaderProviders.getParallelLoader());
+
+      bind(IResourceLoader.class).annotatedWith(Names.named(ClusteringBuilderState.RESOURCELOADER_CROSS_LINKING))
+          .toProvider(ResourceLoaderProviders.getParallelLoader());
+    } else {
+      bind(IResourceLoader.class).toProvider(ResourceLoaderProviders.getSerialLoader());
+
+      bind(IResourceLoader.class).annotatedWith(Names.named(ClusteringBuilderState.RESOURCELOADER_GLOBAL_INDEX))
+          .toProvider(ResourceLoaderProviders.getSerialLoader());
+
+      bind(IResourceLoader.class).annotatedWith(Names.named(ClusteringBuilderState.RESOURCELOADER_CROSS_LINKING))
+          .toProvider(ResourceLoaderProviders.getSerialLoader());
+    }
+
+  }
+}
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 c69af20..0edc76c 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
@@ -12,37 +12,16 @@
 import static com.google.inject.name.Names.named;
 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;
-import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;
-import org.eclipse.xtext.parser.IParser;
-import org.eclipse.xtext.ui.LanguageSpecific;
-import org.eclipse.xtext.ui.editor.IURIEditorOpener;
-import org.eclipse.xtext.ui.editor.IXtextEditorCallback;
-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.IHighlightingConfiguration;
-import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator;
-import org.eclipse.xtext.ui.validation.IResourceUIValidatorExtension;
-
 import com.google.eclipse.protobuf.scoping.IFileUriResolver;
 import com.google.eclipse.protobuf.ui.builder.nature.AutoAddNatureEditorCallback;
 import com.google.eclipse.protobuf.ui.documentation.ProtobufDocumentationProvider;
-import com.google.eclipse.protobuf.ui.editor.FileOutsideWorkspaceIconUpdater;
-import com.google.eclipse.protobuf.ui.editor.ProtobufUriEditorOpener;
+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.HighlightingConfiguration;
-import com.google.eclipse.protobuf.ui.editor.syntaxcoloring.ProtobufSemanticHighlightingCalculator;
+import com.google.eclipse.protobuf.ui.editor.syntaxcoloring.*;
 import com.google.eclipse.protobuf.ui.internal.ProtobufActivator;
-import com.google.eclipse.protobuf.ui.outline.LinkWithEditor;
-import com.google.eclipse.protobuf.ui.outline.ProtobufOutlinePage;
+import com.google.eclipse.protobuf.ui.outline.*;
 import com.google.eclipse.protobuf.ui.parser.PreferenceDrivenProtobufParser;
 import com.google.eclipse.protobuf.ui.preferences.compiler.core.CompilerPreferenceStoreInitializer;
 import com.google.eclipse.protobuf.ui.preferences.editor.numerictag.core.NumericTagPreferenceStoreInitializer;
@@ -52,10 +31,25 @@
 import com.google.eclipse.protobuf.ui.preferences.paths.core.PathsPreferenceStoreInitializer;
 import com.google.eclipse.protobuf.ui.quickfix.ProtobufQuickAssistProcessor;
 import com.google.eclipse.protobuf.ui.scoping.FileUriResolver;
-import com.google.eclipse.protobuf.ui.validation.ProtobufResourceUIValidatorExtension;
-import com.google.eclipse.protobuf.ui.validation.ValidateFileOnActivation;
+import com.google.eclipse.protobuf.ui.validation.*;
 import com.google.inject.Binder;
 
+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;
+import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;
+import org.eclipse.xtext.parser.IParser;
+import org.eclipse.xtext.ui.LanguageSpecific;
+import org.eclipse.xtext.ui.editor.*;
+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;
+
 /**
  * Use this class to register components to be used within the IDE.
  *
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/resourceloader/ProtobufResourceLoaderProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/resourceloader/ProtobufResourceLoaderProvider.java
new file mode 100644
index 0000000..abb82e9
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/resourceloader/ProtobufResourceLoaderProvider.java
@@ -0,0 +1,22 @@
+/*
+ * 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.builder.nature.resourceloader;
+
+import org.eclipse.xtext.builder.resourceloader.*;
+import org.eclipse.xtext.builder.resourceloader.ResourceLoaderProviders.AbstractResourceLoaderProvider;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@SuppressWarnings("restriction")
+public class ProtobufResourceLoaderProvider extends AbstractResourceLoaderProvider {
+  @Override public IResourceLoader get() {
+    return new ProtobufSerialResourceLoader(getResourceSetProvider(), getResourceSorter());
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/resourceloader/ProtobufSerialResourceLoader.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/resourceloader/ProtobufSerialResourceLoader.java
new file mode 100644
index 0000000..d7921cf
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/resourceloader/ProtobufSerialResourceLoader.java
@@ -0,0 +1,65 @@
+/*
+ * 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.builder.nature.resourceloader;
+
+import static com.google.common.collect.Collections2.filter;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Lists;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.emf.common.util.*;
+import org.eclipse.emf.ecore.resource.*;
+import org.eclipse.xtext.builder.resourceloader.SerialResourceLoader;
+import org.eclipse.xtext.ui.resource.IResourceSetProvider;
+
+import java.util.*;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@SuppressWarnings("restriction")
+public class ProtobufSerialResourceLoader extends SerialResourceLoader {
+  public ProtobufSerialResourceLoader(IResourceSetProvider resourceSetProvider, Sorter sorter) {
+    super(resourceSetProvider, sorter);
+  }
+
+  @Override public LoadOperation create(final ResourceSet parent, IProject project) {
+    final Queue<URI> queue = Lists.newLinkedList();
+    return new CheckedLoadOperation(new LoadOperation() {
+      @Override public LoadResult next() {
+        URI uri = queue.poll();
+        try {
+          Resource resource = parent.getResource(uri, true);
+          return new LoadResult(resource, uri);
+        } catch (WrappedException e) {
+          throw new LoadOperationException(uri, e.getCause());
+        }
+      }
+
+      @Override public boolean hasNext() {
+        return !queue.isEmpty();
+      }
+
+      @Override public Collection<URI> cancel() {
+        return queue;
+      }
+
+      @Override public void load(Collection<URI> uris) {
+        Collection<URI> filtered = filter(uris, new Predicate<URI>() {
+          @Override public boolean apply(URI input) {
+            return !input.toString().endsWith("BulkMutatePayloadPseudoService.proto");
+          }
+        });
+        queue.addAll(getSorter().sort(filtered));
+      }
+    });
+  }
+
+}
diff --git a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
index 1bb9665..caafc24 100644
--- a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
+++ b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Eclipse-ExtensibleAPI: true
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
-Bundle-Version: 1.2.2.qualifier
+Bundle-Version: 1.2.3.qualifier
 Bundle-SymbolicName: com.google.eclipse.protobuf; singleton:=true
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.xtext;bundle-version="2.2.1",
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
index fa070a7..8af9ccf 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
@@ -12,10 +12,13 @@
 import static org.eclipse.xtext.util.Tuples.pair;
 
 import com.google.eclipse.protobuf.model.util.*;
+import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Package;
 import com.google.inject.*;
 
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.xtext.naming.*;
 import org.eclipse.xtext.util.*;
 
@@ -28,6 +31,8 @@
  */
 public class ProtobufQualifiedNameProvider extends IQualifiedNameProvider.AbstractImpl implements
     IProtobufQualifiedNameProvider {
+  private static final Class<?>[] IGNORED_TYPES = { Protobuf.class, Package.class, Import.class, Option.class, SimpleValueLink.class};
+
   private static final Pair<NameType, QualifiedName> EMPTY_NAME = pair(NORMAL, null);
 
   @Inject private final IQualifiedNameConverter converter = new IQualifiedNameConverter.DefaultImpl();
@@ -43,12 +48,25 @@
   }
 
   @Override public QualifiedName getFullyQualifiedName(final EObject e, final NamingStrategy namingStrategy) {
+//    final long start = System.currentTimeMillis();
+//    final AtomicLong end = new AtomicLong();
+//    final AtomicBoolean isCached = new AtomicBoolean(true);
+    for (Class<?> ignored : IGNORED_TYPES) {
+      if (ignored.isInstance(e)) {
+        return null;
+      }
+    }
     Pair<EObject, String> key = pair(e, "fqn");
-    Pair<NameType, QualifiedName> cached = cache.get(key, e.eResource(), new Provider<Pair<NameType, QualifiedName>>() {
+    Resource resource = e.eResource();
+    URI uri = resource.getURI();
+//    System.out.println(uri);
+    Pair<NameType, QualifiedName> cached = cache.get(key, resource, new Provider<Pair<NameType, QualifiedName>>() {
       @Override public Pair<NameType, QualifiedName> get() {
+//        isCached.set(false);
         EObject current = e;
         Pair<NameType, String> name = namingStrategy.nameOf(e);
         if (name == null) {
+//          end.set(System.currentTimeMillis());
           return EMPTY_NAME;
         }
         QualifiedName qualifiedName = converter.toQualifiedName(name.getSecond());
@@ -56,13 +74,21 @@
           current = current.eContainer();
           QualifiedName parentsQualifiedName = getFullyQualifiedName(current, namingStrategy);
           if (parentsQualifiedName != null) {
+//            end.set(System.currentTimeMillis());
             return pair(name.getFirst(), parentsQualifiedName.append(qualifiedName));
           }
         }
+//        end.set(System.currentTimeMillis());
         return pair(name.getFirst(), addPackage(e, qualifiedName));
       }
     });
-    return cached.getSecond();
+    QualifiedName qualifiedName = cached.getSecond();
+//    if (isCached.get()) {
+//      end.set(System.currentTimeMillis());
+//    }
+//    double seconds = (end.get() - start) / 1000;
+//    System.out.println("URI: " + uri.toString() + ", type: " + e.getClass().getSimpleName() + ", qualified name: " + qualifiedName + ", cached? " + isCached.get() + ", time: " + seconds);
+    return qualifiedName;
   }
 
   private QualifiedName addPackage(EObject obj, QualifiedName qualifiedName) {
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufResourceValidator.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufResourceValidator.java
index f161e5a..f8d2d33 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufResourceValidator.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufResourceValidator.java
@@ -18,10 +18,10 @@
 import static org.eclipse.xtext.validation.CheckType.FAST;
 import static org.eclipse.xtext.validation.impl.ConcreteSyntaxEValidator.DISABLE_CONCRETE_SYNTAX_EVALIDATOR;
 
-import java.util.*;
+import com.google.eclipse.protobuf.linking.ProtobufDiagnostic;
 
 import org.apache.log4j.Logger;
-import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.*;
 import org.eclipse.emf.ecore.*;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.xtext.diagnostics.Severity;
@@ -29,7 +29,7 @@
 import org.eclipse.xtext.util.*;
 import org.eclipse.xtext.validation.*;
 
-import com.google.eclipse.protobuf.linking.ProtobufDiagnostic;
+import java.util.*;
 
 /**
  * Adds support for converting scoping errors into warnings if non-proto2 files are imported.
@@ -41,7 +41,17 @@
 
   @Override public List<Issue> validate(Resource resource, CheckMode mode, CancelIndicator indicator) {
     CancelIndicator monitor = indicator == null ? CancelIndicator.NullImpl : indicator;
-    resolveProxies(resource, monitor);
+//    long start = System.currentTimeMillis();
+    URI uri = resource.getURI();
+    if (uri.toString().endsWith("BulkMutatePayloadPseudoService.proto")) {
+      System.out.println("Ignoring validation BulkMutatePayloadPseudoService.proto");
+    } else {
+      resolveProxies(resource, monitor);
+    }
+//    long end = System.currentTimeMillis();
+//    long total = end - start;
+//
+//    System.out.println("Validated: " + resource.getURI() + " in " + total);
     if (monitor.isCanceled()) {
       return null;
     }
