diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.data/META-INF/MANIFEST.MF b/ecl/plugins/org.eclipse.rcptt.ecl.data/META-INF/MANIFEST.MF
index a6386a4..c868f6a 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.data/META-INF/MANIFEST.MF
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.data/META-INF/MANIFEST.MF
@@ -10,12 +10,13 @@
 Export-Package: org.eclipse.rcptt.ecl.data.commands,
  org.eclipse.rcptt.ecl.data.commands.impl,
  org.eclipse.rcptt.ecl.data.commands.util,
+ org.eclipse.rcptt.ecl.data.internal.commands,
  org.eclipse.rcptt.ecl.data.objects,
  org.eclipse.rcptt.ecl.data.objects.impl,
  org.eclipse.rcptt.ecl.data.objects.util
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.emf.ecore;visibility:=reexport,
  org.eclipse.rcptt.ecl.core;bundle-version="1.1.0",
- org.eclipse.rcptt.ecl.data;visibility:=reexport,
- org.eclipse.core.resources;resolution:=optional
+ org.eclipse.core.resources;resolution:=optional,
+ org.eclipse.rcptt.ecl.filesystem;bundle-version="1.5.2"
 Bundle-ActivationPolicy: lazy
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadCsvFileService.java b/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadCsvFileService.java
index 83a90d8..4818156 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadCsvFileService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadCsvFileService.java
@@ -26,6 +26,7 @@
 import org.eclipse.rcptt.ecl.data.objects.ObjectsFactory;
 import org.eclipse.rcptt.ecl.data.objects.Row;
 import org.eclipse.rcptt.ecl.data.objects.Table;
+import org.eclipse.rcptt.ecl.filesystem.FileResolver;
 import org.eclipse.rcptt.ecl.runtime.ICommandService;
 import org.eclipse.rcptt.ecl.runtime.IProcess;
 
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadLinesService.java b/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadLinesService.java
index 478c655..b08ab1c 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadLinesService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadLinesService.java
@@ -22,6 +22,7 @@
 import org.eclipse.rcptt.ecl.core.Command;
 import org.eclipse.rcptt.ecl.data.commands.ReadLines;
 import org.eclipse.rcptt.ecl.data.internal.EclDataPlugin;
+import org.eclipse.rcptt.ecl.filesystem.FileResolver;
 import org.eclipse.rcptt.ecl.runtime.ICommandService;
 import org.eclipse.rcptt.ecl.runtime.IProcess;
 
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadPropertiesService.java b/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadPropertiesService.java
index 7a7d9c1..c6f22d6 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadPropertiesService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/ReadPropertiesService.java
@@ -27,6 +27,7 @@
 import org.eclipse.rcptt.ecl.core.EclMapEntry;
 import org.eclipse.rcptt.ecl.data.commands.ReadProperties;
 import org.eclipse.rcptt.ecl.data.internal.EclDataPlugin;
+import org.eclipse.rcptt.ecl.filesystem.FileResolver;
 import org.eclipse.rcptt.ecl.runtime.BoxedValues;
 import org.eclipse.rcptt.ecl.runtime.ICommandService;
 import org.eclipse.rcptt.ecl.runtime.IProcess;
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/WriteCsvFileService.java b/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/WriteCsvFileService.java
index 6721e02..f819615 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/WriteCsvFileService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/WriteCsvFileService.java
@@ -24,6 +24,7 @@
 import org.eclipse.rcptt.ecl.data.internal.EclDataPlugin;
 import org.eclipse.rcptt.ecl.data.objects.Row;
 import org.eclipse.rcptt.ecl.data.objects.Table;
+import org.eclipse.rcptt.ecl.filesystem.FileResolver;
 import org.eclipse.rcptt.ecl.runtime.ICommandService;
 import org.eclipse.rcptt.ecl.runtime.IProcess;
 
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/WriteLinesService.java b/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/WriteLinesService.java
index 4e6c89c..d3ea7a5 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/WriteLinesService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/WriteLinesService.java
@@ -21,6 +21,7 @@
 import org.eclipse.rcptt.ecl.core.Command;
 import org.eclipse.rcptt.ecl.data.commands.WriteLines;
 import org.eclipse.rcptt.ecl.data.internal.EclDataPlugin;
+import org.eclipse.rcptt.ecl.filesystem.FileResolver;
 import org.eclipse.rcptt.ecl.runtime.CoreUtils;
 import org.eclipse.rcptt.ecl.runtime.ICommandService;
 import org.eclipse.rcptt.ecl.runtime.IProcess;
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/META-INF/MANIFEST.MF b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/META-INF/MANIFEST.MF
index 486e5a5..4cdee80 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/META-INF/MANIFEST.MF
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/META-INF/MANIFEST.MF
@@ -14,5 +14,6 @@
  org.eclipse.emf.ecore;visibility:=reexport,
  org.eclipse.rcptt.ecl.core;visibility:=reexport,
  org.eclipse.rcptt.ecl.dispatch,
