diff --git a/com.google.eclipse.protobuf.cdt.test/src/com/google/eclipse/protobuf/cdt/matching/MessageMatcherStrategy_matchingProtobufElementLocations_Test.java b/com.google.eclipse.protobuf.cdt.test/src/com/google/eclipse/protobuf/cdt/matching/MessageMatcherStrategy_matchingProtobufElementLocations_Test.java
index 42ba588..de7a683 100644
--- a/com.google.eclipse.protobuf.cdt.test/src/com/google/eclipse/protobuf/cdt/matching/MessageMatcherStrategy_matchingProtobufElementLocations_Test.java
+++ b/com.google.eclipse.protobuf.cdt.test/src/com/google/eclipse/protobuf/cdt/matching/MessageMatcherStrategy_matchingProtobufElementLocations_Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014 Google Inc.
+ * Copyright (c) 2012 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.cdt.test/src/com/google/eclipse/protobuf/cdt/util/ExtendedListIterator_Test.java b/com.google.eclipse.protobuf.cdt.test/src/com/google/eclipse/protobuf/cdt/util/ExtendedListIterator_Test.java
index 59382c3..ed8ed08 100644
--- a/com.google.eclipse.protobuf.cdt.test/src/com/google/eclipse/protobuf/cdt/util/ExtendedListIterator_Test.java
+++ b/com.google.eclipse.protobuf.cdt.test/src/com/google/eclipse/protobuf/cdt/util/ExtendedListIterator_Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014 Google Inc.
+ * Copyright (c) 2012 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/mapping/IBindings.java b/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/mapping/IBindings.java
index 6f0dd3d..4773455 100644
--- a/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/mapping/IBindings.java
+++ b/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/mapping/IBindings.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014 Google Inc.
+ * Copyright (c) 2012 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/matching/MessageMatcherStrategy.java b/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/matching/MessageMatcherStrategy.java
index 26394a3..eb6713f 100644
--- a/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/matching/MessageMatcherStrategy.java
+++ b/com.google.eclipse.protobuf.cdt/src/com/google/eclipse/protobuf/cdt/matching/MessageMatcherStrategy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014 Google Inc.
+ * Copyright (c) 2012 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.feature/feature.properties b/com.google.eclipse.protobuf.feature/feature.properties
index 0fbd4dd..97c61be 100644
--- a/com.google.eclipse.protobuf.feature/feature.properties
+++ b/com.google.eclipse.protobuf.feature/feature.properties
@@ -30,7 +30,7 @@
 
 # copyright
 copyright=\
-Copyright (c) 2011, 2014 Google, Inc.\n\   
+Copyright (c) 2011 Google, Inc.\n\   
 All rights reserved. This program and the accompanying materials\n\
 are made available under the terms of the Eclipse Public License v1.0\n\
 which accompanies this distribution, and is available at\n\
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/bugs/Issue147_AddSupportForGroupOptions_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/bugs/Issue147_AddSupportForGroupOptions_Test.java
index b6c4997..62a5015 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/bugs/Issue147_AddSupportForGroupOptions_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/bugs/Issue147_AddSupportForGroupOptions_Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java
index bb1a53b..4d29754 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_availableOptionsFor_Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_enumTypeOf_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_enumTypeOf_Test.java
index d84468e..137f118 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_enumTypeOf_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor_enumTypeOf_Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java
index f338235..1c13b6f 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_target_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_target_Test.java
index 1bec02d..8b30f48 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_target_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_OptionSource_target_Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/IntegrationTestModule.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/IntegrationTestModule.java
index b045ab3..695fdad 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/IntegrationTestModule.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/IntegrationTestModule.java
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2011, 2014 Google Inc.
+* Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/DirectoryPath_parse_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/DirectoryPath_parse_Test.java
index ca38e0a..d3b5bda 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/DirectoryPath_parse_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/core/DirectoryPath_parse_Test.java
@@ -19,7 +19,7 @@
 import org.junit.Before;
 import org.junit.Test;
 
