diff --git a/de.bmotionstudio.gef.editor/META-INF/MANIFEST.MF b/de.bmotionstudio.gef.editor/META-INF/MANIFEST.MF
index b1c60870a72a551f618f26316aec6a54c4507366..d51f7c6fbfc3643ab3835dfea27032834f06a5f2 100644
--- a/de.bmotionstudio.gef.editor/META-INF/MANIFEST.MF
+++ b/de.bmotionstudio.gef.editor/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: BMotion Studio Editor Plug-in
 Bundle-SymbolicName: de.bmotionstudio.gef.editor;singleton:=true
-Bundle-Version: 5.3.2.qualifier
+Bundle-Version: 5.4.0.qualifier
 Bundle-Activator: de.bmotionstudio.gef.editor.BMotionEditorPlugin
 Require-Bundle: org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui.ide;bundle-version="[3.5.0,4.0.0)",
@@ -12,7 +12,7 @@ Require-Bundle: org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.jface.databinding;bundle-version="[1.2.1,2.0.0)",
  org.eclipse.core.databinding.beans;bundle-version="[1.1.1,2.0.0)",
  org.eclipse.gef;bundle-version="[3.7.0,4.0.0)";visibility:=reexport,
- de.prob.core;bundle-version="[9.2.0,9.3.0)";visibility:=reexport,
+ de.prob.core;bundle-version="[9.3.0,9.4.0)";visibility:=reexport,
  org.eventb.core;bundle-version="[2.1.0,2.6.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/de.bmotionstudio.rodin/META-INF/MANIFEST.MF b/de.bmotionstudio.rodin/META-INF/MANIFEST.MF
index 3347d0705525e9327f7402141c5aed8d346f69db..360c3fa5618b3b8a8c13988958c0d325bcd4d256 100644
--- a/de.bmotionstudio.rodin/META-INF/MANIFEST.MF
+++ b/de.bmotionstudio.rodin/META-INF/MANIFEST.MF
@@ -2,8 +2,8 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: BMotion Studio Rodin Integration
 Bundle-SymbolicName: de.bmotionstudio.rodin;singleton:=true
-Bundle-Version: 1.0.3.qualifier
-Fragment-Host: de.bmotionstudio.gef.editor;bundle-version="5.2.1"
+Bundle-Version: 1.1.0.qualifier
+Fragment-Host: de.bmotionstudio.gef.editor;bundle-version="[5.4.0,5.5.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-Vendor: HHU Düsseldorf STUPS Group
 Require-Bundle: org.eclipse.ui.navigator;bundle-version="3.5.0"
diff --git a/de.prob.core/META-INF/MANIFEST.MF b/de.prob.core/META-INF/MANIFEST.MF
index bc48a47fa1f59a2e1243b5c7bb20200381853d2a..e1cf9ef6e6d4630ea3dbbbc24da03219d65c3db5 100644
--- a/de.prob.core/META-INF/MANIFEST.MF
+++ b/de.prob.core/META-INF/MANIFEST.MF
@@ -2,10 +2,11 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: ProB Animator Core
 Bundle-SymbolicName: de.prob.core;singleton:=true
-Bundle-Version: 9.2.2.qualifier
+Bundle-Version: 9.3.0.qualifier
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.rodinp.core;bundle-version="[1.3.1,1.7.0)",
  org.eventb.core;bundle-version="[2.1.0,2.6.0)"
+REENABLE-FOR-THEORY-PLUGIN: org.eventb.theory.core;bundle-version="2.0.0"
 Bundle-ActivationPolicy: lazy
 Eclipse-BundleShape: dir
 Bundle-Vendor: HHU Düsseldorf STUPS Group
diff --git a/de.prob.core/build.gradle b/de.prob.core/build.gradle
index 82ad7bd0a0355e26c646e7ab8a31e8f5fb3d5234..b3649c6d3744cf303464ce77818144dc264b6a2c 100644
--- a/de.prob.core/build.gradle
+++ b/de.prob.core/build.gradle
@@ -1,7 +1,7 @@
 apply plugin: 'java'
 
 
