diff --git a/org.eventb.texttools/src/org/eventb/texttools/diffmerge/MyReferenceChangeMerger.java b/org.eventb.texttools/src/org/eventb/texttools/diffmerge/MyReferenceChangeMerger.java
index 9e68f5a9555767d5100a6d73ad6e985f2fe15518..0f07e11b81e2566786023b5443f1fa8f017f8d92 100644
--- a/org.eventb.texttools/src/org/eventb/texttools/diffmerge/MyReferenceChangeMerger.java
+++ b/org.eventb.texttools/src/org/eventb/texttools/diffmerge/MyReferenceChangeMerger.java
@@ -283,14 +283,14 @@ public class MyReferenceChangeMerger extends AbstractMerger {
 					targetList.add(insertionIndex, expectedValue);
 				}
 			} else if (targetList instanceof EList<?>) {
-				if (insertionIndex < 0 || insertionIndex > targetList.size()) {
+				if (insertionIndex < 0 || insertionIndex >= targetList.size()) {
 					((EList<EObject>)targetList).move(targetList.size() - 1, expectedValue);
 				} else {
 					((EList<EObject>)targetList).move(insertionIndex, expectedValue);
 				}
 			} else {
 				targetList.remove(expectedValue);
-				if (insertionIndex < 0 || insertionIndex > targetList.size()) {
+				if (insertionIndex < 0 || insertionIndex >= targetList.size()) {
 					targetList.add(expectedValue);
 				} else {
 					targetList.add(insertionIndex, expectedValue);
@@ -410,7 +410,7 @@ public class MyReferenceChangeMerger extends AbstractMerger {
 				expectedValue = diff.getValue();
 			}
 		} else if (rightToLeft) {
-			if (reference.isContainment() || valueMatch.getLeft() == null) {
+			if (valueMatch.getLeft() == null) {
 				expectedValue = createCopy(diff.getValue());
 				valueMatch.setLeft(expectedValue);
 				needXmiId = true;
@@ -418,7 +418,7 @@ public class MyReferenceChangeMerger extends AbstractMerger {
 				expectedValue = valueMatch.getLeft();
 			}
 		} else {
-			if (reference.isContainment() || valueMatch.getRight() == null) {
+			if (valueMatch.getRight() == null) {
 				expectedValue = createCopy(diff.getValue());
 				valueMatch.setRight(expectedValue);
 				needXmiId = true;
@@ -440,7 +440,7 @@ public class MyReferenceChangeMerger extends AbstractMerger {
 		if (needXmiId) {
 			// Copy XMI ID when applicable.
 			final Resource initialResource = diff.getValue().eResource();
-			final Resource targetResource = expectedValue.eResource();
+			final Resource targetResource = expectedContainer.eResource();
 			if (initialResource instanceof XMIResource && targetResource instanceof XMIResource) {
 				((XMIResource)targetResource).setID(expectedValue,
 						((XMIResource)initialResource).getID(diff.getValue()));
@@ -496,7 +496,6 @@ public class MyReferenceChangeMerger extends AbstractMerger {
 		}
 
 		final EObject expectedValue;
-		
 		if (valueMatch == null) {
 			// value is out of the scope... we need to look it up
 			if (reference.isMany()) {