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 6ec8b87..ae823a7 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,6 +14,7 @@
 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.*;
 
@@ -21,7 +22,7 @@
 import com.google.eclipse.protobuf.ui.util.Resources;
 
 /**
- * Tests for <code>{@link SingleDirectoryFileResolver#resolveUri(String, URI, PathsPreferences)}</code>.
+ * Tests for <code>{@link SingleDirectoryFileResolver#resolveUri(String, URI, IProject, PathsPreferences)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -45,19 +46,19 @@
 
   @Test public void should_resolve_import_URI_if_missing_scheme() {
     when(resources.fileExists(any(URI.class))).thenReturn(true);
-    String resolved = resolver.resolveUri("folder1/address.proto", resourceUri, preferences);
+    String resolved = resolver.resolveUri("folder1/address.proto", resourceUri, null, preferences);
     assertThat(resolved, equalTo("platform:/resource/src/proto/folder1/address.proto"));
   }
 
   @Test public void should_resolve_import_URI_even_if_overlapping_folders_with_resource_URI() {
     when(resources.fileExists(any(URI.class))).thenReturn(true);
-    String resolved = resolver.resolveUri("src/proto/folder1/address.proto", resourceUri, preferences);
+    String resolved = resolver.resolveUri("src/proto/folder1/address.proto", resourceUri, null, preferences);
     assertThat(resolved, equalTo("platform:/resource/src/proto/folder1/address.proto"));
   }
 
   @Test public void should_resolve_import_URI_even_if_overlapping_one_folder_only_with_resource_URI() {
     when(resources.fileExists(any(URI.class))).thenReturn(true);
-    String resolved = resolver.resolveUri("src/proto/read-only/address.proto", resourceUri, preferences);
+    String resolved = resolver.resolveUri("src/proto/read-only/address.proto", resourceUri, null, preferences);
     assertThat(resolved, equalTo("platform:/resource/src/proto/read-only/address.proto"));
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java
index 6c354ed..a7c5518 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java
@@ -199,5 +199,14 @@
     setErrorMessage(errorMessage);
     setValid(false);
   }
+
+  /**
+   * Returns the project whose properties are being changed.
+   * @return the project whose properties are being changed, or {@code null} if this page is updating workspace-level
+   * preferences.
+   */
+  protected final IProject project() {
+    return project;
+  }
 }
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
index e06a8be..94dcc4b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
@@ -13,14 +13,15 @@
 import static org.eclipse.jface.dialogs.IDialogConstants.OK_ID;
 import static org.eclipse.xtext.util.Strings.isEmpty;
 
-import com.google.eclipse.protobuf.ui.preferences.InputDialog;
-
+import org.eclipse.core.resources.IProject;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.*;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.layout.*;
 import org.eclipse.swt.widgets.*;
 
+import com.google.eclipse.protobuf.ui.preferences.InputDialog;
+
 /**
  * Dialog where users can select a path (in the workspace or file system) to be included in resolution of imports.
  *
@@ -38,8 +39,9 @@
   /**
    * Creates a new </code>{@link AddDirectoryDialog}</code>.
    * @param parent a shell which will be the parent of the new instance.
+   * @param project the project whose properties the user is modifying.
    */
