Changes needed for the Oomph tutorial 
diff --git a/plugins/org.eclipse.oomph.p2.ui/icons/sample.gif b/plugins/org.eclipse.oomph.p2.ui/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/plugins/org.eclipse.oomph.p2.ui/icons/sample.gif
Binary files differ
diff --git a/plugins/org.eclipse.oomph.p2.ui/plugin.xml b/plugins/org.eclipse.oomph.p2.ui/plugin.xml
index a939793..41da9d5 100644
--- a/plugins/org.eclipse.oomph.p2.ui/plugin.xml
+++ b/plugins/org.eclipse.oomph.p2.ui/plugin.xml
@@ -58,6 +58,15 @@
             id="org.eclipse.oomph.p2.ui.ExploreRepository"
             name="Explore Repository">
       </command>
+      <category
+            id="org.eclipse.oomph.p2.ui.commands.category"
+            name="Sample Category">
+      </category>
+      <command
+            categoryId="org.eclipse.oomph.p2.ui.commands.category"
+            id="org.eclipse.oomph.p2.ui.commands.sampleCommand"
+            name="Sample Command">
+      </command>
    </extension>
 
    <extension
@@ -76,6 +85,10 @@
              </iterate>
          </activeWhen>
       </handler>
+      <handler
+            class="org.eclipse.oomph.p2.ui.handlers.StripReleaseTrainHandler"
+            commandId="org.eclipse.oomph.p2.ui.commands.sampleCommand">
+      </handler>
    </extension>
 
    <extension
@@ -103,6 +116,33 @@
                 tooltip="Offline Mode">
           </command>
       </menuContribution>
+      <!--
+      <menuContribution
+            locationURI="menu:org.eclipse.ui.main.menu?after=additions">
+         <menu
+               id="org.eclipse.oomph.p2.ui.menus.sampleMenu"
+               label="Sample Menu"
+               mnemonic="M">
+            <command
+                  commandId="org.eclipse.oomph.p2.ui.commands.sampleCommand"
+                  id="org.eclipse.oomph.p2.ui.menus.sampleCommand"
+                  mnemonic="S">
+            </command>
+         </menu>
+      </menuContribution>
+      <menuContribution
+            locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
+         <toolbar
+               id="org.eclipse.oomph.p2.ui.toolbars.sampleToolbar">
+            <command
+                  commandId="org.eclipse.oomph.p2.ui.commands.sampleCommand"
+                  icon="icons/sample.gif"
+                  id="org.eclipse.oomph.p2.ui.toolbars.sampleCommand"
+                  tooltip="Say hello world">
+            </command>
+         </toolbar>
+      </menuContribution>
+  -->
    </extension>
 
 </plugin>
