diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CodeGenerationEditor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CodeGenerationEditor.java
index 49709ef..f4bd419 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CodeGenerationEditor.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CodeGenerationEditor.java
@@ -10,6 +10,7 @@
 
 import static com.google.eclipse.protobuf.ui.preferences.compiler.Messages.*;
 import static java.util.Collections.unmodifiableList;
+import static org.eclipse.jface.window.Window.OK;
 
 import java.util.*;
 import java.util.List;
@@ -109,7 +110,7 @@
         int selectionIndex = tblCodeGenerationOptions.getSelectionIndex();
         CodeGeneration option = options.get(selectionIndex);
         EditCodeGenerationDialog dialog = new EditCodeGenerationDialog(getShell(), option);
-        if (dialog.open()) {
+        if (dialog.open() == OK) {
           tblVwrCodeGenerationOptions.refresh();
           if (dataChangedListener != null) dataChangedListener.dataChanged();
         }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/EditCodeGenerationDialog.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/EditCodeGenerationDialog.java
index 32d6c98..8b56731 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/EditCodeGenerationDialog.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/EditCodeGenerationDialog.java
@@ -9,36 +9,32 @@
 package com.google.eclipse.protobuf.ui.preferences.compiler;
 
 import static com.google.eclipse.protobuf.ui.preferences.compiler.Messages.*;
-import static com.google.eclipse.protobuf.ui.swt.Shells.centerShell;
 import static org.eclipse.core.resources.IResource.FOLDER;
-import static org.eclipse.core.runtime.IStatus.OK;
+import static org.eclipse.jface.dialogs.IDialogConstants.OK_ID;
+import static org.eclipse.swt.layout.GridData.*;
 import static org.eclipse.xtext.util.Strings.isEmpty;
 
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
+import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.*;
 
+import com.google.eclipse.protobuf.ui.preferences.InputDialog;
+
 /**
  * Dialog where users can edit a single code generation option.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class EditCodeGenerationDialog extends Dialog {
+public class EditCodeGenerationDialog extends InputDialog {
 
-  private final Shell parent;
   private final CodeGeneration option;
 
-  private boolean result;
-  private Shell shell;
-
   private Text txtOutputDirectory;
   private Button btnEnabled;
-  private Text lblError;
-  private Button btnOk;
-  private Button btnCancel;
+  private Text txtError;
 
   /**
    * Creates a new </code>{@link EditCodeGenerationDialog}</code>.
@@ -46,80 +42,40 @@
    * @param option the code generation option to edit.
    */
   public EditCodeGenerationDialog(Shell parent, CodeGeneration option) {
-    super(parent, SWT.NONE);
-    this.parent = parent;
+    super(parent, editCodeGenerationOptionTitle + option.language().name());
     this.option = option;
-    getStyle();
-    setText(editCodeGenerationOptionTitle + option.language().name());
-  }
-  /**
-   * Opens this dialog.
-   * @return {@code true} if the user made a selection and pressed "OK" or {@code false} if the user pressed "Cancel."
-   */
-  public boolean open() {
-    result = false;
-    shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE);
-    shell.setText(getText());
-    createAndCenterContent();
-    shell.open();
-    Display display = parent.getDisplay();
-    while (!shell.isDisposed())
-      if (!display.readAndDispatch()) display.sleep();
-    return result;
   }
 
-  private void createAndCenterContent() {
-    shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE);
-    shell.setSize(564, 158);
-    shell.setText(getText());
-    shell.setLayout(new GridLayout(2, false));
+  /** {@inheritDoc} */
+  @Override protected Control createDialogArea(Composite parent) {
+    Composite cmpDialogArea = (Composite) super.createDialogArea(parent);
 
-    btnEnabled = new Button(shell, SWT.CHECK);
+    btnEnabled = new Button(cmpDialogArea, SWT.CHECK);
     btnEnabled.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
     btnEnabled.setText(enabled);
     btnEnabled.setSelection(option.isEnabled());
 
-    Label lblOutputDirectoryName = new Label(shell, SWT.NONE);
+    Label lblOutputDirectoryName = new Label(cmpDialogArea, SWT.NONE);
     lblOutputDirectoryName.setText(outputDirectoryPrompt);
 
-    txtOutputDirectory = new Text(shell, SWT.BORDER);
+    txtOutputDirectory = new Text(cmpDialogArea, SWT.BORDER);
     txtOutputDirectory.setEnabled(option.isEnabled());
+
     GridData gd_txtOutputDirectory = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
     gd_txtOutputDirectory.widthHint = 200;
     txtOutputDirectory.setLayoutData(gd_txtOutputDirectory);
     txtOutputDirectory.setText(option.outputDirectory());
 
-    lblError = new Text(shell, SWT.READ_ONLY | SWT.WRAP);
-    GridData gd_lblError = new GridData(GridData.GRAB_HORIZONTAL
-            | GridData.HORIZONTAL_ALIGN_FILL);
+    txtError = new Text(cmpDialogArea, SWT.READ_ONLY | SWT.WRAP);
+    GridData gd_lblError = new GridData(GRAB_HORIZONTAL | HORIZONTAL_ALIGN_FILL);
     gd_lblError.horizontalSpan = 2;
-    lblError.setLayoutData(gd_lblError);
-    lblError.setBackground(lblError.getDisplay()
-            .getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
-//
-//    lblError = new Label(shell, SWT.NONE);
-//    lblError.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
-
-    Composite composite = new Composite(shell, SWT.NONE);
-    composite.setLayoutData(new GridData(SWT.RIGHT, SWT.BOTTOM, true, true, 2, 1));
-    composite.setLayout(new GridLayout(2, true));
-
-    btnOk = new Button(composite, SWT.NONE);
-    btnOk.setEnabled(false);
-    btnOk.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-    btnOk.setBounds(0, 0, 92, 29);
-    btnOk.setText(ok);
-
-    btnCancel = new Button(composite, SWT.NONE);
-    btnCancel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-    btnCancel.setText(cancel);
+    txtError.setLayoutData(gd_lblError);
+    txtError.setBackground(txtError.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
 
     addEventListeners();
 
-    shell.setDefaultButton(btnOk);
-    shell.pack();
-
-    centerWindow();
+    applyDialogFont(cmpDialogArea);
+    return cmpDialogArea;
   }
 
   private void addEventListeners() {
@@ -129,19 +85,6 @@
         checkState();
       }
     });
