diff --git a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
index 72c46e7..ef0e26a 100644
--- a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
@@ -74,10 +74,12 @@
  org.eclipse.equinox.p2.director;bundle-version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.artifact.repository;bundle-version="[1.0.100,2.0.0)",
  org.eclipse.equinox.p2.repository;bundle-version="[2.0.0,3.0.0]",
+ org.eclipse.equinox.p2.repository.tools;bundle-version="[2.0.100,3.0.0)",
  org.eclipse.equinox.p2.metadata.repository;bundle-version="[1.0.100,2.0.0)",
  org.eclipse.equinox.p2.garbagecollector;bundle-version="[1.0.100,2.0.0)",
  org.eclipse.equinox.p2.touchpoint.eclipse;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)"
+ org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.filesystem;bundle-version="[1.0.0,2.0.0)"
 Eclipse-LazyStart: true
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Import-Package: com.ibm.icu.util
diff --git a/ui/org.eclipse.pde.core/ant_tasks/pde-ant.jar b/ui/org.eclipse.pde.core/ant_tasks/pde-ant.jar
deleted file mode 100644
index 3aa3848..0000000
--- a/ui/org.eclipse.pde.core/ant_tasks/pde-ant.jar
+++ /dev/null
Binary files differ
diff --git a/ui/org.eclipse.pde.core/build.properties b/ui/org.eclipse.pde.core/build.properties
index 11f43fc..9afc076 100644
--- a/ui/org.eclipse.pde.core/build.properties
+++ b/ui/org.eclipse.pde.core/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2006 IBM Corporation and others.
+# Copyright (c) 2003, 2011 IBM Corporation 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
@@ -28,4 +28,8 @@
 output.ant_tasks/pde-ant.jar = binary/
 jars.compile.order = .,\
                      ant_tasks/pde-ant.jar
-jars.extra.classpath = platform:/plugin/org.apache.ant/lib/ant.jar
+jars.extra.classpath = platform:/plugin/org.apache.ant/lib/ant.jar,\
+                       platform:/plugin/org.eclipse.equinox.p2.repository.tools/lib/repository-tools-ant.jar,\
+                       platform:/plugin/org.eclipse.pde.build/lib/pdebuild-ant.jar
+extra.lib/pde-ant.jar = ../org.apache.ant/ant.jar,\
+                        ../org.eclipse.pde.build/lib/pdebuild-ant.jar
diff --git a/ui/org.eclipse.pde.core/plugin.xml b/ui/org.eclipse.pde.core/plugin.xml
index 8bd40b5..5a390ea 100644
--- a/ui/org.eclipse.pde.core/plugin.xml
+++ b/ui/org.eclipse.pde.core/plugin.xml
@@ -191,6 +191,11 @@
             name="pde.exportFeatures"
             class="org.eclipse.pde.internal.core.ant.FeatureExportTask">
       </antTask>
+      <antTask
+            class="org.eclipse.pde.internal.core.ant.TargetPlatformProvisionTask"
+            library="ant_tasks/pde-ant.jar"
+            name="pde.provisionTargetDefinition">
+      </antTask>
    </extension>
    
    <extension
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECoreMessages.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECoreMessages.java
index 26a8dc4..0928ffa 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECoreMessages.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECoreMessages.java
@@ -99,7 +99,7 @@
 		NLS.initializeMessages(BUNDLE_NAME, PDECoreMessages.class);
 	}
 
-	// Builders and natures 
+	// Builders and natures
 	public static String Builders_updating;
 	public static String Builders_verifying;
 
@@ -335,4 +335,13 @@
 
 	public static String VMHelper_noJreForExecEnv;
 
+	// Target Export ########################################
+	public static String ExportTargetDefinition_task;
+	public static String ExportTargetDeleteOldData;
+	public static String ExportTargetExportFeatures;
+	public static String ExportTargetExportPlugins;
+
+	public static String ExportTargetJob_ConfiguringDestination;
+	public static String ExportTargetJob_ExportingTargetContents;
+
 }
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/pderesources.properties b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/pderesources.properties
index 530d441..b56bd60 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/pderesources.properties
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/pderesources.properties
@@ -253,16 +253,24 @@
 SourceEntryErrorReporter_9=Default encoding ({0}) should be specified for library "{1}" to match workspace settings.
 
 SourceEntryErrorReporter_DifferentTargetLibrary=Source folders ''{0}'' share the same output folder but are targeted to different libraries.
