diff --git a/org.eventb.texteditor.feature/camille.target b/org.eventb.texteditor.feature/camille.target
index 7665b55805a6363f23db9aa2ba04b11186bc2317..11a0f799819febf74a5ac326363eb35a019060a3 100644
--- a/org.eventb.texteditor.feature/camille.target
+++ b/org.eventb.texteditor.feature/camille.target
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="camille_target" sequenceNumber="89">
+<?pde version="3.8"?><target name="camille_target" sequenceNumber="90">
 <locations>
 <location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
 <unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.3.2.201709090201"/>
@@ -22,11 +22,11 @@
 <repository location="https://www3.hhu.de/stups/buildlibs/org.rodinp.dev/"/>
 </location>
 <location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.emf.compare.feature.group" version="3.3.2.201709090201"/>
-<unit id="org.eclipse.emf.compare.ide.ui.source.feature.group" version="3.3.2.201709090201"/>
-<unit id="org.eclipse.emf.compare.rcp.ui.feature.group" version="3.3.2.201709090201"/>
-<unit id="org.eclipse.emf.compare.rcp.ui.source.feature.group" version="3.3.2.201709090201"/>
-<unit id="org.eclipse.emf.compare.source.feature.group" version="3.3.2.201709090201"/>
+<unit id="org.eclipse.emf.compare.feature.group" version="3.3.4.201806221350"/>
+<unit id="org.eclipse.emf.compare.ide.ui.source.feature.group" version="3.3.4.201806221350"/>
+<unit id="org.eclipse.emf.compare.rcp.ui.feature.group" version="3.3.4.201806221350"/>
+<unit id="org.eclipse.emf.compare.rcp.ui.source.feature.group" version="3.3.4.201806221350"/>
+<unit id="org.eclipse.emf.compare.source.feature.group" version="3.3.4.201806221350"/>
 <repository location="http://download.eclipse.org/modeling/emf/compare/updates/releases"/>
 </location>
 </locations>
diff --git a/org.eventb.texteditor.feature/camille_with_statemachines.target b/org.eventb.texteditor.feature/camille_with_statemachines.target
index 4cd7421efc7d3962aa1192bd90d0935f6028f3aa..0dddd2e161c3cd8e8ce2670d1c93bc3b3c43161b 100644
--- a/org.eventb.texteditor.feature/camille_with_statemachines.target
+++ b/org.eventb.texteditor.feature/camille_with_statemachines.target
@@ -1,23 +1,21 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="prob_target" sequenceNumber="75">
+<?pde version="3.8"?><target name="prob_target" sequenceNumber="80">
 <locations>
 <location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.rodinp.platform.product" version="3.1.0.201412171041-e1a03f3"/>
+<unit id="org.rodinp.platform.product" version="3.2.0.201506220911-ecacdcb"/>
 <repository location="http://rodin-b-sharp.sourceforge.net/core-updates/"/>
 </location>
 <location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.emf.sdk.feature.group" version="2.10.2.v20150123-0452"/>
-<unit id="org.eclipse.emf.compare.source.feature.group" version="3.0.2.201501201328"/>
-<unit id="org.eclipse.emf.compare.ide.ui.source.feature.group" version="3.0.2.201501201328"/>
-<repository location="http://download.eclipse.org/releases/luna"/>
+<unit id="ac.soton.eventb.roseEditor.feature.feature.group" version="1.7.0.release"/>
+<unit id="org.eventb.emf.feature.feature.group" version="6.0.0.release"/>
+<repository location="http://rodin-b-sharp.sourceforge.net/updates/"/>
 </location>
 <location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eventb.emf.feature.feature.group" version="5.3.0"/>
