diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/.classpath b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/.classpath
new file mode 100644
index 0000000..8a8f166
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/.project b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/.project
new file mode 100644
index 0000000..314edad
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.e4.enterprise.installer.test.integration.fixture</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b0ecde1
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Tue Apr 21 16:18:59 CDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/META-INF/MANIFEST.MF b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e4491eb
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Rcpexample Plug-in
+Bundle-SymbolicName: org.eclipse.e4.enterprise.installer.test.integration.fixture;singleton:=true
+Bundle-Version: 4.6.0.qualifier
+Bundle-Activator: org.eclipse.e4.enterprise.installer.test.integration.fixture.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.update.configurator,
+ org.eclipse.update.core,
+ org.eclipse.e4.enterprise.installer,
+ org.eclipse.e4.enterprise.installer.ui.swt,
+ org.eclipse.e4.core.metaconfig
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/README b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/README
new file mode 100644
index 0000000..8ecda35
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/README
@@ -0,0 +1,66 @@
+What is this?
+
+Test fixtures for testing updating from version X to version Y.
+
+products/*  -- Minimal platform with installer
+sites/*     -- Update site to update platform to specified destination version
+			   (don't want to use full update site because we don't want to update the bootstrapper)
+
+The table below summarizes for each release if the "driver bundle" is the RCP Example 
+or the Bootstrapper and which API was the "default" API path through the installer 
+for that release:
+
+4.0.0 - RCP Example  -> BundleUpdater#update(String) 
+4.1.1 - RCP Example  -> BundleUpdater#update(String) 
+4.2.0 - Bootstrapper -> BundleUpdaterHelper#updateWithProgressDialog() -> BundleUpdater#update(String)
+4.3.0 - Bootstrapper -> BundleUpdaterHelper#updateWithProgressDialog() -> BundleUpdater#update(String)
+4.4.1 - Bootstrapper -> BundleUpdaterHelper#updateWithProgressDialog() -> BundleUpdater#update(URL, File)
+
+The installer test verifies the following:
+
+Given versions V(4.0.0) to V(4.n), for all V(x), the installer test ensures that we can 
+successfully update from V(x) to V(x+1), V(x+2), ..., V(n).
+
+In each case, we do *not* update the "driver bundle" (ie: the RCP example bundle or the 
+bootstrapper), but only the installer, and verify that the resulting installation works.  We
+also test some other minimal invariants.  This results in the following observation from the 
+above table:
+
+For versions 4.0.0-4.3.0, the default installer execution path always went through 
+#update(String).  For versions subsequent to 4.3.0, the default installer execution path goes
+through #update(URL, File).
+
+Consequently, the platform fixture for versions 4.0.0-4.3.0 will only execute the #update(String)
+code path.  Similarly, versions after 4.3.0 (noninclusive) will only execute the #update(URL, File)
+code path.  Since the various #update methods are only convenience methods that delegate to
+the "real" #update method and don't do any work of their own, this seems like a reasonable 
+compromise over testing all permutations of #update methods for each pair of version upgrades.
+
+Lastly, version 4.4.0 removed all permutations of the legacy #update(String) method.  For testability
+and to ease customer migration, 4.4.1 adds back a single #update(String) method but marks it as
+@deprecated.  This will enable all customers who used the default installer code path up through 4.3.0
+to upgrade to 4.4.1 without needing to also upgrade their bootstrapper.  They can then upgrade
+their bootstrapper separately when needed.
+
+-------------------------------
+
+In order to run the Integration tests contained within this plug-in you need to;
+
+1) Open up install.product and export to a directory somewhere
+
+2) Open up the InstallerIntegrationTest class (under org.eclipse.e4.enterprise.installer.test.integration)
+
+3) Change the EXPORT_DIR constant to match the directory where you exported in Step 1)
+	(Don't include any eclipse sub directory)
+
+4) Right click InstallerIntegrationTest and click "Run as Junit test"
+
+---------
+
+Problems writing an integration test for upgrade problem:
+
+1) Unlike all the other tests, this test must start with a fixture that is at a specific version.
+
+What this is *really* chasing is: Can we upgrade from any prior version of the platform to the current
+version and guarantee that (1) it works, and (2) there is some minimal consistent behavior.
+
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/about.html b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/about.html
new file mode 100644
index 0000000..f77f378
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/about.html
@@ -0,0 +1,22 @@
+<h1>About This Content</h1>
+
+23 June, 2010
+
+<h2>License</h2>
+
+<p>The Eclipse Foundation makes available all content in this plug-in
+("Content"). Unless otherwise indicated below, the Content is provided
+to you under the terms and conditions of the Eclipse Public License
+Version 1.0 ("EPL"). A copy of the EPL is available at
+http://www.eclipse.org/legal/epl-v10.html. For purposes of the EPL,
+"Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse
+Foundation, the Content is being redistributed by another party
+("Redistributor") and different terms and conditions may apply to your
+use of any object code in the Content. Check the Redistributor’s
+license that was provided with the Content. If no such license exists,
+contact the Redistributor. Unless otherwise indicated below, the terms
+and conditions of the EPL still apply to any source code in the
+Content and such source code may be obtained at
+http://www.eclipse.org.</p>
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/build.properties b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/build.properties
new file mode 100644
index 0000000..efe57e0
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .
+src.includes = src/
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/icons/alt_window_16.gif b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/icons/alt_window_16.gif
new file mode 100644
index 0000000..05626b1
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/icons/alt_window_16.gif
Binary files differ
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/icons/alt_window_32.gif b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/icons/alt_window_32.gif
new file mode 100644
index 0000000..b432f88
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/icons/alt_window_32.gif
Binary files differ
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/integration.product b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/integration.product
new file mode 100644
index 0000000..7b8fcaf
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/integration.product
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.4"?>
+
+<product name="Installer RCP Application Example" id="org.eclipse.e4.enterprise.installer.test.integration.rcpmain.product" application="org.eclipse.e4.enterprise.installer.test.integration.rcpmain.application" version="1.0" useFeatures="true">
+
+   <configIni use="default">
+   </configIni>
+
+   <launcherArgs>
+      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
+   </launcherArgs>
+
+   <launcher>
+      <solaris/>
+      <win useIco="false">
+         <bmp/>
+      </win>
+   </launcher>
+
+   <vm>
+   </vm>
+
+   <plugins>
+   </plugins>
+
+   <features>
+      <feature id="org.eclipse.e4.enterprise.installer.feature" version="0.0.0"/>
+      <feature id="org.eclipse.e4.enterprise.config.feature" version="0.0.0"/>
+      <feature id="org.eclipse.rcp" version="0.0.0"/>
+      <feature id="org.eclipse.e4.enterprise.installer.test.integration.feature" version="0.0.0"/>
+   </features>
+
+</product>
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/plugin.xml b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/plugin.xml
new file mode 100644
index 0000000..f5b8391
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/plugin.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         id="application"
+         point="org.eclipse.core.runtime.applications">
+      <application>
+         <run
+               class="org.eclipse.e4.enterprise.installer.test.integration.fixture.Application">
+         </run>
+      </application>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectives">
+      <perspective
+            name="Perspective"
+            class="org.eclipse.e4.enterprise.installer.test.integration.fixture.Perspective"
+            id="org.eclipse.e4.enterprise.installer.test.integration.fixture.perspective">
+      </perspective>
+   </extension>
+   <extension
+         point="org.eclipse.ui.views">
+      <view
+            name="View"
+            class="org.eclipse.e4.enterprise.installer.test.integration.fixture.View"
+            id="org.eclipse.e4.enterprise.installer.test.integration.fixture.view">
+      </view>
+   </extension>
+   <extension
+         id="product"
+         point="org.eclipse.core.runtime.products">
+      <product
+            application="org.eclipse.e4.enterprise.installer.test.integration.rcpmain.application"
+            name="Installer RCP Application Example">
+         <property
+               name="appName"
+               value="Installer RCP Application Example">
+         </property>
+      </product>
+   </extension>
+
+</plugin>
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/Activator.java b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/Activator.java
new file mode 100644
index 0000000..ed96c37
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/Activator.java
@@ -0,0 +1,87 @@
+/******************************************************************************
+ * Copyright (c) David Orme and others
+ * 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
+ *
+ * Contributors:
+ *    David Orme - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.enterprise.installer.test.integration.fixture;
+
+import org.eclipse.e4.core.metaconfig.Configuration;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+import org.osgi.util.tracker.ServiceTracker;
+
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.e4.enterprise.installer.test.integration.fixture";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	private ServiceTracker configTracker;
+
+	/**
+	 * @return the current configuration file's Properties object.  May be null
+	 * if the configuration service is not loaded or is not included in the 
+	 * application.
+	 */
+	public Configuration getConfiguration() {
+		return (Configuration) configTracker.getService();
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		configTracker = new ServiceTracker(context, Configuration.class.getName(), null);
+		configTracker.open();
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * Returns an image descriptor for the image file at the given
+	 * plug-in relative path
+	 *
+	 * @param path the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return imageDescriptorFromPlugin(PLUGIN_ID, path);
+	}
+}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/Application.java b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/Application.java
new file mode 100644
index 0000000..0a230a4
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/Application.java
@@ -0,0 +1,172 @@
+/******************************************************************************
+ * Copyright (c) David Orme and others
+ * 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
+ *
+ * Contributors:
+ *    David Orme - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.enterprise.installer.test.integration.fixture;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.e4.core.metaconfig.Configuration;
+import org.eclipse.e4.core.metaconfig.ConfigurationException;
+import org.eclipse.e4.enterprise.installer.InstallError;
+import org.eclipse.e4.enterprise.installer.ui.swt.BundleUpdaterHelper;
+import org.eclipse.e4.enterprise.installer.ui.swt.BundleUpdaterHelper.UpdateResult;
+import org.eclipse.e4.enterprise.installer.ui.swt.BundleUpdaterHelper.UpdateStatus;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.update.configuration.IConfiguredSite;
+import org.eclipse.update.configuration.IInstallConfiguration;
+import org.eclipse.update.core.IFeatureReference;
+import org.eclipse.update.core.SiteManager;
+import org.eclipse.update.core.VersionedIdentifier;
+
+
+/**
+ * This class controls all aspects of the application's execution
+ */
+public class Application implements IApplication {
+	public static final String MESSAGE_LOCATION_KEY = "org.eclipse.e4.enterprise.installer.test.integration.MESSAGE_LOCATION";
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
+	 */
+	public Object start(IApplicationContext context) {
+		Activator activator = Activator.getDefault();
+		
+		activator.getLog().log(new Status(Status.INFO, "!STARTUP", "Startup at " + new Date()));
+		
+		Configuration configuration = activator.getConfiguration();
+		String messageLocationString = (String) configuration.getProperties().get(MESSAGE_LOCATION_KEY);
+		if (messageLocationString == null) {
+			messageLocationString = "messages.txt";
+		}
+		File messageLocationFile = new File(messageLocationString);
+		try {
+			UpdateStatus status = configureInstaller(configuration);
+			UpdateResult result = status.result;
+			switch (result) {
+			case FAILURE_INSTALL_ERROR:
+				logError(status.failureException.getMessage(), status.failureException);
+				return IApplication.EXIT_OK;
+			case FAILURE_USER_CANCELLED:
+			case SUCCESS_RESTART_NOT_REQUIRED:
+				//things are installed, any restarts have happened so now log which features are installed
+				logInstalledFeatures(messageLocationFile);
+				activator.getLog().log(new Status(Status.INFO, "!STARTUP", "No updates downloaded, continuing..."));
+				return IApplication.EXIT_OK;
+			case SUCCESS_RESTART_REQUIRED:
+				activator.getLog().log(new Status(Status.INFO, "!STARTUP", "Downloaded updates; Restarting..."));
+				return IApplication.EXIT_RESTART;
+			default:
+				logError("Should not get to this case!", new RuntimeException());
+				assert(false);
+			}
+		} catch (ConfigurationException e) {
+			// boom - something's gone wrong. 
+			// If this were a real app, we'd want to do something here. 
+			// Like log it or tell user or generally be unhappy.
+			//
+			// currently, we will "exit ok" (restart == false) , as opposed to asking for a restart.
+			// ... which for the purposes of this test, is fine.
+			String message = "Unable to access configuration";
+			logError(message, e);
+			return IApplication.EXIT_OK;
+		} catch (InstallError e) {
+			logError(e.getMessage(), e);
+			return IApplication.EXIT_OK;
+		} catch (IOException e) {
+			logError(e.getMessage(), e);
+			e.printStackTrace();
+		}
+		
+		return IApplication.EXIT_OK;
+	}
+
+	private static final String FEATURE_PREFIX_ECLIPSE = "org.eclipse";
+
+	private void logInstalledFeatures(File messageLocationFile) throws IOException, InstallError {
+
+		List<String> installedFeatures = getInstalledFeatures();
+		StringBuffer installedFeatureStrings = new StringBuffer("");
+
+		FileWriter writer = new FileWriter(messageLocationFile, false);
+		for (String feature : installedFeatures) {
+			if (feature.startsWith(FEATURE_PREFIX_ECLIPSE)) {
+				installedFeatureStrings.append(feature + "\r\n");
+			}
+		}
+
+		writer.write(installedFeatureStrings.toString());
+		writer.flush();
+		writer.close();
+	}
+	
+	public List<String> getInstalledFeatures() {
+		List<String> installedFeatures = new ArrayList<String>();
+		try {
+			IInstallConfiguration config = SiteManager.getLocalSite().getCurrentConfiguration();
+			IConfiguredSite[] sites = config.getConfiguredSites();
+			for (IConfiguredSite configuredSite : sites) {
+				IFeatureReference[] featureReferences = configuredSite.getConfiguredFeatures();
+				for (IFeatureReference featureReference : featureReferences) {
+					VersionedIdentifier versionedIdentifier = featureReference.getVersionedIdentifier();
+					String item = versionedIdentifier.getIdentifier() + versionedIdentifier.getVersion();
+					installedFeatures.add(item);
+				}
+			}
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+		return installedFeatures;
+	}
+	
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.app.IApplication#stop()
+	 */
+	public void stop() {
+		final IWorkbench workbench = PlatformUI.getWorkbench();
+		if (workbench == null)
+			return;
+		final Display display = workbench.getDisplay();
+		display.syncExec(new Runnable() {
+			public void run() {
+				if (!display.isDisposed())
+					workbench.close();
+			}
+		});
+		updateThread.interrupt();
+	}
+	
+	// Install updates, if available ----------------------------------------------------------------------
+	
+	private Thread updateThread;
+
+	private UpdateStatus configureInstaller(Configuration config) throws ConfigurationException, InstallError {
+		return new BundleUpdaterHelper().updateWithProgressDialog();
+	}
+
+	// For our example, we'll use the Eclipse logger, but you can use any logger you want.
+	void logError(String message, Throwable e) {
+		IStatus error = new Status(Status.ERROR, Activator.PLUGIN_ID, message, e);
+		Activator.getDefault().getLog().log(error);
+	}
+
+}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/ApplicationActionBarAdvisor.java b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/ApplicationActionBarAdvisor.java
new file mode 100644
index 0000000..e49428a
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/ApplicationActionBarAdvisor.java
@@ -0,0 +1,58 @@
+/******************************************************************************
+ * Copyright (c) David Orme and others
+ * 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
+ *
+ * Contributors:
+ *    David Orme - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.enterprise.installer.test.integration.fixture;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+
+/**
+ * An action bar advisor is responsible for creating, adding, and disposing of
+ * the actions added to a workbench window. Each window will be populated with
+ * new actions.
+ */
+public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
+
+	// Actions - important to allocate these only in makeActions, and then use
+	// them
+	// in the fill methods. This ensures that the actions aren't recreated
+	// when fillActionBars is called with FILL_PROXY.
+	private IWorkbenchAction exitAction;
+
+	public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
+		super(configurer);
+	}
+
+	protected void makeActions(final IWorkbenchWindow window) {
+		// Creates the actions and registers them.
+		// Registering is needed to ensure that key bindings work.
+		// The corresponding commands keybindings are defined in the plugin.xml
+		// file.
+		// Registering also provides automatic disposal of the actions when
+		// the window is closed.
+
+		exitAction = ActionFactory.QUIT.create(window);
+		register(exitAction);
+	}
+
+	protected void fillMenuBar(IMenuManager menuBar) {
+		MenuManager fileMenu = new MenuManager("&File",
+				IWorkbenchActionConstants.M_FILE);
+		menuBar.add(fileMenu);
+		fileMenu.add(exitAction);
+	}
+
+}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/ApplicationWorkbenchAdvisor.java b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/ApplicationWorkbenchAdvisor.java
new file mode 100644
index 0000000..275cd99
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/ApplicationWorkbenchAdvisor.java
@@ -0,0 +1,30 @@
+/******************************************************************************
+ * Copyright (c) David Orme and others
+ * 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
+ *
+ * Contributors:
+ *    David Orme - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.enterprise.installer.test.integration.fixture;
+
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchAdvisor;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+
+public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
+
+	private static final String PERSPECTIVE_ID = "org.eclipse.e4.enterprise.installer.test.integration.fixture.perspective";
+
+	public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
+			IWorkbenchWindowConfigurer configurer) {
+		return new ApplicationWorkbenchWindowAdvisor(configurer);
+	}
+
+	public String getInitialWindowPerspectiveId() {
+		return PERSPECTIVE_ID;
+	}
+
+}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/ApplicationWorkbenchWindowAdvisor.java b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/ApplicationWorkbenchWindowAdvisor.java
new file mode 100644
index 0000000..46b8ced
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/ApplicationWorkbenchWindowAdvisor.java
@@ -0,0 +1,37 @@
+/******************************************************************************
+ * Copyright (c) David Orme and others
+ * 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
+ *
+ * Contributors:
+ *    David Orme - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.enterprise.installer.test.integration.fixture;
+
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+
+public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
+
+	public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+		super(configurer);
+	}
+
+	public ActionBarAdvisor createActionBarAdvisor(
+			IActionBarConfigurer configurer) {
+		return new ApplicationActionBarAdvisor(configurer);
+	}
+
+	public void preWindowOpen() {
+		IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
+		configurer.setInitialSize(new Point(400, 300));
+		configurer.setShowCoolBar(false);
+		configurer.setShowStatusLine(false);
+		configurer.setTitle("Installer RCP Demo");
+	}
+}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/BackgroundUpdater.java b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/BackgroundUpdater.java
new file mode 100644
index 0000000..b81c284
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/BackgroundUpdater.java
@@ -0,0 +1,64 @@
+/******************************************************************************
+ * Copyright (c) David Orme and others
+ * 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
+ *
+ * Contributors:
+ *    David Orme - initial API and implementation
+ ******************************************************************************/
+/**
+ * 
+ */
+package org.eclipse.e4.enterprise.installer.test.integration.fixture;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.e4.enterprise.installer.BundleUpdater;
+import org.eclipse.e4.enterprise.installer.InstallError;
+import org.eclipse.ui.PlatformUI;
+
+
+class BackgroundUpdater implements Runnable {
+	private final Application application;
+	private BundleUpdater updater;
+	private String url;
+	private int hours;
+	
+	public BackgroundUpdater(Application application, BundleUpdater updater, String url, int hours) {
+		this.application = application;
+		this.updater = updater;
+		this.url = url;
+		this.hours = hours;
+	}
+	
+	public void run() {
+		while (true) {
+			try {
+				Thread.sleep(1000*60*60 * hours);  // update every hour
+			} catch (InterruptedException e) {
+				// Application is closing; return
+				return;
+			}
+			Job updateJob = new Job("Updating application") {
+				@Override
+				protected IStatus run(IProgressMonitor monitor) {
+					try {
+						monitor.beginTask("Updating application", 1);
+						if (updater.update(url)) {
+							PlatformUI.getWorkbench().restart();
+						}
+						monitor.worked(1);
+					} catch (InstallError e) {
+						BackgroundUpdater.this.application.logError(e.getMessage(), e);
+					}
+					return null;
+				}
+			};
+			updateJob.schedule();
+		}
+	}
+}
+
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/Perspective.java b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/Perspective.java
new file mode 100644
index 0000000..2f7e28d
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/Perspective.java
@@ -0,0 +1,26 @@
+/******************************************************************************
+ * Copyright (c) David Orme and others
+ * 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
+ *
+ * Contributors:
+ *    David Orme - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.enterprise.installer.test.integration.fixture;
+
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+public class Perspective implements IPerspectiveFactory {
+
+	public void createInitialLayout(IPageLayout layout) {
+		String editorArea = layout.getEditorArea();
+		layout.setEditorAreaVisible(false);
+		layout.setFixed(true);
+		
+		layout.addStandaloneView(View.ID,  false, IPageLayout.LEFT, 1.0f, editorArea);
+	}
+
+}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/View.java b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/View.java
new file mode 100644
index 0000000..d596640
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/View.java
@@ -0,0 +1,94 @@
+/******************************************************************************
+ * Copyright (c) David Orme and others
+ * 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
+ *
+ * Contributors:
+ *    David Orme - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.enterprise.installer.test.integration.fixture;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.update.configuration.IConfiguredSite;
+import org.eclipse.update.configuration.IInstallConfiguration;
+import org.eclipse.update.core.IFeatureReference;
+import org.eclipse.update.core.SiteManager;
+import org.eclipse.update.core.VersionedIdentifier;
+
+public class View extends ViewPart {
+	public static final String ID = "org.eclipse.e4.enterprise.installer.test.integration.fixture.view";
+
+	private IConfiguredSite[] sites;
+
+	private List installedFeatures;
+
+	public void createPartControl(Composite parent) {
+		parent.setLayout(new GridLayout());
+
+		// Layout the UI: Installed features list
+		new Label(parent, SWT.NULL).setText("Installed features");
+		installedFeatures = new List(parent, SWT.BORDER|SWT.V_SCROLL);
+		installedFeatures.add("Computing initial list...");
+		installedFeatures.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		
+		// Populate the installed features list and hook up the events
+		// This is demo code so we willingly mix presentation and behavior :-)
+
+		/*
+		 * NOTE: This is demo code so we create a Thread directly.  Production code should
+		 * use the Eclipse Jobs API.
+		 */
+		Thread backgroundInit = new Thread(new Runnable() {
+			public void run() {
+				try {
+					IInstallConfiguration config = SiteManager.getLocalSite().getCurrentConfiguration();
+					sites = config.getConfiguredSites();
+					populateInstalledFeaturesList(installedFeatures);
+				} catch (CoreException e) {
+					e.printStackTrace();
+				}
+			}
+			
+			private void populateInstalledFeaturesList(final List installedFeatures) {
+				// NOTE: Production code should use Eclipse's Jobs API to get on the Display thread...
+				Display.getDefault().asyncExec(new Runnable() {
+					public void run() {
+						installedFeatures.removeAll();
+					}
+				});
+				try {
+					for (IConfiguredSite configuredSite : sites) {
+						IFeatureReference[] featureReferences = configuredSite.getConfiguredFeatures();
+						for (IFeatureReference featureReference : featureReferences) {
+							VersionedIdentifier versionedIdentifier = featureReference.getVersionedIdentifier();
+							final String item = versionedIdentifier.getIdentifier() + versionedIdentifier.getVersion();
+							// NOTE: Production code should use Eclipse's Jobs API to get on the Display thread...
+							Display.getDefault().asyncExec(new Runnable() {
+								public void run() {
+									installedFeatures.add(item);
+								}
+							});
+						}
+					}
+				} catch (CoreException e) {
+					e.printStackTrace();
+				}
+			}
+		});
+		backgroundInit.start();
+	}
+
+	public void setFocus() {
+		installedFeatures.setFocus();
+	}
+}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/layout.xswt b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/layout.xswt
new file mode 100644
index 0000000..66caa37
--- /dev/null
+++ b/tests/org.eclipse.e4.enterprise.installer.test.integration.fixture/src/org/eclipse/e4/enterprise/installer/test/integration/fixture/layout.xswt
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xswt xmlns:x="http://sweet_swt.sf.net/xswt">
+    <import xmlns="http://sweet_swt.sf.net/xswt">
+        <package name="java.lang"/>
+        <package name="org.eclipse.swt.widgets"/>
+        <package name="org.eclipse.swt.layout"/>
+    </import>
+    
+    <composite>
+        <layoutData x:class="gridData" grabExcessHorizontalSpace="true" grabExcessVerticalSpace="true" horizontalAlignment="GridData.FILL" verticalAlignment="GridData.FILL"/>
+        <layout x:class="gridLayout" />
+        
+        <label x:style="WRAP" text="Something really really really bad happened and we could not update">
+	        <layoutData x:class="gridData" grabExcessHorizontalSpace="true" grabExcessVerticalSpace="true" horizontalAlignment="GridData.FILL" verticalAlignment="GridData.FILL"/>
+        </label>
+        
+        <label x:style="SEPARATOR|HORIZONTAL">
+	        <layoutData x:class="gridData" grabExcessHorizontalSpace="true" horizontalAlignment="GridData.FILL"/>
+        </label>
+        
+        <button text="OK">
+	        <layoutData x:class="gridData" horizontalAlignment="GridData.CENTER"/>
+        </button>
+    </composite>
+</xswt>