-SourceEntryErrorReporter_DupeOutputFolder=Multiple entries for output folder ''{0}'' in build entry ''{1}''. 
+SourceEntryErrorReporter_DupeOutputFolder=Multiple entries for output folder ''{0}'' in build entry ''{1}''.
 SourceEntryErrorReporter_DupeSourceFolder=Multiple entries for source folder ''{0}'' in build entry ''{1}''.
-SourceEntryErrorReporter_ExtraOutputFolder=Redundant entry for output folder ''{0}''. It does not correspond to any source folder in ''{1}'' entry. 
+SourceEntryErrorReporter_ExtraOutputFolder=Redundant entry for output folder ''{0}''. It does not correspond to any source folder in ''{1}'' entry.
 SourceEntryErrorReporter_InvalidOutputFolder=''{0}'' is not an output folder.
 SourceEntryErrorReporter_InvalidSourceFolder=''{0}'' is not a source folder.
 SourceEntryErrorReporter_MissingLibrary=The library ''{0}'' has not been specified on the bundle classpath.
-SourceEntryErrorReporter_MissingOutputEntry=Source folder ''{0}'' does not have the output folder in corresponding output entry ''{1}''.  
+SourceEntryErrorReporter_MissingOutputEntry=Source folder ''{0}'' does not have the output folder in corresponding output entry ''{1}''.
 SourceEntryErrorReporter_MissingOutputLibForClassFolder=The class folder ''{0}'' is not associated to any output library entry.
 
 SourceLocationManager_problemProcessingBundleManifestSourceHeader=Problem processing bundle manifest source header in plug-in {0} version {1} found at {2}
 UpdateSiteBuilder_0=Cleaning {0}
 
