diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/merger/Correlator.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/merger/Correlator.java
index f3b21cc..e89c7e4 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/merger/Correlator.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/merger/Correlator.java
@@ -23,6 +23,7 @@
 import org.eclipse.ocl.pivot.Property;
 import org.eclipse.ocl.pivot.utilities.ClassUtil;
 import org.eclipse.qvtd.compiler.internal.qvtm2qvts.RegionUtil;
+import org.eclipse.qvtd.pivot.qvtschedule.BasicMappingRegion;
 import org.eclipse.qvtd.pivot.qvtschedule.Edge;
 import org.eclipse.qvtd.pivot.qvtschedule.MappingRegion;
 import org.eclipse.qvtd.pivot.qvtschedule.NavigableEdge;
@@ -35,6 +36,16 @@
 class Correlator
 {
 	public static @Nullable Correlator correlate(@NonNull MappingRegion secondaryRegion, @NonNull MappingRegion primaryRegion, @NonNull CorrelationStrategy strategy, @Nullable Map<@NonNull Node, @NonNull Node> primaryNode2secondaryNode) {
+		if (secondaryRegion instanceof BasicMappingRegion) {
+			if (((BasicMappingRegion)secondaryRegion).getReferredMapping().isIsAbstract()) {
+				return null;
+			}
+		}
+		if (primaryRegion instanceof BasicMappingRegion) {
+			if (((BasicMappingRegion)primaryRegion).getReferredMapping().isIsAbstract()) {
+				return null;
+			}
+		}
 		Correlator correlator = new Correlator(primaryRegion, secondaryRegion, strategy, primaryNode2secondaryNode);
 		return correlator.correlate() ? correlator : null;
 	}
@@ -225,25 +236,34 @@
 		Node secondaryHeadNode = secondaryHeadNodes.get(0);
 		CompleteClass completeClass = secondaryHeadNode.getCompleteClass();
 		List<@NonNull Node> primaryNodes = completeClass2primaryNodes.get(completeClass);
-		if (primaryNodes == null) {
+		if ((primaryNodes == null) || (primaryNodes.size() == 0)) {
 			if (debugFailures) {
 				AbstractMerger.FAILURE.println("No primary nodes of type: " + completeClass);
 			}
 			return false;
 		}
 		Node primaryHeadNode = secondaryNode2primaryNode.get(secondaryHeadNode);
-		if (primaryHeadNode != null) {
-			return true;
-		}
-		primaryHeadNode = selectMergedHeadNode(secondaryHeadNode, primaryNodes);
 		if (primaryHeadNode == null) {
-			primaryHeadNode = selectMergedHeadNode(secondaryHeadNode, primaryNodes);		// FIXME debugging
-			if (debugFailures) {
-				AbstractMerger.FAILURE.println("No primary head node to match: " + secondaryHeadNode);
+			primaryHeadNode = selectMergedHeadNode(secondaryHeadNode, primaryNodes);
+			if (primaryHeadNode == null) {
+				primaryHeadNode = selectMergedHeadNode(secondaryHeadNode, primaryNodes);		// FIXME debugging
+				if (debugFailures) {
+					AbstractMerger.FAILURE.println("No primary head node to match: " + secondaryHeadNode);
+				}
+				return false;
 			}
-			return false;
+			secondaryNode2primaryNode.put(secondaryHeadNode, primaryHeadNode);
 		}
-		secondaryNode2primaryNode.put(secondaryHeadNode, primaryHeadNode);
+		if (primaryNodes.size() > 1) {
+			for (@NonNull Node primaryNode : primaryNodes) {
+				if ((primaryNode != primaryHeadNode) && !primaryNode.isLoaded()) {
+					if (debugFailures) {		// FIXME multiple matching not-speculated might be ok
+						AbstractMerger.FAILURE.println("Multiple primary nodes of type: " + completeClass);
+					}
+					return false;
+				}
+			}
+		}
 		return true;
 	}
 
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/merger/LateConsumerMerger.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/merger/LateConsumerMerger.java
index ce16f34..493c213 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/merger/LateConsumerMerger.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/merger/LateConsumerMerger.java
@@ -438,6 +438,9 @@
 		}
 	}
 
+	/**
+	 * Return the lists of child regions that have consecutive indexes.
+	 */
 	protected @NonNull Iterable<@NonNull List<@NonNull MappingRegion>> selectConsecutiveRegionRuns(@NonNull NodeConnection nodeConnection) {
 		Map<@NonNull Integer, @NonNull MappingRegion> index2region = new HashMap<>();
 		for (@NonNull Region targetRegion : nodeConnection.getTargetRegions()) {
diff --git a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcCompilerTests.java b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcCompilerTests.java
index a000305..aa068f6 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcCompilerTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcCompilerTests.java
@@ -334,6 +334,7 @@
 		//		myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
 		try {
 			Class<? extends Transformer> txClassReverse = myQVT.buildTransformation("Forward2Reverse.qvtc", "forward", "List2List.genmodel");
+			//			Class<? extends Transformer> txClassReverse = Forward2Reverse.class;
 			myQVT.assertRegionCount(BasicMappingRegionImpl.class, 0);
 			myQVT.assertRegionCount(EarlyMerger.EarlyMergedMappingRegion.class, 0);
 			myQVT.assertRegionCount(LateConsumerMerger.LateMergedMappingRegion.class, 0);
@@ -415,8 +416,8 @@
 			Class<? extends Transformer> txClass = myQVT.buildTransformation("HSV2HSL.qvtc", "hsl", "HSV2HSL.genmodel");
 			myQVT.assertRegionCount(BasicMappingRegionImpl.class, 1);
 			myQVT.assertRegionCount(EarlyMerger.EarlyMergedMappingRegion.class, 0);
-			myQVT.assertRegionCount(LateConsumerMerger.LateMergedMappingRegion.class, 1);
-			myQVT.assertRegionCount(MicroMappingRegionImpl.class, 1);
+			myQVT.assertRegionCount(LateConsumerMerger.LateMergedMappingRegion.class, 0);
+			myQVT.assertRegionCount(MicroMappingRegionImpl.class, 4);
 			//
 			myQVT.createGeneratedExecutor(txClass);
 			myQVT.loadInput("hsv", "SolarizedHSV.xmi");
