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 6feb38a..dbc0008 100644
--- a/com.google.eclipse.protobuf.ui/OSGI-INF/l10n/bundle.properties
+++ b/com.google.eclipse.protobuf.ui/OSGI-INF/l10n/bundle.properties
@@ -6,7 +6,7 @@
 page.name.0 = Syntax Coloring
 page.name.1 = Templates
 page.name.2 = Compiler
-page.name.3 = Protocol Buffer Compiler
+page.name.3 = Paths
 keyword.label = Protocol Buffer
 command.description = Trigger expensive validation
 command.name = Validate
diff --git a/com.google.eclipse.protobuf.ui/plugin.xml b/com.google.eclipse.protobuf.ui/plugin.xml
index dc50779..75efb54 100644
--- a/com.google.eclipse.protobuf.ui/plugin.xml
+++ b/com.google.eclipse.protobuf.ui/plugin.xml
@@ -48,7 +48,7 @@
   </extension>
   <extension point="org.eclipse.ui.preferencePages">
     <page
-      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.RootPreferencePage"
       id="com.google.eclipse.protobuf.Protobuf" name="%page.name">
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
@@ -67,6 +67,11 @@
       id="com.google.eclipse.protobuf.ui.preferences.compiler.PreferencePage" name="%page.name.2">
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
+    <page category="com.google.eclipse.protobuf.Protobuf"
+      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.paths.PreferencePage"
+      id="com.google.eclipse.protobuf.ui.preferences.paths.PreferencePage" name="%page.name.3">
+      <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
+    </page>
   </extension>
   <extension point="org.eclipse.ui.keywords">
     <keyword id="com.google.eclipse.protobuf.ui.keyword_Protobuf" label="%keyword.label" />
@@ -161,8 +166,23 @@
   </extension>
   <extension point="org.eclipse.ui.propertyPages">
     <page
-      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.PreferencePage"
-      id="com.google.eclipse.protobuf.ui.properties.compiler.PropertyPage" name="%page.name.3" selectionFilter="single">
+      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.RootPreferencePage"
+      id="com.google.eclipse.protobuf.Protobuf"
+      name="%page.name" selectionFilter="single">
+    </page>
+    <page
+          category="com.google.eclipse.protobuf.Protobuf"
+          class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.PreferencePage"
+          id="com.google.eclipse.protobuf.ui.properties.compiler.PropertyPage"
+          name="%page.name.2"
+          selectionFilter="single">
+    </page>
+    <page
+          category="com.google.eclipse.protobuf.Protobuf"
+          class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.paths.PreferencePage"
+          id="com.google.eclipse.protobuf.ui.properties.paths.PropertyPage"
+          name="%page.name.3"
+          selectionFilter="single">
     </page>
   </extension>
   <extension point="org.eclipse.xtext.builder.participant">
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java
index ebae962..0891d2e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java
@@ -23,8 +23,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.IWorkbenchPropertyPage;
+import org.eclipse.ui.*;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
 
 import com.google.inject.Inject;
@@ -173,4 +172,17 @@
   protected final boolean areProjectSettingsActive() {
     return btnEnableProjectSettings.getSelection();
   }
+
+  /** {@inheritDoc} */
+  public void init(IWorkbench workbench) {}
+
+  @Override public final boolean performOk() {
+    savePreferences();
+    return true;
+  }
+
+  /**
+   * Saves the current settings.
+   */
+  protected abstract void savePreferences();
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/RootPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/RootPreferencePage.java
new file mode 100644
index 0000000..559cfb6
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/RootPreferencePage.java
@@ -0,0 +1,47 @@
+/*
+ * 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;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
+
+import com.google.inject.Inject;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class RootPreferencePage extends PreferenceAndPropertyPage {
+
+  private static final String PREFERENCE_PAGE_ID = RootPreferencePage.class.getName();
+  
+  @Inject public RootPreferencePage(IPreferenceStoreAccess preferenceStoreAccess) {
+    super(preferenceStoreAccess);
+  }
+
+  /** {@inheritDoc} */
+  @Override protected Control createContents(Composite parent) {
+    // generated by WindowBuilder
+    Composite contents = super.contentsComposite(parent);
+    Label label = new Label(contents, SWT.NONE);
+    label.setText("General Settings.");
+    return contents;
+  }
+
+  /** {@inheritDoc} */
+  @Override protected void onProjectSettingsActivation(boolean active) {}
+
+  /** {@inheritDoc} */
+  @Override protected String preferencePageId() {
+    return PREFERENCE_PAGE_ID;
+  }
+
+  /** {@inheritDoc} */
+  @Override protected void savePreferences() {}
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferencePage.java
index 78dbdf7..2b1326b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferencePage.java
@@ -24,7 +24,6 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.IWorkbench;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
 
 import com.google.eclipse.protobuf.ui.preferences.PreferenceAndPropertyPage;
