diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/selection/SelectionTransformer.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/selection/SelectionTransformer.java
index 932c8af..7daac8e 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/selection/SelectionTransformer.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/selection/SelectionTransformer.java
@@ -22,7 +22,10 @@
 	IStructuredSelection inSelection  = (IStructuredSelection)value;
 	Selection            outSelection = new Selection();
 	
-	outSelection.setSelection( inSelection.toArray() );
+	if (inSelection != null)
+	{
+		outSelection.setSelection( inSelection.toArray() );	
+	}
 	
 	return outSelection;
   }
diff --git a/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF
index 4f72b06..e3b25c3 100644
--- a/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.jst.ws
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Activator: org.eclipse.jst.ws.internal.plugin.WebServicePlugin
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/WSPlugin.properties b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/WSPlugin.properties
index a159e14..97d4fc1 100644
--- a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/WSPlugin.properties
+++ b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/WSPlugin.properties
@@ -17,3 +17,5 @@
 
 ANY_FILTER_NAME=All files
 ANY_FILTER_DESC=This is a kind of Filter that accepts all objects.
+
+ERROR_SELECTION_TRANSFORM=Specified selection does not match a resource.
diff --git a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/WSPluginMessages.java b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/WSPluginMessages.java
index 018b749..9cffbd3 100644
--- a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/WSPluginMessages.java
+++ b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/WSPluginMessages.java
@@ -23,6 +23,7 @@
 	public static String MSG_ERROR_SERVER;
 	public static String ANY_FILTER_NAME;
 	public static String ANY_FILTER_DESC;
+	public static String ERROR_SELECTION_TRANSFORM;
 
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, WSPluginMessages.class);
diff --git a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/String2SelectionTransformer.java b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/String2SelectionTransformer.java
index 15c87ef..2e0ef4b 100644
--- a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/String2SelectionTransformer.java
+++ b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/String2SelectionTransformer.java
@@ -20,6 +20,7 @@
 import org.eclipse.jst.j2ee.ejb.EJBResource;
 import org.eclipse.jst.j2ee.ejb.EnterpriseBean;
 import org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit;
+import org.eclipse.jst.ws.internal.WSPluginMessages;
 import org.eclipse.wst.command.internal.env.common.FileResourceUtils;
 import org.eclipse.wst.command.internal.env.core.data.Transformer;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
@@ -37,47 +38,50 @@
 		
 		StructuredSelection selection = null;
 		IResource resource = FileResourceUtils.getWorkspaceRoot().findMember(new Path(value.toString()));
-		IProject resProject = resource.getProject();
-		
-		// check if resource is part of an EJB
-		if (J2EEUtils.isEJBComponent(resProject))
-		{
-			// if resource is part of EJB need to get the EnterpriseBean as the selection
-			IVirtualComponent[] ejbComponents = J2EEUtils.getEJBComponents(resProject);
-			EJBArtifactEdit  ejbEdit = null;			
-			try{				
-				ejbEdit = EJBArtifactEdit.getEJBArtifactEditForRead(ejbComponents[0]);				
-	            EJBResource ejbRes = ejbEdit.getEJBJarXmiResource();
-	            EJBJar ejbJar = ejbRes.getEJBJar();	            
-	            IPath path = resource.getFullPath();
-	            String resourcePath = ResourceUtils.getJavaResourcePackageName(path);
-	            String javaClassName = resource.getName();
-	            // strip off file extension if necessary
-	            if (javaClassName.lastIndexOf('.')>-1)
-	            {	
-	              javaClassName = javaClassName.substring(0, javaClassName.lastIndexOf('.'));	              
-	            } 
-	            JavaClass javaClass = JavaMOFUtils.getJavaClass(resourcePath, javaClassName, resProject);
-	            EnterpriseBean ejb = ejbJar.getEnterpriseBeanWithReference(javaClass);
-	            if (ejb != null)
-	            {
-	            	selection = new StructuredSelection(ejb.getName());	
-	            }
-			}
-			catch (Exception exc)
-			{
-				
-			}
-			finally {
-	              if (ejbEdit!=null)
-	                ejbEdit.dispose();
-	            }
-		}		
-		
 		if (resource != null)
 		{
+			IProject resProject = resource.getProject();			
+			// check if resource is part of an EJB
+			if (J2EEUtils.isEJBComponent(resProject))
+			{
+				// if resource is part of EJB need to get the EnterpriseBean as the selection
+				IVirtualComponent[] ejbComponents = J2EEUtils.getEJBComponents(resProject);
+				EJBArtifactEdit  ejbEdit = null;			
+				try{				
+					ejbEdit = EJBArtifactEdit.getEJBArtifactEditForRead(ejbComponents[0]);				
+		            EJBResource ejbRes = ejbEdit.getEJBJarXmiResource();
+		            EJBJar ejbJar = ejbRes.getEJBJar();	            
+		            IPath path = resource.getFullPath();
+		            String resourcePath = ResourceUtils.getJavaResourcePackageName(path);
+		            String javaClassName = resource.getName();
+		            // strip off file extension if necessary
+		            if (javaClassName.lastIndexOf('.')>-1)
+		            {	
+		              javaClassName = javaClassName.substring(0, javaClassName.lastIndexOf('.'));	              
+		            } 
+		            JavaClass javaClass = JavaMOFUtils.getJavaClass(resourcePath, javaClassName, resProject);
+		            EnterpriseBean ejb = ejbJar.getEnterpriseBeanWithReference(javaClass);
+		            if (ejb != null)
+		            {
+		            	selection = new StructuredSelection(ejb.getName());	
+		            }
+				}
+				catch (Exception exc)
+				{
+					
+				}
+				finally {
+		              if (ejbEdit!=null)
+		                ejbEdit.dispose();
+		        }
+			}
 			selection = new StructuredSelection(resource);			
-		}		
+		}
+		else
+		{
+			// string doesn't return resource - error condition
+			throw new IllegalArgumentException(WSPluginMessages.ERROR_SELECTION_TRANSFORM);
+		}
 		return selection;
 	}
 