-VMHelper_noJreForExecEnv=No installed JREs satisfy this Execution Environment: "{0}". Launch aborted.
\ No newline at end of file
+VMHelper_noJreForExecEnv=No installed JREs satisfy this Execution Environment: "{0}". Launch aborted.
+
+######### Target Export Wizard ###################################33
+ExportTargetDefinition_task = Exporting current target definition...
+ExportTargetDeleteOldData = Deleting old data...
+ExportTargetExportFeatures = Exporting features...
+ExportTargetExportPlugins = Exporting plugins...
+ExportTargetJob_ConfiguringDestination=Configuring destination
+ExportTargetJob_ExportingTargetContents=Exporting target contents
diff --git a/ui/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/TargetPlatformProvisionTask.java b/ui/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/TargetPlatformProvisionTask.java
new file mode 100644
index 0000000..b75b37d
--- /dev/null
+++ b/ui/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/TargetPlatformProvisionTask.java
@@ -0,0 +1,130 @@
+/**
+ * Copyright (c) 2011 Gunnar Wagenknecht 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:
+ *     Gunnar Wagenknecht - initial API and implementation
+ */
+package org.eclipse.pde.internal.core.ant;
+
+import java.io.File;
+import org.apache.tools.ant.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.build.BundleHelper;
+import org.eclipse.pde.internal.build.tasks.TaskHelper;
+import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.pde.internal.core.PDECoreMessages;
+import org.eclipse.pde.internal.core.target.ExportTargetJob;
+import org.eclipse.pde.internal.core.target.TargetPlatformService;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+
+/**
+ * Exports the bundles and plug-ins of a target definition to a directory
+ */
+public class TargetPlatformProvisionTask extends Task {
+
+	private File targetFile;
+	private File destinationDirectory;
+	private boolean clearDestination;
+
+	/* (non-Javadoc)
+	 * @see org.apache.tools.ant.Task#execute()
+	 */
+	public void execute() throws BuildException {
+
+		try {
+			BundleHelper.getDefault().setLog(this);
+			run();
+		} catch (CoreException e) {
+			throw new BuildException(TaskHelper.statusToString(e.getStatus(), null).toString());
+		} finally {
+			BundleHelper.getDefault().setLog(null);
+		}
+
+	}
+
+	private void export(final ITargetDefinition targetDefinition) throws CoreException {
+		// export using Job to allow progress reporting when run inside IDE
+		ExportTargetJob exportTargetJob = new ExportTargetJob(targetDefinition, destinationDirectory.toURI(), clearDestination);
+		exportTargetJob.schedule();
+		try {
+			exportTargetJob.join();
+		} catch (InterruptedException e) {
+			Thread.currentThread().interrupt();
+			throw new CoreException(Status.CANCEL_STATUS);
+		}
+	}
+
+	private IStatus resolve(final ITargetDefinition targetDefinition) throws CoreException {
+		// resolve using Job to allow progress reporting when run inside IDE
+		final IStatus[] status = new IStatus[1];
+		Job resolveJob = new Job(NLS.bind("Resolving {0}", null != targetDefinition.getName() && targetDefinition.getName().length() > 0 ? targetDefinition.getName() : targetFile.getName())) {
+			protected IStatus run(IProgressMonitor monitor) {
+				status[0] = targetDefinition.resolve(monitor);
+				return Status.OK_STATUS;
+			}
+		};
+		resolveJob.setPriority(Job.LONG);
+		resolveJob.schedule();
+		try {
+			resolveJob.join();
+		} catch (InterruptedException e) {
+			Thread.currentThread().interrupt();
+			throw new CoreException(Status.CANCEL_STATUS);
+		}
+		return status[0];
+	}
+
+	private void run() throws CoreException {
+		if (null == targetFile)
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, PDECoreMessages.TargetPlatformProvisionTask_ErrorDefinitionNotSet));
+		if (!targetFile.isFile() || !targetFile.canRead())
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(PDECoreMessages.TargetPlatformProvisionTask_ErrorDefinitionNotFoundAtSpecifiedLocation, targetFile)));
+		if (null == destinationDirectory)
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, PDECoreMessages.TargetPlatformProvisionTask_ErrorDestinationNotSet));
+
+		final ITargetDefinition targetDefinition = TargetPlatformService.getDefault().getTarget(targetFile.toURI()).getTargetDefinition();
+
+		log("Resolving target definition...");
+		IStatus status = resolve(targetDefinition);
+		if (status.matches(IStatus.ERROR | IStatus.CANCEL))
+			throw new CoreException(status);
+		else if (!status.isOK()) {
+			log(TaskHelper.statusToString(status, null).toString(), Project.MSG_WARN);
+		}
+
+		log("Exporting target definition...");
+		export(targetDefinition);
+	}
+
+	/**
+	 * Set whether the destination should be cleared prior to provisioning.
+	 * @param clearDestination
+	 */
+	public void setClearDestination(boolean clearDestination) {
+		this.clearDestination = clearDestination;
+	}
+
+	/**
+	 * Set the folder in which the target will be provisioned.
+	 * @param destinationDirectory
+	 */
+	public void setDestinationDirectory(File destinationDirectory) {
+		this.destinationDirectory = destinationDirectory;
+	}
+
+	/**
+	 * Set the target file to provision
+	 * @param targetFile
+	 */
+	public void setTargetFile(File targetFile) {
+		this.targetFile = targetFile;
+	}
+
+}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
index 5214e18..c503159 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
@@ -1739,24 +1739,16 @@
 	public static String CategorySection_newCategoryLabel;
 
 	// Target Export ########################################
-	public static String ExportTargetDefinition_task;
-	public static String ExportTargetDeleteOldData;
-	public static String ExportTargetExportFeatures;
-	public static String ExportTargetExportPlugins;
 	public static String ExportActiveTargetDefinition;
 	public static String ExportActiveTargetDefinition_message;
+	public static String ExportTargetError_ChooseDestination;
+	public static String ExportTargetError_validPath;
 	public static String ExportTargetCurrentTarget;
 	public static String ExportTargetChooseFolder;
 	public static String ExportTargetBrowse;
 	public static String ExportTargetSelectDestination;
 	public static String ExportTargetSpecifyDestination;
 	public static String ExportTargetClearDestination;
-	public static String ExportTargetError_ChooseDestination;
-	public static String ExportTargetError_validPath;
-
-	public static String ExportTargetJob_ConfiguringDestination;
-
-	public static String ExportTargetJob_ExportingTargetContents;
 
 	public static String CategoryDetails_title;
 	public static String CategoryDetails_sectionDescription;
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
index aec0b21..bf483bd 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
@@ -664,7 +664,7 @@
 ExternalizeStringsWizardPage_subKey=Substitution Key
 ExternalizeStringsResolution_label=Open Externalize Strings Wizard...
 ExternalizeStringsWizardPage_keyDuplicateError=New key may not be a duplicate of another key