-<unit id="ac.soton.eventb.statemachines.feature.feature.group" version="3.2.0"/>
-<unit id="ac.soton.eventb.roseEditor.feature.feature.group" version="1.6.0"/>
-<unit id="org.eventb.theory.feature.feature.group" version="3.0.0"/>
-<unit id="ac.soton.eventb.emf.core.extension.feature.feature.group" version="5.1.0"/>
-<repository location="http://rodin-b-sharp.sourceforge.net/updates/"/>
+<unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.3.2.201709090201"/>
+<unit id="org.eclipse.emf.sdk.feature.group" version="2.13.0.v20170609-0928"/>
+<unit id="org.eclipse.pde.feature.group" version="3.13.4.v20180330-0640"/>
+<unit id="org.eclipse.sdk.feature.group" version="4.7.3.v20180330-0919"/>
+<repository location="http://download.eclipse.org/releases/oxygen/201804111000"/>
 </location>
 </locations>
 </target>
diff --git a/org.eventb.texteditor.feature/category.xml b/org.eventb.texteditor.feature/category.xml
index e6e12536e5f71fae41fa5f95d4294bfb8db6cea0..73b09e9f2c22888548570331fcebf0e89a013c60 100644
--- a/org.eventb.texteditor.feature/category.xml
+++ b/org.eventb.texteditor.feature/category.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <site>
-   <feature url="features/org.eventb.texteditor.feature_2.2.0.jar" id="org.eventb.texteditor.feature" version="2.2.0">
+   <feature url="features/org.eventb.texteditor.feature_3.3.0.qualifier.jar" id="org.eventb.texteditor.feature" version="3.3.0.qualifier">
       <category name="camille"/>
    </feature>
    <category-def name="camille" label="camille"/>
diff --git a/org.eventb.texteditor.feature/feature.xml b/org.eventb.texteditor.feature/feature.xml
index b8e755c04e54164101a1fbcff6a4f17d871817a6..ae6e3dad79202b9d0e554b41ea9ef9690e5a2665 100644
--- a/org.eventb.texteditor.feature/feature.xml
+++ b/org.eventb.texteditor.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eventb.texteditor.feature"
       label="Camille TextEditor"
-      version="3.2.0.qualifier"
+      version="3.3.0.qualifier"
       provider-name="Heinrich-Heine University Dusseldorf"
       plugin="org.eventb.texteditor.ui">
 
@@ -10,8 +10,10 @@
       A text editor for the Rodin platform to edit Event-B models
 -----------------------------------------------------------
 Release History:
+3.3.0 - Compatibility with core 3.3
 3.2.0 - Rodin 3.2 compatible release
-3.1.2 - Fix some more bugs regarding theory parsing, fix saving changes to seen contexts.
+3.1.2 - Fix some more bugs regarding theory parsing, fix saving
+changes to seen contexts.
 3.1.1 - Fix parsing of theory operators with more than one operand
 3.1.0 - Initial release for Rodin 3.1
 3.0.3 - Fix bugs / regressions intruduces by the Rodin 3.0 migration
@@ -170,41 +172,53 @@ Inc. in the United States, other countries, or both.
    </url>
 
    <requires>
-      <import plugin="org.eventb.texttools" version="3.0.0" match="greaterOrEqual"/>
-      <import plugin="org.eventb.emf.formulas" version="1.3.2" match="greaterOrEqual"/>
-      <import plugin="org.eventb.emf.persistence" version="3.1.0" match="greaterOrEqual"/>
-      <import plugin="org.eventb.ui" version="3.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eventb.emf.formulas" version="1.4.0" match="compatible"/>
+      <import plugin="org.eventb.emf.persistence" version="3.1.1" match="compatible"/>
+      <import plugin="org.eventb.ui" version="3.0.0" match="compatible"/>
       <import plugin="org.eclipse.jface.text" version="3.6.0" match="compatible"/>
       <import plugin="org.eclipse.emf.edit.ui" version="2.5.0" match="compatible"/>
-      <import plugin="org.eventb.core.ast" version="3.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eventb.core.ast" version="3.1.0" match="compatible"/>
       <import plugin="org.eclipse.ui.editors" version="3.8.0" match="compatible"/>
       <import plugin="org.eclipse.ui.ide" version="3.8.2" match="compatible"/>