-    btnOk.addSelectionListener(new SelectionAdapter() {
-      @Override public void widgetSelected(SelectionEvent e) {
-        option.enabled(btnEnabled.getSelection());
-        option.outputDirectory(enteredOuptutDirectory());
-        result = true;
-        shell.dispose();
-      }
-    });
-    btnCancel.addSelectionListener(new SelectionAdapter() {
-      @Override public void widgetSelected(SelectionEvent e) {
-        shell.dispose();
-      }
-    });
     txtOutputDirectory.addModifyListener(new ModifyListener() {
       public void modifyText(ModifyEvent e) {
         checkState();
@@ -171,13 +114,20 @@
   }
 
   private void pageIsNowInvalid(String errorMessage) {
-    lblError.setText(errorMessage);
-    btnOk.setEnabled(false);
+    txtError.setText(errorMessage);
+    getButton(OK_ID).setEnabled(false);
   }
 
   private void pageIsNowValid() {
-    lblError.setText("");
-    btnOk.setEnabled(true);
+    txtError.setText("");
+    getButton(OK_ID).setEnabled(true);
+  }
+
+  /** {@inheritDoc} */
+  @Override protected void okPressed() {
+    option.enabled(btnEnabled.getSelection());
+    option.outputDirectory(enteredOuptutDirectory());
+    super.okPressed();
   }
 
   private boolean outputDirectoryEntered() {
@@ -187,8 +137,4 @@
   private String enteredOuptutDirectory() {
     return txtOutputDirectory.getText().trim();
   }
-
-  private void centerWindow() {
-    centerShell(shell, parent);
-  }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
index d88b0f8..2d6d412 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
@@ -9,7 +9,7 @@
 package com.google.eclipse.protobuf.ui.preferences.paths;
 
 import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.*;
-import static com.google.eclipse.protobuf.ui.preferences.paths.SelectDirectoryDialogs.*;
+import static com.google.eclipse.protobuf.ui.preferences.paths.DirectorySelectionDialogs.*;
 import static org.eclipse.jface.dialogs.IDialogConstants.OK_ID;
 import static org.eclipse.xtext.util.Strings.isEmpty;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/SelectDirectoryDialogs.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java
similarity index 97%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/SelectDirectoryDialogs.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java
index 3912eeb..02460b7 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/SelectDirectoryDialogs.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java
@@ -27,7 +27,7 @@
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-class SelectDirectoryDialogs {
+class DirectorySelectionDialogs {
 
   private static final String PLUGIN_ID = "com.google.eclipse.protobuf.ui";
 
@@ -74,5 +74,5 @@
     return ResourcesPlugin.getWorkspace().getRoot();
   }
 
-  private SelectDirectoryDialogs() {}
+  private DirectorySelectionDialogs() {}
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/swt/Shells.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/swt/Shells.java
deleted file mode 100644
index a3d1eaa..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/swt/Shells.java
+++ /dev/null
@@ -1,29 +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.swt;
-
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * Utility methods related to <code>{@link Shell}</code>.
- * 
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class Shells {
-
-  public static void centerShell(Shell target, Shell parent) {
-    Rectangle parentRect = parent.getBounds();
-    Rectangle targetRect = target.getBounds();
-    int x = parentRect.x + (parentRect.width - targetRect.width) / 2;
-    int y = parentRect.y + (parentRect.height - targetRect.height) / 2;
-    target.setBounds(x, y, targetRect.width, targetRect.height);
-  }
-
-}
