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 9b18254..4009ecd 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
@@ -37,6 +37,8 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class CompilerPreferencePage extends PreferenceAndPropertyPage {
+  public CompilerPreferencePage() {
+  }
 
   private static final String PREFERENCE_PAGE_ID = CompilerPreferencePage.class.getName();
 
@@ -59,6 +61,9 @@
   @Inject private PluginImageHelper imageHelper;
 
   private final CodeGenerationSettings codeGenerationSettings = new CodeGenerationSettings();
+  private Group grpDescriptorLocation;
+  private Text txtDescriptorFilePath;
+  private Button btnDescriptorPathBrowse;
 
   @Override protected void doCreateContents(Composite parent) {
     btnCompileProtoFiles = new Button(parent, SWT.CHECK);
@@ -77,15 +82,15 @@
 
     grpCompilerLocation = new Group(cmpMain, SWT.NONE);
     grpCompilerLocation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-    grpCompilerLocation.setLayout(new GridLayout(4, false));
+    grpCompilerLocation.setLayout(new GridLayout(2, false));
     grpCompilerLocation.setText(protocLocation);
 
     btnUseProtocInSystemPath = new Button(grpCompilerLocation, SWT.RADIO);
-    btnUseProtocInSystemPath.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 4, 1));
+    btnUseProtocInSystemPath.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1));
     btnUseProtocInSystemPath.setText(protocInSystemPath);
 
     btnUseProtocInCustomPath = new Button(grpCompilerLocation, SWT.RADIO);
-    btnUseProtocInCustomPath.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 4, 1));
+    btnUseProtocInCustomPath.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1));
     btnUseProtocInCustomPath.setText(protocInCustomPath);
 
     txtProtocFilePath = new Text(grpCompilerLocation, SWT.BORDER);
@@ -94,9 +99,19 @@
 
     btnProtocPathBrowse = new Button(grpCompilerLocation, SWT.NONE);
     btnProtocPathBrowse.setText(browseCustomPath);
-    new Label(grpCompilerLocation, SWT.NONE);
-    new Label(grpCompilerLocation, SWT.NONE);
-
+    
+    grpDescriptorLocation = new Group(cmpMain, SWT.NONE);
+    grpDescriptorLocation.setText(descriptorLocation);
+    grpDescriptorLocation.setLayout(new GridLayout(2, false));
+    grpDescriptorLocation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+    
+    txtDescriptorFilePath = new Text(grpDescriptorLocation, SWT.BORDER);
+    txtDescriptorFilePath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+    txtDescriptorFilePath.setEditable(false);
+    
+    btnDescriptorPathBrowse = new Button(grpDescriptorLocation, SWT.NONE);
+    btnDescriptorPathBrowse.setText(browseCustomPath);
+    
     grpCodeGeneration = new Group(cmpMain, SWT.NONE);
     grpCodeGeneration.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
     grpCodeGeneration.setText(codeGeneration);
@@ -155,6 +170,15 @@
         checkState();
       }
     });
