diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java
index fd213cf..6ec8b87 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java
@@ -14,14 +14,14 @@
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.*;
 
-import org.eclipse.core.resources.IProject;
 import org.eclipse.emf.common.util.URI;
 import org.junit.*;
 
 import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
+import com.google.eclipse.protobuf.ui.util.Resources;
 
 /**
- * Tests for <code>{@link SingleDirectoryFileResolver#resolveUri(String, URI, PathsPreferences, IProject)}</code>.
+ * Tests for <code>{@link SingleDirectoryFileResolver#resolveUri(String, URI, PathsPreferences)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ImportHyperlink.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ImportHyperlink.java
index ea8f08f..7ea01d6 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ImportHyperlink.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ImportHyperlink.java
@@ -12,11 +12,12 @@
 import org.eclipse.core.filesystem.EFS;
 import org.eclipse.core.filesystem.IFileStore;
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.hyperlink.IHyperlink;
 import org.eclipse.ui.*;
-import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.ide.FileStoreEditorInput;
 import org.eclipse.ui.part.FileEditorInput;
 
 import com.google.eclipse.protobuf.ui.util.Resources;
@@ -47,19 +48,19 @@
   private void openFromWorkspace() {
     IFile file = resources.file(importUri);
     IEditorInput editorInput = new FileEditorInput(file);
-    IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
-    try {
-      page.openEditor(editorInput, "com.google.eclipse.protobuf.Protobuf");
-    } catch (PartInitException e) {
-      e.printStackTrace();
-    }
+    openFile(editorInput, "com.google.eclipse.protobuf.Protobuf");
   }
 
   private void openFromFileSystem() {
-    IFileStore fileStore = EFS.getLocalFileSystem().getStore(resources.pathOf(importUri));
+    IFileStore fileStore = EFS.getLocalFileSystem().getStore(new Path(importUri.toFileString()));
+    IEditorInput editorInput = new FileStoreEditorInput(fileStore);
+    openFile(editorInput, "org.eclipse.ui.DefaultTextEditor");
+  }
+
+  private void openFile(IEditorInput editorInput, String editorId) {
     IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
     try {
-      IDE.openEditorOnFileStore(page, fileStore);
+      page.openEditor(editorInput, editorId);
     } catch (PartInitException e) {
       e.printStackTrace();
     }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java
index abe9f2d..62a381b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java
@@ -47,17 +47,12 @@
    * @return a handle to file identified by the given URI.
    */
   public IFile file(URI uri) {
-    IPath resourcePath = pathOf(uri);
     IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-    return root.getFile(resourcePath);
+    return root.getFile(pathOf(uri));
   }
 
-  /**
-   * Constructs a new path from the given URI.
-   * @param uri the given URI.
-   * @return the constructed path.
-   */
-  public IPath pathOf(URI uri) {
-    return new Path(uri.toPlatformString(true));
+  private IPath pathOf(URI uri) {
+    String s = uri.toPlatformString(true);
+    return new Path(s);
   }
 }