-      <import plugin="org.rodinp.keyboard.ui" version="2.0.0" match="compatible"/>
       <import plugin="org.eclipse.ui.workbench.texteditor"/>
+      <import plugin="org.eclipse.core.resources" version="3.8.1" match="greaterOrEqual"/>
+      <import plugin="org.eventb.emf.core" version="4.0.0"/>
+      <import plugin="org.eclipse.core.runtime" version="3.10.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.emf.ecore.xmi" version="2.10.1" match="greaterOrEqual"/>
+      <import plugin="org.rodinp.core" version="1.7.0" match="greaterOrEqual"/>
+      <import plugin="org.eventb.core" version="3.1.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.emf.edit"/>
+      <import plugin="org.eventb.texteditor.parsers"/>
+      <import plugin="org.rodinp.keyboard.core" version="2.0.0" match="compatible"/>
+      <import plugin="org.rodinp.keyboard.ui" version="2.0.0" match="compatible"/>
       <import plugin="org.eclipse.core.resources" version="3.8.1" match="compatible"/>
-      <import plugin="org.eventb.emf.core" version="4.0.0" match="greaterOrEqual"/>
-      <import feature="org.eclipse.emf.compare" version="3.0.1" match="compatible"/>
+      <import plugin="org.eclipse.emf.ecore"/>
+      <import plugin="org.eclipse.emf.compare" version="3.1.1" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.emf.compare.edit" version="4.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.emf.compare.ide" version="3.1.1" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.emf.compare.rcp" version="2.2.0" match="greaterOrEqual"/>
+      <import plugin="org.eventb.core" version="3.1.0" match="compatible"/>
    </requires>
 
    <plugin
          id="org.eventb.texteditor.ui"
          download-size="0"
          install-size="0"
-         version="3.2.0.qualifier"
+         version="3.3.0.qualifier"
          unpack="false"/>
 
    <plugin
          id="org.eventb.texttools"
          download-size="0"
          install-size="0"
-         version="3.2.0.qualifier"
+         version="3.3.0.qualifier"
          unpack="false"/>
 
    <plugin
          id="org.eventb.texteditor.parsers"
          download-size="0"
          install-size="0"
-         version="3.2.0.qualifier"
+         version="3.3.0.qualifier"
          unpack="false"/>
 
 </feature>
diff --git a/org.eventb.texteditor.feature/pom.xml b/org.eventb.texteditor.feature/pom.xml
index 160a6ab2ac1632b67fb6a53f0f4cece4d639c6f7..0c4c3bb9827b850a35ca7dff533d47df7d7c1e07 100644
--- a/org.eventb.texteditor.feature/pom.xml
+++ b/org.eventb.texteditor.feature/pom.xml
@@ -6,11 +6,11 @@
 		<parent>
 			<groupId>org.eventb.texteditor</groupId>
 			<artifactId>org.eventb.texteditor.parent</artifactId>
-			<version>3.2.0.qualifier</version>
+			<version>3.3.0.qualifier</version>
 			<relativePath>../org.eventb.texteditor.parent/pom.xml</relativePath>
 		</parent>
 		<groupId>org.eventb.texteditor</groupId>
 		<artifactId>org.eventb.texteditor.feature</artifactId>
-		<version>3.2.0.qualifier</version>
+		<version>3.3.0.qualifier</version>
 		<packaging>eclipse-feature</packaging>
 	</project>
diff --git a/org.eventb.texteditor.parsers/META-INF/MANIFEST.MF b/org.eventb.texteditor.parsers/META-INF/MANIFEST.MF
index 272610751a6a92898670f5795db97b36032f2726..00c5209969b23583a54f0769b7d18a044e199eaf 100644
--- a/org.eventb.texteditor.parsers/META-INF/MANIFEST.MF
+++ b/org.eventb.texteditor.parsers/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Parsers for Camille
 Bundle-SymbolicName: org.eventb.texteditor.parsers