diff --git a/bundles/org.eclipse.wst.command.env.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.command.env.core/META-INF/MANIFEST.MF
index 1c1522f..b224dbc 100644
--- a/bundles/org.eclipse.wst.command.env.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.command.env.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.command.env.core
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.command.internal.env.core.data,
diff --git a/bundles/org.eclipse.wst.command.env.core/src/org/eclipse/wst/command/internal/env/core/fragment/CommandFragmentEngine.java b/bundles/org.eclipse.wst.command.env.core/src/org/eclipse/wst/command/internal/env/core/fragment/CommandFragmentEngine.java
index 2a68f63..4b98c58 100644
--- a/bundles/org.eclipse.wst.command.env.core/src/org/eclipse/wst/command/internal/env/core/fragment/CommandFragmentEngine.java
+++ b/bundles/org.eclipse.wst.command.env.core/src/org/eclipse/wst/command/internal/env/core/fragment/CommandFragmentEngine.java
@@ -357,8 +357,9 @@
   }
   
   // Subclasses can do initialization before the execution of a command here
-  protected void initBeforeExecute( AbstractDataModelOperation operation )
+  protected IStatus initBeforeExecute( AbstractDataModelOperation operation )
   {  
+	  return Status.OK_STATUS;
   }
   
   private IStatus runCommand( CommandListEntry entry, IProgressMonitor monitor )
