diff --git a/com.google.eclipse.protobuf.ui/plugin.xml b/com.google.eclipse.protobuf.ui/plugin.xml
index 75efb54..dd25975 100644
--- a/com.google.eclipse.protobuf.ui/plugin.xml
+++ b/com.google.eclipse.protobuf.ui/plugin.xml
@@ -63,13 +63,13 @@
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
     <page category="com.google.eclipse.protobuf.Protobuf"
-      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.PreferencePage"
-      id="com.google.eclipse.protobuf.ui.preferences.compiler.PreferencePage" name="%page.name.2">
+      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferencePage"
+      id="com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferencePage" name="%page.name.2">
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
     <page category="com.google.eclipse.protobuf.Protobuf"
-      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.paths.PreferencePage"
-      id="com.google.eclipse.protobuf.ui.preferences.paths.PreferencePage" name="%page.name.3">
+      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferencePage"
+      id="com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferencePage" name="%page.name.3">
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
   </extension>
@@ -172,14 +172,14 @@
     </page>
     <page
           category="com.google.eclipse.protobuf.Protobuf"
-          class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.PreferencePage"
+          class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferencePage"
           id="com.google.eclipse.protobuf.ui.properties.compiler.PropertyPage"
           name="%page.name.2"
           selectionFilter="single">
     </page>
     <page
           category="com.google.eclipse.protobuf.Protobuf"
-          class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.paths.PreferencePage"
+          class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferencePage"
           id="com.google.eclipse.protobuf.ui.properties.paths.PropertyPage"
           name="%page.name.3"
           selectionFilter="single">
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtobufBuildParticipant.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtobufBuildParticipant.java
index b14ce96..c62a998 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtobufBuildParticipant.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtobufBuildParticipant.java
@@ -8,8 +8,8 @@
  */
 package com.google.eclipse.protobuf.ui.builder;
 
-import static com.google.eclipse.protobuf.ui.preferences.compiler.Preferences.loadPreferences;
-import static com.google.eclipse.protobuf.ui.preferences.compiler.RefreshTarget.PROJECT;
+import static com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferences.loadPreferences;
+import static com.google.eclipse.protobuf.ui.preferences.compiler.PostCompilationRefreshTarget.PROJECT;
 import static org.eclipse.core.resources.IResource.DEPTH_INFINITE;
 
 import java.io.*;
@@ -25,7 +25,7 @@
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
 
 import com.google.eclipse.protobuf.ui.preferences.compiler.*;
