diff --git a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/Formatter_Test.java b/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/Formatter_Test.java
index 2628aae..eadabcf 100644
--- a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/Formatter_Test.java
+++ b/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/editor/Formatter_Test.java
@@ -14,13 +14,12 @@
 import java.util.List;
 
 import org.eclipse.swt.SWT;
-import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEclipseEditor;
 import org.junit.*;
 
 import com.google.eclipse.protobuf.formatting.ProtobufFormatter;
 import com.google.eclipse.protobuf.ui.junit.core.CommentReaderRule;
-import com.google.eclipse.protobuf.ui.swtbot.*;
+import com.google.eclipse.protobuf.ui.swtbot.ProtobufBot;
 
 /**
  * Tests for <code>{@link ProtobufFormatter}</code>.
@@ -28,19 +27,15 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Formatter_Test {
-  private static SWTWorkbenchBot robot;
-  private static FileFactory fileFactory;
+  private static ProtobufBot robot;
 
   public @Rule CommentReaderRule commentReader = new CommentReaderRule();
 
   @BeforeClass public static void setUpOnce() throws Exception {
-    robot = new SWTWorkbenchBot();
-    Workbench workbench = new Workbench(robot);
-    workbench.initialize();
-    ProjectFactory projectFactory = new ProjectFactory(robot);
-    projectFactory.createGeneralProject("FormatterTest");
-    fileFactory = new FileFactory(robot);
-    SWTBotEclipseEditor editor = fileFactory.createFile("dummy.proto");
+    robot = new ProtobufBot();
+    robot.resetAll();
+    robot.createGeneralProject("FormatterTest");
+    SWTBotEclipseEditor editor = robot.createFile("dummy.proto");
     editor.setText("syntax = 'proto2';");
     editor.saveAndClose();
   }
@@ -50,7 +45,7 @@
   // import 'dummy.proto';
   // import 'google/protobuf/descriptor.proto';
   @Test public void should_add_line_wrap_after_normal_import() throws Exception {
-    SWTBotEclipseEditor editor = fileFactory.createFile("formatNormalImport.proto");
+    SWTBotEclipseEditor editor = robot.createFile("formatNormalImport.proto");
     Comments comments = commentsAbove();
     editor.setText(comments.beforeFormatting);
     formatAndSave(editor);
@@ -62,7 +57,7 @@
   // import public 'dummy.proto';
   // import 'google/protobuf/descriptor.proto';
   @Test public void should_add_line_wrap_after_public_import() throws Exception {
-    SWTBotEclipseEditor editor = fileFactory.createFile("formatPublicImport.proto");
+    SWTBotEclipseEditor editor = robot.createFile("formatPublicImport.proto");
     Comments comments = commentsAbove();
     editor.setText(comments.beforeFormatting);
     formatAndSave(editor);
@@ -79,8 +74,7 @@
   }
 
   @After public void tearDown() {
-    robot.saveAllEditors();
-    robot.closeAllEditors();
+    robot.saveAndCloseAllEditors();
   }
 
   private static class Comments {
diff --git a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/FileFactory.java b/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/FileFactory.java
deleted file mode 100644
index 5332925..0000000
--- a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/FileFactory.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.swtbot;
-
-import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
-import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEclipseEditor;
-import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class FileFactory {
-
-  private final SWTWorkbenchBot robot;
-
-  public FileFactory(SWTWorkbenchBot robot) {
-    this.robot = robot;
-  }
-
-  public SWTBotEclipseEditor createFile(String name) {
-    robot.menu("File").menu("New").menu("File").click();
-    SWTBotShell shell = robot.shell("New File");
-    shell.activate();
-    robot.textWithLabel("File name:").setText(name);
-    robot.button("Finish").click();
-    return robot.editorByTitle(name).toTextEditor();
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/ProjectFactory.java b/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/ProjectFactory.java
deleted file mode 100644
index 87eb6af..0000000
--- a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/ProjectFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.swtbot;
-
-import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
-import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class ProjectFactory {
-  private final SWTWorkbenchBot robot;
-
-  public ProjectFactory(SWTWorkbenchBot robot) {
-    this.robot = robot;
-  }
-
-  public void createGeneralProject(String name) {
-    robot.menu("File").menu("New").menu("Project...").click();
-    SWTBotShell shell = robot.shell("New Project");
-    shell.activate();
-    robot.tree().expandNode("General").select("Project");
-    robot.button("Next >").click();
-    robot.textWithLabel("Project name:").setText(name);
-    robot.button("Finish").click();
-  }
-}
diff --git a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/ProtobufBot.java b/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/ProtobufBot.java
new file mode 100644
index 0000000..fd32469
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/ProtobufBot.java
@@ -0,0 +1,71 @@
+/*
+ * 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.swtbot;
+
+import static com.google.eclipse.protobuf.ui.util.Workspaces.workspaceRoot;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.*;
+import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
+import org.eclipse.swtbot.eclipse.finder.widgets.*;
+import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class ProtobufBot extends SWTWorkbenchBot {
+  private static final NullProgressMonitor NULL_MONITOR = new NullProgressMonitor();
+
+  public void resetAll() throws CoreException {
+    resetWorkbench();
+    deleteProjects();
+    closeWelcomeView();
+  }
+
+  private void deleteProjects() throws CoreException {
+    for (IProject project : workspaceRoot().getProjects()) {
+      project.delete(true, true, NULL_MONITOR);
+    }
+  }
+
+  private void closeWelcomeView() {
+    try {
+      viewByTitle("Welcome").close();
+    } catch (WidgetNotFoundException ignored) {}
+  }
+
+  public void createGeneralProject(String name) {
+    menu("File").menu("New").menu("Project...").click();
+    SWTBotShell shell = shell("New Project");
+    shell.activate();
+    tree().expandNode("General").select("Project");
+    button("Next >").click();
+    textWithLabel("Project name:").setText(name);
+    button("Finish").click();
+  }
+
+  public SWTBotEclipseEditor createFile(String name) {
+    menu("File").menu("New").menu("File").click();
+    SWTBotShell shell = shell("New File");
+    shell.activate();
+    textWithLabel("File name:").setText(name);
+    button("Finish").click();
+    return editorByTitle(name).toTextEditor();
+  }
+
+  public void saveAndCloseAllEditors() {
+    List<? extends SWTBotEditor> editors = editors();
+    for (SWTBotEditor editor : editors) {
+      editor.saveAndClose();
+    }
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/Workbench.java b/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/Workbench.java
deleted file mode 100644
index 50bdc11..0000000
--- a/com.google.eclipse.protobuf.ui.functional.test/src/com/google/eclipse/protobuf/ui/swtbot/Workbench.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.swtbot;
-
-import static com.google.eclipse.protobuf.ui.util.Workspaces.workspaceRoot;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.*;
-import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
-import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public final class Workbench {
-  private static final NullProgressMonitor NULL_MONITOR = new NullProgressMonitor();
-
-  private final SWTWorkbenchBot robot;
-
-  public Workbench(SWTWorkbenchBot robot) {
-    this.robot = robot;
-  }
-
-  public void initialize() throws CoreException {
-    robot.closeAllShells();
-    closeWelcomeView();
-    deleteAllProjects();
-  }
-
-  private void closeWelcomeView() {
-    try {
-    robot.viewByTitle("Welcome").close();
-    } catch (WidgetNotFoundException ignored) {}
-  }
-
-  private void deleteAllProjects() throws CoreException {
-    for (IProject project : workspaceRoot().getProjects()) {
-      project.delete(true, true, NULL_MONITOR);
-    }
-  }
-}