-ExternalizeStringsWizardPage_keySuggested=\n\tsuggested key value: 
+ExternalizeStringsWizardPage_keySuggested=\n\tsuggested key value:
 
 Preferences_TargetEnvironmentPage_os = &Operating System:
 Preferences_TargetEnvironmentPage_ws = &Windowing System:
@@ -1011,7 +1011,7 @@
 
 NewSchemaFileMainPage_missingPluginID = Specify a valid plug-in ID.  No Plug-in ID specified.
 NewSchemaFileMainPage_nonExistingPluginID = Specify a valid plug-in ID.  Specified plug-in ID does not exist.
-NewSchemaFileMainPage_externalPluginID = Specify a valid plug-in ID.  Specified plug-in ID is external to the workspace. 
+NewSchemaFileMainPage_externalPluginID = Specify a valid plug-in ID.  Specified plug-in ID is external to the workspace.
 NewSchemaFileMainPage_missingContainer = Specify a valid container.  No container specified.
 NewSchemaFileMainPage_invalidContainer = Specify a valid container.  Specified container is not a valid project or folder.
 NewSchemaFileMainPage_nonExistingContainer = Specify a valid container.  Specified container does not exist.
@@ -1243,7 +1243,7 @@
 EditorUtilities_noImageData=The specified file contains no image data
 EditorPreferencePage_tag=Tags
 EditorPreferencePage_xml=&XML Highlighting
-EditorUtilities_icoError=The specified ICO file is missing images: 
+EditorUtilities_icoError=The specified ICO file is missing images:
 EditorPreferencePage_comment=Comments
 EditorPreferencePage_manifest=&Manifest Highlighting
 EditorUtilities_incorrectSize=The specified image is not the correct size: {0}.
@@ -1489,7 +1489,7 @@
 compilers_p_not_externalized_att = Usage of non-externali&zed strings:
 compilers_p_deprecated = Usage of deprecated attributes and &elements:
 compilers_p_internal = Usage o&f internal extension points:
-compilers_p_exported_pkgs = Missing exported pac&kages: 
+compilers_p_exported_pkgs = Missing exported pac&kages:
 compilers_p_missing_exp_pkg = Missing versions on exported packages:
 compilers_p_missing_imp_pkg = Missing versions on imported packages:
 compilers_p_missing_require_bundle = Missing versions on required bundles:
@@ -1595,13 +1595,9 @@
 CategorySection_newCategoryLabel = New Category {0}
 
 ######### Target Export Wizard ###################################33
-ExportTargetDefinition_task = Exporting current target definition...
-ExportTargetDeleteOldData = Deleting old data...
-ExportTargetExportFeatures = Exporting features...
-ExportTargetExportPlugins = Exporting plugins...
 ExportActiveTargetDefinition = Exporting Target Definition
 ExportActiveTargetDefinition_message = Please choose a destination directory to export all target content
-ExportTargetCurrentTarget = Active &Target: 
+ExportTargetCurrentTarget = Active &Target:
 ExportTargetChooseFolder = &Destination:
 ExportTargetBrowse = &Browse...
 ExportTargetSelectDestination = Select Destination
@@ -1609,8 +1605,6 @@
 ExportTargetClearDestination = &Clear destination directory before exporting
 ExportTargetError_ChooseDestination = Please choose a destination directory
 ExportTargetError_validPath = Destination directory must be a valid path
-ExportTargetJob_ConfiguringDestination=Configuring destination
-ExportTargetJob_ExportingTargetContents=Exporting target contents
 
 
 CategoryDetails_title = Category Properties
@@ -2076,7 +2070,7 @@
 InternationalizeWizard_LocalePage_availableList = Available locales:
 InternationalizeWizard_LocalePage_filter = Filter available locales:
 InternationalizeWizard_LocalePage_selectionError=At least one locale must be selected.
-InternationalizeWizard_NLSFragmentGenerator_overwriteTitle = Confirm Overwrite 
+InternationalizeWizard_NLSFragmentGenerator_overwriteTitle = Confirm Overwrite
 InternationalizeWizard_NLSFragmentGenerator_overwriteMessage = A fragment project with the name "{0}" already exists. Overwrite?
 InternationalizeWizard_NLSFragmentGenerator_errorMessage = An error occured while generating an NL Fragment.
 
@@ -2141,7 +2135,7 @@
 OrganizeManifestsWizardPage_errorMsg=This function works only on plug-ins containing a MANIFEST.MF
 OrganizeManifestsWizardPage_prefixNL=&Prefix icon paths in plug-in extensions with an $nl$ segment
 OrganizeManifestsOperation_nlIconPath=checking icon paths for missing $nl$ segments... {0}