-import com.google.eclipse.protobuf.ui.preferences.compiler.Preferences;
+import com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferences;
 import com.google.inject.Inject;
 
 /**
@@ -45,7 +45,7 @@
 
   public void build(IBuildContext context, IProgressMonitor monitor) throws CoreException {
     IProject project = context.getBuiltProject();
-    Preferences preferences = loadPreferences(preferenceStoreAccess, project);
+    CompilerPreferences preferences = loadPreferences(preferenceStoreAccess, project);
     if (!preferences.compileProtoFiles) return;
     List<Delta> deltas = context.getDeltas();
     if (deltas.isEmpty()) return;
@@ -78,7 +78,7 @@
     return b.length() == 0 ? null : b.toString();
   }
 
-  private void generateSingleProto(IFile source, String protocPath, TargetLanguage language, String outputFolderPath) {
+  private void generateSingleProto(IFile source, String protocPath, CompilerTargetLanguage language, String outputFolderPath) {
     String command = commandFactory.protocCommand(source, protocPath, language, outputFolderPath);
     try {
       Process process = Runtime.getRuntime().exec(command);
@@ -119,13 +119,13 @@
     return r.getLocation().toOSString();
   }
 
-  private static void refresh(IFolder outputFolder, RefreshTarget refreshTarget, IProgressMonitor monitor)
+  private static void refresh(IFolder outputFolder, PostCompilationRefreshTarget refreshTarget, IProgressMonitor monitor)
       throws CoreException {
     IResource target = refreshTarget(outputFolder, refreshTarget);
     target.refreshLocal(DEPTH_INFINITE, monitor);
   }
 
-  private static IResource refreshTarget(IFolder outputFolder, RefreshTarget refreshTarget) {
+  private static IResource refreshTarget(IFolder outputFolder, PostCompilationRefreshTarget refreshTarget) {
     if (refreshTarget.equals(PROJECT)) return outputFolder.getProject();
     return outputFolder;
   }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocCommandFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocCommandFactory.java
index 2a08ea7..f3fc231 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocCommandFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocCommandFactory.java
@@ -14,20 +14,20 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IPath;
 
-import com.google.eclipse.protobuf.ui.preferences.compiler.TargetLanguage;
+import com.google.eclipse.protobuf.ui.preferences.compiler.CompilerTargetLanguage;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
 class ProtocCommandFactory {
-  private static final Map<TargetLanguage, String> LANG_OUT_FLAG = new HashMap<TargetLanguage, String>();
+  private static final Map<CompilerTargetLanguage, String> LANG_OUT_FLAG = new HashMap<CompilerTargetLanguage, String>();
 
   static {
-    for (TargetLanguage lang : TargetLanguage.values())
+    for (CompilerTargetLanguage lang : CompilerTargetLanguage.values())
       LANG_OUT_FLAG.put(lang, "--" + lang.name().toLowerCase() + "_out=");
   }
 
-  String protocCommand(IFile protoFile, String protocPath, TargetLanguage language, String outputFolderPath) {
+  String protocCommand(IFile protoFile, String protocPath, CompilerTargetLanguage language, String outputFolderPath) {
     IPath protoFilePath = protoFile.getLocation();
     StringBuilder command = new StringBuilder();
     command.append(protocPath).append(" ");
@@ -38,7 +38,7 @@
     return command.toString();
   }
 
-  private String langOutFlag(TargetLanguage targetLanguage) {
+  private String langOutFlag(CompilerTargetLanguage targetLanguage) {
     return LANG_OUT_FLAG.get(targetLanguage);
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferenceNames.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferenceNames.java
similarity index 94%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferenceNames.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferenceNames.java
index b18a066..d6f6501 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferenceNames.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferenceNames.java
@@ -11,7 +11,7 @@
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
-final class PreferenceNames {
+final class CompilerPreferenceNames {
 
   static final String ENABLE_PROJECT_SETTINGS = "compiler.enableProjectSettings";
   static final String COMPILE_PROTO_FILES = "compiler.compileProtoFiles";
@@ -26,5 +26,5 @@
   static final String REFRESH_PROJECT = "compiler.refreshProject";
   static final String REFRESH_OUTPUT_FOLDER = "compiler.refreshOutputProject";
 
-  private PreferenceNames() {}
+  private CompilerPreferenceNames() {}
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferencePage.java
similarity index 98%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferencePage.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferencePage.java
index 0a1d451..f8fd406 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferencePage.java
@@ -9,7 +9,7 @@
 package com.google.eclipse.protobuf.ui.preferences.compiler;
 
 import static com.google.eclipse.protobuf.ui.preferences.compiler.Messages.*;
-import static com.google.eclipse.protobuf.ui.preferences.compiler.PreferenceNames.*;
+import static com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferenceNames.*;
 import static org.eclipse.core.runtime.IStatus.OK;
 import static org.eclipse.xtext.util.Strings.isEmpty;
 
@@ -33,9 +33,9 @@
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class PreferencePage extends PreferenceAndPropertyPage {
+public class CompilerPreferencePage extends PreferenceAndPropertyPage {
 
-  private static final String PREFERENCE_PAGE_ID = PreferencePage.class.getName();
+  private static final String PREFERENCE_PAGE_ID = CompilerPreferencePage.class.getName();
 
   private Button btnCompileProtoFiles;
   private TabFolder tabFolder;
@@ -61,7 +61,7 @@
 
   @Inject private FolderNameValidator folderNameValidator;
   
-  @Inject public PreferencePage(IPreferenceStoreAccess preferenceStoreAccess) {
+  @Inject public CompilerPreferencePage(IPreferenceStoreAccess preferenceStoreAccess) {
     super(preferenceStoreAccess);
   }
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/Preferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferences.java
similarity index 75%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/Preferences.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferences.java
index 7aef536..77142c2 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/Preferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferences.java
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.ui.preferences.compiler;
 
-import static com.google.eclipse.protobuf.ui.preferences.compiler.PreferenceNames.*;
+import static com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferenceNames.*;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -19,29 +19,29 @@
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class Preferences {
+public class CompilerPreferences {
 
   public final boolean compileProtoFiles;
   public final String protocPath;
-  public final TargetLanguage language;
+  public final CompilerTargetLanguage language;
   public final String outputFolderName;
   public final boolean refreshResources;
-  public final RefreshTarget refreshTarget;
+  public final PostCompilationRefreshTarget refreshTarget;
 
-  public static Preferences loadPreferences(IPreferenceStoreAccess access, IProject project) {
+  public static CompilerPreferences loadPreferences(IPreferenceStoreAccess access, IProject project) {
     IPreferenceStore store = access.getWritablePreferenceStore(project);
     boolean useProjectPreferences = store.getBoolean(ENABLE_PROJECT_SETTINGS);
     if (!useProjectPreferences) store = access.getWritablePreferenceStore();
-    return new Preferences(store);
+    return new CompilerPreferences(store);
   }
 
-  private Preferences(IPreferenceStore store) {
+  private CompilerPreferences(IPreferenceStore store) {
     compileProtoFiles = store.getBoolean(COMPILE_PROTO_FILES);
     boolean useProtocInSystemPath = store.getBoolean(USE_PROTOC_IN_SYSTEM_PATH);
     protocPath = (useProtocInSystemPath) ? "protoc" : store.getString(PROTOC_FILE_PATH);
-    language = TargetLanguage.find(store);
+    language = CompilerTargetLanguage.find(store);
     outputFolderName = store.getString(OUTPUT_FOLDER_NAME);
     refreshResources = store.getBoolean(REFRESH_RESOURCES);
-    refreshTarget = RefreshTarget.find(store);
+    refreshTarget = PostCompilationRefreshTarget.find(store);
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferencesInitializer.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferencesInitializer.java
index 77be2f3..0b23cd6 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferencesInitializer.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferencesInitializer.java
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.ui.preferences.compiler;
 
-import static com.google.eclipse.protobuf.ui.preferences.compiler.PreferenceNames.*;
+import static com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferenceNames.*;
 
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerTargetLanguage.java
similarity index 87%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguage.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerTargetLanguage.java
index d081eb1..9bf1185 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerTargetLanguage.java
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.ui.preferences.compiler;
 
-import static com.google.eclipse.protobuf.ui.preferences.compiler.PreferenceNames.*;
+import static com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferenceNames.*;
 
 import org.eclipse.jface.preference.IPreferenceStore;
 
@@ -17,12 +17,12 @@
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public enum TargetLanguage {
+public enum CompilerTargetLanguage {
 
   JAVA, CPP, PYTHON;
 
   // TODO check if protoc can generate more than one language sources at the same time.
-  static TargetLanguage find(IPreferenceStore store) {
+  static CompilerTargetLanguage find(IPreferenceStore store) {
     if (store.getBoolean(GENERATE_JAVA_CODE)) return JAVA;
     if (store.getBoolean(GENERATE_CPP_CODE)) return CPP;
     if (store.getBoolean(GENERATE_PYTHON_CODE)) return PYTHON;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/RefreshTarget.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PostCompilationRefreshTarget.java
similarity index 81%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/RefreshTarget.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PostCompilationRefreshTarget.java
index cbd7964..cfba624 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/RefreshTarget.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PostCompilationRefreshTarget.java
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.ui.preferences.compiler;
 
-import static com.google.eclipse.protobuf.ui.preferences.compiler.PreferenceNames.REFRESH_PROJECT;
+import static com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferenceNames.REFRESH_PROJECT;
 
 import org.eclipse.jface.preference.IPreferenceStore;
 
@@ -17,11 +17,11 @@
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public enum RefreshTarget {
+public enum PostCompilationRefreshTarget {
 
   PROJECT, OUTPUT_FOLDER;
 
-  static RefreshTarget find(IPreferenceStore store) {
+  static PostCompilationRefreshTarget find(IPreferenceStore store) {
     if (store.getBoolean(REFRESH_PROJECT)) return PROJECT;
     return OUTPUT_FOLDER;
   }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferenceNames.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferenceNames.java
similarity index 90%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferenceNames.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferenceNames.java
index 444004f..e419776 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferenceNames.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferenceNames.java
@@ -11,12 +11,12 @@
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
-final class PreferenceNames {
+final class PathsPreferenceNames {
 
   static final String ENABLE_PROJECT_SETTINGS = "paths.enableProjectSettings";
   static final String ALL_PROTOS_IN_ONE_FOLDER_ONLY = "paths.oneFolderOnly";
   static final String PROTOS_IN_MULTIPLE_FOLDERS = "paths.multipleFolders";
   static final String FOLDER_NAMES = "paths.folderNames";
 
-  private PreferenceNames() {}
+  private PathsPreferenceNames() {}
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java
similarity index 95%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferencePage.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java
index 7f45f3d..ec8e0c8 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java
@@ -9,7 +9,7 @@
 package com.google.eclipse.protobuf.ui.preferences.paths;
 
 import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.*;
-import static com.google.eclipse.protobuf.ui.preferences.paths.PreferenceNames.*;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferenceNames.*;
 import static com.google.eclipse.protobuf.ui.util.Strings.CSV_PATTERN;
 import static org.eclipse.core.runtime.IStatus.OK;
 import static org.eclipse.xtext.util.Strings.isEmpty;
@@ -32,9 +32,9 @@
  * 
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class PreferencePage extends PreferenceAndPropertyPage {
+public class PathsPreferencePage extends PreferenceAndPropertyPage {
 
-  private static final String PREFERENCE_PAGE_ID = PreferencePage.class.getName();
+  private static final String PREFERENCE_PAGE_ID = PathsPreferencePage.class.getName();
 
   private Group grpResolutionOfImported;
   private Button btnOneFolderOnly;
@@ -43,7 +43,7 @@
 
   @Inject private FolderNameValidator folderNameValidator;
 
-  @Inject public PreferencePage(IPreferenceStoreAccess preferenceStoreAccess) {
+  @Inject public PathsPreferencePage(IPreferenceStoreAccess preferenceStoreAccess) {
     super(preferenceStoreAccess);
   }
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferenceReader.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferenceReader.java
similarity index 83%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferenceReader.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferenceReader.java
index 3f7cb03..d55c8df 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferenceReader.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferenceReader.java
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.ui.preferences.paths;
 
-import static com.google.eclipse.protobuf.ui.preferences.paths.PreferenceNames.ENABLE_PROJECT_SETTINGS;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferenceNames.ENABLE_PROJECT_SETTINGS;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -21,14 +21,14 @@
  * 
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class PreferenceReader {
+public class PathsPreferenceReader {
 
   @Inject private IPreferenceStoreAccess storeAccess;
   
-  public Preferences readFromPrefereceStore(IProject project) {
+  public PathsPreferences readFromPrefereceStore(IProject project) {
     IPreferenceStore store = storeAccess.getWritablePreferenceStore(project);
     boolean useProject = store.getBoolean(ENABLE_PROJECT_SETTINGS);
     if (!useProject) store = storeAccess.getWritablePreferenceStore();
-    return new Preferences(store);
+    return new PathsPreferences(store);
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/Preferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java
similarity index 71%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/Preferences.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java
index 8613469..20ef81a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/Preferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java
@@ -8,8 +8,8 @@
  */
 package com.google.eclipse.protobuf.ui.preferences.paths;
 