- org.eclipse.core.filesystem
+ org.eclipse.core.filesystem,
+ org.eclipse.core.resources
 Bundle-ActivationPolicy: lazy
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/DeleteFile.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/DeleteFile.java
new file mode 100644
index 0000000..2635ee0
--- /dev/null
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/DeleteFile.java
@@ -0,0 +1,51 @@
+/**
+ */
+package org.eclipse.rcptt.ecl.filesystem;
+
+import org.eclipse.rcptt.ecl.core.Command;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Delete File</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.rcptt.ecl.filesystem.DeleteFile#getUri <em>Uri</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.rcptt.ecl.filesystem.FilesystemPackage#getDeleteFile()
+ * @model annotation="http://www.eclipse.org/ecl/docs description='Deletes file or folder identified by URI.\r\nCurrently supported schemes are workspace:/ for files in workspace and file:/ for files on local file system.' returns='Nothing' example='delete-file \"file:/C:/temp/1.txt\"\r\ndelete-file [uri-from-path \"C:/temp/2.txt\"]\r\nuri-from-path \"C:/temp/3.txt\" | delete-file\r\nget-file \"file:/C:/temp/4.txt\" | delete-file\r\nstr \"workspace:/MyProject/text.txt\" | delete-file\r\n\r\n'"
+ * @generated
+ */
+public interface DeleteFile extends Command {
+	/**
+	 * Returns the value of the '<em><b>Uri</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Uri</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Uri</em>' attribute.
+	 * @see #setUri(String)
+	 * @see org.eclipse.rcptt.ecl.filesystem.FilesystemPackage#getDeleteFile_Uri()
+	 * @model required="true"
+	 *        annotation="http://www.eclipse.org/ecl/docs description='URI of a file or directory. Can be created manually, or with uri-from-path.' example='file:/C:/temp'"
+	 * @generated
+	 */
+	String getUri();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.rcptt.ecl.filesystem.DeleteFile#getUri <em>Uri</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Uri</em>' attribute.
+	 * @see #getUri()
+	 * @generated
+	 */
+	void setUri(String value);
+
+} // DeleteFile
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/FilesystemFactory.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/FilesystemFactory.java
index 1a6c865..dd65ae7 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/FilesystemFactory.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/FilesystemFactory.java
@@ -67,6 +67,15 @@
 	File createFile();
 
 	/**
+	 * Returns a new object of class '<em>Delete File</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Delete File</em>'.
+	 * @generated
+	 */
+	DeleteFile createDeleteFile();
+
+	/**
 	 * Returns the package supported by this factory.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/FilesystemPackage.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/FilesystemPackage.java
index 372d45f..2d6fe97 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/FilesystemPackage.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/FilesystemPackage.java
@@ -251,6 +251,53 @@
 
 
 	/**
+	 * The meta object id for the '{@link org.eclipse.rcptt.ecl.filesystem.impl.DeleteFileImpl <em>Delete File</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.rcptt.ecl.filesystem.impl.DeleteFileImpl
+	 * @see org.eclipse.rcptt.ecl.filesystem.impl.FilesystemPackageImpl#getDeleteFile()
+	 * @generated
+	 */
+	int DELETE_FILE = 4;
+
+	/**
+	 * The feature id for the '<em><b>Host</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DELETE_FILE__HOST = CorePackage.COMMAND__HOST;
+
+	/**
+	 * The feature id for the '<em><b>Bindings</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DELETE_FILE__BINDINGS = CorePackage.COMMAND__BINDINGS;
+
+	/**
+	 * The feature id for the '<em><b>Uri</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DELETE_FILE__URI = CorePackage.COMMAND_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Delete File</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DELETE_FILE_FEATURE_COUNT = CorePackage.COMMAND_FEATURE_COUNT + 1;
+
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.rcptt.ecl.filesystem.CopyFile <em>Copy File</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -357,6 +404,27 @@
 	EAttribute getFile_Uri();
 
 	/**
+	 * Returns the meta object for class '{@link org.eclipse.rcptt.ecl.filesystem.DeleteFile <em>Delete File</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Delete File</em>'.
+	 * @see org.eclipse.rcptt.ecl.filesystem.DeleteFile
+	 * @generated
+	 */
+	EClass getDeleteFile();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.rcptt.ecl.filesystem.DeleteFile#getUri <em>Uri</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Uri</em>'.
+	 * @see org.eclipse.rcptt.ecl.filesystem.DeleteFile#getUri()
+	 * @see #getDeleteFile()
+	 * @generated
+	 */
+	EAttribute getDeleteFile_Uri();
+
+	/**
 	 * Returns the factory that creates the instances of the model.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -466,6 +534,24 @@
 		 */
 		EAttribute FILE__URI = eINSTANCE.getFile_Uri();
 
