diff --git a/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/HierarchicElementCompositorBase.java b/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/HierarchicElementCompositorBase.java
index cce5157b185d5cfb767558eff2152eef4c693686..25719a7a29447d60158976de8673877ad96c8b12 100644
--- a/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/HierarchicElementCompositorBase.java
+++ b/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/HierarchicElementCompositorBase.java
@@ -27,6 +27,7 @@ import org.fortiss.tooling.base.model.element.IConnector;
 import org.fortiss.tooling.base.model.element.IHierarchicElement;
 import org.fortiss.tooling.base.model.element.IHierarchicElementContainer;
 import org.fortiss.tooling.base.model.element.IModelElement;
+import org.fortiss.tooling.base.model.element.IModelElementReference;
 import org.fortiss.tooling.base.model.element.IModelElementSpecification;
 import org.fortiss.tooling.kernel.extension.IElementCompositor;
 import org.fortiss.tooling.kernel.service.IConnectionCompositorService;
@@ -69,8 +70,9 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
 			if(!iterateDecomposeSpecifications((IModelElement)contained)) {
 				return false;
 			}
-			// TODO (CD): https://af3.fortiss.org/issues/389
-			// handle reference removal
+			if(!iterateDecomposeReference((IModelElement)contained)) {
+				return false;
+			}
 		}
 		if(contained instanceof IHierarchicElementContainer) {
 			if(!iterateDecomposeSubelements((IHierarchicElementContainer)contained)) {
@@ -101,6 +103,21 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
 		return decomposeSpecific(contained);
 	}
 
+	/**
+	 * Iterates over references of given {@link IModelElement} and performs
+	 * decomposition.
+	 */
+	private boolean iterateDecomposeReference(IModelElement me) {
+		ArrayList<IModelElementReference> list =
+				new ArrayList<IModelElementReference>(me.getReferencedByList());
+		for(IModelElementReference ref : list) {
+			if(!decomposeReference(ref)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
 	/**
 	 * Iterates over specifications of given {@link IModelElement} and performs
 	 * decomposition.
@@ -171,10 +188,13 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
 		return true;
 	}
 
-	/** Base implementation yet empty. */
-	protected boolean decomposeReferences(@SuppressWarnings("unused") EObject element) {
-		// TODO (FH): https://af3.fortiss.org/issues/389
-		// implement reference removal
+	/**
+	 * Base implementation uses element compositor service's decomposition by
+	 * default and returns <code>true</code>. Subclasses may override.
+	 */
+	protected boolean decomposeReference(IModelElementReference element) {
+		element.setReference(null);
+		EcoreUtil.delete(element);
 		return true;
 	}
 
@@ -202,6 +222,11 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
 				return false;
 			}
 		}
+
+		if(IElementCompositorService.INSTANCE.canDecompose(element)) {
+			return IElementCompositorService.INSTANCE.decompose(element);
+		}
+
 		EcoreUtil.delete(element);
 		return true;
 	}