diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/protoc/command/ImportRootsProtocOption_singleImportRoot_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/protoc/command/ImportRootsProtocOption_singleImportRoot_Test.java
index 59298fa..31f0fbd 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/protoc/command/ImportRootsProtocOption_singleImportRoot_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/protoc/command/ImportRootsProtocOption_singleImportRoot_Test.java
@@ -17,7 +17,7 @@
 import org.junit.rules.TemporaryFolder;
 
 /**
- * Tests for <code>{@link ImportRootsProtocOption#singleImportRoot(File, File)}</code>
+ * Tests for <code>{@link ImportRootsProtocOption#singleImportRoot(File, File)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java
index 58c3fd7..c0a8930 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java
@@ -48,10 +48,6 @@
     return null;
   }
 
-  public IProject project() {
-    return project;
-  }
-
   public static class Initializer implements IPreferenceStoreInitializer {
     @Override public void initialize(IPreferenceStoreAccess access) {
       IPreferenceStore store = access.getWritablePreferenceStore();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/command/ImportRootsProtocOption.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/command/ImportRootsProtocOption.java
index 38bb19a..ba14369 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/command/ImportRootsProtocOption.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/command/ImportRootsProtocOption.java
@@ -9,13 +9,14 @@
 package com.google.eclipse.protobuf.ui.protoc.command;
 
 import static com.google.common.collect.Lists.newArrayList;
-import static java.util.Collections.singletonList;
+import static org.eclipse.core.resources.IResource.CHECK_ANCESTORS;
 import static org.eclipse.xtext.util.Strings.isEmpty;
 
 import java.io.File;
 import java.util.List;
 
 import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.IPath;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
@@ -45,11 +46,16 @@
 
   private void initialize(IFile protoFile) {
     initialized = true;
+    importRoots = newArrayList();
     if (!preferences.areFilesInMultipleDirectories()) {
-      importRoots = singletonList(singleImportRoot(protoFile));
+      if (protoFile.isLinked(CHECK_ANCESTORS)) {
+        importRoots.add(locationAsText(protoFile.getProject()));
+        importRoots.add(locationAsText(protoFile.getParent()));
+        return;
+      }
+      importRoots.add(singleImportRoot(protoFile));
       return;
     }
-    importRoots = newArrayList();
     preferences.applyToEachDirectoryPath(new Function<DirectoryPath, Void>() {
       @Override public Void apply(DirectoryPath path) {
         String location = path.absolutePathInFileSystem();
@@ -61,10 +67,15 @@
     });
   }
 
-  private String singleImportRoot(IFile protoFile) {
-    return singleImportRoot(locationOf(preferences.project()), locationOf(protoFile));
+  private String locationAsText(IResource resource) {
+    return resource.getLocation().toOSString();
   }
 
+  private String singleImportRoot(IFile protoFile) {
+    return singleImportRoot(locationAsFile(protoFile.getProject()), locationAsFile(protoFile));
+  }
+
+  // TODO(alruiz): Remove usage of java.io.File.
   @VisibleForTesting static String singleImportRoot(File projectLocation, File protoFileLocation) {
     if (protoFileLocation.getParentFile().equals(projectLocation)) {
       return projectLocation.toString();
@@ -76,8 +87,9 @@
     return current.toString();
   }
 
-  private File locationOf(IResource resource) {
-    return resource.getLocation().toFile();
+  private File locationAsFile(IResource resource) {
+    IPath location = resource.getLocation();
+    return location.toFile();
   }
 
   private void appendToCommand(ProtocCommand command, String importRoot) {