+		/**
+		 * The meta object literal for the '{@link org.eclipse.rcptt.ecl.filesystem.impl.DeleteFileImpl <em>Delete File</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.rcptt.ecl.filesystem.impl.DeleteFileImpl
+		 * @see org.eclipse.rcptt.ecl.filesystem.impl.FilesystemPackageImpl#getDeleteFile()
+		 * @generated
+		 */
+		EClass DELETE_FILE = eINSTANCE.getDeleteFile();
+
+		/**
+		 * The meta object literal for the '<em><b>Uri</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DELETE_FILE__URI = eINSTANCE.getDeleteFile_Uri();
+
 	}
 
 } //FilesystemPackage
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/impl/DeleteFileImpl.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/impl/DeleteFileImpl.java
new file mode 100644
index 0000000..065bee6
--- /dev/null
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/impl/DeleteFileImpl.java
@@ -0,0 +1,164 @@
+/**
+ */
+package org.eclipse.rcptt.ecl.filesystem.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.rcptt.ecl.core.impl.CommandImpl;
+
+import org.eclipse.rcptt.ecl.filesystem.DeleteFile;
+import org.eclipse.rcptt.ecl.filesystem.FilesystemPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Delete File</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.rcptt.ecl.filesystem.impl.DeleteFileImpl#getUri <em>Uri</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DeleteFileImpl extends CommandImpl implements DeleteFile {
+	/**
+	 * The default value of the '{@link #getUri() <em>Uri</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUri()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String URI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUri() <em>Uri</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUri()
+	 * @generated
+	 * @ordered
+	 */
+	protected String uri = URI_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DeleteFileImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return FilesystemPackage.Literals.DELETE_FILE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUri() {
+		return uri;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUri(String newUri) {
+		String oldUri = uri;
+		uri = newUri;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, FilesystemPackage.DELETE_FILE__URI, oldUri, uri));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case FilesystemPackage.DELETE_FILE__URI:
+				return getUri();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case FilesystemPackage.DELETE_FILE__URI:
+				setUri((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case FilesystemPackage.DELETE_FILE__URI:
+				setUri(URI_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case FilesystemPackage.DELETE_FILE__URI:
+				return URI_EDEFAULT == null ? uri != null : !URI_EDEFAULT.equals(uri);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (uri: ");
+		result.append(uri);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DeleteFileImpl
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/impl/FilesystemFactoryImpl.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/impl/FilesystemFactoryImpl.java
index 7bf4b3d..8b94006 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/impl/FilesystemFactoryImpl.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/impl/FilesystemFactoryImpl.java
@@ -36,7 +36,7 @@
 	 */
 	public static FilesystemFactory init() {
 		try {
-			FilesystemFactory theFilesystemFactory = (FilesystemFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.eclipse.org/ecl/filesystem.ecore"); 
+			FilesystemFactory theFilesystemFactory = (FilesystemFactory)EPackage.Registry.INSTANCE.getEFactory(FilesystemPackage.eNS_URI);
 			if (theFilesystemFactory != null) {
 				return theFilesystemFactory;
 			}
@@ -69,6 +69,7 @@
 			case FilesystemPackage.URI_FROM_PATH: return createUriFromPath();
 			case FilesystemPackage.GET_FILE: return createGetFile();
 			case FilesystemPackage.FILE: return createFile();
+			case FilesystemPackage.DELETE_FILE: return createDeleteFile();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -119,6 +120,16 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public DeleteFile createDeleteFile() {
+		DeleteFileImpl deleteFile = new DeleteFileImpl();
+		return deleteFile;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public FilesystemPackage getFilesystemPackage() {
 		return (FilesystemPackage)getEPackage();
 	}
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/impl/FilesystemPackageImpl.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/impl/FilesystemPackageImpl.java
index 78a9eac..7e45b67 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/impl/FilesystemPackageImpl.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/impl/FilesystemPackageImpl.java
@@ -21,6 +21,7 @@
 import org.eclipse.rcptt.ecl.core.CorePackage;
 
 import org.eclipse.rcptt.ecl.filesystem.CopyFile;
+import org.eclipse.rcptt.ecl.filesystem.DeleteFile;
 import org.eclipse.rcptt.ecl.filesystem.File;
 import org.eclipse.rcptt.ecl.filesystem.FilesystemFactory;
 import org.eclipse.rcptt.ecl.filesystem.FilesystemPackage;
@@ -63,6 +64,13 @@
 	private EClass fileEClass = null;
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass deleteFileEClass = null;
+
+	/**
 	 * Creates an instance of the model <b>Package</b>, registered with
 	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
 	 * package URI value.
@@ -221,6 +229,24 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EClass getDeleteFile() {
+		return deleteFileEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDeleteFile_Uri() {
+		return (EAttribute)deleteFileEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public FilesystemFactory getFilesystemFactory() {
 		return (FilesystemFactory)getEFactoryInstance();
 	}
@@ -257,6 +283,9 @@
 
 		fileEClass = createEClass(FILE);
 		createEAttribute(fileEClass, FILE__URI);
+
+		deleteFileEClass = createEClass(DELETE_FILE);
+		createEAttribute(deleteFileEClass, DELETE_FILE__URI);
 	}
 
 	/**
@@ -294,6 +323,7 @@
 		copyFileEClass.getESuperTypes().add(theCorePackage.getCommand());
 		uriFromPathEClass.getESuperTypes().add(theCorePackage.getCommand());
 		getFileEClass.getESuperTypes().add(theCorePackage.getCommand());
+		deleteFileEClass.getESuperTypes().add(theCorePackage.getCommand());
 
 		// Initialize classes and features; add operations and parameters
 		initEClass(copyFileEClass, CopyFile.class, "CopyFile", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -310,6 +340,9 @@
 		initEClass(fileEClass, File.class, "File", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getFile_Uri(), theEcorePackage.getEString(), "uri", null, 1, 1, File.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+		initEClass(deleteFileEClass, DeleteFile.class, "DeleteFile", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getDeleteFile_Uri(), theEcorePackage.getEString(), "uri", null, 1, 1, DeleteFile.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
 		// Create resource
 		createResource(eNS_URI);
 
@@ -327,7 +360,7 @@
 	 * @generated
 	 */
 	protected void createDocsAnnotations() {
-		String source = "http://www.eclipse.org/ecl/docs";		
+		String source = "http://www.eclipse.org/ecl/docs";	
 		addAnnotation
 		  (copyFileEClass, 
 		   source, 
@@ -335,39 +368,39 @@
 			 "description", "Copies <code>source</code> file or directory into <code>destination</code> directory, optionally giving it a new <code>name</code>.",
 			 "returns", "Nothing.",
 			 "example", "copy-file -source \"/Users/Ulik_MacAir/aut-Q7-1.3.12-B2/Project/t.test\" \n-destination \"/Users/Ulik_MacAir/aut-Q7-1.3.12-B2/Project/Folder\" -name \"Clone.test\""
-		   });		
+		   });	
 		addAnnotation
 		  (getCopyFile_Source(), 
 		   source, 
 		   new String[] {
 			 "description", "Source file or directory."
-		   });		
+		   });	
 		addAnnotation
 		  (getCopyFile_Destination(), 
 		   source, 
 		   new String[] {
 			 "description", "Destination directory under which the <code>source</code> file or directory will be stored."
-		   });		
+		   });	
 		addAnnotation
 		  (getCopyFile_Name(), 
 		   source, 
 		   new String[] {
 			 "description", "New name for the <code>source</code> file or directory."
-		   });		
+		   });	
 		addAnnotation
 		  (uriFromPathEClass, 
 		   source, 
 		   new String[] {
 			 "returns", "URI string. Platform independent (can be used on every OS).",
 			 "example", "get-file [uri-from-path \"C:\\windows\"] | get exists"
-		   });			
+		   });	
 		addAnnotation
 		  (getUriFromPath_Path(), 
 		   source, 
 		   new String[] {
 			 "description", "Platform-dependednt filesystem path.",
 			 "example", "C:\\windows\\system32"
-		   });		
+		   });	
 		addAnnotation
 		  (getFileEClass, 
 		   source, 
@@ -375,13 +408,28 @@
 			 "returns", "A File object.  Properties: uri, name, exists, children.",
 			 "description", "Creates a file object by its URI.",
 			 "example", "get-file \"file:/C:/Windows/System32\"  | get exists"
-		   });			
+		   });	
 		addAnnotation
 		  (getGetFile_Uri(), 
 		   source, 
 		   new String[] {
 			 "description", "URI of a file or directory. Can be created manually, or with uri-from-path.",
 			 "example", "file:/C:/windows/system32"
+		   });	
+		addAnnotation
+		  (deleteFileEClass, 
+		   source, 
+		   new String[] {
+			 "description", "Deletes file or folder identified by URI.\r\nCurrently supported schemes are workspace:/ for files in workspace and file:/ for files on local file system.",
+			 "returns", "Nothing",
+			 "example", "delete-file \"file:/C:/temp/1.txt\"\r\ndelete-file [uri-from-path \"C:/temp/2.txt\"]\r\nuri-from-path \"C:/temp/3.txt\" | delete-file\r\nget-file \"file:/C:/temp/4.txt\" | delete-file\r\nstr \"workspace:/MyProject/text.txt\" | delete-file\r\n\r\n"
+		   });	
+		addAnnotation
+		  (getDeleteFile_Uri(), 
+		   source, 
+		   new String[] {
+			 "description", "URI of a file or directory. Can be created manually, or with uri-from-path.",
+			 "example", "file:/C:/temp"
 		   });
 	}
 
