diff --git a/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/actions/ProtoFilePathFinder.java b/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/actions/ProtoFilePathFinder.java
index 43cd183..2427958 100644
--- a/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/actions/ProtoFilePathFinder.java
+++ b/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/actions/ProtoFilePathFinder.java
@@ -73,6 +73,6 @@
       return null;
     }
     String path = matcher.group(1);
-    return (!isEmpty(path)) ? new Path(path) : null;
+    return (!isEmpty(path)) ? Path.fromOSString(path) : null;
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/resource/IndexLookup_areReferringToSameFile_Tests.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/resource/IndexLookup_areReferringToSameFile_Tests.java
index 29ba51d..a5c0bed 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/resource/IndexLookup_areReferringToSameFile_Tests.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/resource/IndexLookup_areReferringToSameFile_Tests.java
@@ -35,19 +35,19 @@
 
   @Test public void should_return_true_if_both_have_exactly_equal_segments() {
     String pathValue = "/usr/local/google/proto";
-    IPath path = new Path(pathValue);
+    IPath path = Path.fromOSString(pathValue);
     URI uri = URI.createPlatformResourceURI(pathValue, false);
     assertTrue(lookup.areReferringToSameFile(path, uri));
   }
 
   @Test public void should_return_true_if_path_is_subset_of_URI() {
-    IPath path = new Path("/google/proto");
+    IPath path = Path.fromOSString("/google/proto");
     URI uri = URI.createPlatformResourceURI("/usr/local/google/proto", true);
     assertTrue(lookup.areReferringToSameFile(path, uri));
   }
 
   @Test public void should_return_false_if_last_segments_in_path_and_URI_are_not_equal() {
-    IPath path = new Path("/usr/local/google/proto");
+    IPath path = Path.fromOSString("/usr/local/google/proto");
     URI uri = URI.createPlatformResourceURI("/usr/local/google/cpp", true);
     assertFalse(lookup.areReferringToSameFile(path, uri));
   }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/resource/IndexLookup_resourceIn_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/resource/IndexLookup_resourceIn_Test.java
index 7a95601..e33119a 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/resource/IndexLookup_resourceIn_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/resource/IndexLookup_resourceIn_Test.java
@@ -46,7 +46,8 @@
     XtextResource resource = xtext.resource();
     addToXtextIndex(resource);
     URI resourceUri = resource.getURI();
-    IResourceDescription description = lookup.resourceIn(new Path(resourceUri.path()));
+    IPath path = Path.fromOSString(resourceUri.path());
+    IResourceDescription description = lookup.resourceIn(path);
     assertThat(description.getURI(), equalTo(resourceUri));
   }
 
@@ -61,7 +62,7 @@
     String[] segments = resourceUri.segments();
     int segmentCount = segments.length;
     String path = segments[segmentCount - 2] + "/" + segments[segmentCount - 1]; // last two segments.
-    IResourceDescription description = lookup.resourceIn(new Path(path));
+    IResourceDescription description = lookup.resourceIn(Path.fromOSString(path));
     assertThat(description.getURI(), equalTo(resourceUri));
   }
 