-Bundle-Version: 3.2.0.qualifier
+Bundle-Version: 3.3.0.qualifier
 Bundle-Activator: org.eventb.texteditor.parsers.Activator
 Require-Bundle: org.eclipse.core.runtime
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/org.eventb.texteditor.ui/META-INF/MANIFEST.MF b/org.eventb.texteditor.ui/META-INF/MANIFEST.MF
index 508f5e6d1ad22cae8d245b9e4f988bfdb36e7c1d..243fa8deec2749945ddd0ba124a8cc9242d925e1 100644
--- a/org.eventb.texteditor.ui/META-INF/MANIFEST.MF
+++ b/org.eventb.texteditor.ui/META-INF/MANIFEST.MF
@@ -2,10 +2,10 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Camille Texteditor
 Bundle-SymbolicName: org.eventb.texteditor.ui;singleton:=true
-Bundle-Version: 3.2.0.qualifier
+Bundle-Version: 3.3.0.qualifier
 Bundle-Localization: plugin
 Bundle-Activator: org.eventb.texteditor.ui.TextEditorPluginImplementation
-Require-Bundle: org.eventb.texttools;bundle-version="[3.1.0,3.3.0)";visibility:=reexport,
+Require-Bundle: org.eventb.texttools;bundle-version="[3.1.0,3.4.0)";visibility:=reexport,
  org.eventb.emf.formulas;bundle-version="[1.4.0,2.0.0)",
  org.eventb.emf.persistence;bundle-version="[3.1.1,4.0.0)";visibility:=reexport,
  org.eventb.ui;bundle-version="[3.0.0,4.0.0)";visibility:=reexport,
@@ -16,7 +16,7 @@ Require-Bundle: org.eventb.texttools;bundle-version="[3.1.0,3.3.0)";visibility:=
  org.eclipse.ui.ide;bundle-version="[3.8.2,4.0.0)",
  org.eclipse.ui.workbench.texteditor,
  org.eclipse.core.resources;bundle-version="3.8.1",
- org.eventb.emf.core;bundle-version="[4.0.0,5.0.0)",
+ org.eventb.emf.core;bundle-version="[4.0.0,6.0.0)",
  org.eclipse.core.runtime;bundle-version="3.10.0",
  org.eclipse.emf.ecore.xmi;bundle-version="2.10.1",
  org.rodinp.core;bundle-version="1.7.0",
diff --git a/org.eventb.texteditor.ui/src/org/eventb/texteditor/ui/outline/ContentProvider.java b/org.eventb.texteditor.ui/src/org/eventb/texteditor/ui/outline/ContentProvider.java
index c62af5447617971245e1f0aef8268018c27a7dae..fa98c9d7721a25e3b71ad2762d480bb4e3f7727f 100644
--- a/org.eventb.texteditor.ui/src/org/eventb/texteditor/ui/outline/ContentProvider.java
+++ b/org.eventb.texteditor.ui/src/org/eventb/texteditor/ui/outline/ContentProvider.java
@@ -20,7 +20,6 @@ import org.eventb.emf.core.EventBObject;
 import org.eventb.emf.core.context.Context;
 import org.eventb.emf.core.machine.Event;
 import org.eventb.emf.core.machine.Machine;
-import org.eventb.emf.core.machine.Variant;
 import org.eventb.texteditor.ui.TextEditorPlugin;
 import org.eventb.texteditor.ui.build.dom.DomManager;
 import org.eventb.texteditor.ui.build.dom.IParseResultListener;
@@ -167,12 +166,7 @@ public class ContentProvider implements ITreeContentProvider,
 			final ArrayList<EventBObject> children = new ArrayList<EventBObject>();
 			children.addAll(machine.getVariables());
 			children.addAll(machine.getInvariants());
-
-			final Variant variant = machine.getVariant();
-			if (variant != null) {
-				children.add(variant);
-			}
-
+			children.addAll(machine.getVariants());
 			children.addAll(machine.getEvents());
 
 			machineChildren = children.toArray();