-def parser_version = '2.4.8-SNAPSHOT'
+def parser_version = '2.4.12-SNAPSHOT'
 
 dependencies {
  compile group: "de.prob", name: "answerparser", version: parser_version , changing: true
diff --git a/de.prob.core/plugin.xml b/de.prob.core/plugin.xml
index 2d7b472c3f23462dc53c415d78961b70f7940e2f..b84a1eaef2043d86514040b1a698b95d501b759d 100644
--- a/de.prob.core/plugin.xml
+++ b/de.prob.core/plugin.xml
@@ -4,6 +4,7 @@
    <extension-point id="de.prob.core.lifecycle" name="Lifecycle Events" schema="schema/de.prob.core.lifecycle.exsd"/>
    <extension-point id="de.prob.core.computation" name="Computation Events" schema="schema/de.prob.core.computation.exsd"/>
    <extension-point id="de.prob.core.animation" name="Animation Events" schema="schema/de.prob.core.animation.exsd"/>
+   <extension-point id="de.prob.translator" name="Translator Extensions" schema="schema/de.prob.translator.exsd"/>
    <extension
          point="de.prob.core.animation">
       <listener
diff --git a/de.prob.core/schema/de.prob.translator.exsd b/de.prob.core/schema/de.prob.translator.exsd
new file mode 100644
index 0000000000000000000000000000000000000000..90efcf3ea4b5913068fc906cd4a9206a2d2860b1
--- /dev/null
+++ b/de.prob.core/schema/de.prob.translator.exsd
@@ -0,0 +1,109 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="de.prob.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="de.prob.core" id="de.prob.translator" name="Translator Extensions"/>
+      </appInfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="translator"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="translator">
+      <complexType>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":de.prob.core.translator.IExternalTranslator"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiinfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/de.prob.core/src/de/prob/core/Animator.java b/de.prob.core/src/de/prob/core/Animator.java
index ad8901b17fd22ca504219767355f4c832dd40b9e..e78a5611b36a4821ca7e01fd01fdc0075bfba21c 100644
--- a/de.prob.core/src/de/prob/core/Animator.java
+++ b/de.prob.core/src/de/prob/core/Animator.java
@@ -6,18 +6,12 @@
 
 package de.prob.core;
 
-import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.osgi.service.prefs.Preferences;
 
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
-
 import de.prob.core.command.IComposableCommand;
 import de.prob.core.domainobjects.History;
 import de.prob.core.domainobjects.MachineDescription;
@@ -29,7 +23,6 @@ import de.prob.core.internal.AnimatorImpl;
 import de.prob.core.internal.ServerTraceConnection;
 import de.prob.core.internal.TraceConnectionProvider;
 import de.prob.exceptions.ProBException;
-import de.prob.model.eventb.Model;
 
 
 /**
diff --git a/de.prob.core/src/de/prob/core/translator/IExternalTranslator.java b/de.prob.core/src/de/prob/core/translator/IExternalTranslator.java
new file mode 100644
index 0000000000000000000000000000000000000000..d01511727a1c9d8cd430d91b88066da528ecce67
--- /dev/null
+++ b/de.prob.core/src/de/prob/core/translator/IExternalTranslator.java
@@ -0,0 +1,7 @@
+package de.prob.core.translator;
+
+import de.prob.prolog.output.PrologTermOutput;
+
+public interface IExternalTranslator {
+	public void writeProlog(PrologTermOutput pto);
+}
diff --git a/de.prob.core/src/de/prob/core/translator/TranslationFailedException.java b/de.prob.core/src/de/prob/core/translator/TranslationFailedException.java
index bb5a1fb6e8b3b20d2032f27880866b171dbffd1a..f1edb0bdac9c2b72b6e03aaaa3948f0a5c6d4f60 100644
--- a/de.prob.core/src/de/prob/core/translator/TranslationFailedException.java
+++ b/de.prob.core/src/de/prob/core/translator/TranslationFailedException.java
@@ -18,8 +18,12 @@ public class TranslationFailedException extends ProBException {
 
 	public TranslationFailedException(final String component,
 			final String details) {
-		super("Translation of " + component + " failed\n" + details);
-		notifyUserOnce();
+		this(component, details, null);
 	}
 
+	public TranslationFailedException(final String component,
+			final String details, Throwable e) {
+		super("Translation of " + component + " failed\n" + details, e, false);
+		notifyUserOnce();
+	}
 }
diff --git a/de.prob.core/src/de/prob/eventb/translator/ContextTranslator.java b/de.prob.core/src/de/prob/eventb/translator/ContextTranslator.java
index 340c94557f3d396764624d39a1ab2a831fc80e26..9ea99009688c58a066ad0add611d91b1e6a429a6 100644
--- a/de.prob.core/src/de/prob/eventb/translator/ContextTranslator.java
+++ b/de.prob.core/src/de/prob/eventb/translator/ContextTranslator.java
@@ -66,14 +66,13 @@ public final class ContextTranslator extends AbstractComponentTranslator {
 	private final List<DischargedProof> proofs = new ArrayList<DischargedProof>();
 	private final List<ClassifiedPragma> proofspragmas = new ArrayList<ClassifiedPragma>();
 	private final FormulaFactory ff;
-
-	// Confined in the thread calling the factory method
 	private ITypeEnvironment te;
 
 	public static ContextTranslator create(final ISCContext context)
 			throws TranslationFailedException {
 		ContextTranslator contextTranslator = new ContextTranslator(context);
 		try {
+			(new TheoryTranslator()).translate();
 			contextTranslator.translate();
 		} catch (RodinDBException e) {
 			final String message = "A Rodin exception occured during translation process. Possible cause: building aborted or still in progress. Please wait until building has finished before starting ProB. If this does not help, perform a clean and start ProB after building has finished. Original Exception: ";
@@ -90,11 +89,20 @@ public final class ContextTranslator extends AbstractComponentTranslator {
 	 * contains errors)
 	 * 
 	 * @param context
+	 * @throws TranslationFailedException
 	 * @throws RodinDBException
 	 */
-	private ContextTranslator(final ISCContext context) {
+	private ContextTranslator(final ISCContext context)
+			throws TranslationFailedException {
 		this.context = context;
-		ff = FormulaFactory.getDefault();
+		ff = ((ISCContextRoot) context).getFormulaFactory();
+		try {
+			te = ((ISCContextRoot) context).getTypeEnvironment(ff);
+		} catch (RodinDBException e) {
+			final String message = "A Rodin exception occured during translation process. Original Exception: ";
+			throw new TranslationFailedException(context.getComponentName(),
+					message + e.getLocalizedMessage());
+		}
 	}
 
 	private void translate() throws RodinDBException {
@@ -102,7 +110,6 @@ public final class ContextTranslator extends AbstractComponentTranslator {
 			ISCContextRoot context_root = (ISCContextRoot) context;
 			Assert.isTrue(context_root.getRodinFile().isConsistent());
 			te = context_root.getTypeEnvironment(ff);
-			collectProofInfo(context_root);
 		} else if (context instanceof ISCInternalContext) {
 			ISCInternalContext context_internal = (ISCInternalContext) context;
 
@@ -124,9 +131,9 @@ public final class ContextTranslator extends AbstractComponentTranslator {
 			ISCMachineRoot machine_root = (ISCMachineRoot) context_internal
 					.getRoot();
 			Assert.isTrue(machine_root.getRodinFile().isConsistent());
-			te = machine_root.getTypeEnvironment(ff);
 		}
 		translateContext();
+
 	}
 
 	private void collectProofInfo(ISCContextRoot context_root)
@@ -313,7 +320,6 @@ public final class ContextTranslator extends AbstractComponentTranslator {
 			final PredicateVisitor visitor = new PredicateVisitor(
 					new LinkedList<String>());
 			element.getPredicate(ff, te).accept(visitor);
-
 			final PPredicate predicate = visitor.getPredicate();
 			list.add(predicate);
 			labelMapping.put(predicate, element);
diff --git a/de.prob.core/src/de/prob/eventb/translator/ExpressionVisitor.java b/de.prob.core/src/de/prob/eventb/translator/ExpressionVisitor.java
index 49af627156fefc608f681e454c9291c95f2d0803..96a04d1a9eb4ae1667be87ccca45209656782dbe 100644
--- a/de.prob.core/src/de/prob/eventb/translator/ExpressionVisitor.java
+++ b/de.prob.core/src/de/prob/eventb/translator/ExpressionVisitor.java
@@ -20,6 +20,7 @@ import org.eventb.core.ast.BoolExpression;
 import org.eventb.core.ast.BoundIdentDecl;
 import org.eventb.core.ast.BoundIdentifier;
 import org.eventb.core.ast.Expression;
+import org.eventb.core.ast.ExtendedExpression;
 import org.eventb.core.ast.Formula;
 import org.eventb.core.ast.FreeIdentifier;
 import org.eventb.core.ast.ISimpleVisitor;
@@ -28,6 +29,7 @@ import org.eventb.core.ast.Predicate;
 import org.eventb.core.ast.QuantifiedExpression;
 import org.eventb.core.ast.SetExtension;
 import org.eventb.core.ast.UnaryExpression;
+import org.eventb.core.ast.extension.IExpressionExtension;
 
 import de.be4.classicalb.core.parser.node.AAddExpression;
 import de.be4.classicalb.core.parser.node.ABoolSetExpression;
@@ -50,6 +52,7 @@ import de.be4.classicalb.core.parser.node.AEventBFirstProjectionV2Expression;
 import de.be4.classicalb.core.parser.node.AEventBIdentityExpression;
 import de.be4.classicalb.core.parser.node.AEventBSecondProjectionExpression;
 import de.be4.classicalb.core.parser.node.AEventBSecondProjectionV2Expression;
+import de.be4.classicalb.core.parser.node.AExtendedExprExpression;
 import de.be4.classicalb.core.parser.node.AFunctionExpression;
 import de.be4.classicalb.core.parser.node.AGeneralIntersectionExpression;
 import de.be4.classicalb.core.parser.node.AGeneralUnionExpression;
@@ -112,7 +115,6 @@ public class ExpressionVisitor extends SimpleVisitorAdapter implements // NOPMD
 	// we need some abilities of the linked list, using List is not an option
 	private boolean expressionSet = false;
 
-	@SuppressWarnings("unused")
 	private ExpressionVisitor() { // we want to prevent clients from calling
 		// the default constructor
 		super();
@@ -157,15 +159,14 @@ public class ExpressionVisitor extends SimpleVisitorAdapter implements // NOPMD
 			list.add(visitor.getExpression());
 		}
 
-		// Process internal Expression and Predcate
+		// Process internal Expression and Predicate
 		final Predicate predicate = expression.getPredicate();
 		final PredicateVisitor predicateVisitor = new PredicateVisitor(bounds);
 		predicate.accept(predicateVisitor);
 
 		final PPredicate pr = predicateVisitor.getPredicate();
 
-		final ExpressionVisitor expressionVisitor = new ExpressionVisitor(
-				bounds);
+		final ExpressionVisitor expressionVisitor = new ExpressionVisitor();
 		expression.getExpression().accept(expressionVisitor);
 
 		final PExpression ex = expressionVisitor.getExpression();
@@ -619,6 +620,41 @@ public class ExpressionVisitor extends SimpleVisitorAdapter implements // NOPMD
 		setExpression(setExtensionExpression);
 	}
 
+	@Override
+	public void visitExtendedExpression(ExtendedExpression expression) {
+		AExtendedExprExpression p = new AExtendedExprExpression();
+
+		IExpressionExtension extension = expression.getExtension();
+		String symbol = extension.getSyntaxSymbol();
+		Object origin = extension.getOrigin();
+
+		// FIXME THEORY-PLUGIN re-enable when the theory plugin was released
+		// Theories.addOrigin(origin);
+
+		p.setIdentifier(new TIdentifierLiteral(symbol));
+		Expression[] expressions = expression.getChildExpressions();
+		List<PExpression> childExprs = new ArrayList<PExpression>();
+		for (Expression e : expressions) {
+			ExpressionVisitor v = new ExpressionVisitor(
+					new LinkedList<String>());
+			e.accept(v);
+			childExprs.add(v.getExpression());
+		}
+		p.setExpressions(childExprs);
+
+		Predicate[] childPredicates = expression.getChildPredicates();
+		List<PPredicate> childPreds = new ArrayList<PPredicate>();
+		for (Predicate pd : childPredicates) {
+			PredicateVisitor v = new PredicateVisitor(null);
+			pd.accept(v);
+			childPreds.add(v.getPredicate());
+		}
+		p.setPredicates(childPreds);
+
+		setExpression(p);
+
+	}
+
 	@SuppressWarnings("deprecation")
 	@Override
 	public void visitUnaryExpression(final UnaryExpression expression) { // NOPMD
diff --git a/de.prob.core/src/de/prob/eventb/translator/PredicateVisitor.java b/de.prob.core/src/de/prob/eventb/translator/PredicateVisitor.java
index 7094ecabecf5f2ed6abe1799ca4bca63ff594463..035811a2be35d24c8b52eb576e29a7dc5b5c37b0 100644
--- a/de.prob.core/src/de/prob/eventb/translator/PredicateVisitor.java
+++ b/de.prob.core/src/de/prob/eventb/translator/PredicateVisitor.java
@@ -15,6 +15,7 @@ import org.eventb.core.ast.AssociativePredicate;
 import org.eventb.core.ast.BinaryPredicate;
 import org.eventb.core.ast.BoundIdentDecl;
 import org.eventb.core.ast.Expression;
+import org.eventb.core.ast.ExtendedPredicate;
 import org.eventb.core.ast.Formula;
 import org.eventb.core.ast.ISimpleVisitor;
 import org.eventb.core.ast.LiteralPredicate;
@@ -24,12 +25,14 @@ import org.eventb.core.ast.QuantifiedPredicate;
 import org.eventb.core.ast.RelationalPredicate;
 import org.eventb.core.ast.SimplePredicate;
 import org.eventb.core.ast.UnaryPredicate;
+import org.eventb.core.ast.extension.IPredicateExtension;
 
 import de.be4.classicalb.core.parser.node.AConjunctPredicate;
 import de.be4.classicalb.core.parser.node.ADisjunctPredicate;
 import de.be4.classicalb.core.parser.node.AEqualPredicate;
 import de.be4.classicalb.core.parser.node.AEquivalencePredicate;
 import de.be4.classicalb.core.parser.node.AExistsPredicate;
+import de.be4.classicalb.core.parser.node.AExtendedPredPredicate;
 import de.be4.classicalb.core.parser.node.AFalsityPredicate;
 import de.be4.classicalb.core.parser.node.AFinitePredicate;
 import de.be4.classicalb.core.parser.node.AForallPredicate;
@@ -50,6 +53,7 @@ import de.be4.classicalb.core.parser.node.ASubsetStrictPredicate;
 import de.be4.classicalb.core.parser.node.ATruthPredicate;
 import de.be4.classicalb.core.parser.node.PExpression;
 import de.be4.classicalb.core.parser.node.PPredicate;
+import de.be4.classicalb.core.parser.node.TIdentifierLiteral;
 import de.prob.eventb.translator.internal.SimpleVisitorAdapter;
 
 public class PredicateVisitor extends SimpleVisitorAdapter implements // NOPMD
@@ -76,12 +80,19 @@ public class PredicateVisitor extends SimpleVisitorAdapter implements // NOPMD
 			predicateSet = true;
 			this.p = p;
 		}
-		//public ClassifiedPragma(String name, Node attachedTo, List<String> arguments, List<String> warnings, SourcePosition start, SourcePosition end) {
-		
-    //     new ClassifiedPragma("discharged", p, proof, Collections.emptyList(), new SourcePosition(-1, -1), new SourcePosition(-1, -1));
+		// public ClassifiedPragma(String name, Node attachedTo, List<String>
+		// arguments, List<String> warnings, SourcePosition start,
+		// SourcePosition end) {
+
+		// new ClassifiedPragma("discharged", p, proof, Collections.emptyList(),
+		// new SourcePosition(-1, -1), new SourcePosition(-1, -1));
+	}
+
+	public PredicateVisitor() {
+		this(null);
 	}
 
-	public PredicateVisitor(final LinkedList<String> bounds) {
+	public PredicateVisitor(LinkedList<String> bounds) {
 		super();
 		if (bounds == null) {
 			this.bounds = new LinkedList<String>();
@@ -90,10 +101,6 @@ public class PredicateVisitor extends SimpleVisitorAdapter implements // NOPMD
 		}
 	}
 
-	public PredicateVisitor() {
-		this(null);
-	}
-
 	@Override
 	public void visitQuantifiedPredicate(final QuantifiedPredicate predicate) {
 		final int tag = predicate.getTag();
@@ -406,4 +413,37 @@ public class PredicateVisitor extends SimpleVisitorAdapter implements // NOPMD
 		setPredicate(result);
 	}
 
+	@Override
+	public void visitExtendedPredicate(ExtendedPredicate predicate) {
+		AExtendedPredPredicate p = new AExtendedPredPredicate();
+		IPredicateExtension extension = predicate.getExtension();
+		String symbol = extension.getSyntaxSymbol();
+		Object origin = extension.getOrigin();
+
+		// FIXME THEORY-PLUGIN re-enable when the theory plugin was released
+
+		// Theories.addOrigin(origin);
+
+		p.setIdentifier(new TIdentifierLiteral(symbol));
+
+		Expression[] expressions = predicate.getChildExpressions();
+		List<PExpression> childExprs = new ArrayList<PExpression>();
+		for (Expression e : expressions) {
+			ExpressionVisitor v = new ExpressionVisitor(bounds);
+			e.accept(v);
+			childExprs.add(v.getExpression());
+		}
+		p.setExpressions(childExprs);
+
+		Predicate[] childPredicates = predicate.getChildPredicates();
+		List<PPredicate> childPreds = new ArrayList<PPredicate>();
+		for (Predicate pd : childPredicates) {
+			PredicateVisitor v = new PredicateVisitor(bounds);
+			pd.accept(v);
+			childPreds.add(v.getPredicate());
+		}
+		p.setPredicates(childPreds);
+		setPredicate(p);
+	}
+
 }
diff --git a/de.prob.core/src/de/prob/eventb/translator/Theories.java b/de.prob.core/src/de/prob/eventb/translator/Theories.java
new file mode 100644
index 0000000000000000000000000000000000000000..a74d82914e8f220539a04cf6a36eff7a0025293a
--- /dev/null
+++ b/de.prob.core/src/de/prob/eventb/translator/Theories.java
@@ -0,0 +1,198 @@
+package de.prob.eventb.translator;
+
+
+// FIXME THEORY-PLUGIN re-enable when the theory plugin was released
+
+public class Theories {
+
+//	private static Map<String, IDeployedTheoryRoot> theories = new TreeMap<String, IDeployedTheoryRoot>();
+//
+//	public static final ITypeEnvironment global_te = FormulaFactory
+//			.getDefault().makeTypeEnvironment();
+//
+//	public static void addOrigin(Object origin) {
+//		if (origin instanceof ISCNewOperatorDefinition) {
+//			final IDeployedTheoryRoot theory = (IDeployedTheoryRoot) ((ISCNewOperatorDefinition) origin)
+//					.getParent();
+//			final String name = theory.getElementName();
+//			theories.put(name, theory);
+//		} else {
+//			System.out.println("Did not register origin: "
+//					+ origin.getClass().getName());
+//		}
+//	}
+//
+//	public static void translate(IPrologTermOutput pto) throws RodinDBException {
+//		for (IDeployedTheoryRoot theory : theories.values()) {
+//			printTranslation(theory, pto);
+//		}
+//	}
+//
+//	private static void printTranslation(IDeployedTheoryRoot theory,
+//			IPrologTermOutput pto) throws RodinDBException {
+//		pto.openTerm("theory");
+//		printTypeParameters(theory, pto);
+//		printDataTypes(theory, pto);
+//		printOperatorDefs(theory, pto);
+//		pto.closeTerm();
+//	}
+//
+//	private static void printTypeParameters(IFormulaExtensionsSource theory,
+//			IPrologTermOutput pto) throws RodinDBException {
+//		pto.openList();
+//		for (ISCTypeParameter parameter : theory.getSCTypeParameters()) {
+//			pto.printAtom(parameter.getIdentifierString());
+//		}
+//		pto.closeList();
+//	}
+//
+//	private static void printDataTypes(IDeployedTheoryRoot theory,
+//			IPrologTermOutput pto) throws RodinDBException {
+//		final FormulaFactory ff = theory.getFormulaFactory();
+//		pto.openList();
+//		for (ISCDatatypeDefinition def : theory.getSCDatatypeDefinitions()) {
+//			printDataType(def, ff, pto);
+//		}
+//		pto.closeList();
+//	}
+//
+//	private static void printDataType(ISCDatatypeDefinition def,
+//			FormulaFactory ff, IPrologTermOutput pto) throws RodinDBException {
+//		pto.openTerm("datatype");
+//		pto.printAtom(def.getIdentifierString());
+//		pto.openList();
+//		for (ISCTypeArgument arg : def.getTypeArguments()) {
+//			printType(arg.getSCGivenType(ff), ff, pto);
+//		}
+//		pto.closeList();
+//		pto.openList();
+//		for (ISCDatatypeConstructor cons : def.getConstructors()) {
+//			printConstructor(cons, ff, pto);
+//		}
+//		pto.closeList();
+//		pto.closeTerm();
+//
+//	}
+//
+//	private static void printConstructor(ISCDatatypeConstructor cons,
+//			FormulaFactory ff, IPrologTermOutput pto) throws RodinDBException {
+//		pto.openTerm("constructor");
+//		pto.printAtom(cons.getIdentifierString());
+//		pto.openList();
+//		for (ISCConstructorArgument arg : cons.getConstructorArguments()) {
+//			printTypedIdentifier("destructor", arg, ff, pto);
+//		}
+//		pto.closeList();
+//		pto.closeTerm();
+//
+//	}
+//
+//	private static void printOperatorDefs(IDeployedTheoryRoot theory,
+//			IPrologTermOutput pto) throws RodinDBException {
+//		pto.openList();
+//		for (ISCNewOperatorDefinition opdef : theory
+//				.getSCNewOperatorDefinitions()) {
+//			printOperator(opdef, theory, pto);
+//		}
+//		pto.closeList();
+//	}
+//
+//	private static void printOperator(ISCNewOperatorDefinition opDef,
+//			IDeployedTheoryRoot theory, IPrologTermOutput prologOutput)
+//			throws RodinDBException {
+//
+//		prologOutput.openTerm("operator");
+//		prologOutput.printAtom(opDef.getLabel());
+//
+//		final FormulaFactory ff = theory.getFormulaFactory();
+//		final ITypeEnvironment te = theory.getTypeEnvironment(ff);
+//
+//		// Arguments
+//		prologOutput.openList();
+//		ISCOperatorArgument[] operatorArguments = opDef.getOperatorArguments();
+//		for (ISCOperatorArgument argument : operatorArguments) {
+//			printTypedIdentifier("argument", argument, ff, prologOutput);
+//		}
+//		prologOutput.closeList();
+//
+//		// WD Condition
+//		Predicate wdCondition = opDef.getWDCondition(ff, te);
+//		printPredicate(prologOutput, wdCondition);
+//
+//		// Direct Definitions
+//		prologOutput.openList();
+//		processDefinitions(ff, te, prologOutput,
+//				opDef.getDirectOperatorDefinitions());
+//		prologOutput.closeList();
+//
+//		// Recursive Definitions
+//		prologOutput.openList();
+//		ISCRecursiveOperatorDefinition[] definitions = opDef
+//				.getRecursiveOperatorDefinitions();
+//		for (ISCRecursiveOperatorDefinition definition : definitions) {
+//			ISCRecursiveDefinitionCase[] recursiveDefinitionCases = definition
+//					.getRecursiveDefinitionCases();
+//			for (ISCRecursiveDefinitionCase c : recursiveDefinitionCases) {
+//				Expression ex = c.getExpression(ff, te);
+//				printExpression(prologOutput, ex);
+//			}
+//		}
+//		prologOutput.closeList();
+//
+//		prologOutput.closeTerm();
+//	}
+//
+//	private static void processDefinitions(FormulaFactory ff,
+//			ITypeEnvironment te, IPrologTermOutput prologOutput,
+//			ISCDirectOperatorDefinition[] directOperatorDefinitions)
+//			throws RodinDBException {
+//		for (ISCDirectOperatorDefinition def : directOperatorDefinitions) {
+//			Formula<?> scFormula = def.getSCFormula(ff, te);
+//
+//			if (scFormula instanceof Predicate) {
+//				Predicate pp = (Predicate) scFormula;
+//				printPredicate(prologOutput, pp);
+//			}
+//			if (scFormula instanceof Expression) {
+//				Expression pp = (Expression) scFormula;
+//				printExpression(prologOutput, pp);
+//			}
+//
+//		}
+//	}
+//
+//	private static void printTypedIdentifier(final String functor,
+//			final ISCIdentifierElement id, final FormulaFactory ff,
+//			final IPrologTermOutput pto) throws RodinDBException {
+//		pto.openTerm(functor);
+//		pto.printAtom(id.getIdentifierString());
+//		printType(id.getType(ff), ff, pto);
+//		pto.closeTerm();
+//	}
+//
+//	private static void printType(final Type type, final FormulaFactory ff,
+//			final IPrologTermOutput pto) {
+//		printExpression(pto, type.toExpression(ff));
+//	}
+//
+//	private static void printExpression(IPrologTermOutput prologOutput,
+//			Expression pp) {
+//		ExpressionVisitor visitor = new ExpressionVisitor(
+//				new LinkedList<String>());
+//		pp.accept(visitor);
+//		PExpression ex = visitor.getExpression();
+//		ASTProlog pv = new ASTProlog(prologOutput, null);
+//		ex.apply(pv);
+//	}
+//
+//	private static void printPredicate(IPrologTermOutput prologOutput,
+//			Predicate pp) {
+//		PredicateVisitor visitor = new PredicateVisitor(
+//				new LinkedList<String>());
+//		pp.accept(visitor);
+//		PPredicate predicate = visitor.getPredicate();
+//		ASTProlog pv = new ASTProlog(prologOutput, null);
+//		predicate.apply(pv);
+//	}
+
+}
diff --git a/de.prob.core/src/de/prob/eventb/translator/TheoryTranslator.java b/de.prob.core/src/de/prob/eventb/translator/TheoryTranslator.java
new file mode 100644
index 0000000000000000000000000000000000000000..d31ff06a2e8cfe0f759cd5a3e1390ad44bc49ea0
--- /dev/null
+++ b/de.prob.core/src/de/prob/eventb/translator/TheoryTranslator.java
@@ -0,0 +1,23 @@
+package de.prob.eventb.translator;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+
+public class TheoryTranslator {
+
+	public void translate() {
+		final IExtensionRegistry extensionRegistry = Platform
+				.getExtensionRegistry();
+		final IExtensionPoint extensionPoint = extensionRegistry
+				.getExtensionPoint("org.eventb.theory.core.deployedElements");
+		for (final IExtension extension : extensionPoint.getExtensions()) {
+			for (final IConfigurationElement configurationElement : extension
+					.getConfigurationElements()) {
+				System.out.println(configurationElement.getAttribute("name"));
+			}
+		}
+	}
+}
diff --git a/de.prob.core/src/de/prob/eventb/translator/TranslatorFactory.java b/de.prob.core/src/de/prob/eventb/translator/TranslatorFactory.java
index 0e9a5d1af765473e700a8e24a4306f0caa3d2441..8f7d0c95826235ae17633361922c7237640c9396 100644
--- a/de.prob.core/src/de/prob/eventb/translator/TranslatorFactory.java
+++ b/de.prob.core/src/de/prob/eventb/translator/TranslatorFactory.java
@@ -33,6 +33,7 @@ public class TranslatorFactory {
 	 */
 	public static void translate(final IEventBRoot root,
 			final IPrologTermOutput pto) throws TranslationFailedException {
+		
 		if (root instanceof IMachineRoot) {
 			final ISCMachineRoot scRoot = ((IMachineRoot) root)
 					.getSCMachineRoot();
diff --git a/de.prob.core/src/de/prob/eventb/translator/internal/EventBTranslator.java b/de.prob.core/src/de/prob/eventb/translator/internal/EventBTranslator.java
index 54eb566182fa3856b663293d6f4072e46f81e82b..43ea5792f26eee7de07938f106ef26696642a2c8 100644
--- a/de.prob.core/src/de/prob/eventb/translator/internal/EventBTranslator.java
+++ b/de.prob.core/src/de/prob/eventb/translator/internal/EventBTranslator.java
@@ -27,6 +27,7 @@ import de.prob.core.translator.ITranslator;
 import de.prob.core.translator.TranslationFailedException;
 import de.prob.eventb.translator.AbstractComponentTranslator;
 import de.prob.eventb.translator.ContextTranslator;
+import de.prob.eventb.translator.Theories;
 import de.prob.prolog.output.IPrologTermOutput;
 
 public abstract class EventBTranslator implements ITranslator {
@@ -143,6 +144,13 @@ public abstract class EventBTranslator implements ITranslator {
 		pout.openList();
 		printProofInformation(refinementChainTranslators, contextTranslators,
 				pout);
+		// FIXME THEORY-PLUGIN re-enable when the theory plugin was released
+
+		// try {
+		// Theories.translate(pout);
+		// } catch (RodinDBException e) {
+		// e.printStackTrace();
+		// }
 		pout.closeList();
 		pout.printVariable("_Error");
 		pout.closeTerm();
diff --git a/de.prob.core/src/de/prob/eventb/translator/internal/ModelTranslator.java b/de.prob.core/src/de/prob/eventb/translator/internal/ModelTranslator.java
index ba6f53a2ec7b4238cc99f87f50a16c33226f7132..d9fdf6fbb66e8880d7577915fe8fc80d36a17c87 100644
--- a/de.prob.core/src/de/prob/eventb/translator/internal/ModelTranslator.java
+++ b/de.prob.core/src/de/prob/eventb/translator/internal/ModelTranslator.java
@@ -77,13 +77,13 @@ public class ModelTranslator extends AbstractComponentTranslator {
 
 	private final ISCMachineRoot machine;
 	private final AEventBModelParseUnit model = new AEventBModelParseUnit();
-	private final FormulaFactory ff = FormulaFactory.getDefault();;
+	private final FormulaFactory ff;
+	private final ITypeEnvironment te;
 	private final IMachineRoot origin;
 	private final List<DischargedProof> proofs = new ArrayList<DischargedProof>();
 	// private final List<String> depContext = new ArrayList<String>();
 
 	// Confined in the thread calling the factory method
-	private ITypeEnvironment te;
 	private String refines;
 	private boolean broken = false;
 
@@ -137,9 +137,18 @@ public class ModelTranslator extends AbstractComponentTranslator {
 	// ###############################################################################################################################################################
 	// Implementation
 
-	private ModelTranslator(final ISCMachineRoot currentMachine) {
-		this.machine = currentMachine;
+	private ModelTranslator(final ISCMachineRoot machine)
+			throws TranslationFailedException {
+		this.machine = machine;
 		origin = machine.getMachineRoot();
+		ff = ((ISCMachineRoot) machine).getFormulaFactory();
+		try {
+			te = ((ISCMachineRoot) machine).getTypeEnvironment(ff);
+		} catch (RodinDBException e) {
+			final String message = "A Rodin exception occured during translation process. Original Exception: ";
+			throw new TranslationFailedException(machine.getComponentName(),
+					message + e.getLocalizedMessage());
+		}
 	}
 
 	private void translate() throws RodinDBException,
@@ -151,8 +160,6 @@ public class ModelTranslator extends AbstractComponentTranslator {
 		broken = !machine.isAccurate(); // isAccurate() is not transitive, we
 		// need to collect the information also
 		// for the events
-		te = machine.getTypeEnvironment(ff);
-
 		translateMachine();
 
 		// Check for fully discharged Invariants and Events
diff --git a/de.prob.plugin/META-INF/MANIFEST.MF b/de.prob.plugin/META-INF/MANIFEST.MF
index 24202af6eb41c3f85b4e1d5345dda77b95a4de61..35b77a2148d75ceb3a3c4b74cc62234c662a31f3 100644
--- a/de.prob.plugin/META-INF/MANIFEST.MF
+++ b/de.prob.plugin/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: ProB Rodin2 UI Bindings
 Bundle-SymbolicName: de.prob.plugin;singleton:=true
-Bundle-Version: 2.1.3.qualifier
-Fragment-Host: de.prob.ui;bundle-version="[7.2.0,7.3.0)"
+Bundle-Version: 2.2.0.qualifier
+Fragment-Host: de.prob.ui;bundle-version="[7.3.0,7.4.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-Vendor: HHU Düsseldorf STUPS Group
diff --git a/de.prob.ui/META-INF/MANIFEST.MF b/de.prob.ui/META-INF/MANIFEST.MF
index 0ab9a6cf07669d654268e69b8f68c9b0964f3c49..0292f6b17151194d687a1bdffa1d3ffd3a2a4e35 100644
--- a/de.prob.ui/META-INF/MANIFEST.MF
+++ b/de.prob.ui/META-INF/MANIFEST.MF
@@ -2,17 +2,15 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: ProB Ui Plug-in
 Bundle-SymbolicName: de.prob.ui;singleton:=true
-Bundle-Version: 7.2.2.qualifier
+Bundle-Version: 7.3.0.qualifier
 Require-Bundle: org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui.ide;bundle-version="[3.5.0,4.0.0)",
- de.prob.core;bundle-version="[9.2.0,9.3.0)",
+ de.prob.core;bundle-version="[9.3.0,9.4.0)",
  org.eventb.core;bundle-version="[2.1.0,2.6.0)",
  org.eclipse.core.expressions;bundle-version="[3.4.101,4.0.0)",
- org.eclipse.gef;bundle-version="[3.5.0,4.0.0)",
- org.eventb.emf.core;bundle-version="2.2.4",
- org.eventb.emf.persistence;bundle-version="2.4.0"
+ org.eclipse.gef;bundle-version="[3.5.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: HHU Düsseldorf STUPS Group
 Bundle-Activator: de.prob.ui.ProbUiPlugin
diff --git a/de.prob.ui/plugin.xml b/de.prob.ui/plugin.xml
index 31a3a0a82deaec1c94bd4eea20d9cfd4df7530db..a8edde201a3de97737dd4a38086703bde5240114 100644
--- a/de.prob.ui/plugin.xml
+++ b/de.prob.ui/plugin.xml
@@ -727,7 +727,7 @@
       <handler
             commandId="de.prob.ui.newcore.export">
          <class
-               class="de.prob.ui.eventb.ExportNewCoreHandler">
+               class="de.prob.ui.eventb.ExportClassicHandler">
          </class>
          <enabledWhen>
             <with
diff --git a/de.prob.ui/src/de/prob/ui/eventb/ExportNewCoreHandler.java b/de.prob.ui/src/de/prob/ui/eventb/ExportNewCoreHandler.java
index cbb940a1eae628b8e71031a4aee296f03610be73..2b2f7f8492fa31ad6c2bc83f345f2bcfbc7767b7 100644
--- a/de.prob.ui/src/de/prob/ui/eventb/ExportNewCoreHandler.java
+++ b/de.prob.ui/src/de/prob/ui/eventb/ExportNewCoreHandler.java
@@ -1,14 +1,11 @@
 package de.prob.ui.eventb;
 
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Writer;
-import java.util.zip.GZIPOutputStream;
 
-import org.apache.commons.codec.binary.Base64;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
@@ -24,18 +21,12 @@ import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.eventb.core.IEventBRoot;
 import org.eventb.core.IMachineRoot;
-import org.eventb.emf.core.Project;
-import org.eventb.emf.persistence.ProjectResource;
 import org.osgi.service.prefs.BackingStoreException;
 import org.osgi.service.prefs.Preferences;
-import org.rodinp.core.IRodinProject;
-
-import com.thoughtworks.xstream.XStream;
 
 import de.prob.core.translator.TranslationFailedException;
 import de.prob.eventb.translator.TranslatorFactory;
 import de.prob.logging.Logger;
-import de.prob.model.eventb.Model;
 
 public class ExportNewCoreHandler extends AbstractHandler implements IHandler {
 
@@ -100,15 +91,6 @@ public class ExportNewCoreHandler extends AbstractHandler implements IHandler {
 			final IEventBRoot root) {
 		final boolean isSafeToWrite = isSafeToWrite(filename);
 
-		IRodinProject rodinProject = root.getRodinProject();
-		ProjectResource resource = new ProjectResource(rodinProject);
-		try {
-			resource.load(null);
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		Project project = (Project) resource.getContents().get(0);
-
 		if (isSafeToWrite) {
 			Writer fw = null;
 			try {
@@ -116,9 +98,6 @@ public class ExportNewCoreHandler extends AbstractHandler implements IHandler {
 				TranslatorFactory.translate(root, new PrintWriter(fw));
 				fw.append('\n');
 
-				fw.append("eclipse_model('" + root.getComponentName() + "',\""
-						+ serialize(project, root.getComponentName()) + "\").");
-
 			} catch (TranslationFailedException e) {
 				e.notifyUserOnce();
 			} catch (IOException e) {
@@ -134,25 +113,25 @@ public class ExportNewCoreHandler extends AbstractHandler implements IHandler {
 		}
 	}
 
-	private static String serialize(Project project, String maincomponent) {
-		NewCoreModelTranslation translation = new NewCoreModelTranslation();
-		Model model = translation.translate(project, maincomponent);
-		// XStream xstream = new XStream(new JettisonMappedXmlDriver());
-		XStream xstream = new XStream();
-		String xml = xstream.toXML(model);
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-	    GZIPOutputStream gzip;
-	    byte[] bytes;
-		try {
-			gzip = new GZIPOutputStream(out);
-			gzip.write(xml.getBytes());
-			gzip.close();
-			bytes = out.toByteArray();
-		} catch (IOException e) {
-			bytes = xml.getBytes();
-		}
-		return Base64.encodeBase64String(bytes);
-	}
+	// private static String serialize(Project project, String maincomponent) {
+	// NewCoreModelTranslation translation = new NewCoreModelTranslation();
+	// Model model = translation.translate(project, maincomponent);
+	// // XStream xstream = new XStream(new JettisonMappedXmlDriver());
+	// XStream xstream = new XStream();
+	// String xml = xstream.toXML(model);
+	// ByteArrayOutputStream out = new ByteArrayOutputStream();
+	// GZIPOutputStream gzip;
+	// byte[] bytes;
+	// try {
+	// gzip = new GZIPOutputStream(out);
+	// gzip.write(xml.getBytes());
+	// gzip.close();
+	// bytes = out.toByteArray();
+	// } catch (IOException e) {
+	// bytes = xml.getBytes();
+	// }
+	// return Base64.encodeBase64String(bytes);
+	// }
 
 	private static boolean isSafeToWrite(final String filename) {
 		if (new File(filename).exists()) {
diff --git a/de.prob.ui/src/de/prob/ui/eventb/NewCoreModelTranslation.java b/de.prob.ui/src/de/prob/ui/eventb/NewCoreModelTranslation.java
deleted file mode 100644
index a95105e2548f3bbf6a54001a7a4bc17eb6768939..0000000000000000000000000000000000000000
--- a/de.prob.ui/src/de/prob/ui/eventb/NewCoreModelTranslation.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package de.prob.ui.eventb;
-
-import static de.prob.model.representation.RefType.ERefType.*;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.eclipse.emf.common.util.EList;
-import org.eventb.emf.core.EventBNamedCommentedComponentElement;
-import org.eventb.emf.core.Project;
-import org.eventb.emf.core.context.Axiom;
-import org.eventb.emf.core.context.CarrierSet;
-import org.eventb.emf.core.context.Constant;
-import org.eventb.emf.core.context.Context;
-import org.eventb.emf.core.machine.Action;
-import org.eventb.emf.core.machine.Event;
-import org.eventb.emf.core.machine.Guard;
-import org.eventb.emf.core.machine.Invariant;
-import org.eventb.emf.core.machine.Machine;
-import org.eventb.emf.core.machine.Parameter;
-import org.eventb.emf.core.machine.Variable;
-import org.eventb.emf.core.machine.Variant;
-import org.eventb.emf.core.machine.Witness;
-
-import de.prob.model.eventb.EBContext;
-import de.prob.model.eventb.EBEvent;
-import de.prob.model.eventb.EBMachine;
-import de.prob.model.eventb.Model;
-import de.prob.model.representation.Label;
-
-public class NewCoreModelTranslation {
-
-	private HashMap<String, Label> components;
-
-	public Model translate(final Project p, final String mainComponent) {
-		this.components = new HashMap<String, Label>();
-
-		Model model = new Model(mainComponent);
-
-		final Map<String, EventBNamedCommentedComponentElement> allComponents = new HashMap<String, EventBNamedCommentedComponentElement>();
-
-		for (final EventBNamedCommentedComponentElement cmpt : p
-				.getComponents()) {
-			final String name = cmpt.doGetName();
-			allComponents.put(name, cmpt);
-			if (cmpt instanceof Context) {
-				components.put(name, createContext((Context) cmpt));
-
-			} else if (cmpt instanceof Machine) {
-				components.put(name, createMachine((Machine) cmpt));
-			}
-		}
-
-		for (Entry<String, EventBNamedCommentedComponentElement> entry : allComponents
-				.entrySet()) {
-
-			EventBNamedCommentedComponentElement element = entry.getValue();
-
-			final String name = element.doGetName();
-			final Label from = components.get(name);
-			Label to = null;
-
-			if (element instanceof Context) {
-				for (final Context context : ((Context) element).getExtends()) {
-					final String ctxName = context.doGetName();
-					to = components.get(ctxName);
-					model.addRelationship(from, to, EXTENDS);
-				}
-			}
-
-			if (element instanceof Machine) {
-				for (final Context context : ((Machine) element).getSees()) {
-					final String ctxName = context.doGetName();
-					to = components.get(ctxName);
-					model.addRelationship(from, to, SEES);
-				}
-				for (final Machine machine : ((Machine) element).getRefines()) {
-					final String mName = machine.doGetName();
-					to = components.get(mName);
-					model.addRelationship(from, to, REFINES);
-				}
-			}
-		}
-		return model;
-	}
-
-	private Label createMachine(Machine machine) {
-		EBMachine m = new EBMachine(machine.getName());
-		for (Event event : machine.getEvents()) {
-			m.addEvent(createEvent(event));
-		}
-
-		for (Variable variable : machine.getVariables()) {
-			m.addVariable(variable.getName());
-		}
-
-		Variant variant = machine.getVariant();
-		if (variant != null)
-			m.addVariant(variant.getExpression());
-
-		for (Invariant invariant : machine.getInvariants()) {
-			m.addInvariant(invariant.getPredicate(), invariant.getName());
-		}
-
-		return m;
-	}
-
-	private EBEvent createEvent(Event event) {
-
-		EBEvent e = new EBEvent(event.getName());
-
-		for (Witness witness : event.getWitnesses()) {
-			e.addWitness(witness.getPredicate(), witness.getName());
-		}
-
-		for (Guard guard : event.getGuards()) {
-			e.addGuard(guard.getPredicate(), guard.getName());
-		}
-		for (Parameter parameter : event.getParameters()) {
-			e.addParameter(parameter.getName());
-		}
-
-		for (String string : event.getRefinesNames()) {
-			e.addParameter(string);
-		}
-		EList<Action> actions = event.getActions();
-		for (Action action : actions) {
-			e.addAction(action.getAction(), action.getName());
-		}
-
-		return e;
-	}
-
-	private Label createContext(Context c) {
-		String name = c.getName();
-		EBContext context = new EBContext(name);
-		EList<Axiom> axioms = c.getAxioms();
-		for (Axiom axiom : axioms) {
-			context.addAxiom(axiom.getPredicate(), axiom.doGetName());
-		}
-
-		for (Constant constant : c.getConstants()) {
-			context.addConstant(constant.doGetName());
-		}
-
-		for (CarrierSet carrierSet : c.getSets()) {
-			context.addSet(carrierSet.doGetName());
-		}
-
-		return context;
-	}
-
-}
diff --git a/de.prob.ui/src/de/prob/ui/ltl/CounterExampleTab.java b/de.prob.ui/src/de/prob/ui/ltl/CounterExampleTab.java
index f3170291f8de5203287d1e9fc52cafee06d9bd99..038ed22b66e301b266b548f92473c374914099e8 100644
--- a/de.prob.ui/src/de/prob/ui/ltl/CounterExampleTab.java
+++ b/de.prob.ui/src/de/prob/ui/ltl/CounterExampleTab.java
@@ -275,19 +275,15 @@ public class CounterExampleTab {
 
 	public void zoomIn() {
 		final ZoomManager zoomManager = rootEditPart.getZoomManager();
-		if (zoomManager != null) {
-			if (zoomManager != null && zoomManager.canZoomIn()) {
-				zoomManager.setZoom(zoomManager.getNextZoomLevel());
-			}
+		if (zoomManager != null && zoomManager.canZoomIn()) {
+			zoomManager.setZoom(zoomManager.getNextZoomLevel());
 		}
 	}
 
 	public void zoomOut() {
 		final ZoomManager zoomManager = rootEditPart.getZoomManager();
-		if (zoomManager != null) {
-			if (zoomManager != null && zoomManager.canZoomOut()) {
-				zoomManager.setZoom(zoomManager.getPreviousZoomLevel());
-			}
+		if (zoomManager != null && zoomManager.canZoomOut()) {
+			zoomManager.setZoom(zoomManager.getPreviousZoomLevel());
 		}
 	}
 
diff --git a/de.prob.ui/src/de/prob/ui/ltl/LtlCheckingDialog.java b/de.prob.ui/src/de/prob/ui/ltl/LtlCheckingDialog.java
index d8abf60cbb848ab0759118ed6a1639b476b2675e..0860779f1f4078267f51ca61d5bd48cf6cd19233 100644
--- a/de.prob.ui/src/de/prob/ui/ltl/LtlCheckingDialog.java
+++ b/de.prob.ui/src/de/prob/ui/ltl/LtlCheckingDialog.java
@@ -413,7 +413,7 @@ public final class LtlCheckingDialog extends TrayDialog {
 					Logger.notifyUser("Command exception", e);
 				} finally {
 					try {
-						reader.close();
+						if (reader != null) reader.close();
 					} catch (IOException e) {
 						Logger.notifyUser("Unexpected IO exception", e);
 					}
diff --git a/de.prob2.feature/feature.xml b/de.prob2.feature/feature.xml
index d316717eac4e0ba62c0180d4b1f92ec26b6d53ba..b2dc420bf9559760fa14aef52939e9f5a917989a 100644
--- a/de.prob2.feature/feature.xml
+++ b/de.prob2.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="de.prob2.feature"
       label="ProB for Rodin2"
-      version="2.3.2.qualifier"
+      version="2.3.3.qualifier"
       provider-name="HHU Düsseldorf STUPS Group">
 
    <description url="http://www.stups.uni-duesseldorf.de/ProB">
@@ -228,20 +228,19 @@ litigation.
       <import plugin="org.eclipse.ui.ide" version="3.5.0" match="compatible"/>
       <import plugin="org.eclipse.ui.views" version="3.5.0" match="compatible"/>
       <import plugin="org.eclipse.core.runtime" version="3.5.0" match="compatible"/>
-      <import plugin="org.eclipse.jface" version="3.5.0" match="compatible"/>
       <import plugin="org.eclipse.core.databinding" version="1.2.0" match="compatible"/>
       <import plugin="org.eclipse.jface.databinding" version="1.2.1" match="compatible"/>
       <import plugin="org.eclipse.core.databinding.beans" version="1.1.1" match="compatible"/>
       <import plugin="org.eclipse.gef" version="3.7.0" match="compatible"/>
-      <import plugin="de.prob.core" version="9.2.0" match="equivalent"/>
+      <import plugin="de.prob.core" version="9.3.0" match="equivalent"/>
       <import plugin="org.eventb.core" version="2.1.0"/>
       <import plugin="org.rodinp.core" version="1.3.1"/>
-      <import plugin="de.prob.ui" version="7.2.0" match="equivalent"/>
+      <import plugin="de.prob.ui" version="7.3.0" match="equivalent"/>
       <import plugin="org.eclipse.core.resources" version="3.5.0" match="compatible"/>
       <import plugin="org.eclipse.core.expressions" version="3.4.101" match="compatible"/>
       <import plugin="org.eclipse.gef" version="3.5.0" match="compatible"/>
       <import plugin="org.eclipse.ui.navigator" version="3.5.0" match="greaterOrEqual"/>
-      <import plugin="de.bmotionstudio.gef.editor" version="5.2.1" match="greaterOrEqual"/>
+      <import plugin="de.bmotionstudio.gef.editor" version="5.4.0" match="equivalent"/>
    </requires>
 
    <plugin