diff --git a/com.google.eclipse.protobuf.ui/.project b/com.google.eclipse.protobuf.ui/.project
index aa5cde0..51a1050 100644
--- a/com.google.eclipse.protobuf.ui/.project
+++ b/com.google.eclipse.protobuf.ui/.project
@@ -20,9 +20,15 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
 	</natures>
 </projectDescription>
diff --git a/com.google.eclipse.protobuf.ui/plugin.xml b/com.google.eclipse.protobuf.ui/plugin.xml
index d8cb788..8edb1b1 100644
--- a/com.google.eclipse.protobuf.ui/plugin.xml
+++ b/com.google.eclipse.protobuf.ui/plugin.xml
@@ -2,16 +2,11 @@
 <?eclipse version="3.0"?>
 <plugin>
   <extension point="org.eclipse.ui.editors">
-    <editor
-      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
-      contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
-      default="true"
-      icon="icons/pb.gif"
-      id="com.google.eclipse.protobuf.Protobuf"
-      name="%editor.name">
-       <contentTypeBinding
-             contentTypeId="com.google.eclipse.protobuf.Protobuf">
-       </contentTypeBinding>
+    <editor class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
+      contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor" default="true" icon="icons/pb.gif"
+      id="com.google.eclipse.protobuf.Protobuf" name="%editor.name">
+      <contentTypeBinding contentTypeId="com.google.eclipse.protobuf.Protobuf">
+      </contentTypeBinding>
     </editor>
   </extension>
   <extension point="org.eclipse.ui.handlers">
@@ -45,9 +40,7 @@
       <and>
         <reference definitionId="isActiveEditorAnInstanceOfXtextEditor" />
         <with variable="activeEditor">
-          <test
-            property="org.eclipse.xtext.ui.editor.XtextEditor.languageName"
-            value="com.google.eclipse.protobuf.Protobuf"
+          <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" value="com.google.eclipse.protobuf.Protobuf"
             forcePluginActivation="true" />
         </with>
       </and>
@@ -56,64 +49,45 @@
   <extension point="org.eclipse.ui.preferencePages">
     <page
       class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.general.GeneralPreferencePage"
-      id="com.google.eclipse.protobuf.Protobuf"
-      name="%page.name">
+      id="com.google.eclipse.protobuf.Protobuf" name="%page.name">
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
-    <page
-      category="com.google.eclipse.protobuf.ui.preferences.editor.general.EditorPreferencePage"
+    <page category="com.google.eclipse.protobuf.ui.preferences.editor.general.EditorPreferencePage"
       class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:org.eclipse.xtext.ui.editor.syntaxcoloring.SyntaxColoringPreferencePage"
-      id="com.google.eclipse.protobuf.Protobuf.coloring"
-      name="%page.name.0">
+      id="com.google.eclipse.protobuf.Protobuf.coloring" name="%page.name.0">
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
-    <page
-      category="com.google.eclipse.protobuf.Protobuf"
+    <page category="com.google.eclipse.protobuf.Protobuf"
       class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferencePage"
-      id="com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferencePage"
-      name="%page.name.2">
+      id="com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferencePage" name="%page.name.2">
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
-    <page
-      category="com.google.eclipse.protobuf.Protobuf"
+    <page category="com.google.eclipse.protobuf.Protobuf"
       class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.editor.general.EditorPreferencePage"
-      id="com.google.eclipse.protobuf.ui.preferences.editor.general.EditorPreferencePage"
-      name="%page.name.4">
+      id="com.google.eclipse.protobuf.ui.preferences.editor.general.EditorPreferencePage" name="%page.name.4">
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
-    <page
-      category="com.google.eclipse.protobuf.ui.preferences.editor.general.EditorPreferencePage"
+    <page category="com.google.eclipse.protobuf.ui.preferences.editor.general.EditorPreferencePage"
       class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.editor.save.SaveActionsPreferencePage"
-      id="com.google.eclipse.protobuf.ui.preferences.editor.save.SaveActionsPreferencePage"
-      name="%page.name.5">
+      id="com.google.eclipse.protobuf.ui.preferences.editor.save.SaveActionsPreferencePage" name="%page.name.5">
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
-    <page
-      category="com.google.eclipse.protobuf.ui.preferences.editor.general.EditorPreferencePage"
+    <page category="com.google.eclipse.protobuf.ui.preferences.editor.general.EditorPreferencePage"
       class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.editor.numerictag.NumericTagPreferencePage"