diff --git a/org.eventb.texttools/META-INF/MANIFEST.MF b/org.eventb.texttools/META-INF/MANIFEST.MF
index 301e326c3cb5b6f7ca1fbfdaf9b511750e1cfef7..62027cb81d7e457a4135c1260aaa7bb485bb760f 100644
--- a/org.eventb.texttools/META-INF/MANIFEST.MF
+++ b/org.eventb.texttools/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Event-B EMF Texttools
 Bundle-SymbolicName: org.eventb.texttools;singleton:=true
-Bundle-Version: 3.2.0.qualifier
+Bundle-Version: 3.3.0.qualifier
 Bundle-Activator: org.eventb.texttools.TextToolsPlugin
 Require-Bundle: org.eclipse.jface.text;bundle-version="[3.6.0,4.0.0)",
  org.eventb.emf.formulas;bundle-version="[1.4.0,2.0.0)",
@@ -12,7 +12,7 @@ Require-Bundle: org.eclipse.jface.text;bundle-version="[3.6.0,4.0.0)",
  org.eclipse.emf.ecore,
  org.eventb.texteditor.parsers,
  org.eclipse.core.runtime;bundle-version="3.10.0",
- org.eventb.emf.core;bundle-version="[4.0.0,5.0.0)",
+ org.eventb.emf.core;bundle-version="[4.0.0,6.0.0)",
  org.rodinp.core;bundle-version="1.7.0",
  org.eclipse.emf.compare;bundle-version="3.1.1",
  org.eclipse.emf.compare.edit;bundle-version="4.0.0",
diff --git a/org.eventb.texttools/old/org/eventb/texttools/diff/EventBAttributesCheck.java b/org.eventb.texttools/old/org/eventb/texttools/diff/EventBAttributesCheck.java
old mode 100755
new mode 100644
diff --git a/org.eventb.texttools/old/org/eventb/texttools/diff/EventBDiffEngine.java b/org.eventb.texttools/old/org/eventb/texttools/diff/EventBDiffEngine.java
old mode 100755
new mode 100644
diff --git a/org.eventb.texttools/old/org/eventb/texttools/diff/EventBReferencesCheck.java b/org.eventb.texttools/old/org/eventb/texttools/diff/EventBReferencesCheck.java
old mode 100755
new mode 100644
diff --git a/org.eventb.texttools/src/org/eventb/texttools/PersistenceHelper.java b/org.eventb.texttools/src/org/eventb/texttools/PersistenceHelper.java
old mode 100755
new mode 100644
index 942366488005a8c88abfa256f1d17be14b90369a..8823c16356207380f2a30b59c4efc3fd2d2f583a
--- a/org.eventb.texttools/src/org/eventb/texttools/PersistenceHelper.java
+++ b/org.eventb.texttools/src/org/eventb/texttools/PersistenceHelper.java
@@ -27,7 +27,6 @@ import org.eclipse.emf.compare.DifferenceState;
 import org.eclipse.emf.compare.EMFCompare;
 import org.eclipse.emf.compare.diff.DefaultDiffEngine;
 import org.eclipse.emf.compare.diff.IDiffEngine;
-import org.eclipse.emf.compare.internal.spec.ReferenceChangeSpec;
 import org.eclipse.emf.compare.match.DefaultComparisonFactory;
 import org.eclipse.emf.compare.match.DefaultEqualityHelperFactory;
 import org.eclipse.emf.compare.match.IComparisonFactory;
@@ -35,12 +34,9 @@ import org.eclipse.emf.compare.match.IMatchEngine;
 import org.eclipse.emf.compare.match.eobject.IEObjectMatcher;
 import org.eclipse.emf.compare.match.impl.MatchEngineFactoryImpl;
 import org.eclipse.emf.compare.match.impl.MatchEngineFactoryRegistryImpl;
-import org.eclipse.emf.compare.merge.BatchMerger;
-import org.eclipse.emf.compare.merge.ConflictMerger;
 import org.eclipse.emf.compare.merge.IMerger;
 import org.eclipse.emf.compare.merge.IMerger.Registry;
 import org.eclipse.emf.compare.merge.IMerger.RegistryImpl;