+    btnDescriptorPathBrowse.addSelectionListener(new SelectionAdapter() {
+      @Override public void widgetSelected(SelectionEvent e) {
+        FileDialog dialog = new FileDialog(getShell(), SWT.OPEN | SWT.SHEET);
+        dialog.setFilterExtensions(new String[] { "*.proto" });
+        String file = dialog.open();
+        if (file != null) txtDescriptorFilePath.setText(file);
+        checkState();
+      }
+    });
     btnRefreshResources.addSelectionListener(new SelectionAdapter() {
       @Override public void widgetSelected(SelectionEvent e) {
         refreshResourcesOptionsEnabled(btnRefreshResources.getSelection());
@@ -168,33 +192,40 @@
   }
 
   private void checkState() {
-    boolean atLeastOneEnabled = false;
+    boolean atLeastOneLanguageEnabled = false;
     for (CodeGenerationSetting option : codeGenerationSettings.allSettings()) {
       if (option.isEnabled()) {
-        atLeastOneEnabled = true;
+        atLeastOneLanguageEnabled = true;
         break;
       }
     }
-    if (!atLeastOneEnabled) {
+    if (!atLeastOneLanguageEnabled) {
       pageIsNowInvalid(errorNoLanguageEnabled);
       return;
     }
-    if (!customPathOptionSelectedAndEnabled()) {
-      pageIsNowValid();
-      return;
+    if (customPathOptionSelectedAndEnabled()) {
+      String protocPath = txtProtocFilePath.getText();
+      if (isEmpty(protocPath)) {
+        pageIsNowInvalid(errorNoSelection);
+        return;
+      }
+      if (!isFileWithName(protocPath, "protoc")) {
+        pageIsNowInvalid(errorInvalidProtoc);
+        return;
+      }
     }
-    String protocPath = txtProtocFilePath.getText();
-    if (isEmpty(protocPath)) {
-      pageIsNowInvalid(errorNoSelection);
-      return;
-    }
-    File file = new File(protocPath);
-    if (!file.isFile() || !"protoc".equals(file.getName())) { //$NON-NLS-1$
-      pageIsNowInvalid(errorInvalidProtoc);
+    String descriptorPath = txtDescriptorFilePath.getText();
+    if (!isEmpty(descriptorPath) && !isFileWithName(descriptorPath, "descriptor.proto")) {
+      pageIsNowInvalid(errorInvalidDescriptor);
       return;
     }
     pageIsNowValid();
   }
+  
+  private boolean isFileWithName(String filePath, String expectedFileName) {
+    File file = new File(filePath);
+    return file.isFile() && expectedFileName.equals(file.getName());
+  }
 
   @Override protected BooleanPreference enableProjectSettingsPreference(IPreferenceStore store) {
     return enableProjectSettings(store);
@@ -207,6 +238,7 @@
         bindSelectionOf(btnUseProtocInSystemPath).to(preferences.useProtocInSystemPath()),
         bindSelectionOf(btnUseProtocInCustomPath).to(preferences.useProtocInCustomPath()),
         bindTextOf(txtProtocFilePath).to(preferences.protocPath()),
+        bindTextOf(txtDescriptorFilePath).to(preferences.descriptorPath()),
         bindSelectionOf(btnRefreshResources).to(preferences.refreshResources()),
         bindSelectionOf(btnRefreshProject).to(preferences.refreshProject()),
         bindSelectionOf(btnRefreshOutputDirectory).to(preferences.refreshOutputDirectory()),
@@ -245,6 +277,7 @@
   private void enableCompilerOptions(boolean isEnabled) {
     tabFolder.setEnabled(isEnabled);
     enableCompilerPathOptions(isEnabled);
+    enableDescriptorPathOptions(isEnabled);
     enableOutputOptions(isEnabled);
     enableRefreshOptions(isEnabled);
   }
@@ -255,11 +288,17 @@
     btnUseProtocInCustomPath.setEnabled(isEnabled);
     enableCompilerCustomPathOptions(customPathOptionSelectedAndEnabled());
   }
-
+  
   private void enableCompilerCustomPathOptions(boolean isEnabled) {
     txtProtocFilePath.setEnabled(isEnabled);
     btnProtocPathBrowse.setEnabled(isEnabled);
   }
+  
+  private void enableDescriptorPathOptions(boolean isEnabled) {
+    grpDescriptorLocation.setEnabled(isEnabled);
+    txtDescriptorFilePath.setEnabled(isEnabled);
+    btnDescriptorPathBrowse.setEnabled(isEnabled);
+  }
 
   private boolean customPathOptionSelectedAndEnabled() {
     return isEnabledAndSelected(btnUseProtocInCustomPath);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferences.java
index 78f8aba..4f86403 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/CompilerPreferences.java
@@ -21,6 +21,7 @@
 
   private final boolean compileProtoFiles;
   private final String protocPath;
+  private final String descriptorPath;
   private final CodeGenerationSettings codeGenerationSettings;
   private final boolean refreshResources;
   private final PostCompilationRefreshTarget refreshTarget;
@@ -29,6 +30,7 @@
     compileProtoFiles = preferences.compileProtoFiles().value();
     boolean useProtocInSystemPath = preferences.useProtocInSystemPath().value();
     protocPath = (useProtocInSystemPath) ? "protoc" : preferences.protocPath().value();
+    descriptorPath = preferences.descriptorPath().value();
     codeGenerationSettings = new CodeGenerationSettings();
     codeGenerationSettings.java().enabled(preferences.javaCodeGenerationEnabled().value());
     codeGenerationSettings.java().outputDirectory(preferences.javaOutputDirectory().value());
@@ -48,6 +50,10 @@
   public String protocPath() {
     return protocPath;
   }
+  
+  public String descriptorPath() {
+    return descriptorPath;
+  }
 
   public CodeGenerationSettings codeGenerationSettings() {
     return codeGenerationSettings;
@@ -60,6 +66,4 @@
   public PostCompilationRefreshTarget refreshTarget() {
     return refreshTarget;
   }
-
-
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/Messages.java
index f8d5299..0126998 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/Messages.java
@@ -18,11 +18,13 @@
   public static String browseCustomPath;
   public static String codeGeneration;
   public static String compileOnSave;
+  public static String descriptorLocation;
   public static String editSelected;
   public static String editCodeGenerationOptionTitle;
   public static String enabled;
   public static String errorEnterDirectoryName;
   public static String errorInvalidProtoc;
+  public static String errorInvalidDescriptor;
   public static String errorNoLanguageEnabled;
   public static String errorNoOutputFolderName;
   public static String errorNoSelection;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/Messages.properties b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/Messages.properties
index c4a7c60..c2b1083 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/Messages.properties
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/Messages.properties
@@ -1,11 +1,13 @@
 browseCustomPath=&Browse...
 codeGeneration=Code generation
 compileOnSave=Compile .proto files on &save
+descriptorLocation=\"descriptor.proto\" location
 editSelected=Edit selected...
 editCodeGenerationOptionTitle=Preferences for 
 enabled=Enabled
 errorEnterDirectoryName=Enter the name of the output directory
 errorInvalidProtoc=The selected file is not protoc
+errorInvalidDescriptor=The selected file is not descriptor.proto
 errorNoLanguageEnabled=Enable at least one language
 errorNoSelection=Select the path of protoc
 errorNoOutputFolderName=Enter the name of the output folder
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/RawPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/RawPreferences.java
index 6336819..356accb 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/RawPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/compiler/RawPreferences.java
@@ -21,6 +21,7 @@
   private final BooleanPreference useProtocInSystemPath;
   private final BooleanPreference useProtocInCustomPath;
   private final StringPreference protocPath;
+  private final StringPreference descriptorPath;
   private final BooleanPreference javaCodeGenerationEnabled;
   private final BooleanPreference cppCodeGenerationEnabled;
   private final BooleanPreference pythonCodeGenerationEnabled;
@@ -36,6 +37,7 @@
     useProtocInSystemPath = new BooleanPreference("compiler.useProtocInSystemPath", store);
     useProtocInCustomPath = new BooleanPreference("compiler.useProtocInCustomPath", store);
     protocPath = new StringPreference("compiler.protocFilePath", store);
+    descriptorPath = new StringPreference("compiler.descriptorFilePath", store);
     javaCodeGenerationEnabled = new BooleanPreference("compiler.javaCodeGenerationEnabled", store);
     cppCodeGenerationEnabled = new BooleanPreference("compiler.cppCodeGenerationEnabled", store);
     pythonCodeGenerationEnabled = new BooleanPreference("compiler.pythonCodeGenerationEnabled", store);
@@ -62,6 +64,10 @@
   StringPreference protocPath() {
     return protocPath;
   }
+  
+  StringPreference descriptorPath() {
+    return descriptorPath;
+  }
 
   BooleanPreference javaCodeGenerationEnabled() {
     return javaCodeGenerationEnabled;