@@ -378,7 +379,7 @@
   	  	  
   	    try
   	    {
-          initBeforeExecute( cmd );
+          status = initBeforeExecute( cmd );
           
   	      environment_.getLog().log(ILog.INFO, "command", 5001, this, "runCommand", "Executing: " + cmd.getClass().getName());
   	  	    
@@ -393,6 +394,7 @@
           MultiStatus  parentStatus    = new MultiStatus( "id", 0, new IStatus[]{unexpectedError}, 
                                                           EnvironmentCoreMessages.MSG_ERROR_UNEXPECTED_ERROR, null );
   	      environment_.getStatusHandler().reportError( parentStatus );
+  	      status = unexpectedError;
   	    }
   	    finally
   	    {
diff --git a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/Environment.properties b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/Environment.properties
index 41aa0a9..adfb459 100644
--- a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/Environment.properties
+++ b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/Environment.properties
@@ -27,6 +27,7 @@
 MSG_ERR_ANT_DATA_TRANSFORM=Exception transforming Ant property key {0} using transformation {1}.
 MSG_ERR_ANT_CALL_SETTER=Exception invoking setter method {0} for Ant property.
 MSG_ERR_ANT_CMD_FRAGMENT=Exception retrieving Ant command fragment from registry.
+MSG_ERR_ANT_SCENARIO_TYPE=Cannot determine scenario type.  Please ensure scenarioType Ant property is set.
 
 LABEL_YES=Yes
 LABEL_YES_TO_ALL=Yes All
diff --git a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/EnvironmentMessages.java b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/EnvironmentMessages.java
index 717a53d..7025e31 100644
--- a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/EnvironmentMessages.java
+++ b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/EnvironmentMessages.java
@@ -35,6 +35,7 @@
 	public static String MSG_ERR_ANT_DATA_TRANSFORM;
 	public static String MSG_ERR_ANT_CALL_SETTER;
 	public static String MSG_ERR_ANT_CMD_FRAGMENT;
+	public static String MSG_ERR_ANT_SCENARIO_TYPE;
 	public static String LABEL_YES;
 	public static String LABEL_YES_TO_ALL;
 	public static String LABEL_CANCEL;
diff --git a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntController.java b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntController.java
index 65a21b4..4080a0f 100644
--- a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntController.java
+++ b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntController.java
@@ -13,7 +13,10 @@
 
 import java.util.Hashtable;
 
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.wst.command.internal.env.EnvironmentMessages;
 import org.eclipse.wst.command.internal.env.context.PersistentResourceContext;
 import org.eclipse.wst.command.internal.env.core.CommandManager;
 import org.eclipse.wst.command.internal.env.core.data.DataFlowManager;
@@ -49,14 +52,23 @@
        
 	   //  set up operation fragments - conditional on options by user... service or client
 	   //  also need to initialize the "selection" or input file (WSDL, Java) here
+	   
 	   CommandFragment rootFragment =  environment.getRootCommandFragment();
 	   
-	   // construct the engine - manages execution of operations
-	   createOperationManager(rootFragment, dataManager, environment);
-	   
-	   DataMappingRegistryImpl    dataRegistry_   = new DataMappingRegistryImpl();
-	   rootFragment.registerDataMappings(dataRegistry_);
-	   
+	   if (rootFragment != null)
+	   {		   
+	       //construct the engine - manages execution of operations
+		   createOperationManager(rootFragment, dataManager, environment);
+		   
+		   DataMappingRegistryImpl    dataRegistry_   = new DataMappingRegistryImpl();
+		   rootFragment.registerDataMappings(dataRegistry_);		   
+	   }
+	   else  //problem getting the root fragment - scenario type is likely missing
+	   {
+		   handler.reportError(new Status(IStatus.ERROR, "ws_ant", 9999, EnvironmentMessages.MSG_ERR_ANT_SCENARIO_TYPE, null));
+		   return;
+	   }
+	      
 	   //ready to start running operations
  	   ((AntOperationManager)getOperationManager()).moveForwardToNextStop(new NullProgressMonitor());
    }
diff --git a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntEnvironment.java b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntEnvironment.java
index bbeaf48..d65dbc9 100644
--- a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntEnvironment.java
+++ b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntEnvironment.java
@@ -10,22 +10,30 @@
  *******************************************************************************/
 package org.eclipse.wst.command.internal.env.ant;
 
-import java.lang.reflect.*;
-import java.util.*;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Vector;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.wst.command.internal.env.EnvironmentMessages;
-import org.eclipse.wst.command.internal.env.core.fragment.CommandFragment;
-import org.eclipse.wst.command.internal.env.eclipse.EclipseEnvironment;
 import org.eclipse.wst.command.internal.env.core.CommandManager;
 import org.eclipse.wst.command.internal.env.core.context.ResourceContext;
 import org.eclipse.wst.command.internal.env.core.data.BeanModifier;
 import org.eclipse.wst.command.internal.env.core.data.ClassEntry;
 import org.eclipse.wst.command.internal.env.core.data.Transformer;
+import org.eclipse.wst.command.internal.env.core.fragment.CommandFragment;
+import org.eclipse.wst.command.internal.env.eclipse.EclipseEnvironment;
 import org.eclipse.wst.common.environment.ILog;
 import org.eclipse.wst.common.environment.IStatusHandler;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
@@ -46,9 +54,6 @@
 	private boolean mappingComplete_;
 	private ClassEntry classEntry;	
 	
-	public static int INIT_OPERATION_DATA_SUCCESS = 1;
-	public static int INIT_OPERATION_DATA_FAIL = -1;
-	
 	// extensionPoint names and namespace
 	private static String MAPPER_EXT_PT = "antDataMapping";  //$NON-NLS-1$
 	private static String SCENARIO_EXT_PT = "antScenario";  //$NON-NLS-1$
@@ -83,15 +88,15 @@
 	}
 	
 	// call from engine prior to executing the operation 