-import org.eclipse.emf.compare.merge.PseudoConflictMerger;
 import org.eclipse.emf.compare.scope.DefaultComparisonScope;
 import org.eclipse.emf.compare.scope.IComparisonScope;
 import org.eclipse.emf.ecore.EClass;
@@ -54,7 +50,6 @@ import org.eventb.emf.core.EventBNamedCommentedComponentElement;
 import org.eventb.texttools.diffmerge.EventBDiffProcessor;
 import org.eventb.texttools.diffmerge.EventBEObjectMatcher;
 import org.eventb.texttools.diffmerge.EventBMerger;
-import org.eventb.texttools.diffmerge.EventBMerger;
 import org.eventb.texttools.prettyprint.PrettyPrinter;
 
 import de.be4.eventb.core.parser.BException;
@@ -64,7 +59,6 @@ import de.be4.eventb.core.parser.node.AMachineParseUnit;
 import de.be4.eventb.core.parser.node.PParseUnit;
 import de.be4.eventb.core.parser.node.Start;
 
-//import org.eventb.texttools.merge.ModelMerge;
 
 public class PersistenceHelper {
 
@@ -117,7 +111,6 @@ public class PersistenceHelper {
 	public static void addTextAnnotation(final Resource resource,
 			final String textRepresentation, final long timeStamp)
 			throws CoreException {
-//System.out.println("TEXT1:"+textRepresentation);
 		final EventBNamedCommentedComponentElement component = getComponent(resource);
 		if (component != null) {
 			addTextAnnotation(component, textRepresentation, timeStamp);
@@ -133,7 +126,6 @@ public class PersistenceHelper {
 		final EMap<String, Attribute> attributes = element.getAttributes();
 
 		// update text representation
-//System.out.println("TEXT2:"+textRepresentation);
 		Attribute textAttribute = attributes
 				.get(TextToolsPlugin.TYPE_TEXTREPRESENTATION.getId());
 		if (textAttribute == null) {
@@ -176,7 +168,7 @@ public class PersistenceHelper {
 			if (d.getState() != DifferenceState.MERGED)
 				evbMerger.copyRightToLeft(d,null);
 		} catch(Exception e) {
-			System.out.println("SKIP:"+d);
+			System.out.println("SKIPPED:"+d);
 		}
 	}
 	
diff --git a/org.eventb.texttools/src/org/eventb/texttools/diffmerge/EventBMerger.java b/org.eventb.texttools/src/org/eventb/texttools/diffmerge/EventBMerger.java
index 39774f84be3427b5ef31423f7816650959672a05..397a0d16a0e4b9e0a5ee9ee2ee785705f47f93ea 100644
--- a/org.eventb.texttools/src/org/eventb/texttools/diffmerge/EventBMerger.java
+++ b/org.eventb.texttools/src/org/eventb/texttools/diffmerge/EventBMerger.java
@@ -17,26 +17,21 @@ public class EventBMerger extends AbstractMerger {
 	
 	@Override
 	public boolean isMergerFor(Diff target) {
-		//FIXME: could return true in all cases???
+		String pack = "";
 		if (target instanceof ReferenceChange) {
-			ReferenceChange rtarget = (ReferenceChange) target;
-			EReference reference = rtarget.getReference();
-			if (reference.getName().equals("extends")
-					|| reference.getName().equals("refines")
-					|| reference.getName().equals("sees")) {
-				return true;
-			}
-			//FIXME: find a way to avoid naming all core MM attributes
-			//but test seems useless ... => always returns true?
-			if (reference.getName().contains("extension")) {
-				System.out.println("REFERENCE:"+reference.getName());
-				return false;
-			}
-			return true;
-		} else if (target instanceof AttributeChange)
-			return true; 
-		 System.out.println("TARGET:"+target);
-		return false;
+			ReferenceChange rc = (ReferenceChange) target;
+			pack = rc.getReference().getEContainingClass().getEPackage().getName();
+			//System.out.println("REF PACK:"+pack);
+		} else if (target instanceof AttributeChange) {
+			AttributeChange ac = (AttributeChange) target;
+			pack = ac.getAttribute().getEContainingClass().getEPackage().getName();
+			//System.out.println("ATTR PACK:"+pack);
+		} else {
+			System.out.println("TARGET:"+target);
+			return false;
+		}
+		return pack.equals("core") || pack.equals("machine") || pack.equals("context") || pack.equals("formulas");
+
 	}
 
 	//@Override
@@ -50,6 +45,11 @@ public class EventBMerger extends AbstractMerger {
 		// do we always merge right to left in Camille?
 		assert (rightToLeft);
 
+		if (!isMergerFor(diff)) {
+			super.reject(diff, rightToLeft);
+			return;
+		}
+
 		EObject left = diff.getMatch().getLeft();
 		EObject right = diff.getMatch().getRight();
 
@@ -65,6 +65,7 @@ public class EventBMerger extends AbstractMerger {
 			ReferenceChange d = (ReferenceChange) diff;
 			//System.out.println("REF CHANGE:"+d.getReference());
 			//System.out.println("REF VALUE:"+ d.getValue());
+			
 			rm.copyRightToLeft(diff,null);
 			Object l = left.eGet(d.getReference());
 			Object r = right.eGet(d.getReference());
@@ -77,6 +78,7 @@ public class EventBMerger extends AbstractMerger {
 			AttributeChange d = (AttributeChange) diff;
 			//System.out.println("ATTR CHANGE:"+d.getAttribute());
 			//System.out.println("ATTR VALUE:"+ d.getValue());
+
 			am.copyRightToLeft(diff,null);
 			Object l = left.eGet(d.getAttribute());
 			Object r = right.eGet(d.getAttribute());
diff --git a/org.eventb.texttools/src/org/eventb/texttools/formulas/FormulaResolver.java b/org.eventb.texttools/src/org/eventb/texttools/formulas/FormulaResolver.java
index 5bf3c5af00a8a4c3f7d75ab295c95452035c5428..1513cd146551d6f76dd2c7e5ac3ad82d5c16b53f 100644
--- a/org.eventb.texttools/src/org/eventb/texttools/formulas/FormulaResolver.java
+++ b/org.eventb.texttools/src/org/eventb/texttools/formulas/FormulaResolver.java
@@ -17,7 +17,7 @@ import org.eventb.core.IMachineRoot;
 import org.eventb.core.ast.ASTProblem;
 import org.eventb.core.ast.FormulaFactory;
 import org.eventb.core.ast.IParseResult;
-import org.eventb.emf.core.EventBCommentedExpressionElement;
+import org.eventb.emf.core.EventBNamedCommentedExpressionElement;
 import org.eventb.emf.core.EventBElement;
 import org.eventb.emf.core.EventBNamedCommentedComponentElement;
 import org.eventb.emf.core.EventBNamedCommentedPredicateElement;
@@ -92,7 +92,7 @@ public class FormulaResolver {
 		return exceptions;
 	}
 
-	public static void resolve(final EventBCommentedExpressionElement emfExpr)
+	public static void resolve(final EventBNamedCommentedExpressionElement emfExpr)
 			throws FormulaParseException {
 		final String expression = emfExpr.getExpression();
 		resolve(emfExpr, expression,
diff --git a/org.eventb.texttools/src/org/eventb/texttools/formulas/MachineResolveSwitch.java b/org.eventb.texttools/src/org/eventb/texttools/formulas/MachineResolveSwitch.java
index 5821eef6cad6e7859dee3a10f9c089f0f6ce7983..52fc1b3698eb9dd6679611a0ef195444fb49b22b 100644
--- a/org.eventb.texttools/src/org/eventb/texttools/formulas/MachineResolveSwitch.java
+++ b/org.eventb.texttools/src/org/eventb/texttools/formulas/MachineResolveSwitch.java
@@ -9,7 +9,7 @@ package org.eventb.texttools.formulas;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eventb.emf.core.EventBCommentedExpressionElement;
+import org.eventb.emf.core.EventBNamedCommentedExpressionElement;
 import org.eventb.emf.core.EventBNamedCommentedPredicateElement;
 import org.eventb.emf.core.EventBObject;
 import org.eventb.emf.core.machine.Action;
@@ -38,8 +38,8 @@ public class MachineResolveSwitch extends MachineSwitch<Boolean> {
 	}
 
 	@Override
-	public Boolean caseEventBCommentedExpressionElement(
-			final EventBCommentedExpressionElement object) {
+	public Boolean caseEventBNamedCommentedExpressionElement(
+			final EventBNamedCommentedExpressionElement object) {
 		try {
 			FormulaResolver.resolve(object);
 		} catch (final FormulaParseException e) {
diff --git a/org.eventb.texttools/src/org/eventb/texttools/internal/parsing/TransformationVisitor.java b/org.eventb.texttools/src/org/eventb/texttools/internal/parsing/TransformationVisitor.java
index 6d415d8a9549af6a1d379eb69e0230c2471a1851..4e034fc6d01f20f3adfa3122146aee86778c4e25 100644
--- a/org.eventb.texttools/src/org/eventb/texttools/internal/parsing/TransformationVisitor.java
+++ b/org.eventb.texttools/src/org/eventb/texttools/internal/parsing/TransformationVisitor.java
@@ -107,11 +107,12 @@ public class TransformationVisitor extends DepthFirstAdapter {
 
 		// variant
 		if (node.getVariant() != null) {
-			newNode.setVariant((Variant) stack.pop());
+			newNode.getVariants().add((Variant) stack.pop());
 		}
+		
 
 		// TODO theorems
-		// final EList<Theorem> theorems = newNode.getTheorems();
+		//final EList<Theorem> theorems = newNode.getTheorems();
 		// handleList(theorems, node.getTheorems().size());
 
 		handleList(newNode.getInvariants(), node.getInvariants().size());
diff --git a/org.eventb.texttools/src/org/eventb/texttools/prettyprint/MachinePrintSwitch.java b/org.eventb.texttools/src/org/eventb/texttools/prettyprint/MachinePrintSwitch.java
index 99eb64f8e65bd2e6b18364e9b665f8788df1aa18..bf54a6043588b333117a2e11c79096bf60e87ce5 100644
--- a/org.eventb.texttools/src/org/eventb/texttools/prettyprint/MachinePrintSwitch.java
+++ b/org.eventb.texttools/src/org/eventb/texttools/prettyprint/MachinePrintSwitch.java
@@ -71,13 +71,7 @@ public class MachinePrintSwitch extends MachineSwitch<Boolean> implements
 		printInvariants(object.getInvariants(), newLine);
 
 		// variant
-		final Variant variant = object.getVariant();
-		if (variant != null) {
-			if (newLine) {
-				printer.appendLineBreak();
-			}
-			doSwitch(variant);
-		}
+		printVariants(object.getVariants(), newLine);
 
 		// events
 		printEvents(object.getEvents(), newLine);
@@ -121,7 +115,6 @@ public class MachinePrintSwitch extends MachineSwitch<Boolean> implements
 
 	@Override
 	public Boolean caseVariant(final Variant object) {
-		printer.appendWithSpace(VARIANT);
 		printer.appendFormula(object.getExpression(), printer
 				.hasComment(object));
 		printer.appendComment(object);
@@ -251,6 +244,24 @@ public class MachinePrintSwitch extends MachineSwitch<Boolean> implements
 		}
 	}
 
+	private void printVariants(final EList<Variant> variants,
+			final boolean newLine) {
+		if (variants.size() > 0) {
+			if (newLine) {
+				printer.appendLineBreak();
+			}
+
+			printer.appendWithLineBreak(VARIANT);
+			printer.increaseIndentLevel();
+
+			for (final Variant variant : variants) {
+				doSwitch(variant);
+			}
+
+			printer.decreaseIndentLevel();
+		}
+	}
+
 	private void printEvents(final EList<Event> events, final boolean newLine) {
 		if (events.size() > 0) {
 			if (newLine) {