-import com.google.eclipse.protobuf.ui.preferences.locations.DirectoryPath;
+import com.google.eclipse.protobuf.ui.preferences.paths.DirectoryPath;
 
 /**
  * Tests for <code>{@link DirectoryPath#parse(String, IProject)}</code>
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 8fa8a74..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
@@ -19,7 +19,7 @@
 import org.junit.Before;
 import org.junit.Test;
 
-import com.google.eclipse.protobuf.ui.preferences.locations.ProjectVariable;
+import com.google.eclipse.protobuf.ui.preferences.paths.ProjectVariable;
 
 /**
  * Tests for <code>{@link ProjectVariable#replaceProjectNameWithProjectVariable(IPath, IProject)}</code>.
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 18c58e1..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
@@ -19,7 +19,7 @@
 import org.junit.Before;
 import org.junit.Test;
 
-import com.google.eclipse.protobuf.ui.preferences.locations.ProjectVariable;
+import com.google.eclipse.protobuf.ui.preferences.paths.ProjectVariable;
 
 /**
  * Tests for <code>{@link ProjectVariable#replaceProjectVariableWithProjectName(IPath, IProject)}</code>.
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 b842872..be2e9a1 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
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014 Google Inc.
+ * Copyright (c) 2012 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesUriResolver_resolveUri_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesUriResolver_resolveUri_Test.java
index 14e5ae4..d66f283 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesUriResolver_resolveUri_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesUriResolver_resolveUri_Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014 Google Inc.
+ * Copyright (c) 2012 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
@@ -21,8 +21,8 @@
 
 import com.google.eclipse.protobuf.junit.core.AbstractTestModule;
 import com.google.eclipse.protobuf.junit.core.XtextRule;
-import com.google.eclipse.protobuf.ui.preferences.locations.DirectoryPath;
-import com.google.eclipse.protobuf.ui.preferences.locations.LocationsPreferences;
+import com.google.eclipse.protobuf.ui.preferences.paths.DirectoryPath;
+import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
 import com.google.inject.Inject;
 
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -50,14 +50,14 @@
   @Inject private MultipleDirectoriesUriResolver strategy;
 
   private IPreferenceStore store;
-  private LocationsPreferences preferences;
-  private Iterable<LocationsPreferences> allPreferences;
+  private PathsPreferences preferences;
+  private Iterable<PathsPreferences> allPreferences;
 
   @Before public void setUp() {
     IPreferenceStoreAccess storeAccess = mock(IPreferenceStoreAccess.class);
     store = mock(IPreferenceStore.class);
     when(storeAccess.getWritablePreferenceStore(null)).thenReturn(store);
-    preferences = new LocationsPreferences(storeAccess , null);
+    preferences = new PathsPreferences(storeAccess , null);
     allPreferences = singletonList(preferences);
   }
 
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver_resolveUri_withFileUri_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver_resolveUri_withFileUri_Test.java
index fd2185f..bdaa894 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver_resolveUri_withFileUri_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver_resolveUri_withFileUri_Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver_resolveUri_withPlatformResourceUri_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver_resolveUri_withPlatformResourceUri_Test.java
index 0c3c592..a92fcf7 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver_resolveUri_withPlatformResourceUri_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver_resolveUri_withPlatformResourceUri_Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.ui/OSGI-INF/l10n/bundle.properties b/com.google.eclipse.protobuf.ui/OSGI-INF/l10n/bundle.properties
index 506667f..f0c1dc6 100644
--- a/com.google.eclipse.protobuf.ui/OSGI-INF/l10n/bundle.properties
+++ b/com.google.eclipse.protobuf.ui/OSGI-INF/l10n/bundle.properties
@@ -1,4 +1,9 @@
-#Properties file for com.google.eclipse.protobuf.ui
+# Copyright (c) 2014 Google Inc.
+#
+# All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+# Public License v1.0 which accompanies this distribution, and is available at
+#
+# http://www.eclipse.org/legal/epl-v10.html
 Bundle-Vendor = Google Inc.
 Bundle-Name = Protocol Buffer Descriptor Editor
 editor.name = Protocol Buffer Editor
@@ -6,7 +11,7 @@
 page.name.0 = Syntax Coloring
 page.name.1 = Templates
 page.name.2 = Compiler
-page.name.3 = Locations
+page.name.3 = Import Paths
 page.name.4 = Editor
 page.name.5 = Save Actions
 page.name.6 = Numeric Tags
diff --git a/com.google.eclipse.protobuf.ui/plugin.xml b/com.google.eclipse.protobuf.ui/plugin.xml
index 398e664..3570fe6 100644
--- a/com.google.eclipse.protobuf.ui/plugin.xml
+++ b/com.google.eclipse.protobuf.ui/plugin.xml
@@ -209,7 +209,7 @@
       </enabledWhen>
     </page>
     <page category="com.google.eclipse.protobuf.Protobuf"
-      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.locations.LocationsPreferencePage"
+      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">
       <enabledWhen>
         <adapt type="org.eclipse.core.resources.IProject" />
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
index 672127d..018ca3b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
@@ -12,7 +12,7 @@
 import static com.google.inject.name.Names.named;
 import static org.eclipse.ui.PlatformUI.isWorkbenchRunning;
 
-import com.google.eclipse.protobuf.preferences.descriptor.DescriptorPreferences;
+import com.google.eclipse.protobuf.preferences.general.GeneralPreferences;
 import com.google.eclipse.protobuf.resource.IResourceVerifier;
 import com.google.eclipse.protobuf.scoping.IImportResolver;
 import com.google.eclipse.protobuf.scoping.IUriResolver;
@@ -32,9 +32,8 @@
 import com.google.eclipse.protobuf.ui.preferences.editor.ignore.IgnoredExtensionsPreferences;
 import com.google.eclipse.protobuf.ui.preferences.editor.numerictag.NumericTagPreferences;
 import com.google.eclipse.protobuf.ui.preferences.editor.save.SaveActionsPreferences;
-import com.google.eclipse.protobuf.ui.preferences.general.GeneralPreferences;
-import com.google.eclipse.protobuf.ui.preferences.locations.LocationsPreferences;
 import com.google.eclipse.protobuf.ui.preferences.misc.MiscellaneousPreferences;
+import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
 import com.google.eclipse.protobuf.ui.resource.ProtobufServiceProvider;
 import com.google.eclipse.protobuf.ui.resource.ResourceVerifier;
 import com.google.eclipse.protobuf.ui.scoping.ImportResolver;
@@ -144,9 +143,8 @@
     configurePreferenceInitializer(binder, "ignoredExtensions", IgnoredExtensionsPreferences.Initializer.class);
     configurePreferenceInitializer(binder, "numericTagPreferences", NumericTagPreferences.Initializer.class);
     configurePreferenceInitializer(binder, "miscellaneousPreferences", MiscellaneousPreferences.Initializer.class);
-    configurePreferenceInitializer(binder, "pathsPreferences", LocationsPreferences.Initializer.class);
+    configurePreferenceInitializer(binder, "pathsPreferences", PathsPreferences.Initializer.class);
     configurePreferenceInitializer(binder, "saveActionsPreferences", SaveActionsPreferences.Initializer.class);
-    configurePreferenceInitializer(binder, "descriptorPreferences", DescriptorPreferences.Initializer.class);
   }
 
   private void configurePreferenceInitializer(Binder binder, String name,
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/AutoAddNatureEditorCallback.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/AutoAddNatureEditorCallback.java
index 63608bf..dcd8da2 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/AutoAddNatureEditorCallback.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/AutoAddNatureEditorCallback.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
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 687d408..1d5bc18 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
@@ -35,7 +35,7 @@
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
 
 import com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferences;
-import com.google.eclipse.protobuf.ui.preferences.locations.LocationsPreferences;
+import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
 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;
@@ -66,7 +66,7 @@
     if (!compilerPreferences.shouldCompileProtoFiles()) {
       return;
     }
-    LocationsPreferences pathsPreferences = new LocationsPreferences(storeAccess, project);
+    PathsPreferences pathsPreferences = new PathsPreferences(storeAccess, project);
     ProtocCommandBuilder commandBuilder = new ProtocCommandBuilder(compilerPreferences, pathsPreferences);
     for (Delta delta : deltas) {
       if (subMonitor.isCanceled()) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/semicolon/CommentNodesFinder.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/semicolon/CommentNodesFinder.java
index 1fad23f..296f715 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/semicolon/CommentNodesFinder.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/semicolon/CommentNodesFinder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
index 0c6c6d9..defd152 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ProtobufEditor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ProtobufEditor.java
index 67f7113..430ac27 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ProtobufEditor.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ProtobufEditor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014 Google Inc.
+ * Copyright (c) 2012 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferences.java
index 2235513..2f3d78e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferences.java
@@ -24,10 +24,11 @@
 import static com.google.eclipse.protobuf.ui.preferences.compiler.PreferenceNames.USE_PROTOC_IN_CUSTOM_PATH;
 import static com.google.eclipse.protobuf.ui.preferences.compiler.PreferenceNames.USE_PROTOC_IN_SYSTEM_PATH;
 
+import com.google.eclipse.protobuf.preferences.DefaultPreservingInitializer;
+
 import org.eclipse.core.resources.IProject;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
-import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -96,23 +97,23 @@
     return project;
   }
 
-  public static class Initializer implements IPreferenceStoreInitializer {
+  public static class Initializer extends DefaultPreservingInitializer {
     private static final String DEFAULT_OUTPUT_DIRECTORY = "src-gen";
 
-    @Override public void initialize(IPreferenceStoreAccess storeAccess) {
-      IPreferenceStore store = storeAccess.getWritablePreferenceStore();
-      store.setDefault(ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME, false);
-      store.setDefault(USE_PROTOC_IN_SYSTEM_PATH, true);
-      store.setDefault(USE_PROTOC_IN_CUSTOM_PATH, false);
-      store.setDefault(JAVA_CODE_GENERATION_ENABLED, false);
-      store.setDefault(CPP_CODE_GENERATION_ENABLED, false);
-      store.setDefault(PYTHON_CODE_GENERATION_ENABLED, false);
-      store.setDefault(JAVA_OUTPUT_DIRECTORY, DEFAULT_OUTPUT_DIRECTORY);
-      store.setDefault(CPP_OUTPUT_DIRECTORY, DEFAULT_OUTPUT_DIRECTORY);
-      store.setDefault(PYTHON_OUTPUT_DIRECTORY, DEFAULT_OUTPUT_DIRECTORY);
-      store.setDefault(REFRESH_RESOURCES, true);
-      store.setDefault(REFRESH_PROJECT, true);
-      store.setDefault(REFRESH_OUTPUT_DIRECTORY, false);
+    @Override
+    public void setDefaults() {
+      setDefault(ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME, false);
+      setDefault(USE_PROTOC_IN_SYSTEM_PATH, true);
+      setDefault(USE_PROTOC_IN_CUSTOM_PATH, false);
+      setDefault(JAVA_CODE_GENERATION_ENABLED, false);
+      setDefault(CPP_CODE_GENERATION_ENABLED, false);
+      setDefault(PYTHON_CODE_GENERATION_ENABLED, false);
+      setDefault(JAVA_OUTPUT_DIRECTORY, DEFAULT_OUTPUT_DIRECTORY);
+      setDefault(CPP_OUTPUT_DIRECTORY, DEFAULT_OUTPUT_DIRECTORY);
+      setDefault(PYTHON_OUTPUT_DIRECTORY, DEFAULT_OUTPUT_DIRECTORY);
+      setDefault(REFRESH_RESOURCES, true);
+      setDefault(REFRESH_PROJECT, true);
+      setDefault(REFRESH_OUTPUT_DIRECTORY, false);
     }
  }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/ignore/IgnoredExtensionsPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/ignore/IgnoredExtensionsPreferences.java
index 6fff59c..e930aff 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/ignore/IgnoredExtensionsPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/ignore/IgnoredExtensionsPreferences.java
@@ -11,9 +11,10 @@
 import static com.google.eclipse.protobuf.ui.preferences.editor.ignore.PreferenceNames.IGNORED_EXTENSIONS;
 import static com.google.eclipse.protobuf.ui.util.CommaSeparatedValues.splitCsv;
 
+import com.google.eclipse.protobuf.preferences.DefaultPreservingInitializer;
+
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
-import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -30,10 +31,10 @@
     return splitCsv(value);
   }
 
-  public static class Initializer implements IPreferenceStoreInitializer {
-    @Override public void initialize(IPreferenceStoreAccess storeAccess) {
-      IPreferenceStore store = storeAccess.getWritablePreferenceStore();
-      store.setDefault(IGNORED_EXTENSIONS, ".ascii.proto,.binary.proto,.xml.proto");
+  public static class Initializer extends DefaultPreservingInitializer {
+    @Override
+    public void setDefaults() {
+      setDefault(IGNORED_EXTENSIONS, ".ascii.proto,.binary.proto,.xml.proto");
     }
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/NumericTagPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/NumericTagPreferences.java
index 418b3e5..3a73756 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/NumericTagPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/NumericTagPreferences.java
@@ -10,11 +10,12 @@
 
 import static com.google.eclipse.protobuf.ui.preferences.editor.numerictag.PreferenceNames.NUMERIC_TAG_PATTERNS;
 
-import java.util.List;
+import com.google.eclipse.protobuf.preferences.DefaultPreservingInitializer;
 
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
-import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
+
+import java.util.List;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -31,10 +32,10 @@
     return NumericTagPatternSplitter.instance().splitIntoList(value);
   }
 
-  public static class Initializer implements IPreferenceStoreInitializer {
-    @Override public void initialize(IPreferenceStoreAccess storeAccess) {
-      IPreferenceStore store = storeAccess.getWritablePreferenceStore();
-      store.setDefault(NUMERIC_TAG_PATTERNS, "Next[\\s]+Id:[\\s]+[\\d]+");
+  public static class Initializer extends DefaultPreservingInitializer {
+    @Override
+    public void setDefaults() {
+      setDefault(NUMERIC_TAG_PATTERNS, "Next[\\s]+Id:[\\s]+[\\d]+");
     }
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/SaveActionsPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/SaveActionsPreferences.java
index 63d389b..660d2ce 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/SaveActionsPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/SaveActionsPreferences.java
@@ -12,11 +12,11 @@
 import static com.google.eclipse.protobuf.ui.preferences.editor.save.PreferenceNames.IN_EDITED_LINES;
 import static com.google.eclipse.protobuf.ui.preferences.editor.save.PreferenceNames.REMOVE_TRAILING_WHITESPACE;
 
+import com.google.eclipse.protobuf.preferences.DefaultPreservingInitializer;
+import com.google.inject.Inject;
+
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
-import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
-
-import com.google.inject.Inject;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -36,12 +36,12 @@
     return store.getBoolean(IN_EDITED_LINES);
   }
 
-  public static class Initializer implements IPreferenceStoreInitializer {
-    @Override public void initialize(IPreferenceStoreAccess storeAccess) {
-      IPreferenceStore store = storeAccess.getWritablePreferenceStore();
-      store.setDefault(REMOVE_TRAILING_WHITESPACE, true);
-      store.setDefault(IN_ALL_LINES, false);
-      store.setDefault(IN_EDITED_LINES, true);
+  public static class Initializer extends DefaultPreservingInitializer {
+    @Override
+    public void setDefaults() {
+      setDefault(REMOVE_TRAILING_WHITESPACE, true);
+      setDefault(IN_ALL_LINES, false);
+      setDefault(IN_EDITED_LINES, true);
     }
   }
 }
\ No newline at end of file
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/GeneralPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/GeneralPreferencePage.java
index 26b211c..5b498c7 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/GeneralPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/GeneralPreferencePage.java
@@ -8,23 +8,35 @@
  */
 package com.google.eclipse.protobuf.ui.preferences.general;
 
