diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/ImportUriFixerAndResolver_apply_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/ImportUriFixerAndResolver_apply_Test.java
new file mode 100644
index 0000000..8cfe447
--- /dev/null
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/ImportUriFixerAndResolver_apply_Test.java
@@ -0,0 +1,46 @@
+/*
+ * 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.scoping;
+
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.scoping.impl.ImportUriResolver;
+import org.junit.*;
+
+import com.google.eclipse.protobuf.junit.XtextRule;
+import com.google.eclipse.protobuf.protobuf.Import;
+import com.google.eclipse.protobuf.protobuf.Protobuf;
+
+/**
+ * Tests for <code>{@link ImportUriFixerAndResolver#apply(EObject)}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class ImportUriFixerAndResolver_apply_Test {
+
+  @Rule public XtextRule xtext = new XtextRule();
+  
+  private ImportUriFixerAndResolver resolver;
+  
+  @Before public void setUp() {
+    resolver = (ImportUriFixerAndResolver) xtext.getInstanceOf(ImportUriResolver.class);
+  }
+  
+  @Test public void should_fix_import_URI_if_missing_scheme() {
+    StringBuilder proto = new StringBuilder();
+    proto.append("import \"folder1/test.proto\";"); 
+    Protobuf root = xtext.parse(proto);
+    Import anImport = root.getImports().get(0);
+    String resolved = resolver.apply(anImport);
+    assertThat(resolved, equalTo("platform:/resource/folder1/test.proto"));
+  }
+
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
index 13abf5f..90ccad9 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.ui.labeling;
 
-import static com.google.eclipse.protobuf.scoping.SimpleImportUriResolver.URI_PREFIX;
+import static com.google.eclipse.protobuf.scoping.ImportUriFixerAndResolver.URI_PREFIX;
 
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.ui.util.Properties;
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 4896ae9..a8b9ace 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
@@ -12,7 +12,7 @@
 import org.eclipse.xtext.scoping.impl.ImportUriResolver;
 
 import com.google.eclipse.protobuf.naming.ProtobufQualifiedNameProvider;
-import com.google.eclipse.protobuf.scoping.SimpleImportUriResolver;
+import com.google.eclipse.protobuf.scoping.ImportUriFixerAndResolver;
 import com.google.inject.Binder;
 
 /**
@@ -26,6 +26,6 @@
   }
 
   public void configureImportUriResolver(Binder binder) {
-    binder.bind(ImportUriResolver.class).to(SimpleImportUriResolver.class);
+    binder.bind(ImportUriResolver.class).to(ImportUriFixerAndResolver.class);
   }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/SimpleImportUriResolver.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ImportUriFixerAndResolver.java
similarity index 74%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/SimpleImportUriResolver.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ImportUriFixerAndResolver.java
index 866eebf..2de2ca2 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/SimpleImportUriResolver.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ImportUriFixerAndResolver.java
@@ -8,8 +8,6 @@
  */
 package com.google.eclipse.protobuf.scoping;
 
-import java.util.List;
-
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.xtext.scoping.impl.ImportUriResolver;
@@ -27,7 +25,7 @@
  * 
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class SimpleImportUriResolver extends ImportUriResolver {
+public class ImportUriFixerAndResolver extends ImportUriResolver {
 
   private static final String PREFIX = "platform:/resource";
 
@@ -63,22 +61,9 @@
    * We need to have the import URI as "platform:/resource/protobuf-test/folder/proto2.proto" for the editor to see it.
    */
   private void fixUri(Import i) {
-    String prefix = uriPrefix(i.eResource().getURI());
-    String uri = i.getImportURI();
-    if (!uri.startsWith(prefix)) {
-      if (!uri.startsWith(prefix)) prefix += "/";
-      i.setImportURI(prefix + uri);
-    }
-  }
-
-  private String uriPrefix(URI containerUri) {
-    StringBuilder prefix = new StringBuilder();
-    prefix.append(PREFIX);
-    int start = (containerUri.scheme() == null) ? 0 : 1; // ignore the scheme if present (e.g. "resource")
-    List<String> segments = containerUri.segmentsList();
-    int end = segments.size() - 1; // ignore file name (at the end of the URI)
-    for (int j = start; j < end; j++)
-      prefix.append("/").append(segments.get(j));
-    return prefix.toString();
+    URI importUri = URI.createURI(i.getImportURI());
+    if (importUri.scheme() != null) return;
+    URI fixedUri = URI.createURI(PREFIX).appendSegments(importUri.segments());
+    i.setImportURI(fixedUri.toString());
   }
 }
