diff --git a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
index c9312e0..7c16d16 100644
--- a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
+++ b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
@@ -32,7 +32,7 @@
 	protected Map userProperties;
 	protected int messageOutputLevel = 2; // Project.MSG_INFO
 	protected String buildLoggerClassName;
-	protected String arguments;
+	protected String[] arguments;
 
 /** 
  * Constructs an instance of this class.
@@ -84,11 +84,54 @@
  * @param arguments the arguments to be passed to the script
  */
 public void setArguments(String arguments) {
-	this.arguments = arguments;
+	this.arguments = getArray(arguments);
 }
 
 /**
- * Sets the targets and execution order.
+ * Helper method to ensure an array is converted into an ArrayList.
+ */
+private String[] getArray(String args) {
+	StringBuffer sb = new StringBuffer();
+	boolean waitingForQuote = false;
+	ArrayList result = new ArrayList();
+	for (StringTokenizer tokens = new StringTokenizer(args, ", \"", true); tokens.hasMoreTokens();) { //$NON-NLS-1$
+		String token = tokens.nextToken();
+		if (waitingForQuote) {
+			if (token.equals("\"")) { //$NON-NLS-1$
+				result.add(sb.toString());
+				sb.setLength(0);
+				waitingForQuote = false;
+			} else
+				sb.append(token);
+		} else {
+			if (token.equals("\"")) { //$NON-NLS-1$
+				// test if we have something like -Dproperty="value"
+				if (result.size() > 0) {
+					int index = result.size() - 1;
+					String last = (String) result.get(index);
+					if (last.charAt(last.length()-1) == '=') {
+						result.remove(index);
+						sb.append(last);
+					}
+				}
+				waitingForQuote = true;
+			} else {
+				if (!(token.equals(",") || token.equals(" "))) //$NON-NLS-1$ //$NON-NLS-2$
+					result.add(token);
+			}
+		}
+	}
+	return (String[]) result.toArray(new String[result.size()]);
+}
+
+/**
+ * Sets the arguments to be passed to the script (e.g. -Dos=win32 -Dws=win32 -verbose).
+ * 
+ * @param arguments the arguments to be passed to the script
+ */
+public void setArguments(String[] arguments) {
+	this.arguments = arguments;
+} * Sets the targets and execution order.
  * 
  * @param executionTargets which targets should be run and in which order
  */
@@ -180,7 +223,7 @@
 		}
 		// set extra arguments
 		if (arguments != null) {
-			Method setArguments = classInternalAntRunner.getMethod("setArguments", new Class[] {String.class}); //$NON-NLS-1$
+			Method setArguments = classInternalAntRunner.getMethod("setArguments", new Class[] {String[].class}); //$NON-NLS-1$
 			setArguments.invoke(runner, new Object[] {arguments});
 		}
 		// run
@@ -202,7 +245,7 @@
  * Runs the build script.
  */
 public void run() throws CoreException {
-	run(null);
+	run((IProgressMonitor) null);
 }
 
 /**
@@ -279,4 +322,14 @@
 		String message = (e.getMessage() == null) ? Policy.bind("error.buildFailed") : e.getMessage(); //$NON-NLS-1$
 		throw new CoreException(new Status(IStatus.ERROR, PI_ANTCORE, ERROR_RUNNING_SCRIPT, message, e));
 	}
-}}
\ No newline at end of file
+}
+
+/**
+ * Sets the arguments to be passed to the script (e.g. -Dos=win32 -Dws=win32 -verbose).
+ * 
+ * @param arguments the arguments to be passed to the script
+ */
+public void setArguments(String[] arguments) {
+	this.arguments = arguments;
+}
+}
\ No newline at end of file