-import static com.google.eclipse.protobuf.ui.preferences.paths.FileResolutionType.SINGLE_FOLDER;
-import static com.google.eclipse.protobuf.ui.preferences.paths.PreferenceNames.FOLDER_NAMES;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PathsResolutionType.SINGLE_FOLDER;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferenceNames.FOLDER_NAMES;
 import static com.google.eclipse.protobuf.ui.util.Strings.CSV_PATTERN;
 import static java.util.Arrays.asList;
 import static java.util.Collections.*;
@@ -23,23 +23,23 @@
  * 
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class Preferences {
+public class PathsPreferences {
 
-  private final FileResolutionType fileResolutionType;
+  private final PathsResolutionType fileResolutionType;
   private final List<String> folderNames; 
   
-  Preferences(IPreferenceStore store) {
-    fileResolutionType = FileResolutionType.find(store);
+  PathsPreferences(IPreferenceStore store) {
+    fileResolutionType = PathsResolutionType.find(store);
     folderNames = folderNames(fileResolutionType, store);
   }
   
-  private static List<String> folderNames(FileResolutionType types, IPreferenceStore store) {
+  private static List<String> folderNames(PathsResolutionType types, IPreferenceStore store) {
     if (types.equals(SINGLE_FOLDER)) return emptyList();
     String[] folderNames = store.getString(FOLDER_NAMES).split(CSV_PATTERN);
     return unmodifiableList(asList(folderNames));
   }
 
-  public FileResolutionType fileResolutionType() {
+  public PathsResolutionType fileResolutionType() {
     return fileResolutionType;
   }
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencesInitializer.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencesInitializer.java
index 68652ac..45f4cc2 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencesInitializer.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencesInitializer.java
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.ui.preferences.paths;
 
-import static com.google.eclipse.protobuf.ui.preferences.paths.PreferenceNames.*;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferenceNames.*;
 
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/FileResolutionType.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsResolutionType.java
similarity index 82%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/FileResolutionType.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsResolutionType.java
index f451f97..a8c2a84 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/FileResolutionType.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsResolutionType.java
@@ -7,7 +7,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  */package com.google.eclipse.protobuf.ui.preferences.paths;
 
-import static com.google.eclipse.protobuf.ui.preferences.paths.PreferenceNames.ALL_PROTOS_IN_ONE_FOLDER_ONLY;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferenceNames.ALL_PROTOS_IN_ONE_FOLDER_ONLY;
 
 import org.eclipse.jface.preference.IPreferenceStore;
 
@@ -16,11 +16,11 @@
  * 
  * @author alruiz@google.com (Alex Ruiz)
  */
-public enum FileResolutionType {
+public enum PathsResolutionType {
 
   SINGLE_FOLDER, MULTIPLE_FOLDERS;
   
-  static FileResolutionType find(IPreferenceStore store) {
+  static PathsResolutionType find(IPreferenceStore store) {
     if (store.getBoolean(ALL_PROTOS_IN_ONE_FOLDER_ONLY)) return SINGLE_FOLDER;
     return MULTIPLE_FOLDERS;
   }
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 d3659fa..5c57348 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
@@ -8,7 +8,7 @@
  */
 package com.google.eclipse.protobuf.ui.scoping;
 
-import static com.google.eclipse.protobuf.ui.preferences.paths.FileResolutionType.SINGLE_FOLDER;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PathsResolutionType.SINGLE_FOLDER;
 import static org.eclipse.emf.common.util.URI.createURI;
 import static org.eclipse.xtext.util.Tuples.pair;
 
@@ -22,8 +22,8 @@
 import org.eclipse.xtext.util.Pair;
 
 import com.google.eclipse.protobuf.scoping.IFileUriResolver;
-import com.google.eclipse.protobuf.ui.preferences.paths.PreferenceReader;
-import com.google.eclipse.protobuf.ui.preferences.paths.Preferences;
+import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferenceReader;
+import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
 import com.google.inject.Inject;
 
 /**
@@ -34,7 +34,7 @@
   private static final String PREFIX = "platform:/resource";
   private static final String SEPARATOR = "/";
 
-  @Inject private PreferenceReader preferenceReader;
+  @Inject private PathsPreferenceReader preferenceReader;
   @Inject private Resources resources;
   
   /*
@@ -63,7 +63,7 @@
   
   private String resolveUri(Pair<String, List<String>> importUri, URI resourceUri) {
     IProject project = resources.project(resourceUri);
-    Preferences preferences = preferenceReader.readFromPrefereceStore(project);
+    PathsPreferences preferences = preferenceReader.readFromPrefereceStore(project);
     List<String> segments = removeFirstAndLast(resourceUri.segmentsList());
     if (preferences.fileResolutionType().equals(SINGLE_FOLDER)) {
       return resolveUri(importUri, segments);