@@ -69,7 +68,6 @@
   @Override protected Control createContents(Composite parent) {
     // generated by WindowBuilder
     Composite contents = contentsComposite(parent);
-    contents.setLayout(new GridLayout(3, false));
 
     btnCompileProtoFiles = new Button(contents, SWT.CHECK);
     btnCompileProtoFiles.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1));
@@ -358,14 +356,7 @@
   }
 
   /** {@inheritDoc} */
-  public void init(IWorkbench workbench) {}
-
-  @Override public boolean performOk() {
-    savePreferences();
-    return true;
-  }
-
-  private void savePreferences() {
+  @Override protected void savePreferences() {
     IPreferenceStore store = getPreferenceStore();
     if (isPropertyPage()) {
       store.setValue(ENABLE_PROJECT_SETTINGS, areProjectSettingsActive());
@@ -384,8 +375,8 @@
   }
   
   /** {@inheritDoc} */
-  @Override protected void onProjectSettingsActivation(boolean projectSettingsEnabled) {
-    setProjectSpecificOptionsEnabled(projectSettingsEnabled);
+  @Override protected void onProjectSettingsActivation(boolean active) {
+    setProjectSpecificOptionsEnabled(active);
     setCompilerOptionsEnabled(isEnabledAndSelected(btnCompileProtoFiles));
   }
   
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferencePage.java
new file mode 100644
index 0000000..9513c36
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferencePage.java
@@ -0,0 +1,78 @@
+/*
+ * 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 org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
+
+import com.google.eclipse.protobuf.ui.preferences.PreferenceAndPropertyPage;
+import com.google.inject.Inject;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ *
+ */
+public class PreferencePage extends PreferenceAndPropertyPage {
+
+  private static final String PREFERENCE_PAGE_ID = PreferencePage.class.getName();
+
+  private Group grpResolutionOfImported;
+  private Button btnOneFolderFor;
+  private Button btnLookForImported;
+  private Text txtFolderNames;
+
+  @Inject public PreferencePage(IPreferenceStoreAccess preferenceStoreAccess) {
+    super(preferenceStoreAccess);
+  }
+
+  /** {@inheritDoc} */
+  @Override protected Control createContents(Composite parent) {
+    // generated by WindowBuilder
+    Composite contents = contentsComposite(parent);
+    
+    grpResolutionOfImported = new Group(contents, SWT.NONE);
+    grpResolutionOfImported.setLayout(new GridLayout(1, false));
+    grpResolutionOfImported.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
+    grpResolutionOfImported.setText("Resolution of imported files");
+    
+    btnOneFolderFor = new Button(grpResolutionOfImported, SWT.RADIO);
+    btnOneFolderFor.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+    btnOneFolderFor.setText("One folder for all .proto files");
+    
+    btnLookForImported = new Button(grpResolutionOfImported, SWT.RADIO);
+    btnLookForImported.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+    btnLookForImported.setText("Look for imported files in folders:");
+    
+    txtFolderNames = new Text(grpResolutionOfImported, SWT.BORDER);
+    txtFolderNames.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+    new Label(contents, SWT.NONE);
+    return contents;
+  }
+
+  /** {@inheritDoc} */
+  @Override protected void onProjectSettingsActivation(boolean active) {
+    // TODO Auto-generated method stub
+
+  }
+
+  /** {@inheritDoc} */
+  @Override protected String preferencePageId() {
+    return PREFERENCE_PAGE_ID;
+  }
+
+  /** {@inheritDoc} */
+  @Override protected void savePreferences() {
+    // TODO Auto-generated method stub
+    
+  }
+
+}
