diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
index 929812b..c08fba0 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
@@ -8,11 +8,9 @@
  */
 package com.google.eclipse.protobuf;
 
-import org.eclipse.xtext.naming.IQualifiedNameProvider;
-import org.eclipse.xtext.scoping.IGlobalScopeProvider;
-import org.eclipse.xtext.scoping.impl.*;
+import org.eclipse.xtext.scoping.impl.ImportUriResolver;
+import org.eclipse.xtext.scoping.impl.LoadOnDemandResourceDescriptions;
 
-import com.google.eclipse.protobuf.naming.ProtobufQualifiedNameProvider;
 import com.google.eclipse.protobuf.scoping.ResourceDescriptions;
 import com.google.eclipse.protobuf.scoping.SimpleImportUriResolver;
 import com.google.inject.Binder;
@@ -22,16 +20,6 @@
  */
 public class ProtobufRuntimeModule extends com.google.eclipse.protobuf.AbstractProtobufRuntimeModule {
 
-  /** {@inheritDoc} */
-  @Override public Class<? extends IGlobalScopeProvider> bindIGlobalScopeProvider() {
-    return ImportUriGlobalScopeProvider.class;
-  }
-
-  /** {@inheritDoc} */
-  @Override public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
-    return ProtobufQualifiedNameProvider.class;
-  }
-
   public void configureImportUriResolver(Binder binder) {
     binder.bind(ImportUriResolver.class).to(SimpleImportUriResolver.class);
   }
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
deleted file mode 100644
index a45f1bb..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
+++ /dev/null
@@ -1,56 +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.naming;
-
-import java.util.*;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.naming.*;
-
-import com.google.eclipse.protobuf.protobuf.Package;
-import com.google.eclipse.protobuf.util.EObjectFinder;
-import com.google.inject.Inject;
-
-/**
- * Provides fully-qualified names for protobuf elements.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class ProtobufQualifiedNameProvider extends DefaultDeclarativeQualifiedNameProvider {
-
-  @Inject private EObjectFinder finder;
-
-  /** {@inheritDoc} */
-  @Override public QualifiedName getFullyQualifiedName(EObject obj) {
-    QualifiedName qualifiedName = super.getFullyQualifiedName(obj);
-    if (qualifiedName == null || obj instanceof Package) return qualifiedName;
-    Package p = finder.findPackage(obj);
-    if (p == null) return qualifiedName;
-    List<String> newQualifiedNameSegments = new ArrayList<String>();
-    List<String> qualifiedNameSegments = qualifiedName.getSegments();
-    String packageName = p.getName();
-    if (packageName != null) {
-      String[] packageNameSegments = packageName.split("\\.");
-      if (!qualifiedNameContainsPackageName(qualifiedNameSegments, packageNameSegments)) {
-        // add package to the new FQN
-        for (String packageSegment : packageNameSegments) newQualifiedNameSegments.add(packageSegment);
-      }
-    }
-    newQualifiedNameSegments.addAll(qualifiedNameSegments);
-    return QualifiedName.create(newQualifiedNameSegments.toArray(new String[newQualifiedNameSegments.size()]));
-  }
-
-  private boolean qualifiedNameContainsPackageName(List<String> qualifiedNameSegments, String[] packageNameSegments) {
-    int packageNameSegmentCount = packageNameSegments.length;
-    if (qualifiedNameSegments.size() <= packageNameSegmentCount) return false;
-    for (int i = 0; i < packageNameSegmentCount; i++)
-      if (!qualifiedNameSegments.get(i).equals(packageNameSegments[i])) return false;
-    return true;
-  }
-}