-	public int initOperationData(AbstractDataModelOperation op)
+	public IStatus initOperationData(AbstractDataModelOperation op)
 	{
 		//check to see if data has already been primed for this operation 
 		String qualifiedClassName = op.getClass().getName();
 		if (operationDataRecord_.get(qualifiedClassName) == null)
 		{
 			classEntry = new ClassEntry();
-			try {			
 			
+			try {
 				//extension lookup for the bean - may be more than one property for it
 				Enumeration operationData = getMappingExtensions(op);					
 				classEntry.setterList_= getSetterList(op);		
@@ -133,13 +138,12 @@
                 operationDataRecord_.put(qualifiedClassName, "");
 			}			
 			catch (Exception e)
-			{
-				e.printStackTrace();
-				return INIT_OPERATION_DATA_FAIL;
+			{					                                
+				throw new IllegalArgumentException(e.getMessage());
 			}
 
 		}
-		return INIT_OPERATION_DATA_SUCCESS;
+		return Status.OK_STATUS;
 	}
 
 	/**
@@ -171,7 +175,7 @@
 	    * @param operationName The name of the operation that is being initialized.
 	    * @return A collection of PropertyDataHolder objects. Returns null if there are no extensions matching the operationName.
 	    */
-	   private Enumeration getMappingExtensions(AbstractDataModelOperation operation)
+	   private Enumeration getMappingExtensions(AbstractDataModelOperation operation) throws CoreException
 	   {	   		   
 		   String operationName = operation.getClass().getName();
 		   //go to ext registry and get all antMapping extensions
@@ -203,7 +207,10 @@
 						 transform = ce.createExecutableExtension(MAPPER_TRANSFORM_ATTRIBUTE);	 
 					 }
 					 catch (CoreException cex) {
-					   getLog().log(ILog.ERROR, "ws_ant", 5092, this, "getMappingExtensions", EnvironmentMessages.bind(EnvironmentMessages.MSG_ERR_ANT_DATA_TRANSFORM, key, transform));                  
+					   Status errorStatus = new Status(Status.ERROR, "ws_ant", 5092, cex.getMessage(), cex);
+					   getStatusHandler().reportError(errorStatus);
+					   getLog().log(ILog.ERROR, "ws_ant", 5092, this, "getMappingExtensions", EnvironmentMessages.bind(EnvironmentMessages.MSG_ERR_ANT_DATA_TRANSFORM, key, transform));
+					   throw new CoreException(errorStatus);
 					 }
 					 
 					 if (transform != null && transform instanceof BeanModifier/*dataTable.containsKey(property)*/)
@@ -271,8 +278,9 @@
 				}
 				catch (Exception exc)
 				{
-                    getLog().log(ILog.ERROR, "ws_ant", 5093, this, "transformAndSet", EnvironmentMessages.bind(EnvironmentMessages.MSG_ERR_ANT_DATA_TRANSFORM, mapping.key_, mapping.transform_));                    
-					return false;
+					getStatusHandler().reportError(new Status(Status.ERROR, "ws_ant", 5093, exc.getMessage(), exc));
+                    getLog().log(ILog.ERROR, "ws_ant", 5093, this, "transformAndSet", EnvironmentMessages.bind(EnvironmentMessages.MSG_ERR_ANT_DATA_TRANSFORM, mapping.key_, mapping.transform_));
+                    throw new IllegalArgumentException(exc.getMessage());
 				}				
 			}
 			return false;
@@ -347,7 +355,7 @@
 	     return result;
 	   }   
        
-	   private boolean callSetter(AbstractDataModelOperation op, Object param, String setterMethodName)
+	   private boolean callSetter(AbstractDataModelOperation op, Object param, String setterMethodName) throws CoreException
 	   {
 		   for (Iterator iterator = classEntry.setterList_.iterator(); iterator.hasNext();) 
 		   {
@@ -362,7 +370,10 @@
 			     			 return true;
 			     		 }
 			     		 catch(Exception cex){
+			     			Status errorStatus = new Status(Status.ERROR, "ws_ant", 5094, cex.getMessage(), cex);
+			     			getStatusHandler().reportError(errorStatus);
 			     			getLog().log(ILog.ERROR, "ws_ant", 5094, this, "callSetter", EnvironmentMessages.bind(EnvironmentMessages.MSG_ERR_ANT_CALL_SETTER, setterMethodName));
+			     			throw new CoreException(errorStatus);
 			     		 }
 			       }  
 				}
