diff --git a/ant/org.eclipse.ant.ui/.classpath b/ant/org.eclipse.ant.ui/.classpath
new file mode 100644
index 0000000..7416417
--- /dev/null
+++ b/ant/org.eclipse.ant.ui/.classpath
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+    <classpathentry kind="src" path="\org.eclipse.ant.core"/>
+    <classpathentry kind="lib" path="C:\eclipse\jre\lib\rt.jar"/>
+    <classpathentry kind="src" path="\org.eclipse.core.resources"/>
+    <classpathentry kind="src" path="\org.eclipse.core.runtime"/>
+    <classpathentry kind="src" path="Eclipse Ant UI"/>
+    <classpathentry kind="lib" path="C:\eclipse\plugins\org.eclipse.ui\workbench.jar"/>
+    <classpathentry kind="lib" path="\org.eclipse.ant.core\ant.jar"/>
+    <classpathentry kind="src" path="\org.eclipse.core.boot"/>
+    <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/ant/org.eclipse.ant.ui/.cvsignore b/ant/org.eclipse.ant.ui/.cvsignore
new file mode 100644
index 0000000..c5e82d7
--- /dev/null
+++ b/ant/org.eclipse.ant.ui/.cvsignore
@@ -0,0 +1 @@
+bin
\ No newline at end of file
diff --git a/ant/org.eclipse.ant.ui/.vcm_meta b/ant/org.eclipse.ant.ui/.vcm_meta
new file mode 100644
index 0000000..aa7cca7
--- /dev/null
+++ b/ant/org.eclipse.ant.ui/.vcm_meta
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-description>
+	<comment></comment>
+	<nature id="org.eclipse.jdt.core.javanature"/>
+	<reference project-name="org.eclipse.ant.core"/>
+	<reference project-name="org.eclipse.core.boot"/>
+	<reference project-name="org.eclipse.core.resources"/>
+	<reference project-name="org.eclipse.core.runtime"/>
+	<builder name="org.eclipse.jdt.core.javabuilder">
+	</builder>
+</project-description>
diff --git a/ant/org.eclipse.ant.ui/icons/antbuild.gif b/ant/org.eclipse.ant.ui/icons/antbuild.gif
new file mode 100644
index 0000000..6572423
--- /dev/null
+++ b/ant/org.eclipse.ant.ui/icons/antbuild.gif
Binary files differ
diff --git a/ant/org.eclipse.ant.ui/plugin.jars b/ant/org.eclipse.ant.ui/plugin.jars
new file mode 100644
index 0000000..2fd734a
--- /dev/null
+++ b/ant/org.eclipse.ant.ui/plugin.jars
@@ -0,0 +1 @@
+antui.jar=Eclipse Ant UI
diff --git a/ant/org.eclipse.ant.ui/plugin.xml b/ant/org.eclipse.ant.ui/plugin.xml
new file mode 100644
index 0000000..25c52ff
--- /dev/null
+++ b/ant/org.eclipse.ant.ui/plugin.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+
+<plugin
+  name = "AntUI"
+  id="org.eclipse.ant.internal.ui"
+  version = "0.0"
+  vendor-name = "IBM"
+  class="org.eclipse.ant.internal.ui.AntUIPlugin">
+
+  <requires>
+    <import plugin="org.eclipse.ui"/>
+    <import plugin="org.eclipse.core.resources"/>
+    <import plugin="org.eclipse.ant.core"/>
+  </requires>
+
+  <runtime>
+    <library name="antui.jar">  
+      <export name = "*"/>
+    </library> 
+  </runtime>
+
+  <extension point="org.eclipse.ui.popupMenus">
+	<objectContribution
+		id="org.eclipse.ant.internal.ui.RunAnt"
+		objectClass="org.eclipse.core.resources.IResource"
+		nameFilter="*.xml">
+		<action
+			id="RunAnt"
+			label="Run Ant"
+			tooltip="Run Ant with the selected build file"
+			menubarPath="additions"
+			enablesFor="1"
+			class="org.eclipse.ant.internal.ui.RunAntActionDelegate">
+		</action>
+	</objectContribution>			
+  </extension>
+
+</plugin>
diff --git a/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/AntUIPlugin.java b/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/AntUIPlugin.java
new file mode 100644
index 0000000..9d59421
--- /dev/null
+++ b/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/AntUIPlugin.java
@@ -0,0 +1,28 @@
+package org.eclipse.ant.internal.ui;
+
+import org.eclipse.core.runtime.IPluginDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * The plug-in runtime class for the AntUI plug-in.
+ */
+public final class AntUIPlugin extends AbstractUIPlugin {
+
+	/**
+	 * Unique identifier constant (value <code>"org.eclipse.ant.ui"</code>)
+	 * for the Ant UI plug-in.
+	 */
+	public static final String PI_ANTUI= "org.eclipse.ant.ui";
+	/**
+	 * The single instance of this plug-in runtime class.
+	 */
+	private static AntUIPlugin plugin;
+
+	public AntUIPlugin(IPluginDescriptor desc) {
+		super(desc);
+		plugin= this;
+	}
+	public static AntUIPlugin getPlugin() {
+		return plugin;
+	}
+}
diff --git a/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/BuildCanceledException.java b/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/BuildCanceledException.java
new file mode 100644
index 0000000..3c8ab68
--- /dev/null
+++ b/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/BuildCanceledException.java
@@ -0,0 +1,10 @@
+package org.eclipse.ant.internal.ui;
+
+import org.apache.tools.ant.BuildException;
+
+public class BuildCanceledException extends BuildException {
+
+	public BuildCanceledException() {
+		super("Canceled");
+	}
+}
diff --git a/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/RunAntActionDelegate.java b/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/RunAntActionDelegate.java
new file mode 100644
index 0000000..6790c41
--- /dev/null
+++ b/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/RunAntActionDelegate.java
@@ -0,0 +1,96 @@
+package org.eclipse.ant.internal.ui;
+
+import java.lang.reflect.InvocationTargetException;
+import org.apache.tools.ant.BuildException;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ant.core.AntRunner;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+
+public class RunAntActionDelegate implements IWorkbenchWindowActionDelegate, IRunnableWithProgress {
+
+	private ISelection selection;
+
+	/*
+	 * @see IWorkbenchWindowActionDelegate
+	 */
+	public void dispose() {
+	}
+	/**
+	  * Returns the active shell.
+	  */
+	protected Shell getShell() {
+		return AntUIPlugin.getPlugin().getWorkbench().getActiveWorkbenchWindow().getShell();
+	}
+	/*
+	 * @see IWorkbenchWindowActionDelegate
+	 */
+	public void init(IWorkbenchWindow window) {
+	}
+	/*
+	 * @see IRunnableWithProgress
+	 */
+	public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+		String buildFileName= null;
+		IFile buildFile= null;
+		if (selection instanceof IStructuredSelection) {
+			Object first= ((IStructuredSelection) selection).getFirstElement();
+			if (first instanceof IFile) {
+				buildFile= (IFile) first;
+				buildFileName= buildFile.getLocation().toOSString();
+			}
+		}
+
+		String[] args= {"-buildfile", buildFileName};
+		monitor.beginTask("Running Ant", IProgressMonitor.UNKNOWN);
+
+		try {
+			//TBD: should remove the build listener somehow
+			new AntRunner().run(args, new UIBuildListener(monitor, buildFile));
+		} 
+		catch (BuildCanceledException e) {
+			// build was canceled don't propagate exception
+			return;
+		}
+		catch (Exception e) {
+			throw new InvocationTargetException(e);
+		}
+		finally {
+			monitor.done();
+		}
+	}
+	/*
+	 * @see IActionDelegate
+	 */
+	public void run(IAction action) {
+		Shell shell= getShell();
+		try {
+			ProgressMonitorDialog dialog= new ProgressMonitorDialog(shell);
+			dialog.run(true, true, this);
+		} catch (InvocationTargetException e) {
+			Throwable target= e.getTargetException();
+			IStatus s= new Status(IStatus.ERROR, AntUIPlugin.PI_ANTUI, IStatus.ERROR, target.getMessage(), null);
+			ErrorDialog.openError(getShell(), "Ant", "Exception while running Ant", s);
+		} catch (InterruptedException e) {
+			// do nothing on cancel
+			return;
+		}
+	}
+	/*
+	 * @see IWorkbenchActionDelegate
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		this.selection= selection;
+	}
+}
diff --git a/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/UIBuildListener.java b/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/UIBuildListener.java
new file mode 100644
index 0000000..73b4309
--- /dev/null
+++ b/ant/org.eclipse.ant.ui/src/org/eclipse/ant/internal/ui/UIBuildListener.java
@@ -0,0 +1,114 @@
+package org.eclipse.ant.internal.ui;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.Location;
+import org.apache.tools.ant.Target;
+import org.apache.tools.ant.Task;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+// TBD
+// * Marker mechanism doesn't work for Locations other than
+//   the original build file. This could pose problems for
+//   ant tasks.
+// * incremental task shows minimal feedback
+
+public class UIBuildListener implements BuildListener {
+	IProgressMonitor fMonitor;
+	Target fTarget;
+	Task fTask;
+	IFile fBuildFile;
+	
+	public UIBuildListener(IProgressMonitor monitor, IFile file) {
+		fMonitor= monitor;
+		fBuildFile= file;
+	}
+	public void buildFinished(BuildEvent be){
+		fMonitor.done();
+		if (be.getException() != null) {
+			handleBuildException(be.getException());
+		}
+	}
+	public void buildStarted(BuildEvent be) {
+		fMonitor.subTask("Build started...");
+		removeMarkers();
+	}
+	private void checkCanceled() {
+		if (fMonitor.isCanceled())
+			throw new BuildCanceledException();
+	}
+	private void createMarker(IFile file, BuildException be) {
+		try {
+			int lineNumber= getLineFromLocation(be.getLocation());
+			IMarker marker= file.createMarker(IMarker.PROBLEM);
+			Map map= new HashMap();
+			map.put(IMarker.LINE_NUMBER, new Integer(lineNumber));
+			map.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
+			map.put(IMarker.MESSAGE, be.getMessage());
+			map.put(IMarker.LOCATION, Integer.toString(lineNumber));
+			marker.setAttributes(map);
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+	private int getLineFromLocation(Location l) {
+		String locstr= l.toString();
+		int end= locstr.lastIndexOf(':');
+		int start= locstr.lastIndexOf(':', end-1);
+		String lstr= locstr.substring(start+1, end);
+		try {
+			return Integer.parseInt(lstr);
+		} catch (NumberFormatException e) {
+			return -1;
+		}
+	}
+	private void handleBuildException(Throwable t) {
+		System.out.println("BuildException: "+t);
+		if (t instanceof BuildException) {
+			BuildException bex= (BuildException)t;
+			// the build exception has a location that
+			// refers to a build file
+			if (bex.getLocation() != Location.UNKNOWN_LOCATION) {
+				createMarker(fBuildFile, bex);					System.out.println(bex.getLocation());
+			}
+		}
+	}
+	public void messageLogged(BuildEvent be) {
+		checkCanceled();
+		System.out.println("Message"+be.getMessage());
+	}
+	private void removeMarkers() {
+		try {
+			fBuildFile.deleteMarkers(IMarker.PROBLEM, true, IResource.DEPTH_ZERO);
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+	public void targetFinished(BuildEvent be) {
+		checkCanceled();
+		if (be.getException() != null)
+			handleBuildException(be.getException());
+	}
+	public void targetStarted(BuildEvent be) {
+		checkCanceled();
+		fTarget= be.getTarget();
+		fMonitor.subTask("Target: \""+fTarget.getName()+"\" starting...");
+	}
+	public void taskFinished(BuildEvent be) {
+		checkCanceled();
+	}
+	public void taskStarted(BuildEvent be) {
+		checkCanceled();
+		fTask= be.getTask();
+		fMonitor.subTask("Target: \""+fTarget.getName()+"\" - "+fTask.getTaskName());
+		if (be.getException() != null)
+			handleBuildException(be.getException());
+	}
+}
