diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java
index 6105f8b..9d9c461 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java
@@ -49,7 +49,7 @@
     doCreateContents(contents);
     setupBinding(preferenceBinder);
     preferenceBinder.applyValues();
-    onPageCreation();
+    updateContents();
     return contents;
   }
 
@@ -123,9 +123,6 @@
    */
   protected abstract void setupBinding(PreferenceBinder preferenceBinder);
 
-  /** Method invoked after the page has been created. By default this method does nothing. */
-  protected void onPageCreation() {}
-
   /**
    * Returns the id of this preference page.
    * @return the id of this preference page.
@@ -160,7 +157,7 @@
   /**
    * Indicates whether this page is a "Project Properties" page or not.
    * @return {@code true} if this page is a "Project Properties" page, or {@code false} if this page is a
-   * "Worspace Settings" page.
+   * "Workspace Settings" page.
    */
   protected final boolean isPropertyPage() {
     return project != null;
@@ -213,12 +210,12 @@
 
   @Override protected final void performDefaults() {
     preferenceBinder.applyDefaults();
-    defaultsPerformed();
+    updateContents();
     super.performDefaults();
   }
 
-  /** Method invoked after this page's defaults have been processed. By default this method does nothing. */
-  protected void defaultsPerformed() {}
+  /** Refreshes this page with the stored/default preference values. */
+  protected void updateContents() {}
 
   /** Marks this page as "valid." */
   protected final void pageIsNowValid() {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencePage.java
index a76f5d6..81c9908 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferencePage.java
@@ -150,6 +150,7 @@
         FileDialog dialog = new FileDialog(getShell(), SWT.OPEN | SWT.SHEET);
         String file = dialog.open();
         if (file != null) txtProtocFilePath.setText(file);
+        checkState();
       }
     });
     btnRefreshResources.addSelectionListener(new SelectionAdapter() {
@@ -195,6 +196,9 @@
 
   @Override protected void setupBinding(PreferenceBinder preferenceBinder) {
     RawPreferences preferences = new RawPreferences(getPreferenceStore());
+    if (isPropertyPage()) {
+      preferenceBinder.add(bindSelectionOf(btnEnableProjectSettings).to(preferences.enableProjectSettings()));
+    }
     preferenceBinder.addAll(
         bindSelectionOf(btnCompileProtoFiles).to(preferences.compileProtoFiles()),
         bindSelectionOf(btnUseProtocInSystemPath).to(preferences.useProtocInSystemPath()),
@@ -210,20 +214,13 @@
         bindCodeGeneration(codeGenerationSettings.python())
           .to(preferences.pythonCodeGenerationEnabled(), preferences.pythonOutputDirectory())
       );
-    if (isPropertyPage()) {
-      preferenceBinder.add(bindSelectionOf(btnEnableProjectSettings).to(preferences.enableProjectSettings()));
-    }
   }
 
-  @Override protected void onPageCreation() {
-    defaultsPerformed();
-  }
-
-  @Override protected void defaultsPerformed() {
+  @Override protected void updateContents() {
     boolean compileProtoFiles = btnCompileProtoFiles.getSelection();
     boolean shouldEnableCompilerOptions = compileProtoFiles;
     if (isPropertyPage()) {
-      boolean useProjectSettings = btnEnableProjectSettings.isEnabled();
+      boolean useProjectSettings = areProjectSettingsActive();
       activateProjectSettings(useProjectSettings);
       enableProjectSpecificOptions(useProjectSettings);
       shouldEnableCompilerOptions = shouldEnableCompilerOptions && useProjectSettings;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencePage.java
index 925bcb2..3c5f8d0 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/paths/PathsPreferencePage.java
@@ -138,16 +138,12 @@
     directoryPathsEditor.directoryPaths(unmodifiableList(paths));
   }
 
-  @Override protected void onPageCreation() {
-    defaultsPerformed();
-  }
-
   /** {@inheritDoc} */
   @Override protected void onProjectSettingsActivation(boolean active) {
     enableProjectOptions(active);
   }
 
-  @Override protected void defaultsPerformed() {
+  @Override protected void updateContents() {
     enableProjectOptions(true);
   }
 