diff --git a/plugins/org.eclipse.oomph.p2.ui/src/org/eclipse/oomph/p2/ui/handlers/StripReleaseTrainHandler.java b/plugins/org.eclipse.oomph.p2.ui/src/org/eclipse/oomph/p2/ui/handlers/StripReleaseTrainHandler.java
new file mode 100644
index 0000000..35b7b89
--- /dev/null
+++ b/plugins/org.eclipse.oomph.p2.ui/src/org/eclipse/oomph/p2/ui/handlers/StripReleaseTrainHandler.java
@@ -0,0 +1,168 @@
+package org.eclipse.oomph.p2.ui.handlers;
+
+import org.eclipse.oomph.p2.core.Agent;
+import org.eclipse.oomph.p2.core.P2Util;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.equinox.p2.metadata.IArtifactKey;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.query.QueryUtil;
+import org.eclipse.equinox.p2.repository.artifact.ArtifactKeyQuery;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import java.io.File;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Our sample handler extends AbstractHandler, an IHandler base class.
+ * @see org.eclipse.core.commands.IHandler
+ * @see org.eclipse.core.commands.AbstractHandler
+ */
+public class StripReleaseTrainHandler extends AbstractHandler
+{
+  /**
+   * The constructor.
+   */
+  public StripReleaseTrainHandler()
+  {
+  }
+
+  /**
+   * the command has been executed, so extract extract the needed information
+   * from the application context.
+   */
+  public Object execute(ExecutionEvent event) throws ExecutionException
+  {
+    stripTrain();
+    // stripOrbit();
+
+    IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
+    MessageDialog.openInformation(window.getShell(), "Oomph P2 Management UI", "Done!");
+    return null;
+  }
+
+  private void stripTrain()
+  {
+    String[] trainPrefixes = { "com.fasterxml.jackson", "com.mycorp.examples.timeservice", "com.naef.jnlua", "com.spotify.docker.client",
+        "com.thoughtworks.selenium", "jnr", "org.eclipse.actf", "org.eclipse.birt", "org.eclipse.bpel", "org.eclipse.bpmn2", "org.eclipse.cdt",
+        "org.eclipse.egf", "org.eclipse.emf.cdo", "org.eclipse.emf.diffmerge", "org.eclipse.emf.ecp", "org.eclipse.emf.edapt", "org.eclipse.emf.emfstore",
+        "org.eclipse.emf.facet", "org.eclipse.emf.query", "org.eclipse.emf.rap", "org.eclipse.emfforms", "org.eclipse.fx", "org.eclipse.gmt.modisco",
+        "org.eclipse.graphiti", "org.eclipse.gyrex", "org.eclipse.jpt", "org.eclipse.jsf", "org.eclipse.jst", "org.eclipse.jubula", "org.eclipse.jwt",
+        "org.eclipse.launchbar", "org.eclipse.ldt", "org.eclipse.libra", "org.eclipse.linuxtools", "org.eclipse.m2m", "org.eclipse.mat", "org.eclipse.modisco",
+        "org.eclipse.net4j", "org.eclipse.objectteams", "org.eclipse.papyrus", "org.eclipse.persistence", "org.eclipse.photran", "org.eclipse.php",
+        "org.eclipse.ptp", "org.eclipse.rap", "org.eclipse.rcptt", "org.eclipse.remote", "org.eclipse.riena", "org.eclipse.rse", "org.eclipse.scout",
+        "org.eclipse.sphinx", "org.eclipse.stardust", "org.eclipse.tcf", "org.eclipse.thym", "org.eclipse.tm", "org.eclipse.tracecompass", "org.eclipse.wb",
+        "org.eclipse.wtp", "org.eclipse.xwt", "org.eclipse.datatools", "org.eclipse.gef4", "org.eclipse.sapphire", "org.eclipse.uml2", "org.eclipse.xpand" };
+
+    try
+    {
+      URI uri = new File("C:/develop/develop/p2/releases/mars/201510021000").toURI();
+      Agent agent = P2Util.getAgentManager().getCurrentAgent();
+
+      List<IInstallableUnit> iusToRemove = new ArrayList<IInstallableUnit>();
+
+      IMetadataRepositoryManager metadataRepositoryManager = agent.getMetadataRepositoryManager();
+      IMetadataRepository metadataRepository = metadataRepositoryManager.loadRepository(uri, null);
+      for (IInstallableUnit iu : metadataRepository.query(QueryUtil.createIUAnyQuery(), null))
+      {
+        String id = iu.getId();
+        if (matches(id, trainPrefixes))
+        {
+          iusToRemove.add(iu);
+        }
+      }
+
+      metadataRepository.removeInstallableUnits(iusToRemove);
+      metadataRepositoryManager.removeRepository(uri);
+
+      List<IArtifactKey> keysToRemove = new ArrayList<IArtifactKey>();
+      IArtifactRepositoryManager artifactRepositoryManager = agent.getArtifactRepositoryManager();
+      IArtifactRepository artifactRepository = artifactRepositoryManager.loadRepository(uri, null);
+      for (IArtifactKey key : artifactRepository.query(ArtifactKeyQuery.ALL_KEYS, null))
+      {
+        String id = key.getId();
+        if (matches(id, trainPrefixes))
+        {
+          keysToRemove.add(key);
+        }
+      }
+
+      artifactRepository.removeDescriptors(keysToRemove.toArray(new IArtifactKey[keysToRemove.size()]), null);
+      artifactRepositoryManager.removeRepository(uri);
+    }
+    catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  private void stripOrbit()
+  {
+    String[] prefixes = { "javax.xml" };
+
+    try
+    {
+      URI uri = new File("C:/develop/develop/p2/tools/orbit/downloads/drops/R20150519210750/repository").toURI();
+      Agent agent = P2Util.getAgentManager().getCurrentAgent();
+
+      List<IInstallableUnit> iusToRemove = new ArrayList<IInstallableUnit>();
+
+      IMetadataRepositoryManager metadataRepositoryManager = agent.getMetadataRepositoryManager();
+      IMetadataRepository metadataRepository = metadataRepositoryManager.loadRepository(uri, null);
+      for (IInstallableUnit iu : metadataRepository.query(QueryUtil.createIUAnyQuery(), null))
+      {
+        String id = iu.getId();
+        if (!matches(id, prefixes))
+        {
+          iusToRemove.add(iu);
+        }
+      }
+
+      metadataRepository.removeInstallableUnits(iusToRemove);
+      metadataRepositoryManager.removeRepository(uri);
+
+      List<IArtifactKey> keysToRemove = new ArrayList<IArtifactKey>();
+      IArtifactRepositoryManager artifactRepositoryManager = agent.getArtifactRepositoryManager();
+      IArtifactRepository artifactRepository = artifactRepositoryManager.loadRepository(uri, null);
+      for (IArtifactKey key : artifactRepository.query(ArtifactKeyQuery.ALL_KEYS, null))
+      {
+        String id = key.getId();
+        if (!matches(id, prefixes))
+        {
+          keysToRemove.add(key);
+        }
+      }
+
+      artifactRepository.removeDescriptors(keysToRemove.toArray(new IArtifactKey[keysToRemove.size()]), null);
+      artifactRepositoryManager.removeRepository(uri);
+    }
+    catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  private static boolean matches(String id, String[] prefixes)
+  {
+    for (int i = 0; i < prefixes.length; i++)
+    {
+      String prefix = prefixes[i] + ".";
+      if (id.startsWith(prefix))
+      {
+        return true;
+      }
+    }
+
+    return false;
+  }
+}
diff --git "a/plugins/org.eclipse.oomph.setup.installer/SetupArchiver \050Local\051.launch" "b/plugins/org.eclipse.oomph.setup.installer/SetupArchiver \050Local\051.launch"
new file mode 100644
index 0000000..9d57120
--- /dev/null
+++ "b/plugins/org.eclipse.oomph.setup.installer/SetupArchiver \050Local\051.launch"
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<setAttribute key="additional_plugins"/>
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.oomph.setup.installer.SetupArchiver"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="true"/>
+<stringAttribute key="bad_container_name" value="\org.eclipse.oomph.setup.insta"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/SetupArchiver (Local)"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="featureDefaultLocation" value="workspace"/>
+<stringAttribute key="featurePluginResolution" value="workspace"/>
+<booleanAttribute key="includeOptional" value="false"/>
+<stringAttribute key="location" value="@none"/>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog&#13;&#10;-target C:\develop\develop\setups\setups.zip"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dheadless.startup=true&#13;&#10;-Doomph.redirection.mirror.nothing=true&#13;&#10;-Doomph.redirection.local=http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/-&gt;${file_uri:${resource_loc:/setups}}/"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
+<setAttribute key="selected_features">
+<setEntry value="org.eclipse.oomph.p2:default"/>
+<setEntry value="org.eclipse.oomph.setup.installer:default"/>
+</setAttribute>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,com.jcraft.jsch@default:default,javax.annotation@default:default,javax.inject@default:default,javax.xml@default:default,org.apache.batik.css*1.6.0.v201011041432@default:default,org.apache.batik.css*1.7.0.v201011041433@default:default,org.apache.batik.util*1.6.0.v201011041432@default:default,org.apache.batik.util*1.7.0.v201011041433@default:default,org.apache.batik.util.gui*1.6.0.v201011041432@default:default,org.apache.batik.util.gui*1.7.0.v200903091627@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.eclipse.ant.core@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.filesystem.java7@default:false,org.eclipse.core.filesystem.win32.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.win32.x86_64@default:false,org.eclipse.core.net@default:default,org.eclipse.core.resources.win32.x86_64@default:false,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.debug.core@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.ecf.provider.filetransfer.httpclient4.ssl@default:false,org.eclipse.ecf.provider.filetransfer.httpclient4@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.ecf@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.bidi@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.equinox.p2.console@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.director.app@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.operations@default:default,org.eclipse.equinox.p2.publisher.eclipse@default:default,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.p2.touchpoint.eclipse@default:default,org.eclipse.equinox.p2.touchpoint.natives@default:default,org.eclipse.equinox.p2.transport.ecf@default:default,org.eclipse.equinox.p2.ui@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.equinox.security.win32.x86_64@default:false,org.eclipse.equinox.security@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.equinox.util@default:default,org.eclipse.help@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.jdt.core@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.jsch.core@default:default,org.eclipse.jsch.ui@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.pde.build@default:default,org.eclipse.pde.core@default:default,org.eclipse.swt.win32.win32.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.text@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.net@default:default,org.eclipse.ui.trace@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.win32@default:false,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.eclipse.update.configurator@3:true,org.sat4j.core@default:default,org.sat4j.pb@default:default,org.w3c.css.sac@default:default,org.w3c.dom.events@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.oomph.base.edit@default:default,org.eclipse.oomph.base@default:default,org.eclipse.oomph.extractor.lib@default:default,org.eclipse.oomph.jreinfo.ui@default:default,org.eclipse.oomph.jreinfo.win32.x86_64@default:false,org.eclipse.oomph.jreinfo@default:default,org.eclipse.oomph.p2.core@default:default,org.eclipse.oomph.p2.edit@default:default,org.eclipse.oomph.p2.ui@default:default,org.eclipse.oomph.p2@default:default,org.eclipse.oomph.predicates@default:default,org.eclipse.oomph.preferences@default:default,org.eclipse.oomph.resources@default:default,org.eclipse.oomph.setup.core@default:default,org.eclipse.oomph.setup.edit@default:default,org.eclipse.oomph.setup.installer@default:default,org.eclipse.oomph.setup.p2.edit@default:default,org.eclipse.oomph.setup.p2@default:default,org.eclipse.oomph.setup.tests@default:default,org.eclipse.oomph.setup.ui@default:default,org.eclipse.oomph.setup@default:default,org.eclipse.oomph.targlets.core@default:default,org.eclipse.oomph.targlets@default:default,org.eclipse.oomph.ui@default:default,org.eclipse.oomph.util.pde@default:default,org.eclipse.oomph.util@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="true"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/releng/org.eclipse.oomph.releng/Build All Platforms.launch b/releng/org.eclipse.oomph.releng/Build All Platforms.launch
new file mode 100644
index 0000000..76209dd
--- /dev/null
+++ b/releng/org.eclipse.oomph.releng/Build All Platforms.launch
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${maven.root}\bin\mvn.bat"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-Dbuild.id=Unknown&#13;&#10;-Dgit.commit=Unknown&#13;&#10;-Dgit.branch=Unknown&#13;&#10;-DskipTests=true&#13;&#10;-DDtycho.debug.resolver=true&#13;&#10;-DX&#13;&#10;clean&#13;&#10;verify"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${git.clone.oomph}"/>
+</launchConfiguration>
diff --git a/setups/Oomph.setup b/setups/Oomph.setup
index ea72e5e..c8fa24c 100644
--- a/setups/Oomph.setup
+++ b/setups/Oomph.setup
@@ -47,8 +47,6 @@
     <requirement
         name="org.eclipse.oomph.projectcopy.feature.group"/>
     <requirement
-        name="org.eclipse.oomph.version.feature.group"/>
-    <requirement
         name="org.eclipse.emf.ecoretools.sdk.feature.group"/>
     <requirement
         name="org.eclipse.swtbot.ide.feature.group"/>
@@ -114,12 +112,6 @@
   </setupTask>
   <setupTask
       xsi:type="setup:EclipseIniTask"
-      option="-Doomph.redirection.setups"
-      value="=http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/->${git.clone.oomph.location|uri}/setups/"
-      vm="true"
-      documentation="Redirect to the development version of the releng setup model."/>
-  <setupTask
-      xsi:type="setup:EclipseIniTask"
       option="-Xmx"
       value="2048m"
       vm="true"/>
@@ -162,24 +154,9 @@
     <setupTask
         xsi:type="git:GitCloneTask"
         id="git.clone.oomph"
-        remoteURI="oomph/org.eclipse.oomph"
+        remoteURI="https://git.eclipse.org/r/oomph/org.eclipse.oomph"
         checkoutBranch="master"
         userID="">
-      <annotation
-          source="http://www.eclipse.org/oomph/setup/InducedChoices">
-        <detail
-            key="inherit">
-          <value>eclipse.git.gerrit.remoteURIs</value>
-        </detail>
-        <detail
-            key="label">
-          <value>Oomph Git or Gerrit Repository</value>
-        </detail>
-        <detail
-            key="target">
-          <value>remoteURI</value>
-        </detail>
-      </annotation>
       <description>Oomph</description>
     </setupTask>
     <setupTask
diff --git a/setups/OomphTutorial.setup b/setups/OomphTutorial.setup
new file mode 100644
index 0000000..95cb5ab
--- /dev/null
+++ b/setups/OomphTutorial.setup
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<setup:Project
+    xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:projects="http://www.eclipse.org/oomph/setup/projects/1.0"
+    xmlns:setup="http://www.eclipse.org/oomph/setup/1.0"
+    xmlns:setup.p2="http://www.eclipse.org/oomph/setup/p2/1.0"
+    xsi:schemaLocation="http://www.eclipse.org/oomph/setup/projects/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Projects.ecore"
+    name="oomph-tutorial"
+    label="Oomph Tutorial">
+  <setupTask
+      xsi:type="setup:EclipseIniTask"
+      option="-Xmx"
+      value="1024m"
+      vm="true">
+    <description>Set the heap space needed to work with the projects of ${scope.project.label}</description>
+  </setupTask>
+  <setupTask
+      xsi:type="setup:PreferenceTask"
+      key="/instance/org.eclipse.ui.ide/WORKSPACE_NAME"
+      value="Oomph Tutorial"/>
+  <setupTask
+      xsi:type="setup:StringSubstitutionTask"
+      name="oomph.tutorial.location"
+      value="${oomph.tutorial.location|file}"/>
+  <setupTask
+      xsi:type="setup:VariableTask"
+      name="eclipse.target.platform"
+      value="None"
+      defaultValue="Mars"
+      storageURI="scope://Workspace"/>
+  <setupTask
+      xsi:type="setup.p2:P2Task">
+    <requirement
+        name="org.eclipse.oomph.setup.sdk.feature.group"/>
+    <requirement
+        name="org.eclipse.oomph.workingsets.feature.group"/>
+    <requirement
+        name="org.eclipse.oomph.targlets.feature.group"/>
+    <requirement
+        name="org.eclipse.oomph.ostools.feature.group"
+        optional="true"/>
+    <description>Install the tools needed in the IDE to work with the source code for ${scope.project.label}</description>
+  </setupTask>
+  <setupTask
+      xsi:type="setup:ResourceCreationTask"
+      excludedTriggers="STARTUP MANUAL"
+      content="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xD;&#xA;&lt;section name=&quot;Workbench&quot;>&#xD;&#xA;        &lt;section name=&quot;RepositoryManager&quot;>&#xD;&#xA;                &lt;list key=&quot;repositories&quot;>&#xD;&#xA;                        &lt;item value=&quot;${oomph.tutorial.location}/p2/cbi/updates/license&quot;/>&#xD;&#xA;                        &lt;item value=&quot;${oomph.tutorial.location}/p2/oomph/products/repository&quot;/>&#xD;&#xA;                        &lt;item value=&quot;${oomph.tutorial.location}/p2/oomph/updates/milestone/latest&quot;/>&#xD;&#xA;                        &lt;item value=&quot;${oomph.tutorial.location}/p2/releases/mars/201510021000&quot;/>&#xD;&#xA;                        &lt;item value=&quot;${oomph.tutorial.location}/p2/technology/epp/packages/mars&quot;/>&#xD;&#xA;                        &lt;item value=&quot;${oomph.tutorial.location}/p2/tools/orbit/downloads/drops/R20150519210750/repository&quot;/>&#xD;&#xA;                &lt;/list>&#xD;&#xA;        &lt;/section>&#xD;&#xA;&lt;/section>"
+      targetURL="${workspace.location|uri}/.metadata/.plugins/org.eclipse.oomph.p2.ui/dialog_settings.xml"
+      encoding="UTF-8">
+    <description>Initialize the Repository Explorer history list with the local p2 mirrors of the tutorial</description>
+  </setupTask>
+  <setupTask
+      xsi:type="projects:ProjectsImportTask">
+    <sourceLocator
+        rootFolder="${oomph.tutorial.location|file/oomph-tutorial}"/>
+    <description>Import the oomph-tutorial project into the Oomph tutorial workspace</description>
+  </setupTask>
+  <stream name="master"
+      label="Master"/>
+  <logicalProjectContainer
+      xsi:type="setup:ProjectCatalog"
+      href="index:/org.eclipse.setup#//@projectCatalogs[name='org.eclipse']"/>
+  <description>Oomph Tutorial provides a development environment for developing project setups</description>
+</setup:Project>
diff --git a/setups/org.eclipse.products.setup b/setups/org.eclipse.products.setup
index 5c2b087..79723c9 100644
--- a/setups/org.eclipse.products.setup
+++ b/setups/org.eclipse.products.setup
@@ -31,6 +31,95 @@
     <repository
         url="${oomph.update.url}"/>
   </setupTask>
+  <setupTask
+      xsi:type="setup:CompoundTask"
+      name="Offline Redirections">
+    <setupTask
+        xsi:type="setup:VariableTask"
+        name="oomph.tutorial.location"
+        defaultValue="${eclipse.home.root.location|basepath|basepath}"
+        label="Oomph Tutorial Location">
+      <description>The root folder for the Oomph tutorial distribution</description>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:EclipseIniTask"
+        excludedTriggers="STARTUP MANUAL"
+        option="-Doomph.redirection.archive="
+        value="http://www.eclipse.org/setups/setups.zip->${oomph.tutorial.location}/setups/setups.zip"
+        vm="true"/>
+    <setupTask
+        xsi:type="setup:EclipseIniTask"
+        excludedTriggers="STARTUP MANUAL"
+        option="-Doomph.tutorial.location="
+        value="${oomph.tutorial.location}"
+        vm="true"/>
+    <setupTask
+        xsi:type="setup:RedirectionTask"
+        sourceURL="http://download.eclipse.org/"
+        targetURL="${oomph.tutorial.location}/p2/">
+      <description>Redirect all of download.eclipse.org to the tutorial's local mirrors</description>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:RedirectionTask"
+        sourceURL="git://git.eclipse.org/gitroot/"
+        targetURL="${oomph.tutorial.location}/git/">
+      <description>Redirect all git access to git.eclipse.org to the tutorial's local clones</description>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:RedirectionTask"
+        sourceURL="http://git.eclipse.org/gitroot/"
+        targetURL="${oomph.tutorial.location}/git/">
+      <description>Redirect all http access to git.eclipse.org to the tutorial's local clones</description>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:RedirectionTask"
+        sourceURL="https://git.eclipse.org/r/"
+        targetURL="${oomph.tutorial.location}/git/">
+      <description>Redirect all http access to git.eclipse.org to the tutorial's local clones</description>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:RedirectionTask"
+        sourceURL="http://download.eclipse.org/egit/updates"
+        targetURL="http://download.eclipse.org/releases/mars/201510021000">
+      <description>Redirect egit updates to update from the Mars release</description>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:RedirectionTask"
+        sourceURL="http://download.eclipse.org/releases/mars"
+        targetURL="http://download.eclipse.org/releases/mars/201510021000">
+      <description>Redirect the Mars composite to the release child of that composite</description>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:RedirectionTask"
+        sourceURL="http://download.eclipse.org/eclipse/updates/4.5"
+        targetURL="http://download.eclipse.org/releases/mars/201510021000">
+      <description>Redirect the Platform's 4.5 updates to the Mars release</description>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:RedirectionTask"
+        sourceURL="http://download.eclipse.org/egit/updates-stable-nightly"
+        targetURL="http://download.eclipse.org/releases/mars/201510021000">
+      <description>Redirect the Platform's 4.5 milestone updates to the Mars release</description>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:RedirectionTask"
+        sourceURL="http://download.eclipse.org/modeling/emf/emf/updates/nightly/core"
+        targetURL="http://download.eclipse.org/releases/mars/201510021000">
+      <description>Redirect the Platform's 4.5 milestone updates to the Mars release</description>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:RedirectionTask"
+        sourceURL="http://download.eclipse.org/modeling/emf/cdo/orbit/latest-R"
+        targetURL="http://download.eclipse.org/tools/orbit/downloads/drops/R20150519210750/repository">
+      <description>Redirect the Platform's 4.5 milestone updates to the Mars release</description>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:RedirectionTask"
+        sourceURL="http://download.eclipse.org/mylyn/snapshots/weekly"
+        targetURL="http://download.eclipse.org/releases/mars/201510021000">
+      <description>Redirect the Platform's 4.5 milestone updates to the Mars release</description>
+    </setupTask>
+  </setupTask>
   <product name="epp.package.java"
       label="Eclipse IDE for Java Developers">
     <annotation
diff --git a/setups/org.eclipse.projects.setup b/setups/org.eclipse.projects.setup
index 68ff283..d4333c6 100644
--- a/setups/org.eclipse.projects.setup
+++ b/setups/org.eclipse.projects.setup
@@ -361,6 +361,7 @@
     </targlet>
   </setupTask>
   <project href="user:/org.eclipse.projects.setup?name='user.project',label='&lt;User>',description='A container project for local user projects that are virtual members of the Eclipse.org project catalog'#/"/>
+  <project href="OomphTutorial.setup#/"/>
   <project href="https://git.eclipse.org/c/acceleo/org.eclipse.acceleo.git/plain/releng/org.eclipse.acceleo.releng/Acceleo.setup#/"/>
   <project href="https://git.eclipse.org/c/amalgam/org.eclipse.amalgam.git/plain/releng/org.eclipse.amalgam.releng/Amalgam.setup#/"/>
   <project href="https://raw.githubusercontent.com/eclipse/buildship/master/buildship.setup#/"/>