diff --git a/org.fortiss.tooling.ext.variability/src/org/fortiss/tooling/ext/variability/analysis/.ratings b/org.fortiss.tooling.ext.variability/src/org/fortiss/tooling/ext/variability/analysis/.ratings
index d19cfbc588de127eca6b598a7b2ce7bbd5e7dd4b..d68ae5447c2e63ea7e6eb7328ffbf9275ca25779 100644
--- a/org.fortiss.tooling.ext.variability/src/org/fortiss/tooling/ext/variability/analysis/.ratings
+++ b/org.fortiss.tooling.ext.variability/src/org/fortiss/tooling/ext/variability/analysis/.ratings
@@ -1,2 +1,2 @@
 OptimizedProductLineAnalysisBase.java 94cb2d0d254f3e50f21ca039b6784e1a26c4d91c YELLOW
-OptimizedProductLineTranslation.java fe61d76e7caa9d618c74cb36d6bc7f0c47896b31 YELLOW
+OptimizedProductLineTranslation.java ad12974d9e19fc88e3240d6a4c2306004d0a3b39 YELLOW
diff --git a/org.fortiss.tooling.ext.variability/src/org/fortiss/tooling/ext/variability/analysis/OptimizedProductLineTranslation.java b/org.fortiss.tooling.ext.variability/src/org/fortiss/tooling/ext/variability/analysis/OptimizedProductLineTranslation.java
index fe61d76e7caa9d618c74cb36d6bc7f0c47896b31..ad12974d9e19fc88e3240d6a4c2306004d0a3b39 100644
--- a/org.fortiss.tooling.ext.variability/src/org/fortiss/tooling/ext/variability/analysis/OptimizedProductLineTranslation.java
+++ b/org.fortiss.tooling.ext.variability/src/org/fortiss/tooling/ext/variability/analysis/OptimizedProductLineTranslation.java
@@ -15,15 +15,20 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.ext.variability.analysis;
 
+import static org.eclipse.emf.ecore.util.EcoreUtil.copy;
 import static org.fortiss.tooling.kernel.utils.EcoreUtils.pickFirstInstanceOf;
+import static org.fortiss.variability.model.VariabilityModelElementFactory.createAndPC;
 
 import java.util.List;
 
+import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.fortiss.tooling.base.model.element.IModelElement;
 import org.fortiss.tooling.base.model.element.IModelElementSpecification;
 import org.fortiss.tooling.ext.variability.model.OptionalVariationPointSpecification;
+import org.fortiss.tooling.ext.variability.service.IDependingElementProviderService;
 import org.fortiss.variability.analysis.EMFProductLineTranslation;
+import org.fortiss.variability.model.presence.AndPC;
 import org.fortiss.variability.model.presence.PresenceCondition;
 import org.fortiss.variability.model.presence.PresenceConditionTerm;
 