@@ -392,17 +440,22 @@
 	 * @generated
 	 */
 	protected void createInputAnnotations() {
-		String source = "http://www.eclipse.org/ecl/input";							
+		String source = "http://www.eclipse.org/ecl/input";	
 		addAnnotation
 		  (getUriFromPath_Path(), 
 		   source, 
 		   new String[] {
-		   });				
+		   });	
 		addAnnotation
 		  (getGetFile_Uri(), 
 		   source, 
 		   new String[] {
 		   });	
+		addAnnotation
+		  (getDeleteFile_Uri(), 
+		   source, 
+		   new String[] {
+		   });
 	}
 
 } //FilesystemPackageImpl
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/util/FilesystemAdapterFactory.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/util/FilesystemAdapterFactory.java
index 4cc27e7..6a41d49 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/util/FilesystemAdapterFactory.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/util/FilesystemAdapterFactory.java
@@ -95,6 +95,10 @@
 				return createFileAdapter();
 			}
 			@Override
+			public Adapter caseDeleteFile(DeleteFile object) {
+				return createDeleteFileAdapter();
+			}
+			@Override
 			public Adapter caseCommand(Command object) {
 				return createCommandAdapter();
 			}
@@ -175,6 +179,20 @@
 	}
 
 	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.rcptt.ecl.filesystem.DeleteFile <em>Delete File</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.rcptt.ecl.filesystem.DeleteFile