@@ -372,7 +383,7 @@
 	   
 	
 	   // look for setter with primitive type parameter - if find one, convert String propertyValue and call it
-	   private boolean callPrimitiveSetter(PropertyDataHolder mapping)
+	   private boolean callPrimitiveSetter(PropertyDataHolder mapping) throws CoreException
 	   {			
 			for (Iterator iterator = classEntry.setterList_.iterator(); iterator.hasNext();) {
 				Method element = (Method) iterator.next();
@@ -422,7 +433,10 @@
 					    	return true;	
 				    	}
 				    	catch(Exception e){
+				    		Status errorStatus = new Status(Status.ERROR, "ws_ant", 5095, e.getMessage(), e);
+				    		getStatusHandler().reportError(errorStatus);
 				    		getLog().log(ILog.ERROR, "ws_ant", 5095, this, "callPrimitiveSetter", EnvironmentMessages.bind(EnvironmentMessages.MSG_ERR_ANT_CALL_SETTER, element.getName()));
+				    		throw new CoreException(errorStatus);
 				    	}
 				    }			
 				}
@@ -432,7 +446,7 @@
 		
 		//check for setter with parameter type that takes a String to construct
 		// construct the parameter using String & call the setter  
-	   private boolean callSetterConstructor(PropertyDataHolder mapping)
+	   private boolean callSetterConstructor(PropertyDataHolder mapping) throws CoreException
 	   {	
 			for (Iterator iterator = classEntry.setterList_.iterator(); iterator.hasNext();) {
 				Method element = (Method) iterator.next();
@@ -448,8 +462,10 @@
 					}
 					catch (Exception exc)
 					{
+						Status errorStatus = new Status(Status.ERROR, "ws_ant", 5096, exc.getMessage(), exc);
+						getStatusHandler().reportError(errorStatus);
 						getLog().log(ILog.ERROR, "ws_ant", 5096, this, "callSetterConstructor", EnvironmentMessages.bind(EnvironmentMessages.MSG_ERR_ANT_CALL_SETTER, element.getName()));
-						return false;
+						throw new CoreException(errorStatus);
 					}
 				}
 	        }			
@@ -463,7 +479,7 @@
 		   return controller_.getOperationManager();
 	   } 
 	   
-	   public CommandFragment getRootCommandFragment()
+	   public CommandFragment getRootCommandFragment() 
        {
     	   
     	   //look up the commandFragment in the scenarioRegistry extension point with an ID corresponding to the scenario property in the propertytable
@@ -489,6 +505,8 @@
 				 }
 				 catch (Exception exception)
 				 {
+					 Status errorStatus = new Status(Status.ERROR, "ws_ant", 5097, exception.getMessage(), exception);
+					 getStatusHandler().reportError(errorStatus);
 					 getLog().log(ILog.ERROR, "ws_ant", 5097, this, "getRootCommandFragment", EnvironmentMessages.MSG_ERR_ANT_CMD_FRAGMENT);					 
 				 }				 
 			  }    	   
diff --git a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntOperationManager.java b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntOperationManager.java
index f8eaddc..1898612 100644
--- a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntOperationManager.java
+++ b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntOperationManager.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.wst.command.internal.env.ant;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.wst.command.internal.env.core.data.DataFlowManager;
 import org.eclipse.wst.command.internal.env.core.fragment.CommandFragment;
 import org.eclipse.wst.command.internal.env.core.fragment.CommandFragmentEngine;
@@ -27,14 +29,19 @@
 {	
 	  private AntEnvironment environment_;
 	  
-	  protected void initBeforeExecute( AbstractDataModelOperation operation )
-    {
-      int initStatus = environment_.initOperationData( operation );
-      
-      if (initStatus == AntEnvironment.INIT_OPERATION_DATA_FAIL)
+	  protected IStatus initBeforeExecute( AbstractDataModelOperation operation )
+    {      
+      environment_.getLog().log(ILog.INFO, "ws_ant", 5098, this, "initBeforeExecute", "Initializing data for: " + operation.getClass().getName());
+      IStatus initStatus = Status.OK_STATUS;
+      try
       {
-        environment_.getLog().log(ILog.INFO, "ws_ant", 5098, this, "runCommand", "Initializing data for: " + operation.getClass().getName());
+    	  initStatus = environment_.initOperationData( operation );  
       }
+      catch (Exception e)
+      {
+    	 throw new IllegalArgumentException(e.getMessage());  
+      }        
+      return initStatus;
     }
 
     /**