@@ -34,6 +39,7 @@ import org.fortiss.variability.model.presence.PresenceConditionTerm;
  * @author bayha
  */
 public class OptimizedProductLineTranslation extends EMFProductLineTranslation {
+
 	/** {@inheritDoc} */
 	@Override
 	protected PresenceConditionTerm getLocalPresenceCondition(EObject model) {
@@ -60,4 +66,51 @@ public class OptimizedProductLineTranslation extends EMFProductLineTranslation {
 
 		return null;
 	}
+
+	/** {@inheritDoc} */
+	@Override
+	protected void collectEObject(EObject eo, EClass cls, PresenceConditionTerm pc) {
+		class2TranslatedEObjects.add(cls, eo);
+
+		collectPresenceCondition(eo, pc);
+
+		// Also collect depending elements for the tooling kernel implementation
+		List<EObject> dependingElements =
+				IDependingElementProviderService.getInstance().getDependingElements(eo);
+		for(EObject depObj : dependingElements) {
+			PresenceConditionTerm depObjPC = getLocalPresenceCondition(depObj);
+
+			if(depObjPC != null) {
+				depObjPC = createAndPC(copy(depObjPC), copy(pc), "");
+			} else {
+				depObjPC = pc;
+			}
+
+			collectEObject(depObj, getTranslatedClass(depObj.eClass()), depObjPC);
+		}
+	}
+
+	/**
+	 * Accumulates the given presence condition by conjugating it. This is necessary in case an
+	 * element "inherits" more than one presence conditions due to dependencies from other elements.
+	 */
+	private PresenceConditionTerm collectPresenceCondition(EObject eObject,
+			PresenceConditionTerm pc) {
+		PresenceConditionTerm oldPC = object2presenceCondition.get(eObject);
+
+		if(oldPC != null) {
+			if(pc != null) {
+				AndPC newPC = createAndPC(copy(oldPC), copy(pc), "");
+
+				object2presenceCondition.put(eObject, newPC);
+				return newPC;
+			}
+
+			object2presenceCondition.put(eObject, oldPC);
+			return oldPC;
+		}
+
+		object2presenceCondition.put(eObject, pc);
+		return pc;
+	}
 }
diff --git a/org.fortiss.variability/src/org/fortiss/variability/analysis/.ratings b/org.fortiss.variability/src/org/fortiss/variability/analysis/.ratings
index 0163adc0f909edb608b7b186ca131642a72e1c84..ef9cbd9af5d166f0d4465af36444f5987d380b31 100644
--- a/org.fortiss.variability/src/org/fortiss/variability/analysis/.ratings
+++ b/org.fortiss.variability/src/org/fortiss/variability/analysis/.ratings
@@ -1,6 +1,6 @@
 BucketSetMap.java 665a28c80a9693b9b9e31b7ebe59f2de4195d56c YELLOW
 DualKeyMap.java 75fbe85a54e5a655aaf67108ae004f98ed2879d8 YELLOW
-EMFProductLineTranslation.java c63af9719c1ca45a034ec5beb48e1b35971e40c4 YELLOW
+EMFProductLineTranslation.java a62c588bd806fdf98d1e2fb4138c359528edcaad YELLOW
 GenericProductLineAnalysis.java 6f6d48544ec2b872fa0a4f747a85657889ad463e YELLOW
 IProductLineConstraint.java 1b0e1231cc578a6e7e544441ac33533b4feafeb1 YELLOW
 IProductLineTranslation.java 733dae03e2baae237b6f0b33f0dd618a4f47cf73 YELLOW
diff --git a/org.fortiss.variability/src/org/fortiss/variability/analysis/EMFProductLineTranslation.java b/org.fortiss.variability/src/org/fortiss/variability/analysis/EMFProductLineTranslation.java
index c63af9719c1ca45a034ec5beb48e1b35971e40c4..a62c588bd806fdf98d1e2fb4138c359528edcaad 100644
--- a/org.fortiss.variability/src/org/fortiss/variability/analysis/EMFProductLineTranslation.java
+++ b/org.fortiss.variability/src/org/fortiss/variability/analysis/EMFProductLineTranslation.java
@@ -131,7 +131,7 @@ public class EMFProductLineTranslation implements IProductLineTranslation {
 
 	/* Model related fields */
 	/** The mapping of translated {@link EClass} to the objects that have been collected. */
-	private BucketSetMap<EClass, EObject> class2TranslatedEObjects;
+	protected BucketSetMap<EClass, EObject> class2TranslatedEObjects;
 
 	/**
 	 * Mapping of objects with types to their translated Z3 expressions. The second key EClass is
@@ -164,7 +164,7 @@ public class EMFProductLineTranslation implements IProductLineTranslation {
 	private Map<AbstractFeature, BoolExpr> feature2BoolExpr;
 
 	/** The mapping of translated {@link EObject}s to global {@link PresenceCondition}s. */
-	private Map<EObject, PresenceConditionTerm> object2presenceCondition;
+	protected Map<EObject, PresenceConditionTerm> object2presenceCondition;
 
 	/** Mapping of classes to the selection function for this type. */
 	private Map<EClass, FuncDecl<?>> eClass2SelectionFunction;
@@ -331,7 +331,7 @@ public class EMFProductLineTranslation implements IProductLineTranslation {
 	}
 
 	/** Collect one EObject to be translated. */
-	private void collectEObject(EObject eo, EClass cls, PresenceConditionTerm pc) {
+	protected void collectEObject(EObject eo, EClass cls, PresenceConditionTerm pc) {
 		class2TranslatedEObjects.add(cls, eo);
 
 		object2presenceCondition.put(eo, pc);
@@ -1033,7 +1033,7 @@ public class EMFProductLineTranslation implements IProductLineTranslation {
 	 * in case objClass shall be translated. 'null' in case neither objClass nor a super type are
 	 * specified to be translated.
 	 */
-	private EClass getTranslatedClass(EClass objClass) {
+	protected EClass getTranslatedClass(EClass objClass) {
 		if(translatedClasses.contains(objClass)) {
 			return objClass;
 		}