-      id="com.google.eclipse.protobuf.ui.preferences.editor.numerictag.NumericTagPreferencePage"
-      name="%page.name.6">
+      id="com.google.eclipse.protobuf.ui.preferences.editor.numerictag.NumericTagPreferencePage" name="%page.name.6">
       <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" />
+    <keyword id="com.google.eclipse.protobuf.ui.keyword_Protobuf" label="%keyword.label" />
   </extension>
   <extension point="org.eclipse.ui.commands">
-    <command
-      description="%command.description"
-      id="com.google.eclipse.protobuf.Protobuf.validate"
-      name="%command.name">
+    <command description="%command.description" id="com.google.eclipse.protobuf.Protobuf.validate" name="%command.name">
     </command>
   </extension>
   <extension point="org.eclipse.ui.menus">
     <menuContribution locationURI="popup:#TextEditorContext?after=group.edit">
-      <command
-        commandId="com.google.eclipse.protobuf.Protobuf.validate"
-        style="push"
-        tooltip="%command.tooltip">
+      <command commandId="com.google.eclipse.protobuf.Protobuf.validate" style="push" tooltip="%command.tooltip">
         <visibleWhen checkEnabled="false">
           <reference definitionId="com.google.eclipse.protobuf.Protobuf.Editor.opened">
           </reference>
@@ -178,24 +152,15 @@
     </handler>
   </extension>
   <extension point="org.eclipse.ui.commands">
-    <command
-      description="%command.description.0"
-      id="org.eclipse.xtext.ui.editor.outline.QuickOutline"
-      name="%command.name.0">
+    <command description="%command.description.0" id="org.eclipse.xtext.ui.editor.outline.QuickOutline" name="%command.name.0">
     </command>
-    <command
-      categoryId="org.eclipse.ui.category.textEditor"
-      description="%command.description.1"
-      id="com.google.eclipse.protobuf.ui.smartSemicolon"
-      name="%command.name.1">
+    <command categoryId="org.eclipse.ui.category.textEditor" description="%command.description.1"
+      id="com.google.eclipse.protobuf.ui.smartSemicolon" name="%command.name.1">
     </command>
   </extension>
   <extension point="org.eclipse.ui.menus">
     <menuContribution locationURI="popup:#TextEditorContext?after=group.open">
-      <command
-        commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline"
-        style="push"
-        tooltip="%command.tooltip.0">
+      <command commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline" style="push" tooltip="%command.tooltip.0">
         <visibleWhen checkEnabled="false">
           <reference definitionId="com.google.eclipse.protobuf.Protobuf.Editor.opened" />
         </visibleWhen>
@@ -209,40 +174,29 @@
     </markerResolutionGenerator>
   </extension>
   <extension point="org.eclipse.ui.bindings">
-    <key
-      commandId="com.google.eclipse.protobuf.ui.smartSemicolon"
-      contextId="org.eclipse.xtext.ui.XtextEditorScope"
-      schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
-      sequence=";">
+    <key commandId="com.google.eclipse.protobuf.ui.smartSemicolon" contextId="org.eclipse.xtext.ui.XtextEditorScope"
+      schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence=";">
     </key>
   </extension>
   <extension point="org.eclipse.ui.propertyPages">
     <page
       class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.general.GeneralPreferencePage"
-      id="com.google.eclipse.protobuf.Protobuf"
-      name="%page.name"
-      selectionFilter="single">
+      id="com.google.eclipse.protobuf.Protobuf" name="%page.name" selectionFilter="single">
       <enabledWhen>
         <adapt type="org.eclipse.core.resources.IProject">
         </adapt>
       </enabledWhen>
     </page>
-    <page
-      category="com.google.eclipse.protobuf.Protobuf"
+    <page category="com.google.eclipse.protobuf.Protobuf"
       class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferencePage"
-      id="com.google.eclipse.protobuf.ui.properties.compiler.PropertyPage"
-      name="%page.name.2"
-      selectionFilter="single">
+      id="com.google.eclipse.protobuf.ui.properties.compiler.PropertyPage" name="%page.name.2" selectionFilter="single">
       <enabledWhen>
         <adapt type="org.eclipse.core.resources.IProject" />
       </enabledWhen>
     </page>
-    <page
-      category="com.google.eclipse.protobuf.Protobuf"
+    <page category="com.google.eclipse.protobuf.Protobuf"
       class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferencePage"
-      id="com.google.eclipse.protobuf.ui.properties.paths.PropertyPage"
-      name="%page.name.3"
-      selectionFilter="single">
+      id="com.google.eclipse.protobuf.ui.properties.paths.PropertyPage" name="%page.name.3" selectionFilter="single">
       <enabledWhen>
         <adapt type="org.eclipse.core.resources.IProject" />
       </enabledWhen>
