diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/actions/DeleteAction.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/actions/DeleteAction.java
index e973a5b5fa9a3eda8a15a49bd0c7dae96cb58ba8..cd84262c0376f678264552e7adf82ab2f28d220e 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/actions/DeleteAction.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/actions/DeleteAction.java
@@ -21,6 +21,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.ui.ISharedImages;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.ActionFactory;
+import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
 import org.fortiss.tooling.kernel.service.ICommandStackService;
 import org.fortiss.tooling.kernel.service.IConnectionCompositorService;
 import org.fortiss.tooling.kernel.service.IElementCompositorService;
@@ -39,7 +40,7 @@ import org.fortiss.tooling.kernel.ui.extension.base.EObjectActionBase;
  */
 public class DeleteAction extends EObjectActionBase {
 
-	/** Flag for using element or connection compositor. */
+	/** Flag for using element or connection composition service. */
 	private boolean useElementCompositor;
 
 	/** Constructor. */
@@ -56,40 +57,54 @@ public class DeleteAction extends EObjectActionBase {
 			setEnabled(false);
 			return;
 		}
+		setEnabled(computeEnabled(element));
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void run() {
+		if (getTarget() == null) {
+			return;
+		}
+		ICommandStackService.INSTANCE.runAsCommand(getTarget(), new Runnable() {
+			@Override
+			public void run() {
+				doDelete();
+			}
+		});
+	}
 
-		boolean enabled = false;
+	/** Computes enabled state of the delete action. */
+	private boolean computeEnabled(EObject element) {
 		if (!IPersistencyService.INSTANCE.isTopLevelElement(element)) {
+			// use composition services for deletion
 			if (IElementCompositorService.INSTANCE.canDecompose(element)) {
-				enabled = true;
 				useElementCompositor = true;
+				return true;
 			} else if (IConnectionCompositorService.INSTANCE
 					.canDisconnect(element)) {
-				enabled = true;
 				useElementCompositor = false;
+				return true;
 			}
+			return false;
 		}
-		setEnabled(enabled);
+		// use top-level element deletion mechanism
+		ITopLevelElement topElement = IPersistencyService.INSTANCE
+				.getTopLevelElementFor(element);
+		return topElement.canDelete();
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public void run() {
-		final EObject selectedObject = getTarget();
-		if (selectedObject == null) {
-			return;
+	/** Executes the delete using the correct service. */
+	private void doDelete() {
+		EObject target = getTarget();
+		if (IPersistencyService.INSTANCE.isTopLevelElement(target)) {
+			IPersistencyService.INSTANCE.getTopLevelElementFor(target).delete();
+		} else {
+			if (useElementCompositor) {
+				IElementCompositorService.INSTANCE.decompose(target);
+			} else {
+				IConnectionCompositorService.INSTANCE.disconnect(target);
+			}
 		}
-		ICommandStackService.INSTANCE.runAsCommand(selectedObject,
-				new Runnable() {
-					@Override
-					public void run() {
-						if (useElementCompositor) {
-							IElementCompositorService.INSTANCE
-									.decompose(selectedObject);
-						} else {
-							IConnectionCompositorService.INSTANCE
-									.disconnect(selectedObject);
-						}
-					}
-				});
 	}
 }
\ No newline at end of file
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/ITopLevelElement.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/ITopLevelElement.java
index 86e96dbd47c114366bfe9126168872349f1188d3..db8b1de6bed0268491422b46728a1b381c86f98c 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/ITopLevelElement.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/ITopLevelElement.java
@@ -83,4 +83,13 @@ public interface ITopLevelElement {
 	 */
 	void prepareIDs(EObject modelElement);
 
+	/** Returns whether this top-level element can be deleted. */
+	boolean canDelete();
+
+	/**
+	 * Deletes this top-level element from the underlying persistency solution.
+	 * Returns <code>false</code> if the delete was interrupted by, e.g., the
+	 * user.
+	 */
+	boolean delete();
 }
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java
index 17c1d21600a85ff0cbe144a523d56315e27fe6b0..556156f84a4f8abf59475f63c20460e9a5fc8941 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java
@@ -22,13 +22,17 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.emf.common.command.CommandStackListener;
 import org.eclipse.emf.ecore.EObject;
 import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
+import org.fortiss.tooling.kernel.service.IPersistencyService;
 
 /**
+ * The dummy top-level element is used to load models into the
+ * {@link IPersistencyService} without an actual underlying storage. This is
+ * primarily intended to load models for unit testing.
  * 
  * @author hoelzl
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating RED Hash:
+ * @ConQAT.Rating YELLOW Hash: 5F332ABA912DD7731BDFD020F2AB2CA4
  */
 final class DummyTopLevelElement implements ITopLevelElement {
 
@@ -113,4 +117,16 @@ final class DummyTopLevelElement implements ITopLevelElement {
 	public void prepareIDs(EObject modelElement) {
 		// ignore
 	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean canDelete() {
+		return false;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean delete() {
+		return false;
+	}
 }
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/ModelContext.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/ModelContext.java
index f154cc25c94c48e6a416d991ec70fedbc5694037..ec186f59222005dfb814580e829d604a5f093d1e 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/ModelContext.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/ModelContext.java
@@ -345,4 +345,24 @@ class ModelContext implements ITopLevelElement, CommandStackListener {
 			l.commandStackChanged(relayEvent);
 		}
 	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean delete() {
+		try {
+			getFile().delete(true, null);
+			return true;
+		} catch (CoreException e) {
+			LoggingUtils.error(ToolingKernelActivator.getDefault(),
+					"Error during deletion of model file "
+							+ getFile().getName());
+		}
+		return false;
+	}
 }