+	 * @generated
+	 */
+	public Adapter createDeleteFileAdapter() {
+		return null;
+	}
+
+	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.rcptt.ecl.core.Command <em>Command</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/util/FilesystemSwitch.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/util/FilesystemSwitch.java
index dee879f..4a10695 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/util/FilesystemSwitch.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/gen-src/org/eclipse/rcptt/ecl/filesystem/util/FilesystemSwitch.java
@@ -121,6 +121,13 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case FilesystemPackage.DELETE_FILE: {
+				DeleteFile deleteFile = (DeleteFile)theEObject;
+				T result = caseDeleteFile(deleteFile);
+				if (result == null) result = caseCommand(deleteFile);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			default: return defaultCase(theEObject);
 		}
 	}
@@ -186,6 +193,21 @@
 	}
 
 	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Delete File</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Delete File</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseDeleteFile(DeleteFile object) {
+		return null;
+	}
+
+	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Command</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/model/filesystem.ecore b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/model/filesystem.ecore
index 40674b5..5074d90 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/model/filesystem.ecore
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/model/filesystem.ecore
@@ -56,4 +56,18 @@
   <eClassifiers xsi:type="ecore:EClass" name="File">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DeleteFile" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
+    <eAnnotations source="http://www.eclipse.org/ecl/docs">
+      <details key="description" value="Deletes file or folder identified by URI.&#xD;&#xA;Currently supported schemes are workspace:/ for files in workspace and file:/ for files on local file system."/>
+      <details key="returns" value="Nothing"/>
+      <details key="example" value="delete-file &quot;file:/C:/temp/1.txt&quot;&#xD;&#xA;delete-file [uri-from-path &quot;C:/temp/2.txt&quot;]&#xD;&#xA;uri-from-path &quot;C:/temp/3.txt&quot; | delete-file&#xD;&#xA;get-file &quot;file:/C:/temp/4.txt&quot; | delete-file&#xD;&#xA;str &quot;workspace:/MyProject/text.txt&quot; | delete-file&#xD;&#xA;&#xD;&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/ecl/input"/>
+      <eAnnotations source="http://www.eclipse.org/ecl/docs">
+        <details key="description" value="URI of a file or directory. Can be created manually, or with uri-from-path."/>
+        <details key="example" value="file:/C:/temp"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
 </ecore:EPackage>
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/model/filesystem.genmodel b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/model/filesystem.genmodel
index 312fd07..93512e7 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/model/filesystem.genmodel
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/model/filesystem.genmodel
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<genmodel:GenModel xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
-    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.rcptt.ecl.filesystem/gen-src"
-    modelPluginID="org.eclipse.rcptt.ecl.filesystem" modelName="Filesystem" editPluginClass="org.eclipse.rcptt.ecl.filesystem.provider.FilesystemEditPlugin"
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.rcptt.ecl.filesystem/gen-src" modelPluginID="org.eclipse.rcptt.ecl.filesystem"
+    modelName="Filesystem" editPluginClass="org.eclipse.rcptt.ecl.filesystem.provider.FilesystemEditPlugin"
     editorPluginClass="org.eclipse.rcptt.ecl.filesystem.presentation.FilesystemEditorPlugin"
     testSuiteClass="org.eclipse.rcptt.ecl.filesystem.tests.FilesystemAllTests" importerID="org.eclipse.emf.importer.ecore"
     complianceLevel="6.0" copyrightFields="false" runtimeVersion="2.5" usedGenPackages="../../org.eclipse.rcptt.ecl.core/model/ecl.genmodel#//core platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore">
@@ -23,5 +22,8 @@
     <genClasses ecoreClass="filesystem.ecore#//File">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute filesystem.ecore#//File/uri"/>
     </genClasses>
+    <genClasses ecoreClass="filesystem.ecore#//DeleteFile">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute filesystem.ecore#//DeleteFile/path"/>
+    </genClasses>
   </genPackages>
 </genmodel:GenModel>
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/plugin.xml b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/plugin.xml
index f14ee0f..bba1635 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/plugin.xml
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/plugin.xml
@@ -27,6 +27,11 @@
             name="GetFile"
             namespace="http://www.eclipse.org/ecl/filesystem.ecore">
       </scriptlet>
+      <scriptlet
+            class="org.eclipse.rcptt.ecl.filesystem.internal.commands.DeleteFileService"
+            name="DeleteFile"
+            namespace="http://www.eclipse.org/ecl/filesystem.ecore">
+      </scriptlet>
    </extension>
    <extension
          point="org.eclipse.rcptt.ecl.dispatch.scriptletExtension">
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFilesystemPlugin.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFilesystemPlugin.java
index e6f5155..8490743 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFilesystemPlugin.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFilesystemPlugin.java
@@ -66,11 +66,12 @@
 		return plugin;
 	}
 	