@@ -253,10 +207,7 @@
       class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.builder.protoc.ProtobufBuildParticipant">
     </participant>
   </extension>
-  <extension
-    id="protocMarker"
-    name="%protoc.marker.name"
-    point="org.eclipse.core.resources.markers">
+  <extension id="protocMarker" name="%protoc.marker.name" point="org.eclipse.core.resources.markers">
     <super type="org.eclipse.core.resources.problemmarker">
     </super>
     <super type="org.eclipse.core.resources.textmarker">
@@ -264,10 +215,7 @@
     <persistent value="true">
     </persistent>
   </extension>
-  <extension
-    id="editorMarker"
-    name="%editor.marker.name"
-    point="org.eclipse.core.resources.markers">
+  <extension id="editorMarker" name="%editor.marker.name" point="org.eclipse.core.resources.markers">
     <super type="org.eclipse.core.resources.problemmarker">
     </super>
     <super type="org.eclipse.core.resources.textmarker">
@@ -288,9 +236,7 @@
   </extension>
   <extension point="org.eclipse.ui.menus">
     <menuContribution locationURI="popup:#TextEditorContext?after=group.edit">
-      <command
-        commandId="org.eclipse.xtext.ui.refactoring.RenameElement"
-        style="push">
+      <command commandId="org.eclipse.xtext.ui.refactoring.RenameElement" style="push">
         <visibleWhen checkEnabled="false">
           <reference definitionId="com.google.eclipse.protobuf.Protobuf.Editor.opened">
           </reference>
@@ -298,18 +244,16 @@
       </command>
     </menuContribution>
   </extension>
-  <extension
-        point="org.eclipse.ui.newWizards">
-     <category
-           id="com.google.eclipse.protobuf.ui"
-           name="Protocol Buffer">
-     </category>
-     <wizard
-           category="com.google.eclipse.protobuf.ui"
-           class="com.google.eclipse.protobuf.ui.wizards.NewProtoFileWizard"
-           icon="icons/pb.gif"
-           id="com.google.eclipse.protobuf.ui.wizards.NewProtoFileWizard"
-           name="Protocol Buffer Descriptor File">
-     </wizard>
+  <extension point="org.eclipse.ui.newWizards">
+    <category id="com.google.eclipse.protobuf.ui" name="Protocol Buffer">
+    </category>
+    <wizard category="com.google.eclipse.protobuf.ui" class="com.google.eclipse.protobuf.ui.wizards.NewProtoFileWizard"
+      icon="icons/pb.gif" id="com.google.eclipse.protobuf.ui.wizards.NewProtoFileWizard" name="Protocol Buffer Descriptor File">
+    </wizard>
   </extension>