@@ -72,7 +73,7 @@
   @Test public void should_return_null_if_matching_URI_was_not_found() {
     XtextResource resource = xtext.resource();
     addToXtextIndex(resource);
-    IResourceDescription description = lookup.resourceIn(new Path("some/crazy/path"));
+    IResourceDescription description = lookup.resourceIn(Path.fromOSString("some/crazy/path"));
     assertNull(description);
   }
 
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Uris_exists_withFile_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Uris_exists_withFile_Test.java
similarity index 94%
rename from com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Uris_exists_withFile_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Uris_exists_withFile_Test.java
index c79541d..17b4837 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Uris_exists_withFile_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Uris_exists_withFile_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.util;
+package com.google.eclipse.protobuf.util;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -23,6 +23,7 @@
 import org.junit.rules.TemporaryFolder;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.util.Uris;
 import com.google.inject.Inject;
 
 /**
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Uris_prefixOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Uris_prefixOf_Test.java
similarity index 93%
rename from com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Uris_prefixOf_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Uris_prefixOf_Test.java
index beef1bf..5f19bd5 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Uris_prefixOf_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Uris_prefixOf_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.util;
+package com.google.eclipse.protobuf.util;
 
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertThat;
@@ -19,6 +19,7 @@
 import org.junit.Test;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.util.Uris;
 import com.google.inject.Inject;
 
 /**
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Uris_segmentsWithoutFileName_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Uris_segmentsWithoutFileName_Test.java
similarity index 94%
rename from com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Uris_segmentsWithoutFileName_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Uris_segmentsWithoutFileName_Test.java
index 47cea1e..5790ba0 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Uris_segmentsWithoutFileName_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/util/Uris_segmentsWithoutFileName_Test.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.util;
+package com.google.eclipse.protobuf.util;
 
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertThat;
@@ -22,6 +22,7 @@
 import org.junit.Test;
 
 import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.util.Uris;
 import com.google.inject.Inject;
 
 /**
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable_replaceProjectNameWithProjectVariable_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable_replaceProjectNameWithProjectVariable_Test.java
index 24c335d..5f7324b 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable_replaceProjectNameWithProjectVariable_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable_replaceProjectNameWithProjectVariable_Test.java
@@ -34,21 +34,21 @@
   }
 
   @Test public void should_use_variable_if_path_contains_project_name() {
-    IPath path = new Path("/test/src/test");
+    IPath path = Path.fromOSString("/test/src/test");
     when(project.getName()).thenReturn("test");
     IPath newPath = ProjectVariable.replaceProjectNameWithProjectVariable(path, project);
     assertThat(newPath.toPortableString(), equalTo("/${project}/src/test"));
   }
 
   @Test public void should_not_use_variable_if_path_does_not_contain_project_name() {
-    IPath path = new Path("/main/src/test");
+    IPath path = Path.fromOSString("/main/src/test");
     when(project.getName()).thenReturn("test");
     IPath newPath = ProjectVariable.replaceProjectNameWithProjectVariable(path, project);
     assertThat(newPath.toPortableString(), equalTo("/main/src/test"));
   }
 
   @Test public void should_not_use_variable_if_path_already_contains_it() {
-    IPath path = new Path("/${project}/src/test");
+    IPath path = Path.fromOSString("/${project}/src/test");
     when(project.getName()).thenReturn("test");
     IPath newPath = ProjectVariable.replaceProjectNameWithProjectVariable(path, project);
     assertThat(newPath.toPortableString(), equalTo("/${project}/src/test"));
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable_replaceProjectVariableWithProjectName_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable_replaceProjectVariableWithProjectName_Test.java
index c3bcd51..9ccba70 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable_replaceProjectVariableWithProjectName_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable_replaceProjectVariableWithProjectName_Test.java
@@ -35,21 +35,21 @@
 
   @Test public void should_use_project_name_if_path_contains_variable() {
     when(project.getName()).thenReturn("test");
-    IPath path = new Path("/${project}/src/test");
+    IPath path = Path.fromOSString("/${project}/src/test");
     IPath newPath = ProjectVariable.replaceProjectVariableWithProjectName(path, project);
     assertThat(newPath.toPortableString(), equalTo("/test/src/test"));
   }
 
   @Test public void should_not_use_project_name_if_path_does_not_contain_variable() {
     when(project.getName()).thenReturn("test");
-    IPath path = new Path("/main/src/test");
+    IPath path = Path.fromOSString("/main/src/test");
     IPath newPath = ProjectVariable.replaceProjectVariableWithProjectName(path, project);
     assertThat(newPath.toPortableString(), equalTo("/main/src/test"));
   }
 
   @Test public void should_not_use_project_name_if_path_already_contains_it() {
     when(project.getName()).thenReturn("test");
-    IPath path = new Path("/test/src/test");
+    IPath path = Path.fromOSString("/test/src/test");
     IPath newPath = ProjectVariable.replaceProjectVariableWithProjectName(path, project);
     assertThat(newPath.toPortableString(), equalTo("/test/src/test"));
   }
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 a878315..e16e1a4 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
@@ -39,7 +39,7 @@
   @Before public void setUp() throws CoreException {
     marker = error(EDITOR_CHECK, "Expected field name.", 68);
     file = new FileStub();
-    file.setLocation(new Path("home/alex/protos/test1.proto"));
+    file.setLocation(Path.fromOSString("home/alex/protos/test1.proto"));
     file.createMarker(PROTOC);
     file.addMarker(marker);
     markerFactory = new ProtocMarkerFactory(file);
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy_resolveUri_withFileUri_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy_resolveUri_withFileUri_Test.java
index 23ea34d..c4a269f 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy_resolveUri_withFileUri_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy_resolveUri_withFileUri_Test.java
@@ -22,7 +22,7 @@
 
 import com.google.eclipse.protobuf.junit.core.AbstractTestModule;
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.ui.util.Uris;
+import com.google.eclipse.protobuf.util.Uris;
 import com.google.inject.Inject;
 
 /**
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy_resolveUri_withPlatformResourceUri_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy_resolveUri_withPlatformResourceUri_Test.java
index 78cf9e2..485cd5e 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy_resolveUri_withPlatformResourceUri_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy_resolveUri_withPlatformResourceUri_Test.java
@@ -23,7 +23,7 @@
 
 import com.google.eclipse.protobuf.junit.core.AbstractTestModule;
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.ui.util.Uris;
+import com.google.eclipse.protobuf.util.Uris;
 import com.google.inject.Inject;
 
 /**
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/UrisStub.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/UrisStub.java
index 04ac73c..25347c3 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/UrisStub.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/UrisStub.java
@@ -10,7 +10,7 @@
 
 import org.eclipse.emf.common.util.URI;
 
-import com.google.eclipse.protobuf.ui.util.Uris;
+import com.google.eclipse.protobuf.util.Uris;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
index 7a7f968..3690f5b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
@@ -38,6 +38,7 @@
 import com.google.eclipse.protobuf.ui.protoc.command.ProtocCommandBuilder;
 import com.google.eclipse.protobuf.ui.protoc.output.ProtocMarkerFactory;
 import com.google.eclipse.protobuf.ui.protoc.output.ProtocOutputParser;
+import com.google.eclipse.protobuf.util.Uris;
 import com.google.inject.Inject;
 
 /**
@@ -48,6 +49,7 @@
 public class ProtobufBuildParticipant implements IXtextBuilderParticipant {
   @Inject private ProtocOutputParser outputParser;
   @Inject private IPreferenceStoreAccess storeAccess;
+  @Inject private Uris uris;
 
   @Override public void build(IBuildContext context, IProgressMonitor monitor) throws CoreException {
     List<Delta> deltas = context.getDeltas();
@@ -83,7 +85,7 @@
       return null;
     }
     URI uri = resource.getURI();
-    if (uri.isPlatformResource() && "proto".equals(uri.fileExtension())) {
+    if (uris.hasProtoExtension(uri) && uri.isPlatformResource()) {
       return uri.toPlatformString(true);
     }
     return null;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOpener.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOpener.java
index 6b4c695..a50cdc3 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOpener.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOpener.java
@@ -22,7 +22,7 @@
 import org.eclipse.ui.ide.FileStoreEditorInput;
 import org.eclipse.ui.part.FileEditorInput;
 
-import com.google.eclipse.protobuf.ui.util.Uris;
+import com.google.eclipse.protobuf.util.Uris;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
@@ -49,7 +49,7 @@
     if (page == null) {
       return null;
     }
-    IFileStore fileStore = EFS.getLocalFileSystem().getStore(new Path(uri.toFileString()));
+    IFileStore fileStore = EFS.getLocalFileSystem().getStore(Path.fromOSString(uri.toFileString()));
     IEditorInput editorInput = new FileStoreEditorInput(fileStore);
     return openFile(editorInput, page);
   }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath.java
index 544879d..e10a516 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath.java
@@ -47,7 +47,7 @@
       actualPath = matcher.group(1);
       isWorkspacePath = true;
       if (project != null) {
-        IPath newPath = replaceProjectVariableWithProjectName(new Path(actualPath), project);
+        IPath newPath = replaceProjectVariableWithProjectName(Path.fromOSString(actualPath), project);
         // Issue 204: we'll create an URI from this path. It must not have OS-specific path separators.
         actualPath = newPath.toPortableString();
       }
@@ -81,7 +81,7 @@
    * @return the absolute path in the local file system, or {@code null} if no path can be determined.
    */
   public String absolutePathInFileSystem() {
-    IPath path = new Path(value);
+    IPath path = Path.fromOSString(value);
     if (isWorkspacePath()) {
       return directoryLocationInWorkspace(path);
     }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable.java
index 5e2c341..5fa2383 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable.java
@@ -32,7 +32,7 @@
     if (!currentSegment.equals(path.segment(0))) {
       return path;
     }
-    IPath newPath = new Path(newSegment);
+    IPath newPath = Path.fromOSString(newSegment);
     newPath = newPath.append(path.removeFirstSegments(1));
     if (path.isAbsolute()) {
       newPath = newPath.makeAbsolute();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java
index 16cc27b..fbe27da 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java
@@ -28,7 +28,7 @@
 import com.google.eclipse.protobuf.scoping.IFileUriResolver;
 import com.google.eclipse.protobuf.scoping.ProtoDescriptorProvider;
 import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
-import com.google.eclipse.protobuf.ui.util.Uris;
+import com.google.eclipse.protobuf.util.Uris;
 import com.google.inject.Inject;
 
 /**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/ResourceLocations.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/ResourceLocations.java
index 36bcd31..0ae1fd7 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/ResourceLocations.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/ResourceLocations.java
@@ -18,7 +18,7 @@
  */
 class ResourceLocations {
   String directoryLocation(String workspacePath) {
-    IPath path = new Path(workspacePath);
+    IPath path = Path.fromOSString(workspacePath);
     return directoryLocationInWorkspace(path);
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy.java
index 40888ba..f66dd7f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolverStrategy.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.common.util.URI;
 
 import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
-import com.google.eclipse.protobuf.ui.util.Uris;
+import com.google.eclipse.protobuf.util.Uris;
 import com.google.inject.Inject;
 
 /**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/UriResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/UriResolver.java
index 97abdd2..f6ac4b3 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/UriResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/UriResolver.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.common.util.URI;
 
 import com.google.eclipse.protobuf.ui.preferences.paths.DirectoryPath;
-import com.google.eclipse.protobuf.ui.util.Uris;
+import com.google.eclipse.protobuf.util.Uris;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/FastXtextResourceSet.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/FastXtextResourceSet.java
index 9f8eafa..d0fa702 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/FastXtextResourceSet.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/FastXtextResourceSet.java
@@ -2,8 +2,6 @@
 
 import static org.eclipse.xtext.resource.ClasspathUriUtil.isClasspathUri;
 
-import static com.google.eclipse.protobuf.util.Workspaces.workspaceRoot;
-
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -11,14 +9,18 @@
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.URIConverter;
 import org.eclipse.emf.ecore.resource.impl.ExtensibleURIConverterImpl;
 import org.eclipse.xtext.resource.ClasspathUriResolutionException;
 import org.eclipse.xtext.resource.SynchronizedXtextResourceSet;
 
+import com.google.eclipse.protobuf.util.Uris;
+import com.google.inject.Inject;
+
 public class FastXtextResourceSet extends SynchronizedXtextResourceSet {
+  @Inject private Uris uris;
+
   @Override public URIConverter getURIConverter() {
     if (uriConverter == null) {
       uriConverter = new ExtensibleURIConverterImpl() {
@@ -48,10 +50,9 @@
           if (isClasspathUri(uri)) {
             return getClass().getResourceAsStream(uri.path());
           }
-          if ("proto".equals(uri.fileExtension())) {
+          if (uris.hasProtoExtension(uri)) {
             if (uri.isPlatformResource()) {
-              String platformUri = uri.toPlatformString(true);
-              IFile file = workspaceRoot().getFile(Path.fromOSString(platformUri));
+              IFile file = uris.referredFile(uri);
               if (file != null && file.exists()) {
                 IPath location = file.getLocation();
                 return new FileInputStream(location.toFile());
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Uris.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Uris.java
similarity index 88%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Uris.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Uris.java
index a815b4e..e12cbc8 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Uris.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Uris.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.util;
+package com.google.eclipse.protobuf.util;
 
 import static java.util.Collections.emptyList;
 import static java.util.Collections.unmodifiableList;
@@ -33,6 +33,15 @@
  */
 @Singleton public class Uris {
   /**
+   * Indicates whether the resource at the given URI has extension "proto".
+   * @param uri the given URI.
+   * @return {@code true} if the resource has extension "proto", {@code false} otherwise.
+   */
+  public boolean hasProtoExtension(URI uri) {
+    return "proto".equals(uri.fileExtension());
+  }
+
+  /**
    * Indicates whether the resource or file referred by the given URI exists.
    * @param uri the URI to check. It may be {@code null}.
    * @return {@code true} if the resource or file referred by the given URI exists, {@code false} otherwise.
@@ -123,7 +132,7 @@
   }
 
   private IPath pathOf(URI uri) {
-    String uriAsText = uri.toPlatformString(true);
-    return (uriAsText != null) ? new Path(uriAsText) : null;
+    String platformString = uri.toPlatformString(true);
+    return platformString != null ? Path.fromOSString(platformString) : null;
   }
 }