-  public AddDirectoryDialog(Shell parent) {
+  public AddDirectoryDialog(Shell parent, IProject project) {
     super(parent, includeDirectoryTitle);
   }
 
@@ -136,7 +138,7 @@
   private static Color getColor(int systemColorID) {
     return Display.getCurrent().getSystemColor(systemColorID);
   }
-  
+
   /**
    * Returns the path selected by the user.
    * @return the path selected by the user.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java
index e268f64..6f4694c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java
@@ -15,6 +15,7 @@
 import java.util.*;
 import java.util.List;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.*;
@@ -32,6 +33,8 @@
  */
 public class DirectoryPathsEditor extends Composite {
 
+  private final IProject project;
+
   private final Table tblDirectoryPaths;
   private final TableViewer tblVwrDirectoryPaths;
   private final Button btnAdd;
@@ -43,8 +46,9 @@
 
   private DataChangedListener dataChangedListener;
 
-  public DirectoryPathsEditor(Composite parent, PluginImageHelper imageHelper) {
+  public DirectoryPathsEditor(Composite parent, IProject project, PluginImageHelper imageHelper) {
     super(parent, SWT.NONE);
+    this.project = project;
 
     // generated by WindowBuilder
     setLayout(new GridLayout(2, false));
@@ -93,7 +97,7 @@
     });
     btnAdd.addSelectionListener(new SelectionAdapter() {
       @Override public void widgetSelected(SelectionEvent e) {
-        AddDirectoryDialog dialog = new AddDirectoryDialog(getShell());
+        AddDirectoryDialog dialog = new AddDirectoryDialog(getShell(), project);
         if (dialog.open() == OK) {
           importPaths.add(dialog.selectedPath());
           updateTable();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java
index c9aa6e2..c8d3172 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java
@@ -15,15 +15,14 @@
 import static org.eclipse.jface.window.Window.OK;
 import static org.eclipse.ui.views.navigator.ResourceComparator.NAME;
 
+import java.net.URI;
+
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
-import org.eclipse.ui.dialogs.ISelectionStatusValidator;
-import org.eclipse.ui.model.WorkbenchContentProvider;
-import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.dialogs.*;
+import org.eclipse.ui.model.*;
 import org.eclipse.ui.views.navigator.ResourceComparator;
 
 /**
@@ -39,14 +38,14 @@
 
   static String showWorkspaceDirectoryDialog(Shell shell, String initialPath, IProject project) {
     String currentPathText = initialPath.replaceAll("\"", "");
-    IPath path = new Path(currentPathText);
+    URI uri = URI.create(currentPathText);
     ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(shell, new WorkbenchLabelProvider(),
         new WorkbenchContentProvider());
     dialog.setInput(project == null ? workspaceRoot() : project);
     dialog.setComparator(new ResourceComparator(NAME));
     IResource container = null;
-    if (path.isAbsolute()) {
-      IContainer containers[] = workspaceRoot().findContainersForLocation(path);
+    if (uri.isAbsolute()) {
+      IContainer containers[] = workspaceRoot().findContainersForLocationURI(uri);
       if (containers != null && containers.length > 0) container = containers[0];
     }
     dialog.setInitialSelection(container);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java
index 6f395a7..70fe2cf 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java
@@ -15,21 +15,18 @@
 import static java.util.Collections.unmodifiableList;
 import static org.eclipse.xtext.util.Strings.*;
 
-import java.util.ArrayList;
+import java.util.*;
 import java.util.List;
 
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.layout.*;
 import org.eclipse.swt.widgets.*;
 import org.eclipse.xtext.ui.PluginImageHelper;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
 
-import com.google.eclipse.protobuf.ui.preferences.DataChangedListener;
-import com.google.eclipse.protobuf.ui.preferences.PreferenceAndPropertyPage;
+import com.google.eclipse.protobuf.ui.preferences.*;
 import com.google.inject.Inject;
 
 /**
@@ -72,7 +69,7 @@
     btnMultipleFolders.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
     btnMultipleFolders.setText(filesInMultipleDirectories);
 
-    directoryPathsEditor = new DirectoryPathsEditor(grpResolutionOfImported, imageHelper);
+    directoryPathsEditor = new DirectoryPathsEditor(grpResolutionOfImported, project(), imageHelper);
     directoryPathsEditor.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
     new Label(contents, SWT.NONE);
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java
index 7f46b50..261d16b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java
@@ -8,6 +8,7 @@
  */
 package com.google.eclipse.protobuf.ui.scoping;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.emf.common.util.URI;
 
@@ -21,5 +22,5 @@
   String PREFIX = "platform:/resource";
   char SEPARATOR = IPath.SEPARATOR;
 
-  String resolveUri(String importUri, URI declaringResourceUri, PathsPreferences preferences);
+  String resolveUri(String importUri, URI declaringResourceUri, IProject project, PathsPreferences preferences);
 }
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 2e00a09..9000aa8 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
@@ -15,8 +15,7 @@
 import org.eclipse.emf.ecore.resource.Resource;
 
 import com.google.eclipse.protobuf.scoping.IFileUriResolver;
-import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
-import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferencesProvider;
+import com.google.eclipse.protobuf.ui.preferences.paths.*;
 import com.google.eclipse.protobuf.ui.util.Resources;
 import com.google.inject.Inject;
 
@@ -27,7 +26,7 @@
  */
 public class FileUriResolver implements IFileUriResolver {
 
-  @Inject private PathsPreferencesProvider preferenceReader;
+  @Inject private PathsPreferencesProvider preferenceProvider;
   @Inject private FileResolverStrategies resolvers;
   @Inject private Resources resources;
 
@@ -60,8 +59,9 @@
   private String resolveUri(String importUri, URI resourceUri) {
     IProject project = resources.project(resourceUri);
     if (project == null) project = resources.activeProject();
-    PathsPreferences preferences = preferenceReader.getPreferences(project);
-    return resolver(preferences).resolveUri(importUri, resourceUri, preferences);
+    if (project == null) throw new IllegalStateException("Unable to find current project");
+    PathsPreferences preferences = preferenceProvider.getPreferences(project);
+    return resolver(preferences).resolveUri(importUri, resourceUri, project, preferences);
   }
 
   private FileResolverStrategy resolver(PathsPreferences preferences) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolver.java
index 0e5c309..b4f7db7 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolver.java
@@ -11,6 +11,7 @@
 import java.util.List;
 
 import org.eclipse.core.filesystem.*;
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.common.util.URI;
@@ -33,7 +34,7 @@
   }
 
   /** {@inheritDoc} */
-  public String resolveUri(String importUri, URI declaringResourceUri, PathsPreferences preferences) {
+  public String resolveUri(String importUri, URI declaringResourceUri, IProject project, PathsPreferences preferences) {
     List<DirectoryPath> directoryPaths = preferences.directoryPaths();
     for (DirectoryPath directoryPath : directoryPaths) {
       String resolved = resolveUri(importUri, directoryPath);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java
index 04ccf86..c863a21 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java
@@ -13,6 +13,7 @@
 
 import java.util.*;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.xtext.util.Pair;
 
@@ -30,7 +31,7 @@
     this.resources = resources;
   }
 
-  public String resolveUri(String importUri, URI declaringResourceUri, PathsPreferences preferences) {
+  public String resolveUri(String importUri, URI declaringResourceUri, IProject project, PathsPreferences preferences) {
     List<String> resourceUriSegments = removeFirstAndLast(declaringResourceUri.segmentsList());
     Pair<String, List<String>> importUriPair = pair(importUri, createURI(importUri).segmentsList());
     return resolveUri(importUriPair, resourceUriSegments);
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 777cbab..bfa04d0 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
@@ -8,11 +8,9 @@
  */
 package com.google.eclipse.protobuf.ui.util;
 
-import org.eclipse.core.filesystem.EFS;
-import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.core.filesystem.*;
 import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.*;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.ui.*;
@@ -31,7 +29,7 @@
 public class Resources {
 
   public static final String URI_SCHEME_FOR_FILES = "file";
-  
+
   /**
    * Returns the project that contains the resource at the given URI.
    * @param resourceUri the given URI.
@@ -49,8 +47,8 @@
       IViewPart part = reference.getView(false);
       if (!(part instanceof ResourceNavigator)) continue;
       ResourceNavigator navigator = (ResourceNavigator) part;
-      StructuredSelection sel = (StructuredSelection) navigator.getTreeViewer().getSelection();
-      IResource resource = (IResource) sel.getFirstElement();
+      StructuredSelection selection = (StructuredSelection) navigator.getTreeViewer().getSelection();
+      IResource resource = (IResource) selection.getFirstElement();
       return resource.getProject();
     }
     return null;
@@ -90,7 +88,7 @@
     IEditorInput editorInput = new FileStoreEditorInput(fileStore);
     return openFile(editorInput/*"org.eclipse.ui.DefaultTextEditor"*/);
   }
-  
+
   private IEditorPart openFile(IEditorInput editorInput) throws PartInitException {
     IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
     return page.openEditor(editorInput, "com.google.eclipse.protobuf.Protobuf");
@@ -99,7 +97,7 @@
   /**
    * Returns a handle to a workspace file identified by the given URI.
    * @param uri the given URI.
-   * @return a handle to a workspace file identified by the given URI or {@code null} if the URI does not belong to a 
+   * @return a handle to a workspace file identified by the given URI or {@code null} if the URI does not belong to a
    * workspace file.
    */
   public IFile file(URI uri) {
