diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/Preference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/Preference.java
index cd3fec5..2a8cbed 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/Preference.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/Preference.java
@@ -32,6 +32,14 @@
   }
 
   /**
+   * Returns the name of this preference.
+   * @return the name of this preference.
+   */
+  public final String name() {
+    return name;
+  }
+
+  /**
    * Returns the value of this preference.
    * @return the value of this preference.
    */
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 cb22c3a..e5966fd 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 @@
   @Override protected final Control createContents(Composite parent) {
     Composite contents = contentParent(parent);
     doCreateContents(contents);
-    setupBtnEnabledProjectSettingsBinding();
+    if (isPropertyPage()) setupBtnEnabledProjectSettingsBinding();
     setupBinding(preferenceBinder);
     preferenceBinder.applyValues();
     updateContents();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralPreferencePage.java
index 0f22af1..00d99d6 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralPreferencePage.java
@@ -28,17 +28,18 @@
 
   private static final String PREFERENCE_PAGE_ID = "com.google.eclipse.protobuf.Protobuf";
 
+  private Group grpValidation;
   private Button btnValidateOnActivation;
 
-  @Override protected void doCreateContents(Composite contents) {
-    // generated by WindowBuilder
-    Group grpValidation = new Group(contents, SWT.NONE);
+  @Override protected void doCreateContents(Composite parent) {
+    grpValidation = new Group(parent, SWT.NONE);
     grpValidation.setLayout(new GridLayout(1, false));
     grpValidation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
     grpValidation.setText(contentValidation);
 
     btnValidateOnActivation = new Button(grpValidation, SWT.CHECK);
     btnValidateOnActivation.setText(validateFilesOnActivation);
+    new Label(parent, SWT.NONE);
   }
 
   @Override protected BooleanPreference enableProjectSettingsPreference(IPreferenceStore store) {
@@ -52,7 +53,22 @@
       );
   }
 
-  @Override protected void onProjectSettingsActivation(boolean active) {}
+  @Override protected void updateContents() {
+    if (isPropertyPage()) {
+      boolean useProjectSettings = areProjectSettingsActive();
+      activateProjectSettings(useProjectSettings);
+      enableProjectSpecificOptions(useProjectSettings);
+    }
+  }
+
+  @Override protected void onProjectSettingsActivation(boolean active) {
+    enableProjectSpecificOptions(active);
+  }
+
+  private void enableProjectSpecificOptions(boolean isEnabled) {
+    grpValidation.setEnabled(isEnabled);
+    btnValidateOnActivation.setEnabled(isEnabled);
+  }
 
   @Override protected String preferencePageId() {
     return PREFERENCE_PAGE_ID;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateOnActivation.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateOnActivation.java
index f949ea3..3593840 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateOnActivation.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateOnActivation.java
@@ -1,10 +1,10 @@
 /*
  * 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.validation;
@@ -12,9 +12,9 @@
 import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.IMPORT__IMPORT_URI;
 import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
 
-import com.google.eclipse.protobuf.protobuf.Import;
-import com.google.eclipse.protobuf.util.ModelNodes;
+import java.util.List;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.ui.*;
 import org.eclipse.ui.part.FileEditorInput;
@@ -25,31 +25,46 @@
 import org.eclipse.xtext.ui.editor.model.*;
 import org.eclipse.xtext.util.concurrent.IUnitOfWork;
 
-import java.util.List;
+import com.google.eclipse.protobuf.protobuf.Import;
+import com.google.eclipse.protobuf.ui.internal.ProtobufActivator;
+import com.google.eclipse.protobuf.ui.preferences.pages.general.*;
+import com.google.eclipse.protobuf.util.ModelNodes;
+import com.google.inject.Injector;
 
 /**
  * Validates a .proto file when it is opened or activated.
- * 
+ *
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ValidateOnActivation implements IPartListener2 {
 
+  private static final String LANGUAGE_NAME = "com.google.eclipse.protobuf.Protobuf";
+
   private final ModelNodes nodes = new ModelNodes();
-  
+
   public void partActivated(IWorkbenchPartReference partRef) {
     final XtextEditor editor = protoEditorFrom(partRef);
     if (editor == null) return;
+    if (!shouldValidateEditor(editor.getResource().getProject())) return;
     validate(editor);
   }
-  
+
+  private boolean shouldValidateEditor(IProject project) {
+    Injector injector = ProtobufActivator.getInstance().getInjector(LANGUAGE_NAME);
+    GeneralPreferencesFactory factory = injector.getInstance(GeneralPreferencesFactory.class);
+    if (factory == null) return false;
+    GeneralPreferences preferences = factory.preferences(project);
+    return preferences.validateFilesOnActivation();
+  }
+
   private XtextEditor protoEditorFrom(IWorkbenchPartReference partRef) {
     XtextEditor editor = xtextEditorFrom(partRef);
     if (editor == null) return null;
-    if (!"com.google.eclipse.protobuf.Protobuf".equals(editor.getLanguageName())) return null;
+    if (!LANGUAGE_NAME.equals(editor.getLanguageName())) return null;
     if (!(editor.getEditorInput() instanceof FileEditorInput)) return null;
     return editor;
   }
-  
+
   private XtextEditor xtextEditorFrom(IWorkbenchPartReference partRef) {
     IWorkbenchPage page = partRef.getPage();
     if (page == null) return null;
@@ -81,7 +96,7 @@
     if (uri == null) return;
     anImport.setImportURI(uri);
   }
-  
+
   private String uriAsEnteredInEditor(Import anImport) {
     INode node = nodes.firstNodeForFeature(anImport, IMPORT__IMPORT_URI);
     if (node == null) return null;