-OrganizeManifestsOperation_unusedKeys=checking for unused keys... {0} 
+OrganizeManifestsOperation_unusedKeys=checking for unused keys... {0}
 OrganizeManifestsWizardPage_addMissing=&Ensure that all packages appear in the MANIFEST.MF
 OrganizeManifestsProcessor_rootMessage=Organize Manifest for {0}
 OrganizeManifestsWizardPage_lazyStart=Remove unnecessary lazy activation headers
@@ -2327,7 +2321,7 @@
 RemoveSplashHandlerBindingAction_msgProgressRemoveProductBindings=Removing product bindings from extension ''{0}'' ...
 StateViewPage_requiredBundles=Required Plug-ins
 StateViewPage_importedPackages=Imported Packages
-StateViewPage_suppliedBy=\ - supplied by: 
+StateViewPage_suppliedBy=\ - supplied by:
 StateViewPage_suppliedByJRE=\ - supplied by the JRE
 StateViewPage_showLeaves=Show leaf plug-ins
 StateViewPage_openItem=Open
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportTargetJob.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportTargetJob.java
deleted file mode 100644
index 95677a2..0000000
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportTargetJob.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 EclipseSource Inc. 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:
- *     EclipseSource Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.ui.wizards.exports;
-
-import java.net.URI;
-import java.util.*;
-import org.eclipse.core.filesystem.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.equinox.p2.internal.repository.tools.Repo2Runnable;
-import org.eclipse.equinox.p2.internal.repository.tools.RepositoryDescriptor;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.metadata.IProvidedCapability;
-import org.eclipse.equinox.p2.query.IQueryResult;
-import org.eclipse.pde.internal.core.feature.ExternalFeatureModel;
-import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
-import org.eclipse.pde.internal.core.target.IUBundleContainer;
-import org.eclipse.pde.internal.core.target.P2TargetUtils;
-import org.eclipse.pde.internal.core.target.provisional.*;
-import org.eclipse.pde.internal.ui.PDEPlugin;
-import org.eclipse.pde.internal.ui.PDEUIMessages;
-
-/**
- * This job exports the bundles and features that make up your target. 
- */
-public class ExportTargetJob extends Job {
-
-	private URI fDestination;
-	private boolean fclearDestinationDirectory = true;
-	private IFileStore featureDir;
-	private IFileStore pluginDir;
-	private IFileSystem fileSystem;
-	private Map filter;
-	private ITargetDefinition fTarget;
-
-	public ExportTargetJob(ITargetDefinition target, URI destination, boolean clearDestinationDirectory) {
-		super("Export Current Target Definition Job"); //$NON-NLS-1$
-		fTarget = target;
-		fDestination = destination;
-		fclearDestinationDirectory = clearDestinationDirectory;
-	}
-
-	protected IStatus run(IProgressMonitor monitor) {
-		try {
-			constructFilter(fTarget);
-			IBundleContainer[] containers = fTarget.getBundleContainers();
-			int totalWork = containers.length;
-			monitor.beginTask(PDEUIMessages.ExportTargetDefinition_task, totalWork);
-
-			monitor.subTask(PDEUIMessages.ExportTargetJob_ConfiguringDestination);
-			setupDestination(monitor);
-
-			monitor.subTask(PDEUIMessages.ExportTargetJob_ExportingTargetContents);
-			for (int i = 0; i < containers.length; i++) {
-				IBundleContainer container = containers[i];
-				container.resolve(fTarget, monitor);
-				if (!(container instanceof IUBundleContainer))
-					exportContainer(container, fTarget, featureDir, pluginDir, fileSystem, monitor);
-			}
-			exportProfile(fTarget, fDestination, monitor);
-		} catch (CoreException e) {
-			return new Status(IStatus.ERROR, PDEPlugin.getPluginId(), "Failed to export the target", e); //$NON-NLS-1$ 
-		} finally {
-			monitor.done();
-		}
-		return Status.OK_STATUS;
-	}
-
-	private void constructFilter(ITargetDefinition target) {
-		NameVersionDescriptor[] included = target.getIncluded();
-		if (included == null)
-			return;
-		filter = new HashMap();
-		for (int i = 0; i < included.length; i++) {
-			NameVersionDescriptor inclusion = included[i];
-			NameVersionDescriptor[] versions = (NameVersionDescriptor[]) filter.get(inclusion.getId());
-			if (versions == null)
-				filter.put(inclusion.getId(), new NameVersionDescriptor[] {inclusion});
-			else {
-				NameVersionDescriptor[] versions2 = new NameVersionDescriptor[versions.length + 1];
-				System.arraycopy(versions, 0, versions2, 0, versions.length);
-				versions2[versions.length] = inclusion;
-				filter.put(inclusion.getId(), versions2);
-			}
-		}
-	}
-
-	private void setupDestination(IProgressMonitor monitor) throws CoreException {
-		fileSystem = EFS.getLocalFileSystem();
-		if (!fileSystem.canWrite()) {
-			throw new CoreException(new Status(IStatus.ERROR, PDEPlugin.getPluginId(), "Destination directory not writable.")); //$NON-NLS-1$ 
-		}
-		IFileStore destination = fileSystem.getStore(fDestination);
-		featureDir = destination.getChild("features"); //$NON-NLS-1$
-		pluginDir = destination.getChild("plugins"); //$NON-NLS-1$
-		if (fclearDestinationDirectory) {
-			monitor.subTask(PDEUIMessages.ExportTargetDeleteOldData); //Deleting old data...
-			featureDir.delete(EFS.NONE, null);
-			pluginDir.delete(EFS.NONE, null);
-		}
-		featureDir.mkdir(EFS.NONE, null);
-		pluginDir.mkdir(EFS.NONE, null);
-	}
-
-	private boolean shouldExport(NameVersionDescriptor descriptor) {
-		// currently PDE does not selectively include/exclude features
-		if (filter == null || descriptor.getType().equals(NameVersionDescriptor.TYPE_FEATURE))
-			return true;
-		NameVersionDescriptor[] versions = (NameVersionDescriptor[]) filter.get(descriptor.getId());
-		if (versions == null)
-			return false;
-		for (int i = 0; i < versions.length; i++) {
-			String version = versions[i].getVersion();
-			if ((version == null || version.equals(descriptor.getVersion())) && descriptor.getType().equals(versions[i].getType()))
-				return true;
-		}
-		return false;
-	}
-
-	private boolean shouldExport(IFeatureModel feature) {
-		if (filter == null)
-			return true;
-		if (!feature.isEnabled() || !(feature instanceof ExternalFeatureModel))
-			return false;
-		NameVersionDescriptor descriptor = new NameVersionDescriptor(feature.getFeature().getId(), feature.getFeature().getVersion(), NameVersionDescriptor.TYPE_FEATURE);
-		return shouldExport(descriptor);
-	}
-
-	private boolean shouldExport(IResolvedBundle bundle) {
-		if (filter == null)
-			return true;
-		NameVersionDescriptor descriptor = new NameVersionDescriptor(bundle.getBundleInfo().getSymbolicName(), bundle.getBundleInfo().getVersion(), NameVersionDescriptor.TYPE_PLUGIN);
-		return shouldExport(descriptor);
-	}
-
-	private boolean shouldExport(IInstallableUnit iu) {
-		if (filter == null)
-			return true;
-		NameVersionDescriptor descriptor = null;
-		String feature = getCapability(iu, "org.eclipse.update.feature"); //$NON-NLS-1$
-		if (feature != null) {
-			descriptor = new NameVersionDescriptor(feature, iu.getVersion().toString(), NameVersionDescriptor.TYPE_FEATURE);
-		} else if (iu.getId().endsWith(".feature.group")) { //$NON-NLS-1$
-			descriptor = new NameVersionDescriptor(iu.getId(), iu.getVersion().toString(), NameVersionDescriptor.TYPE_FEATURE);
-		} else if ("bundle".equalsIgnoreCase(getCapability(iu, "org.eclipse.equinox.p2.eclipse.type"))) { //$NON-NLS-1$ //$NON-NLS-2$
-			descriptor = new NameVersionDescriptor(iu.getId(), iu.getVersion().toString(), NameVersionDescriptor.TYPE_PLUGIN);
-		} else if ("source".equalsIgnoreCase(getCapability(iu, "org.eclipse.equinox.p2.eclipse.type"))) { //$NON-NLS-1$ //$NON-NLS-2$
-			descriptor = new NameVersionDescriptor(iu.getId(), iu.getVersion().toString(), NameVersionDescriptor.TYPE_PLUGIN);
-		}
-		// default to true unless we know otherwise. This ensures that random metadata bits
-		// are moved over to the target as they might be needed in a future provisioning operation.
-		// We could move only unknown IUs that do NOT have artifacts... Have to think about that.
-		return descriptor == null ? true : shouldExport(descriptor);
-	}
-
-	private String getCapability(IInstallableUnit iu, String namespace) {
-		for (Iterator i = iu.getProvidedCapabilities().iterator(); i.hasNext();) {
-			IProvidedCapability capability = (IProvidedCapability) i.next();
-			if (capability.getNamespace().equals(namespace))
-				return capability.getName();
-		}
-		return null;
-	}
-
-	private void exportContainer(IBundleContainer container, ITargetDefinition target, IFileStore featureDir, IFileStore pluginDir, IFileSystem fileSystem, IProgressMonitor monitor) throws CoreException {
-		IFeatureModel[] features = container.getFeatures();
-		if (features != null) {
-			monitor.subTask(PDEUIMessages.ExportTargetExportFeatures);
-			for (int i = 0; i < features.length; i++) {
-				if (shouldExport(features[i]))
-					copy(features[i].getInstallLocation(), featureDir, fileSystem, monitor);
-			}
-		}
-
-		IResolvedBundle[] bundles = container.getBundles();
-		if (bundles != null) {
-			monitor.subTask(PDEUIMessages.ExportTargetExportPlugins);
-			for (int i = 0; i < bundles.length; i++) {
-				if (shouldExport(bundles[i]))
-					copy(bundles[i].getBundleInfo().getLocation().getPath(), pluginDir, fileSystem, monitor);
-			}
-		}
-	}
-
-	private IStatus copy(String src, IFileStore destinationParent, IFileSystem fileSystem, IProgressMonitor monitor) throws CoreException {
-		Path srcPath = new Path(src);
-		IFileStore source = fileSystem.getStore(srcPath);
-		String elementName = srcPath.segment(srcPath.segmentCount() - 1);
-		IFileStore destination = destinationParent.getChild(elementName);
-		if (destination.fetchInfo().exists()) {
-			monitor.worked(1);
-			return Status.OK_STATUS;
-		}
-		if (source.fetchInfo().isDirectory()) {
-			destination.mkdir(EFS.NONE, new NullProgressMonitor());
-		}
-		source.copy(destination, EFS.OVERWRITE, new SubProgressMonitor(monitor, 1));
-		return Status.OK_STATUS;
-	}
-
-	private RepositoryDescriptor createRepoDescriptor(URI location, String name, String kind) {
-		RepositoryDescriptor result = new RepositoryDescriptor();
-		result.setLocation(location);
-		result.setKind(kind);
-		result.setName(name);
-		if (fclearDestinationDirectory)
-			result.setAppend(false);
-		return result;
-	}
-
-	private void exportProfile(ITargetDefinition target, URI destination, IProgressMonitor monitor) throws CoreException {
-		Repo2Runnable exporter = new Repo2Runnable();
-		exporter.addDestination(createRepoDescriptor(destination, P2TargetUtils.getProfileId(target), RepositoryDescriptor.KIND_METADATA));
-		exporter.addDestination(createRepoDescriptor(destination, P2TargetUtils.getProfileId(target), RepositoryDescriptor.KIND_ARTIFACT));
-		exporter.addSource(createRepoDescriptor(P2TargetUtils.getBundlePool().getLocation(), null, RepositoryDescriptor.KIND_ARTIFACT));
-
-		IQueryResult ius = P2TargetUtils.getIUs(target, monitor);
-		ArrayList toExport = new ArrayList();
-		for (Iterator i = ius.iterator(); i.hasNext();) {
-			IInstallableUnit iu = (IInstallableUnit) i.next();
-			if (shouldExport(iu))
-				toExport.add(iu);
-		}
-		exporter.setSourceIUs(toExport);
-		exporter.run(monitor);
-	}
-}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizard.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizard.java
index 3d6dd77..bfe5cbc 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizard.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 EclipseSource Corporation and others.
+ * Copyright (c) 2010, 2011 EclipseSource Corporation 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
@@ -17,6 +17,7 @@
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.pde.internal.core.target.ExportTargetJob;
 import org.eclipse.pde.internal.core.target.TargetPlatformService;
 import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
 import org.eclipse.pde.internal.ui.*;
