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/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;
     }