-	public static Status createError(String message, Throwable throwable) {
-		return new Status(IStatus.ERROR, EclFilesystemPlugin.PLUGIN_ID, message, throwable);
+	public static Status createError(String message, Object... args) {
+		return createError(null, message, args);
 	}
 
-	public static Status createError(String message) {
-		return createError(message, null);
+	public static Status createError(Throwable throwable, String message, Object... args) {
+		return new Status(IStatus.ERROR, EclFilesystemPlugin.PLUGIN_ID, String.format(message, args), throwable);
 	}
+
 }
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/FileResolver.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java
similarity index 88%
rename from ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/FileResolver.java
rename to ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java
index fab58ed..ed3b085 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.data/src/org/eclipse/rcptt/ecl/data/internal/commands/FileResolver.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java
@@ -8,9 +8,9 @@
  * Contributors:
  *     Xored Software Inc - initial API and implementation and/or initial documentation
  *******************************************************************************/
-package org.eclipse.rcptt.ecl.data.internal.commands;
+package org.eclipse.rcptt.ecl.filesystem;
 
-import static org.eclipse.rcptt.ecl.data.internal.EclDataPlugin.createErr;
+import static org.eclipse.rcptt.ecl.filesystem.EclFilesystemPlugin.createError;
 
 import java.io.File;
 import java.net.URI;
@@ -55,14 +55,14 @@
 		try {
 			return resolve(new URI(uri));
 		} catch (URISyntaxException e) {
-			throw new CoreException(createErr(e, "Cannot parse URI %s", uri));
+			throw new CoreException(createError(e, "Cannot parse URI %s", uri));
 		}
 	}
 
 	public static File resolve(URI uri) throws CoreException {
 		Resolver resolver = resolvers.get(uri.getScheme());
 		if (resolver == null) {
-			throw new CoreException(createErr("Usupported scheme %s",
+			throw new CoreException(createError("Usupported scheme %s",
 					uri.getScheme()));
 		}
 		return resolver.resolve(uri);
@@ -88,7 +88,7 @@
 							.getLocation().toFile();
 				} catch (NoClassDefFoundError e) {
 					throw new CoreException(
-							createErr("Resources plugin is not available, "
+							createError("Resources plugin is not available, "
 									+ "cannot use 'workspace:' scheme"));
 				}
 			}
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java
index da3137d..dc2f72f 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.rcptt.ecl.filesystem.internal.commands;
 
+import static org.eclipse.rcptt.ecl.filesystem.EclFilesystemPlugin.createError;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -35,23 +37,23 @@
 		String name = copyFile.getName();
 
 		if (src == null || src.length() == 0)
-			return error("Source file/directory is not specified.");
+			return createError("Source file/directory is not specified.");
 
 		if (dst == null || dst.length() == 0)
-			return error("Destination directory is not specified.");
+			return createError("Destination directory is not specified.");
 
 		try {
 			File srcFile = new File(src).getCanonicalFile();
 			if (!srcFile.exists())
-				return error("Source file/directory \"%s\" does not exist.",
+				return createError("Source file/directory \"%s\" does not exist.",
 						srcFile);
 
 			File dstFile = new File(dst).getCanonicalFile();
 			if (dstFile.exists() && !dstFile.isDirectory())
-				return error("Destination \"%s\" must be a directory.", dstFile);
+				return createError("Destination \"%s\" must be a directory.", dstFile);
 
 			if (!dstFile.exists() && !dstFile.mkdirs())
-				return error(
+				return createError(
 						"Unable to create the destination directory \"%s\".",
 						dstFile);
 
@@ -65,19 +67,19 @@
 			else if (srcFile.isDirectory())
 				return copyDirectory(srcFile, dstFile);
 			else
-				return error("Unsupported source type.");
+				return createError("Unsupported source type.");
 		} catch (Exception e) {
-			return error(e.getMessage());
+			return createError(e.getMessage());
 		}
 	}
 
 	private static IStatus copyFile(File src, File dst) throws IOException {
 		if (dst.exists())
-			return error("Destination \"%s\" already exists.", dst);
+			return createError("Destination \"%s\" already exists.", dst);
 
 		File parent = dst.getParentFile();
 		if (parent != null && !parent.exists() && !parent.mkdirs())
-			return error("Unable to create the destination directory \"%s\".",
+			return createError("Unable to create the destination directory \"%s\".",
 					parent);
 
 		doCopyFile(src, dst);
@@ -120,14 +122,14 @@
 
 	private static IStatus copyDirectory(File src, File dst) throws IOException {
 		if (dst.exists())
-			return error("Destination \"%s\" already exists.", dst);
+			return createError("Destination \"%s\" already exists.", dst);
 
 		if (isSourceIncludesDestination(dst, src))
-			return error("Destination \"%s\" is nested inside source \"%s\".",
+			return createError("Destination \"%s\" is nested inside source \"%s\".",
 					dst, src);
 
 		if (!dst.mkdirs())
-			return error("Unable to create the destination directory \"%s\".",
+			return createError("Unable to create the destination directory \"%s\".",
 					dst);
 
 		copyFilesAndDirectories(src, dst);
@@ -160,8 +162,4 @@
 		}
 	}
 
-	private static Status error(String message, Object... args) {
-		return new Status(Status.ERROR, EclFilesystemPlugin.PLUGIN_ID,
-				String.format(message, args));
-	}
 }
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/DeleteFileService.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/DeleteFileService.java
new file mode 100644
index 0000000..ecf6c6b
--- /dev/null
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/DeleteFileService.java
@@ -0,0 +1,49 @@
+package org.eclipse.rcptt.ecl.filesystem.internal.commands;
+
+import static org.eclipse.rcptt.ecl.filesystem.EclFilesystemPlugin.createError;
+
+import java.io.File;
+import java.net.URI;
+
+import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.rcptt.ecl.core.Command;
+import org.eclipse.rcptt.ecl.filesystem.DeleteFile;
+import org.eclipse.rcptt.ecl.filesystem.FileResolver;
+import org.eclipse.rcptt.ecl.runtime.ICommandService;
+import org.eclipse.rcptt.ecl.runtime.IProcess;
+
+public class DeleteFileService implements ICommandService {
+
+	@Override
+	public IStatus service(Command command, IProcess context) throws InterruptedException, CoreException {
+		DeleteFile deleteFile = (DeleteFile) command;
+		String uriString = deleteFile.getUri();
+
+		if (uriString == null || uriString.length() == 0)
+			return createError("No uri argument for delete-file command.");
+
+		try {
+			URI uri = new URI(uriString);
+			File file = FileResolver.resolve(uri);
+			if (file != null) {
+				uri = file.toURI();
+			}
+
+			IFileStore input = EFS.getStore(uri);
+			if (!input.fetchInfo().exists()) {
+				return createError("\"%s\" not found.", uriString);
+			}
+
+			input.delete(EFS.NONE, null);
+
+			return Status.OK_STATUS;
+		} catch (Exception e) {
+			return createError(e.getMessage(), e);
+		}
+	}
+
+}
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/GetFileService.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/GetFileService.java
index a4f0cf8..416b109 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/GetFileService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/GetFileService.java
@@ -38,7 +38,7 @@
 		try {
 			URIUtil.fromString(command.getUri());
 		} catch (URISyntaxException e) {
-			throw new CoreException(createError("Failed to parse file URI: "+ command.getUri()));
+			throw new CoreException(createError("Failed to parse file URI: %s", command.getUri()));
 		}
 		rv.setUri(command.getUri());
 		return rv;
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/GetFromFileService.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/GetFromFileService.java
index 1c6759c..279e689 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/GetFromFileService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/GetFromFileService.java
@@ -71,8 +71,7 @@
 			CoreException {
 		Key key = parseKey(command.getKey());
 		if (key == null) {
-			throw new CoreException(createError("Invalid key: "
-					+ command.getKey()));
+			throw new CoreException(createError("Invalid key: %s", command.getKey()));
 		}
 		String uriString = ((File) command.getInput()).getUri();
 		URI uri = URI.create(uriString);
@@ -87,7 +86,7 @@
 		case NAME:
 			return handleName(input);
 		}
-		throw new CoreException(createError("Wrong key: " + key));
+		throw new CoreException(createError("Wrong key: %s", key));
 	}
 
 	private boolean handleIsDirectory(IFileStore input) throws CoreException {
diff --git a/rcpttTests/ECL_IDE_module/selfAUTTests/q7commands/DeleteDirectory.test b/rcpttTests/ECL_IDE_module/selfAUTTests/q7commands/DeleteDirectory.test
new file mode 100644
index 0000000..df611ce
--- /dev/null
+++ b/rcpttTests/ECL_IDE_module/selfAUTTests/q7commands/DeleteDirectory.test
@@ -0,0 +1,51 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _ymiyse5IEeCU6db9MgIBkA,_roqd8KekEeC8_YI4qVLWTA
+Element-Name: DeleteDerictory
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: 
+Id: _Mmvu0Ck0EeSQyvXPk2B9Hw
+Runtime-Version: 1.5.0.201406020630
+Save-Time: 8/29/14 2:16 PM
+Testcase-Type: ecl
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa
+Content-Type: text/plain
+Entry-Name: .description
+
+Copyright (c) 2009, 2014 Xored Software 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:
+    Xored Software Inc - initial creation and/or initial documentation
+--------------------------------------------------------------------------------
+
+TEST STEPS:
+
+1. Execute command "delete-file" on directory
+2. Make sure that directory is deleted
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa--
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+delete-file [concat [uri-from-path [substitute-variables "${workspace_loc}"]] "FilesForContextEditor/folder"]
+get-view "Test Explorer" | get-tree | get-item FilesForContextEditor | get-property childCount | equals 2 | verify-true
+get-view "Test Explorer" | get-tree | select FilesForContextEditor | get-menu Refresh | click
+get-view "Test Explorer" | get-tree | get-item FilesForContextEditor | get-property childCount | equals 1 | verify-true
+
+with [get-view "Test Explorer" | get-tree] {
+    get-item "FilesForContextEditor/text.txt" | get-property caption | equals text.txt | verify-true
+    verify-error {
+    	get-item "FilesForContextEditor/folder"
+    }
+}
+
+verify-error {
+	delete-file [concat [uri-from-path [substitute-variables "${workspace_loc}"]] "FilesForContextEditor/folder"]
+}
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/selfAUTTests/q7commands/DeleteFile.test b/rcpttTests/ECL_IDE_module/selfAUTTests/q7commands/DeleteFile.test
new file mode 100644
index 0000000..ee9feca
--- /dev/null
+++ b/rcpttTests/ECL_IDE_module/selfAUTTests/q7commands/DeleteFile.test
@@ -0,0 +1,57 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _ymiyse5IEeCU6db9MgIBkA,_roqd8KekEeC8_YI4qVLWTA
+Element-Name: DeleteFile
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: 
+Id: _Ntb8ACkyEeSQyvXPk2B9Hw
+Runtime-Version: 1.5.0.201406020630
+Save-Time: 8/29/14 2:29 PM
+Testcase-Type: ecl
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa
+Content-Type: text/plain
+Entry-Name: .description
+
+Copyright (c) 2009, 2014 Xored Software 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:
+    Xored Software Inc - initial creation and/or initial documentation
+--------------------------------------------------------------------------------
+
+TEST STEPS:
+
+1. Execute command "delete-file"
+2. Make sure that file is deleted
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa--
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+delete-file [concat [uri-from-path [substitute-variables "${workspace_loc}"]] "FilesForContextEditor/text.txt"]
+
+get-view "Test Explorer" | get-tree | get-item FilesForContextEditor | get-property childCount | equals 2 | verify-true
+get-view "Test Explorer" | get-tree | select FilesForContextEditor | get-menu Refresh | click
+get-view "Test Explorer" | get-tree | get-item FilesForContextEditor | get-property childCount | equals 1 | verify-true
+
+with [get-view "Test Explorer" | get-tree] {
+    get-item "FilesForContextEditor/folder" | get-property caption | equals folder | verify-true
+    verify-error {
+    	get-item "FilesForContextEditor/text.txt"
+    }
+}
+
+verify-error {
+	delete-file [concat [uri-from-path [substitute-variables "${workspace_loc}"]] "FilesForContextEditor/text.txt"]
+}
+verify-error {
+	delete-file [substitute-variables "${workspace_loc}/FilesForContextEditor/text.txt"]
+}
+
+
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
diff --git a/rcpttTests/ECL_IDE_module/selfAUTTests/q7commands/DeleteFileUriInput.test b/rcpttTests/ECL_IDE_module/selfAUTTests/q7commands/DeleteFileUriInput.test
new file mode 100644
index 0000000..571e847
--- /dev/null
+++ b/rcpttTests/ECL_IDE_module/selfAUTTests/q7commands/DeleteFileUriInput.test
@@ -0,0 +1,53 @@
+--- RCPTT testcase ---
+Format-Version: 1.0
+Contexts: _ymiyse5IEeCU6db9MgIBkA,_roqd8KekEeC8_YI4qVLWTA
+Element-Name: DeleteFileUriInput
+Element-Type: testcase
+Element-Version: 3.0
+External-Reference: 
+Id: __t9-sC9LEeSQ0rUJOTehDQ
+Runtime-Version: 1.5.0.201406020630
+Save-Time: 8/29/14 2:44 PM
+Testcase-Type: ecl
+
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa
+Content-Type: text/plain
+Entry-Name: .description
+
+Copyright (c) 2009, 2014 Xored Software 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:
+    Xored Software Inc - initial creation and/or initial documentation
+--------------------------------------------------------------------------------
+
+TEST STEPS:
+
+1. Execute command "delete-file"
+2. Make sure that file is deleted
+------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa--
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac
+Content-Type: text/ecl
+Entry-Name: .content
+
+get-file "workspace:/FilesForContextEditor/text.txt" | delete-file
+
+get-view "Test Explorer" | get-tree | get-item FilesForContextEditor | get-property childCount | equals 2 | verify-true
+get-view "Test Explorer" | get-tree | select FilesForContextEditor | get-menu Refresh | click
+get-view "Test Explorer" | get-tree | get-item FilesForContextEditor | get-property childCount | equals 1 | verify-true
+
+with [get-view "Test Explorer" | get-tree] {
+    get-item "FilesForContextEditor/folder" | get-property caption | equals folder | verify-true
+    verify-error {
+    	get-item "FilesForContextEditor/text.txt"
+    }
+}
+
+verify-error {
+	get-file "workspace:/FilesForContextEditor/text.txt" | delete-file
+}
+
+------=_.content-0a7243a0-75d3-3d5f-9791-539de0e5b7ac--