+import static com.google.eclipse.protobuf.preferences.general.PreferenceNames.DESCRIPTOR_PROTO_PATH;
+import static com.google.eclipse.protobuf.preferences.general.PreferenceNames.ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME;
+import static com.google.eclipse.protobuf.preferences.general.PreferenceNames.VALIDATE_FILES_ON_ACTIVATION;
 import static com.google.eclipse.protobuf.ui.preferences.general.Messages.contentValidation;
+import static com.google.eclipse.protobuf.ui.preferences.general.Messages.errorCannotResolveOptionsDefinitionFile;
+import static com.google.eclipse.protobuf.ui.preferences.general.Messages.errorEmptyOptionsDefinitionFile;
+import static com.google.eclipse.protobuf.ui.preferences.general.Messages.optionsDefinitionFile;
 import static com.google.eclipse.protobuf.ui.preferences.general.Messages.validateFilesOnActivation;
-import static com.google.eclipse.protobuf.ui.preferences.general.PreferenceNames.ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME;
-import static com.google.eclipse.protobuf.ui.preferences.general.PreferenceNames.VALIDATE_FILES_ON_ACTIVATION;
 import static com.google.eclipse.protobuf.ui.preferences.pages.binding.BindingToButtonSelection.bindSelectionOf;
+import static com.google.eclipse.protobuf.ui.preferences.pages.binding.BindingToTextValue.bindTextOf;
+import static org.eclipse.xtext.util.Strings.isEmpty;
+
+import com.google.eclipse.protobuf.preferences.general.PreferenceNames;
+import com.google.eclipse.protobuf.scoping.IUriResolver;
+import com.google.eclipse.protobuf.ui.preferences.pages.PreferenceAndPropertyPage;
+import com.google.eclipse.protobuf.ui.preferences.pages.binding.PreferenceBinder;
+import com.google.eclipse.protobuf.ui.preferences.pages.binding.PreferenceFactory;
+import com.google.inject.Inject;
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
-
-import com.google.eclipse.protobuf.ui.preferences.pages.PreferenceAndPropertyPage;
-import com.google.eclipse.protobuf.ui.preferences.pages.binding.PreferenceBinder;
-import com.google.eclipse.protobuf.ui.preferences.pages.binding.PreferenceFactory;
+import org.eclipse.swt.widgets.Text;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -35,6 +47,11 @@
   private Group grpValidation;
   private Button btnValidateOnActivation;
 