-</plugin>
+  <extension point="org.eclipse.ui.perspectiveExtensions">
+    <perspectiveExtension targetID="*">
+      <newWizardShortcut id="com.google.eclipse.protobuf.ui.wizards.NewProtoFileWizard" />
+    </perspectiveExtension>
+  </extension>
+</plugin>
\ No newline at end of file
diff --git a/com.google.eclipse.protobuf.ui/resources/newFileContents.proto b/com.google.eclipse.protobuf.ui/resources/newFileContents.proto
new file mode 100644
index 0000000..c17ce99
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/resources/newFileContents.proto
@@ -0,0 +1 @@
+syntax = "proto2";
\ No newline at end of file
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/Messages.java
new file mode 100644
index 0000000..09ba209
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/Messages.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2012 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.wizards;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class Messages extends NLS {
+  public static String pageDescription;
+  public static String pageTitle;
+  public static String wizardTitle;
+
+  static {
+    Class<Messages> type = Messages.class;
+    NLS.initializeMessages(type.getName(), type);
+  }
+
+  private Messages() {
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/Messages.properties b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/Messages.properties
new file mode 100644
index 0000000..be531fa
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/Messages.properties
@@ -0,0 +1,3 @@
+pageDescription=Create a new Protocol Buffer Definition file.
+pageTitle=Protocol Buffer Definition File
+wizardTitle=New Protocol Buffer Definition File
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/NewProtoFileWizard.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/NewProtoFileWizard.java
index 59c4936..75752ab 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/NewProtoFileWizard.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/NewProtoFileWizard.java
@@ -8,22 +8,14 @@
  */
 package com.google.eclipse.protobuf.ui.wizards;
 
-import static com.google.common.io.Closeables.closeQuietly;
-import static com.google.eclipse.protobuf.ui.util.IStatusFactory.error;
 import static com.google.eclipse.protobuf.ui.util.Workbenches.activeWorkbenchPage;
-import static com.google.eclipse.protobuf.ui.util.Workspaces.workspaceRoot;
-import static org.eclipse.jface.dialogs.MessageDialog.openError;
-import static org.eclipse.ui.ide.IDE.openEditor;
+import static com.google.eclipse.protobuf.ui.wizards.Messages.wizardTitle;
 
-import java.io.*;
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.*;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.ui.*;
+import org.eclipse.ui.ide.IDE;
 
 /**
  * Wizard for creation of new .proto files.
@@ -32,10 +24,10 @@
  */
 public class NewProtoFileWizard extends Wizard implements INewWizard {
   private NewProtoFileWizardPage page;
-  private ISelection selection;
+  private IStructuredSelection selection;
 
   public NewProtoFileWizard() {
-    setNeedsProgressMonitor(true);
+    setWindowTitle(wizardTitle);
   }
 
   @Override public void addPages() {
@@ -44,64 +36,18 @@
   }
 
   @Override public boolean performFinish() {
-    try {
-      getContainer().run(true, false, new IRunnableWithProgress() {
-        @Override public void run(IProgressMonitor monitor) throws InvocationTargetException {
-          try {
-            doFinish(page.containerName(), page.fileName(), monitor);
-          } catch (CoreException e) {
-            throw new InvocationTargetException(e);
-          } finally {
-            monitor.done();
-          }
-        }
-      });
-    } catch (InterruptedException e) {
-      return false;
-    } catch (InvocationTargetException e) {
-      Throwable realException = e.getTargetException();
-      openError(getShell(), "Error", realException.getMessage());
+    final IFile file = page.createNewFile();
+    if (file == null) {
       return false;
     }
-    return true;
-  }
-
-  private void doFinish(String containerName, String fileName, IProgressMonitor monitor) throws CoreException {
-    monitor.beginTask("Creating " + fileName, 2);
-    IResource resource = workspaceRoot().findMember(new Path(containerName));
-    if (!resource.exists() || !(resource instanceof IContainer)) {
-      throw new CoreException(error("Container \"" + containerName + "\" does not exist."));
-    }
-    IContainer container = (IContainer) resource;
-    final IFile file = container.getFile(new Path(fileName));
-    InputStream stream = null;
-    try {
-      stream = openContentStream();
-      if (file.exists()) {
-        file.setContents(stream, true, true, monitor);
-      } else {
-        file.create(stream, true, monitor);
-      }
-    } finally {
-      closeQuietly(stream);
-    }
-    monitor.worked(1);
-    monitor.setTaskName("Opening file for editing...");
     getShell().getDisplay().asyncExec(new Runnable() {
       @Override public void run() {
-        IWorkbenchPage activePage = activeWorkbenchPage();
         try {
-          openEditor(activePage, file, true);
-        } catch (PartInitException e) {
-        }
+          IDE.openEditor(activeWorkbenchPage(), file, true);
+        } catch (PartInitException ignored) {}
       }
     });
-    monitor.worked(1);
-  }
-
-  private InputStream openContentStream() {
-    String contents = "syntax = \"proto2\";";
-    return new ByteArrayInputStream(contents.getBytes());
+    return true;
   }
 
   @Override public void init(IWorkbench workbench, IStructuredSelection newSelection) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/NewProtoFileWizardPage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/NewProtoFileWizardPage.java
index e7f4588..e683466 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/NewProtoFileWizardPage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/wizards/NewProtoFileWizardPage.java
@@ -8,155 +8,32 @@
  */
 package com.google.eclipse.protobuf.ui.wizards;
 
-import static com.google.eclipse.protobuf.ui.util.Workspaces.workspaceRoot;
-import static org.eclipse.jface.window.Window.OK;
-import static org.eclipse.swt.SWT.*;
-import static org.eclipse.swt.layout.GridData.FILL_HORIZONTAL;
+import static com.google.eclipse.protobuf.ui.wizards.Messages.*;
 
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.dialogs.ContainerSelectionDialog;
+import java.io.*;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+import com.google.eclipse.protobuf.ui.internal.ProtobufActivator;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class NewProtoFileWizardPage extends WizardPage {
-  private Text containerText;
-  private Text fileText;
-  private final ISelection selection;
-
-  public NewProtoFileWizardPage(ISelection selection) {
-    super("wizardPage");
-    setTitle("Multi-page Editor File");
-    setDescription("This wizard creates a new file with *.proto extension that can be opened by a multi-page editor.");
-    this.selection = selection;
+public class NewProtoFileWizardPage extends WizardNewFileCreationPage {
+  public NewProtoFileWizardPage(IStructuredSelection selection) {
+    super("NewProtoFileWizardPage", selection); //$NON-NLS-1$
+    setTitle(pageTitle);
+    setDescription(pageDescription);
+    setFileExtension("proto");
+    setFileName("newFile.proto");
   }
 
-  @Override public void createControl(Composite parent) {
-    Composite container = new Composite(parent, NULL);
-    GridLayout layout = new GridLayout();
-    container.setLayout(layout);
-    layout.numColumns = 3;
-    layout.verticalSpacing = 9;
-    Label label = new Label(container, NULL);
-    label.setText("&Container:");
-
-    containerText = new Text(container, BORDER | SINGLE);
-    containerText.setLayoutData(new GridData(FILL_HORIZONTAL));
-    containerText.addModifyListener(new ModifyListener() {
-      @Override public void modifyText(ModifyEvent e) {
-        dialogChanged();
-      }
-    });
-
-    Button button = new Button(container, PUSH);
-    button.setText("Browse...");
-    button.addSelectionListener(new SelectionAdapter() {
-      @Override public void widgetSelected(SelectionEvent e) {
-        handleBrowse();
-      }
-    });
-    label = new Label(container, NULL);
-    label.setText("&File name:");
-
-    fileText = new Text(container, BORDER | SINGLE);
-    fileText.setLayoutData(new GridData(FILL_HORIZONTAL));
-    fileText.addModifyListener(new ModifyListener() {
-      @Override public void modifyText(ModifyEvent e) {
-        dialogChanged();
-      }
-    });
-    initialize();
-    dialogChanged();
-    setControl(container);
-  }
-
-  private void initialize() {
-    Object selected = firstSelectedElement();
-    if (selected != null) {
-      if (selected instanceof IResource) {
-        IContainer container;
-        if (selected instanceof IContainer) {
-          container = (IContainer) selected;
-        } else {
-          container = ((IResource) selected).getParent();
-        }
-        containerText.setText(container.getFullPath().toString());
-      }
-    }
-    fileText.setText("new_file.proto");
-  }
-
-  private Object firstSelectedElement() {
-    if (selection == null || selection.isEmpty()) {
+  @Override protected InputStream getInitialContents() {
+    try {
+      return ProtobufActivator.getInstance().getBundle().getEntry("/resources/newFileContents.proto").openStream();
+    } catch (IOException e) {
       return null;
     }
-    if (selection instanceof IStructuredSelection) {
-      ((IStructuredSelection) selection).getFirstElement();
-    }
-    return null;
-  }
-
-  private void handleBrowse() {
-    ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(), workspaceRoot(), false,
-        "Select new file container");
-    if (dialog.open() == OK) {
-      Object[] result = dialog.getResult();
-      if (result.length == 1) {
-        containerText.setText(((Path) result[0]).toString());
-      }
-    }
-  }
-
-  private void dialogChanged() {
-    IResource container = ResourcesPlugin.getWorkspace().getRoot().findMember(new Path(containerName()));
-    String fileName = fileName();
-    if (containerName().isEmpty()) {
-      updateStatus("File container must be specified");
-      return;
-    }
-    if (container == null || (container.getType() & (IResource.PROJECT | IResource.FOLDER)) == 0) {
-      updateStatus("File container must exist");
-      return;
-    }
-    if (!container.isAccessible()) {
-      updateStatus("Project must be writable");
-      return;
-    }
-    if (fileName.isEmpty()) {
-      updateStatus("File name must be specified");
-      return;
-    }
-    if (fileName.replace('\\', '/').indexOf('/', 1) > 0) {
-      updateStatus("File name must be valid");
-      return;
-    }
-    int dotLoc = fileName.lastIndexOf('.');
-    if (dotLoc != -1) {
-      String ext = fileName.substring(dotLoc + 1);
-      if (ext.equalsIgnoreCase("proto") == false) {
-        updateStatus("File extension must be \"proto\"");
-        return;
-      }
-    }
-    updateStatus(null);
-  }
-
-  private void updateStatus(String message) {
-    setErrorMessage(message);
-    setPageComplete(message == null);
-  }
-
-  public String containerName() {
-    return containerText.getText();
-  }
-
-  public String fileName() {
-    return fileText.getText();
   }
 }
\ No newline at end of file