+  private Label lblDescriptorPath;
+  private Text txtDescriptorPath;
+
+  @Inject private IUriResolver resolver;
+
   @Override protected void doCreateContents(Composite parent) {
     grpValidation = new Group(parent, SWT.NONE);
     grpValidation.setLayout(new GridLayout(1, false));
@@ -44,6 +61,46 @@
     btnValidateOnActivation = new Button(grpValidation, SWT.CHECK);
     btnValidateOnActivation.setText(validateFilesOnActivation);
     new Label(parent, SWT.NONE);
+
+    lblDescriptorPath = new Label(parent, SWT.NONE);
+    lblDescriptorPath.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
+    lblDescriptorPath.setText(optionsDefinitionFile);
+
+    txtDescriptorPath = new Text(parent, SWT.BORDER);
+    txtDescriptorPath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+    addEventListeners();
+  }
+
+  private void addEventListeners() {
+    txtDescriptorPath.addModifyListener(new ModifyListener() {
+      @Override
+      public void modifyText(ModifyEvent e) {
+        checkState();
+      }
+    });
+  }
+
+  private void checkState() {
+    String descriptorPathText = txtDescriptorPath.getText();
+    if (isEmpty(descriptorPathText)) {
+      pageIsNowInvalid(errorEmptyOptionsDefinitionFile);
+      return;
+    }
+
+    if (isPropertyPage() && !canResolve(descriptorPathText)) {
+      pageIsNowInvalid(errorCannotResolveOptionsDefinitionFile);
+      return;
+    }
+    pageIsNowValid();
+  }
+
+  // TODO(het): Resolve based on unsaved preferences, rather than saved preferences
+  private boolean canResolve(String descriptorPathText) {
+    if (PreferenceNames.DEFAULT_DESCRIPTOR_PATH.equals(descriptorPathText)) {
+      return true;
+    }
+    return resolver.resolveUri(descriptorPathText, null, project()) != null;
   }
 
   @Override protected String enableProjectSettingsPreferenceName() {
@@ -52,7 +109,8 @@
 
   @Override protected void setupBinding(PreferenceBinder binder, PreferenceFactory factory) {
     binder.addAll(
-        bindSelectionOf(btnValidateOnActivation).to(factory.newBooleanPreference(VALIDATE_FILES_ON_ACTIVATION))
+        bindSelectionOf(btnValidateOnActivation).to(factory.newBooleanPreference(VALIDATE_FILES_ON_ACTIVATION)),
+        bindTextOf(txtDescriptorPath).to(factory.newStringPreference(DESCRIPTOR_PROTO_PATH))
       );
   }
 
@@ -71,6 +129,7 @@
   private void enableProjectSpecificOptions(boolean enabled) {
     grpValidation.setEnabled(enabled);
     btnValidateOnActivation.setEnabled(enabled);
+    txtDescriptorPath.setEnabled(enabled);
   }
 
   @Override protected String preferencePageId() {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/GeneralPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/GeneralPreferences.java
deleted file mode 100644
index e3e4b9a..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/GeneralPreferences.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.ui.preferences.general;
-
-import static com.google.eclipse.protobuf.ui.preferences.general.PreferenceNames.ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME;
-import static com.google.eclipse.protobuf.ui.preferences.general.PreferenceNames.VALIDATE_FILES_ON_ACTIVATION;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
-import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class GeneralPreferences {
-  private final IPreferenceStore store;
-
-  public static GeneralPreferences generalPreferences(IPreferenceStoreAccess storeAccess, IProject project) {
-    IPreferenceStore store = storeAccess.getWritablePreferenceStore(project);
-    boolean enableProjectSettings = store.getBoolean(ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME);
-    if (!enableProjectSettings) {
-      store = storeAccess.getWritablePreferenceStore();
-    }
-    return new GeneralPreferences(store);
-  }
-
-  private GeneralPreferences(IPreferenceStore store) {
-    this.store = store;
-  }
-
-  public boolean shouldValidateFilesOnActivation() {
-    return store.getBoolean(VALIDATE_FILES_ON_ACTIVATION);
-  }
-
-  public static class Initializer implements IPreferenceStoreInitializer {
-    @Override public void initialize(IPreferenceStoreAccess storeAccess) {
-      IPreferenceStore store = storeAccess.getWritablePreferenceStore();
-      store.setDefault(ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME, false);
-      store.setDefault(VALIDATE_FILES_ON_ACTIVATION, true);
-    }
-  }
-}
\ No newline at end of file
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/Messages.java
index 6685356..615d22c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/Messages.java
@@ -15,6 +15,9 @@
  */
 public class Messages extends NLS {
   public static String contentValidation;
+  public static String errorCannotResolveOptionsDefinitionFile;
+  public static String errorEmptyOptionsDefinitionFile;
+  public static String optionsDefinitionFile;
   public static String validateFilesOnActivation;
 
   static {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/Messages.properties b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/Messages.properties
index 35c51ce..045469a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/Messages.properties
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/Messages.properties
@@ -1,2 +1,11 @@
+# Copyright (c) 2014 Google Inc.
+#
+# All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+# Public License v1.0 which accompanies this distribution, and is available at
+#
+# http://www.eclipse.org/legal/epl-v10.html
 contentValidation=Content Validation
+errorCannotResolveOptionsDefinitionFile=Cannot find options definition file
+errorEmptyOptionsDefinitionFile=Must specify a path to the options definition file
+optionsDefinitionFile=Options definition file:
 validateFilesOnActivation=Validate files when activated in editor
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/PreferenceNames.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/PreferenceNames.java
deleted file mode 100644
index 2987ec4..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/PreferenceNames.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.ui.preferences.general;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- *
- */
-final class PreferenceNames {
-  static final String ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME = "general.enableProjectSettings";
-  static final String VALIDATE_FILES_ON_ACTIVATION = "general.validateFilesOnActivation";
-
-  private PreferenceNames() {}
-}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/LocationsPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/LocationsPreferences.java
deleted file mode 100644
index 5f58ed7..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/LocationsPreferences.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.ui.preferences.locations;
-
-import static com.google.eclipse.protobuf.ui.preferences.locations.DirectoryPath.parse;
-import static com.google.eclipse.protobuf.ui.preferences.locations.PreferenceNames.DIRECTORY_PATHS;
-import static com.google.eclipse.protobuf.ui.preferences.locations.PreferenceNames.FILES_IN_MULTIPLE_DIRECTORIES;
-import static com.google.eclipse.protobuf.ui.preferences.locations.PreferenceNames.FILES_IN_ONE_DIRECTORY_ONLY;
-import static com.google.eclipse.protobuf.ui.util.CommaSeparatedValues.splitCsv;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
-import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
-
-import com.google.common.base.Function;
-
-/**
- * "Locations" preferences, retrieved from an <code>{@link IPreferenceStore}</code>.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class LocationsPreferences {
-  private final IProject project;
-  private final IPreferenceStore store;
-
-  public LocationsPreferences(IPreferenceStoreAccess storeAccess, IProject project) {
-    this.store = storeAccess.getWritablePreferenceStore(project);
-    this.project = project;
-  }
-
-  public boolean areFilesInMultipleDirectories() {
-    return store.getBoolean(FILES_IN_MULTIPLE_DIRECTORIES);
-  }
-
-  public <T> T applyToEachDirectoryPath(Function<DirectoryPath, T> function) {
-    String directoryPaths = store.getString(DIRECTORY_PATHS);
-    for (String s : splitCsv(directoryPaths)) {
-      DirectoryPath path = parse(s, project);
-      T value = function.apply(path);
-      if (value != null) {
-        return value;
-      }
-    }
-    return null;
-  }
-
-  public static class Initializer implements IPreferenceStoreInitializer {
-    @Override public void initialize(IPreferenceStoreAccess access) {
-      IPreferenceStore store = access.getWritablePreferenceStore();
-      store.setDefault(FILES_IN_ONE_DIRECTORY_ONLY, true);
-      store.setDefault(FILES_IN_MULTIPLE_DIRECTORIES, false);
-      store.setDefault(DIRECTORY_PATHS, "");
-    }
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/misc/MiscellaneousPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/misc/MiscellaneousPreferences.java
index eb2b5c8..e9c0fca 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/misc/MiscellaneousPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/misc/MiscellaneousPreferences.java
@@ -10,9 +10,10 @@
 
 import static com.google.eclipse.protobuf.ui.preferences.misc.PreferenceNames.IS_GOOGLE_INTERNAL;
 
+import com.google.eclipse.protobuf.preferences.DefaultPreservingInitializer;
+
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
-import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
 
 /**
  * "Miscellaneous" preferences, retrieved from an <code>{@link IPreferenceStore}</code>.
@@ -30,10 +31,10 @@
     return store.getBoolean(IS_GOOGLE_INTERNAL);
   }
 
-  public static class Initializer implements IPreferenceStoreInitializer {
-    @Override public void initialize(IPreferenceStoreAccess storeAccess) {
-      IPreferenceStore store = storeAccess.getWritablePreferenceStore();
-      store.setDefault(IS_GOOGLE_INTERNAL, false);
+  public static class Initializer extends DefaultPreservingInitializer {
+    @Override
+    public void setDefaults() {
+      setDefault(IS_GOOGLE_INTERNAL, false);
     }
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BooleanPreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BooleanPreference.java
index d852737..3c5f5a3 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BooleanPreference.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BooleanPreference.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/AddDirectoryDialog.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
similarity index 87%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/AddDirectoryDialog.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
index 0ae3f38..7e7c6bb 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/AddDirectoryDialog.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
@@ -6,18 +6,18 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.preferences.locations;
+package com.google.eclipse.protobuf.ui.preferences.paths;
 
 import static org.eclipse.jface.dialogs.IDialogConstants.OK_ID;
 import static org.eclipse.xtext.util.Strings.isEmpty;
-import static com.google.eclipse.protobuf.ui.preferences.locations.DirectorySelectionDialogs.showFileSystemDirectorySelectionDialog;
-import static com.google.eclipse.protobuf.ui.preferences.locations.DirectorySelectionDialogs.showWorkspaceDirectorySelectionDialog;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.addDirectoryPath;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.browseFileSystem;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.browseWorkspace;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.directory;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.isWorkspacePathCheck;
 import static com.google.eclipse.protobuf.ui.preferences.pages.TextWidgets.setEditable;
+import static com.google.eclipse.protobuf.ui.preferences.paths.DirectorySelectionDialogs.showFileSystemDirectorySelectionDialog;
+import static com.google.eclipse.protobuf.ui.preferences.paths.DirectorySelectionDialogs.showWorkspaceDirectorySelectionDialog;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.addDirectoryPath;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.browseFileSystem;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.browseWorkspace;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.directory;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.isWorkspacePathCheck;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/DirectoryPath.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath.java
similarity index 94%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/DirectoryPath.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath.java
index 975e790..e10a516 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/DirectoryPath.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath.java
@@ -6,9 +6,9 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.preferences.locations;
+package com.google.eclipse.protobuf.ui.preferences.paths;
 
-import static com.google.eclipse.protobuf.ui.preferences.locations.ProjectVariable.replaceProjectVariableWithProjectName;
+import static com.google.eclipse.protobuf.ui.preferences.paths.ProjectVariable.replaceProjectVariableWithProjectName;
 import static com.google.eclipse.protobuf.ui.util.IPaths.directoryLocationInWorkspace;
 
 import java.util.regex.Matcher;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/DirectoryPathsEditor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java
similarity index 94%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/DirectoryPathsEditor.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java
index 7cb3dcc..06c5248 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/DirectoryPathsEditor.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java
@@ -6,15 +6,15 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.preferences.locations;
+package com.google.eclipse.protobuf.ui.preferences.paths;
 
 import static java.util.Collections.unmodifiableList;
 import static org.eclipse.jface.window.Window.OK;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.add;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.directories;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.down;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.remove;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.up;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.add;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.directories;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.down;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.remove;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.up;
 
 import java.util.Collection;
 import java.util.LinkedList;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/DirectorySelectionDialogs.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java
similarity index 88%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/DirectorySelectionDialogs.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java
index df8a323..af900d0 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/DirectorySelectionDialogs.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java
@@ -6,15 +6,15 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.preferences.locations;
+package com.google.eclipse.protobuf.ui.preferences.paths;
 
 import static org.eclipse.core.runtime.Status.OK_STATUS;
 import static org.eclipse.jface.window.Window.OK;
 import static org.eclipse.ui.views.navigator.ResourceComparator.NAME;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.directorySelection;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.errorElementIsNotDirectory;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.selectFileSystemDirectory;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.selectWorkspaceDirectory;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.directorySelection;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.errorElementIsNotDirectory;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.selectFileSystemDirectory;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.selectWorkspaceDirectory;
 import static com.google.eclipse.protobuf.ui.util.IStatusFactory.error;
 import static com.google.eclipse.protobuf.util.Workspaces.workspaceRoot;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/Messages.java
similarity index 84%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/Messages.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/Messages.java
index 30e5120..564b550 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/Messages.java
@@ -1,12 +1,12 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.preferences.locations;
+package com.google.eclipse.protobuf.ui.preferences.paths;
 
 import org.eclipse.osgi.util.NLS;
 
@@ -18,16 +18,13 @@
   public static String addDirectoryPath;
   public static String browseFileSystem;
   public static String browseWorkspace;
-  public static String descriptorPath;
   public static String directories;
   public static String directory;
   public static String directorySelection;
   public static String down;
   public static String enterDirectoryName;
-  public static String errorCannotResolveOptionsDefinitionFile;
   public static String errorElementIsNotDirectory;
   public static String errorEmptyDirectoryName;
-  public static String errorEmptyOptionsDefinitionFile;
   public static String errorNoDirectoryNames;
   public static String filesInMultipleDirectories;
   public static String filesInOneDirectoryOnly;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/Messages.properties b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/Messages.properties
similarity index 79%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/Messages.properties
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/Messages.properties
index 6fb73bb..884dc80 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/Messages.properties
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/Messages.properties
@@ -1,17 +1,20 @@
+# Copyright (c) 2014 Google Inc.
+#
+# All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+# Public License v1.0 which accompanies this distribution, and is available at
+#
+# http://www.eclipse.org/legal/epl-v10.html
 add=&Add...
 addDirectoryPath=Add directory path
 browseFileSystem=File system...
 browseWorkspace=Workspace...
-descriptorPath=Options definition file:
 directories=Directories
 directory=Directory:
 directorySelection=Directory selection
 down=Move Down
 enterDirectoryName=Enter directory name:
-errorCannotResolveOptionsDefinitionFile=Cannot find options definition file
 errorElementIsNotDirectory=The selected element is not a directory.
 errorEmptyDirectoryName=The name of the directory should not be empty
-errorEmptyOptionsDefinitionFile=Must specify a path to the options definition file
 errorNoDirectoryNames=Enter the names of the directories
 filesInMultipleDirectories=Look for imported files in directories:
 filesInOneDirectoryOnly=One directory for all .proto files
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/LocationsPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java
similarity index 68%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/LocationsPreferencePage.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java
index 2dafd64..1a7a7b2 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/LocationsPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java
@@ -1,30 +1,25 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.preferences.locations;
+package com.google.eclipse.protobuf.ui.preferences.paths;
 
 import static com.google.common.collect.Lists.newArrayList;
-import static com.google.eclipse.protobuf.preferences.descriptor.PreferenceNames.DESCRIPTOR_PROTO_PATH;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.descriptorPath;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.errorCannotResolveOptionsDefinitionFile;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.errorEmptyOptionsDefinitionFile;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.errorNoDirectoryNames;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.filesInMultipleDirectories;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.filesInOneDirectoryOnly;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.importedFilesPathResolution;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.rebuildProjectNow;
-import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.settingsChanged;
-import static com.google.eclipse.protobuf.ui.preferences.locations.PreferenceNames.DIRECTORY_PATHS;
-import static com.google.eclipse.protobuf.ui.preferences.locations.PreferenceNames.FILES_IN_MULTIPLE_DIRECTORIES;
-import static com.google.eclipse.protobuf.ui.preferences.locations.PreferenceNames.FILES_IN_ONE_DIRECTORY_ONLY;
 import static com.google.eclipse.protobuf.ui.preferences.pages.ButtonGroup.with;
 import static com.google.eclipse.protobuf.ui.preferences.pages.binding.BindingToButtonSelection.bindSelectionOf;
-import static com.google.eclipse.protobuf.ui.preferences.pages.binding.BindingToTextValue.bindTextOf;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.errorNoDirectoryNames;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.filesInMultipleDirectories;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.filesInOneDirectoryOnly;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.importedFilesPathResolution;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.rebuildProjectNow;
+import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.settingsChanged;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PreferenceNames.DIRECTORY_PATHS;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PreferenceNames.FILES_IN_MULTIPLE_DIRECTORIES;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PreferenceNames.FILES_IN_ONE_DIRECTORY_ONLY;
 import static com.google.eclipse.protobuf.ui.util.IStatusFactory.error;
 import static java.util.Collections.unmodifiableList;
 import static org.eclipse.core.resources.IncrementalProjectBuilder.FULL_BUILD;
@@ -34,8 +29,6 @@
 import static org.eclipse.xtext.util.Strings.isEmpty;
 import static org.eclipse.xtext.util.Strings.split;
 
-import com.google.eclipse.protobuf.preferences.descriptor.PreferenceNames;
-import com.google.eclipse.protobuf.scoping.IUriResolver;
 import com.google.eclipse.protobuf.ui.preferences.pages.DataChangedListener;
 import com.google.eclipse.protobuf.ui.preferences.pages.PreferenceAndPropertyPage;
 import com.google.eclipse.protobuf.ui.preferences.pages.binding.Binding;
@@ -50,8 +43,6 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
@@ -59,9 +50,7 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Text;
 import org.eclipse.xtext.ui.PluginImageHelper;
 
 import java.util.List;
@@ -71,21 +60,17 @@
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class LocationsPreferencePage extends PreferenceAndPropertyPage {
+public class PathsPreferencePage extends PreferenceAndPropertyPage {
   private static final String COMMA_DELIMITER = ",";
-  private static final String PREFERENCE_PAGE_ID = LocationsPreferencePage.class.getName();
+  private static final String PREFERENCE_PAGE_ID = PathsPreferencePage.class.getName();
 
   private Group grpResolutionOfImported;
   private Button btnOneDirectoryOnly;
   private Button btnMultipleDirectories;
   private DirectoryPathsEditor directoryPathsEditor;
 
-  private Label lblDescriptorPath;
-  private Text txtDescriptorPath;
-
   @Inject private PluginImageHelper imageHelper;
   @Inject private ValidationTrigger validation;
-  @Inject private IUriResolver resolver;
 
   private boolean stateChanged;
 
@@ -113,13 +98,6 @@
     directoryPathsEditor = new DirectoryPathsEditor(grpResolutionOfImported, project(), imageHelper);
     directoryPathsEditor.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
 
-    lblDescriptorPath = new Label(parent, SWT.NONE);
-    lblDescriptorPath.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
-    lblDescriptorPath.setText(descriptorPath);
-
-    txtDescriptorPath = new Text(parent, SWT.BORDER);
-    txtDescriptorPath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-
     addEventListeners();
   }
 
@@ -136,12 +114,6 @@
         checkState();
       }
     });
-    txtDescriptorPath.addModifyListener(new ModifyListener() {
-      @Override
-      public void modifyText(ModifyEvent e) {
-        checkState();
-      }
-    });
   }
 
   private void checkState() {
@@ -150,27 +122,9 @@
       pageIsNowInvalid(errorNoDirectoryNames);
       return;
     }
-    String descriptorPathText = txtDescriptorPath.getText();
-    if (isEmpty(descriptorPathText)) {
-      pageIsNowInvalid(errorEmptyOptionsDefinitionFile);
-      return;
-    }
-
-    if (!canResolve(descriptorPathText)) {
-      pageIsNowInvalid(errorCannotResolveOptionsDefinitionFile);
-      return;
-    }
     pageIsNowValid();
   }
 
-  // TODO(het): Resolve based on unsaved preferences, rather than saved preferences
-  private boolean canResolve(String descriptorPathText) {
-    if (PreferenceNames.DEFAULT_DESCRIPTOR_PATH.equals(descriptorPathText)) {
-      return true;
-    }
-    return resolver.resolveUri(descriptorPathText, null, project()) != null;
-  }
-
   @Override protected String enableProjectSettingsPreferenceName() {
     return null; // this page is always a "Project Properties" page
   }
@@ -194,10 +148,6 @@
         directoryPaths.updateValue(directoryNames());
       }
     });
-    // Need to bind the descriptor path after the directory paths so that the directory paths
-    // are loaded before validation of the form is attempted.
-    binder.add(
-        bindTextOf(txtDescriptorPath).to(factory.newStringPreference(DESCRIPTOR_PROTO_PATH)));
   }
 
   private String directoryNames() {
@@ -233,7 +183,6 @@
     btnOneDirectoryOnly.setEnabled(enabled);
     btnMultipleDirectories.setEnabled(enabled);
     directoryPathsEditor.setEnabled(btnMultipleDirectories.getSelection() && enabled);
-    txtDescriptorPath.setEnabled(enabled);
   }
 
   @Override protected String preferencePageId() {
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
new file mode 100644
index 0000000..f180516
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * 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.DirectoryPath.parse;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PreferenceNames.DIRECTORY_PATHS;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PreferenceNames.FILES_IN_MULTIPLE_DIRECTORIES;
+import static com.google.eclipse.protobuf.ui.preferences.paths.PreferenceNames.FILES_IN_ONE_DIRECTORY_ONLY;
+import static com.google.eclipse.protobuf.ui.util.CommaSeparatedValues.splitCsv;
+
+import com.google.common.base.Function;
+import com.google.eclipse.protobuf.preferences.DefaultPreservingInitializer;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
+
+/**
+ * "Locations" preferences, retrieved from an <code>{@link IPreferenceStore}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class PathsPreferences {
+  private final IProject project;
+  private final IPreferenceStore store;
+
+  public PathsPreferences(IPreferenceStoreAccess storeAccess, IProject project) {
+    this.store = storeAccess.getWritablePreferenceStore(project);
+    this.project = project;
+  }
+
+  public boolean areFilesInMultipleDirectories() {
+    return store.getBoolean(FILES_IN_MULTIPLE_DIRECTORIES);
+  }
+
+  public <T> T applyToEachDirectoryPath(Function<DirectoryPath, T> function) {
+    String directoryPaths = store.getString(DIRECTORY_PATHS);
+    for (String s : splitCsv(directoryPaths)) {
+      DirectoryPath path = parse(s, project);
+      T value = function.apply(path);
+      if (value != null) {
+        return value;
+      }
+    }
+    return null;
+  }
+
+  public static class Initializer extends DefaultPreservingInitializer {
+    @Override
+    public void setDefaults() {
+      setDefault(FILES_IN_ONE_DIRECTORY_ONLY, true);
+      setDefault(FILES_IN_MULTIPLE_DIRECTORIES, false);
+      setDefault(DIRECTORY_PATHS, "");
+    }
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/PreferenceNames.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferenceNames.java
similarity index 90%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/PreferenceNames.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferenceNames.java
index 5c84e50..c56c0f3 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/PreferenceNames.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferenceNames.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.preferences.locations;
+package com.google.eclipse.protobuf.ui.preferences.paths;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/ProjectVariable.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable.java
similarity index 95%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/ProjectVariable.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable.java
index fd8720a..5fa2383 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/locations/ProjectVariable.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable.java
@@ -6,7 +6,7 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.ui.preferences.locations;
+package com.google.eclipse.protobuf.ui.preferences.paths;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
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 1761612..205c5e9 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
@@ -21,19 +21,19 @@
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
-import com.google.eclipse.protobuf.ui.preferences.locations.DirectoryPath;
-import com.google.eclipse.protobuf.ui.preferences.locations.LocationsPreferences;
+import com.google.eclipse.protobuf.ui.preferences.paths.DirectoryPath;
+import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
 class ImportRootsProtocOption {
-  private final LocationsPreferences preferences;
+  private final PathsPreferences preferences;
 
   private boolean initialized;
   private List<String> importRoots;
 
-  ImportRootsProtocOption(LocationsPreferences preferences) {
+  ImportRootsProtocOption(PathsPreferences preferences) {
     this.preferences = preferences;
   }
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/command/ProtocCommandBuilder.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/command/ProtocCommandBuilder.java
index 8f92ff2..da8c1ab 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/command/ProtocCommandBuilder.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/protoc/command/ProtocCommandBuilder.java
@@ -18,7 +18,7 @@
 import org.eclipse.core.runtime.CoreException;
 
 import com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferences;
-import com.google.eclipse.protobuf.ui.preferences.locations.LocationsPreferences;
+import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
 
 /**
  * Builds the command to call protoc to compile a single .proto file.
@@ -31,7 +31,7 @@
   private final String protocPath;
   private final ImportRootsProtocOption importRootsProtocOption;
 
-  public ProtocCommandBuilder(CompilerPreferences compilerPreferences, LocationsPreferences pathsPreferences) {
+  public ProtocCommandBuilder(CompilerPreferences compilerPreferences, PathsPreferences pathsPreferences) {
     protocPath = compilerPreferences.protocPath();
     options.add(new DescriptorPathProtocOption(compilerPreferences));
     options.add(new CodeGenerationProtocOption("java_out", compilerPreferences.javaCodeGeneration()));
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/ImportResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/ImportResolver.java
index 7773810..c00c3b1 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/ImportResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/ImportResolver.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesUriResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesUriResolver.java
index c836a97..421b4fd 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesUriResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesUriResolver.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
@@ -11,8 +11,8 @@
 import static com.google.common.collect.Lists.newArrayList;
 
 import com.google.common.base.Function;
-import com.google.eclipse.protobuf.ui.preferences.locations.DirectoryPath;
-import com.google.eclipse.protobuf.ui.preferences.locations.LocationsPreferences;
+import com.google.eclipse.protobuf.ui.preferences.paths.DirectoryPath;
+import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
 import com.google.inject.Inject;
 
 import java.util.List;
@@ -24,8 +24,8 @@
   @Inject private UriResolverHelper uriResolver;
   @Inject private ResourceLocations locations;
 
-  public String resolveUri(String importUri, Iterable<LocationsPreferences> allPathPreferences) {
-    for (LocationsPreferences preferences : allPathPreferences) {
+  public String resolveUri(String importUri, Iterable<PathsPreferences> allPathPreferences) {
+    for (PathsPreferences preferences : allPathPreferences) {
       String resolved = resolveUri(importUri, preferences);
       if (resolved != null) {
         return resolved;
@@ -34,7 +34,7 @@
     return null;
   }
 
-  private String resolveUri(final String importUri, LocationsPreferences preferences) {
+  private String resolveUri(final String importUri, PathsPreferences preferences) {
     final List<String> unresolvedWorkspacePaths = newArrayList();
     String resolved = preferences.applyToEachDirectoryPath(new Function<DirectoryPath, String>() {
       @Override public String apply(DirectoryPath path) {
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 7b63fcf..afc042f 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
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver.java
index e8f4b7e..b7a9cb5 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryUriResolver.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
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 26dbfa9..eb4559a 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
@@ -13,7 +13,7 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.eclipse.protobuf.scoping.IUriResolver;
-import com.google.eclipse.protobuf.ui.preferences.locations.LocationsPreferences;
+import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
 import com.google.inject.Inject;
 
 import org.eclipse.core.resources.IProject;
@@ -42,21 +42,21 @@
     if (project == null) {
       return multipleDirectories.resolveUri(importUri, preferencesFromAllProjects());
     }
-    LocationsPreferences locations = new LocationsPreferences(storeAccess, project);
+    PathsPreferences locations = new PathsPreferences(storeAccess, project);
     if (locations.areFilesInMultipleDirectories()) {
       return multipleDirectories.resolveUri(importUri, ImmutableList.of(locations));
     }
     return singleDirectory.resolveUri(importUri, declaringResourceUri);
   }
 
-  private Iterable<LocationsPreferences> preferencesFromAllProjects() {
-    List<LocationsPreferences> allPreferences = new ArrayList<>();
+  private Iterable<PathsPreferences> preferencesFromAllProjects() {
+    List<PathsPreferences> allPreferences = new ArrayList<>();
     IWorkspaceRoot root = workspaceRoot();
     for (IProject project : root.getProjects()) {
       if (project.isHidden() || !project.isAccessible() || !XtextProjectHelper.hasNature(project)) {
         continue;
       }
-      LocationsPreferences preferences = new LocationsPreferences(storeAccess, project);
+      PathsPreferences preferences = new PathsPreferences(storeAccess, project);
       allPreferences.add(preferences);
     }
     return unmodifiableList(allPreferences);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/UriResolverHelper.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/UriResolverHelper.java
index 4e0347d..3fe806c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/UriResolverHelper.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/UriResolverHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014 Google Inc.
+ * Copyright (c) 2012 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
@@ -13,7 +13,7 @@
 
 import org.eclipse.emf.common.util.URI;
 
-import com.google.eclipse.protobuf.ui.preferences.locations.DirectoryPath;
+import com.google.eclipse.protobuf.ui.preferences.paths.DirectoryPath;
 import com.google.eclipse.protobuf.util.Uris;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateFileOnActivation.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateFileOnActivation.java
index 9f97de0..55f2941 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateFileOnActivation.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateFileOnActivation.java
@@ -9,19 +9,18 @@
  */
 package com.google.eclipse.protobuf.ui.validation;
 
-import static com.google.eclipse.protobuf.ui.preferences.general.GeneralPreferences.generalPreferences;
 import static com.google.eclipse.protobuf.ui.validation.ProtobufValidation.validate;
 
+import com.google.eclipse.protobuf.preferences.general.GeneralPreferences;
+import com.google.eclipse.protobuf.ui.plugin.ProtobufEditorPlugIn;
+import com.google.eclipse.protobuf.ui.util.Editors;
+
 import org.eclipse.core.resources.IProject;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPartReference;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
 
-import com.google.eclipse.protobuf.ui.plugin.ProtobufEditorPlugIn;
-import com.google.eclipse.protobuf.ui.preferences.general.GeneralPreferences;
-import com.google.eclipse.protobuf.ui.util.Editors;
-
 /**
  * Validates a .proto file when it is opened or activated.
  *
@@ -53,7 +52,7 @@
 
   private boolean shouldValidateEditor(IProject project) {
     IPreferenceStoreAccess storeAccess = ProtobufEditorPlugIn.getInstanceOf(IPreferenceStoreAccess.class);
-    GeneralPreferences preferences = generalPreferences(storeAccess, project);
+    GeneralPreferences preferences = new GeneralPreferences(storeAccess, project);
     return preferences.shouldValidateFilesOnActivation();
   }
 }
diff --git a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
index 3c426bb..e38e4d1 100644
--- a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
+++ b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
@@ -28,7 +28,8 @@
  com.google.eclipse.protobuf.parser,
  com.google.eclipse.protobuf.parser.antlr,
  com.google.eclipse.protobuf.parser.antlr.internal,
- com.google.eclipse.protobuf.preferences.descriptor,
+ com.google.eclipse.protobuf.preferences,
+ com.google.eclipse.protobuf.preferences.general,
  com.google.eclipse.protobuf.protobuf,
  com.google.eclipse.protobuf.protobuf.impl,
  com.google.eclipse.protobuf.protobuf.util,
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Imports.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Imports.java
index 066612a..9c0fa64 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Imports.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Imports.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/DefaultPreservingInitializer.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/DefaultPreservingInitializer.java
new file mode 100644
index 0000000..ca3ac47
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/DefaultPreservingInitializer.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2014 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.preferences;
+
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.xtext.Constants;
+import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
+import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
+import org.osgi.service.prefs.BackingStoreException;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * A preference store initializer that does not overwrite defaults that have already been set.
+ */
+public abstract class DefaultPreservingInitializer implements IPreferenceStoreInitializer {
+  @Inject
+  @Named(Constants.LANGUAGE_NAME)
+  private String preferenceScope;
+
+  private IPreferenceStore store;
+  private Set<String> alreadySetDefaults = new HashSet<>();
+
+  private static Logger LOG = Logger.getLogger(DefaultPreservingInitializer.class.getName());
+
+  @Override
+  public final void initialize(IPreferenceStoreAccess access) {
+    this.store = access.getWritablePreferenceStore();
+    try {
+      for (String key : DefaultScope.INSTANCE.getNode(preferenceScope).keys()) {
+        alreadySetDefaults.add(key);
+      }
+    } catch (BackingStoreException e) {
+      LOG.log(Level.SEVERE, "Unable to get already set defaults for " + preferenceScope, e);
+    }
+    setDefaults();
+  }
+
+  public abstract void setDefaults();
+
+  public void setDefault(String preference, double value) {
+    if (!alreadySetDefaults.contains(preference)) {
+      store.setDefault(preference, value);
+    }
+  }
+
+  public void setDefault(String preference, float value) {
+    if (!alreadySetDefaults.contains(preference)) {
+      store.setDefault(preference, value);
+    }
+  }
+
+  public void setDefault(String preference, int value) {
+    if (!alreadySetDefaults.contains(preference)) {
+      store.setDefault(preference, value);
+    }
+  }
+
+  public void setDefault(String preference, long value) {
+    if (!alreadySetDefaults.contains(preference)) {
+      store.setDefault(preference, value);
+    }
+  }
+
+  public void setDefault(String preference, String value) {
+    if (!alreadySetDefaults.contains(preference)) {
+      store.setDefault(preference, value);
+    }
+  }
+
+  public void setDefault(String preference, boolean value) {
+    if (!alreadySetDefaults.contains(preference)) {
+      store.setDefault(preference, value);
+    }
+  }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/descriptor/DescriptorPreferences.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/descriptor/DescriptorPreferences.java
deleted file mode 100644
index 8178915..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/descriptor/DescriptorPreferences.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2014 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.preferences.descriptor;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
-import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
-
-/**
- * Preferences for project-level descriptor proto.
- */
-public class DescriptorPreferences {
-  private final IPreferenceStore store;
-
-  public DescriptorPreferences(IPreferenceStoreAccess storeAccess, IProject project) {
-    this.store = storeAccess.getWritablePreferenceStore(project);
-  }
-
-  public String getDescriptorProtoPath() {
-    return store.getString(PreferenceNames.DESCRIPTOR_PROTO_PATH);
-  }
-
-  public static class Initializer implements IPreferenceStoreInitializer {
-    @Override public void initialize(IPreferenceStoreAccess access) {
-      IPreferenceStore store = access.getWritablePreferenceStore();
-      store.setDefault(PreferenceNames.DESCRIPTOR_PROTO_PATH,
-          PreferenceNames.DEFAULT_DESCRIPTOR_PATH);
-    }
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/general/GeneralPreferences.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/general/GeneralPreferences.java
new file mode 100644
index 0000000..bfabcd4
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/general/GeneralPreferences.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.preferences.general;
+
+import static com.google.eclipse.protobuf.preferences.general.PreferenceNames.ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME;
+import static com.google.eclipse.protobuf.preferences.general.PreferenceNames.VALIDATE_FILES_ON_ACTIVATION;
+
+import com.google.eclipse.protobuf.preferences.DefaultPreservingInitializer;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class GeneralPreferences {
+  private final IPreferenceStore store;
+
+  public GeneralPreferences(IPreferenceStoreAccess storeAccess, IProject project) {
+    IPreferenceStore preferenceStore = storeAccess.getWritablePreferenceStore(project);
+    boolean enableProjectSettings =
+        preferenceStore.getBoolean(ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME);
+    if (!enableProjectSettings) {
+      preferenceStore = storeAccess.getWritablePreferenceStore();
+    }
+    this.store = preferenceStore;
+  }
+
+  public boolean shouldValidateFilesOnActivation() {
+    return store.getBoolean(VALIDATE_FILES_ON_ACTIVATION);
+  }
+
+  public String getDescriptorProtoPath() {
+    return store.getString(PreferenceNames.DESCRIPTOR_PROTO_PATH);
+  }
+
+  public static class Initializer extends DefaultPreservingInitializer {
+    @Override
+    public void setDefaults() {
+      setDefault(ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME, false);
+      setDefault(VALIDATE_FILES_ON_ACTIVATION, true);
+      setDefault(PreferenceNames.DESCRIPTOR_PROTO_PATH, PreferenceNames.DEFAULT_DESCRIPTOR_PATH);
+    }
+  }
+}
\ No newline at end of file
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/descriptor/PreferenceNames.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/general/PreferenceNames.java
similarity index 60%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/descriptor/PreferenceNames.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/general/PreferenceNames.java
index 49c5aaa..0d75034 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/descriptor/PreferenceNames.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/preferences/general/PreferenceNames.java
@@ -6,14 +6,17 @@
  *
  * http://www.eclipse.org/legal/epl-v10.html
  */
-package com.google.eclipse.protobuf.preferences.descriptor;
+package com.google.eclipse.protobuf.preferences.general;
 
 /**
  * Preference names for descriptor proto preferences.
  */
 public final class PreferenceNames {
   public static final String DEFAULT_DESCRIPTOR_PATH = "google/protobuf/descriptor.proto";
-  public static final String DESCRIPTOR_PROTO_PATH = "descriptor.path";
+  public static final String DESCRIPTOR_PROTO_PATH = "general.descriptorPath";
+  public static final String ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME =
+      "general.enableProjectSettings";
+  public static final String VALIDATE_FILES_ON_ACTIVATION = "general.validateFilesOnActivation";
 
   private PreferenceNames() {}
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ComplexTypeFinderStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ComplexTypeFinderStrategy.java
index a43806d..28a31a6 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ComplexTypeFinderStrategy.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ComplexTypeFinderStrategy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IImportResolver.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IImportResolver.java
index 5866eab..6a73dc3 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IImportResolver.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IImportResolver.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IUriResolver.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IUriResolver.java
index 1ecfb83..b344e77 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IUriResolver.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IUriResolver.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java
index 828144b..174445f 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/OptionType.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/OptionType.java
index 8737101..2d773c9 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/OptionType.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/OptionType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
index 43772f2..85b6346 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
@@ -8,15 +8,15 @@
  */
 package com.google.eclipse.protobuf.scoping;
 
-import static com.google.eclipse.protobuf.preferences.descriptor.PreferenceNames.DESCRIPTOR_PROTO_PATH;
+import static com.google.eclipse.protobuf.preferences.general.PreferenceNames.DESCRIPTOR_PROTO_PATH;
 
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ImmutableList;
 import com.google.eclipse.protobuf.model.util.INodes;
-import com.google.eclipse.protobuf.preferences.descriptor.DescriptorPreferences;
-import com.google.eclipse.protobuf.preferences.descriptor.PreferenceNames;
+import com.google.eclipse.protobuf.preferences.general.GeneralPreferences;
+import com.google.eclipse.protobuf.preferences.general.PreferenceNames;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
@@ -126,7 +126,7 @@
         new LinkedHashMap<String, ProtoDescriptorProvider.ProtoDescriptorInfo>();
 
     // Add descriptor.proto from preferences
-    DescriptorPreferences preferences = new DescriptorPreferences(storeAccess, project);
+    GeneralPreferences preferences = new GeneralPreferences(storeAccess, project);
     String descriptorProtoUri = preferences.getDescriptorProtoPath();
     if (!PreferenceNames.DEFAULT_DESCRIPTOR_PATH.equals(descriptorProtoUri)) {
       URI descriptorProtoLocation =
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufImportUriResolver.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufImportUriResolver.java
index f6b4222..b3dfcec 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufImportUriResolver.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufImportUriResolver.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
index 6453cb6..b71ed89 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014 Google Inc.
+ * Copyright (c) 2011 Google Inc.
  *
  * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
  * Public License v1.0 which accompanies this distribution, and is available at
