diff --git a/build.gradle b/build.gradle
index f18a8db85b7f7441e9cdcf1e06c6746a8eaf86a0..2b8fbd8a64a364922cd43b8eb13fa7755ec14d2e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,7 +2,7 @@
 import org.apache.tools.ant.taskdefs.condition.Os
 
 project.ext{
-	
+
 	targetRepositories = ["http://download.eclipse.org/releases/indigo/",
                           "http://rodin-b-sharp.sourceforge.net/updates",
                           "http://rodin-b-sharp.sourceforge.net/core-updates"
@@ -18,7 +18,7 @@ apply from: 'tycho_build.gradle'
 
 
 task bMotionStudioHelpCustumBuild(type: Exec){
-	
+
 	commandLine 'ant', '-f','de.bmotionstudio.help/customBuild.xml'
 }
 
@@ -36,7 +36,7 @@ project(':de.prob.core') {
 	}
 
 
-        def parser_version = '2.4.28-SNAPSHOT'
+        def parser_version = '2.4.33-SNAPSHOT'
 
 	dependencies {
 	 compile group: "de.prob", name: "answerparser", version: parser_version , changing: true
@@ -49,7 +49,7 @@ project(':de.prob.core') {
 	 compile group: "de.prob", name: "theorymapping", version: parser_version , changing: true
 	 compile 'commons-lang:commons-lang:2.6'
 	}
-	
+
 }
 
 project(':de.prob.ui') {
@@ -75,11 +75,11 @@ def download(address,target) {
 task downloadCli << {
 		def dir = workspacePath+'de.prob.core/prob/'
 		delete file(dir)
-	    new File(dir).mkdirs() 
-	
+	    new File(dir).mkdirs()
+
 		['leopard64':'macos','linux32':'linux','linux64':'linux64','win32':'windows'].each {
 		def n = it.getKey()
-	
+
 		def targetdir = dir+it.getValue()
 		def targetzip = dir+"probcli_${n}.zip"
 		def url = "http://nightly.cobra.cs.uni-duesseldorf.de/cli/probcli_${n}.zip"
@@ -101,20 +101,20 @@ task downloadCli << {
 		   into targetdir
 	    }
 	delete file(targetzip)
-	
+
 }
 
 
 
 task downloadCli2 ( type: Exec ) {
-	
+
 		def dir = workspacePath+'de.prob.core/prob/'
 		delete file(dir)
-	    new File(dir).mkdirs() 
-	
+	    new File(dir).mkdirs()
+
 		['leopard64':'macos','linux32':'linux','linux64':'linux64','win32':'windows'].each {
 		def n = it.getKey()
-	
+
 		def targetdir = dir+it.getValue()
 		def targetzip = dir+"probcli_${n}.zip"
 		def url = "http://nightly.cobra.cs.uni-duesseldorf.de/cli/probcli_${n}.zip"
@@ -136,17 +136,17 @@ task downloadCli2 ( type: Exec ) {
 		   into targetdir
 	    }
 	delete file(targetzip)
-			
+
 	['leopard64':'macos','linux32':'linux','linux64':'linux64'].each {
-	
+
 		def n = it.getKey()
 		targetdir = dir+it.getValue()
 
 		download( "http://nightly.cobra.cs.uni-duesseldorf.de/cspm/cspm-"+n, targetdir+"/cspm" )
 	}
-	commandLine 'chmod', 'a+x', dir+'linux'+'/cspm', dir+'linux64'+'/cspm', dir+'macos'+'/cspm' 
-	//commandLine 'chmod', 'a+x', dir+'*'+'/cspm' 
-	
+	commandLine 'chmod', 'a+x', dir+'linux'+'/cspm', dir+'linux64'+'/cspm', dir+'macos'+'/cspm'
+	//commandLine 'chmod', 'a+x', dir+'*'+'/cspm'
+
 	download( "http://nightly.cobra.cs.uni-duesseldorf.de/cspm/cspm-windows", dir+"windows"+"/cspm.exe" )
 }
 
@@ -166,4 +166,3 @@ task collectArtifacts(type:Copy) {
 	    from workspacePath + "index.html"
 	    into workspacePath + 'updatesite'
 }
-
diff --git a/de.bmotionstudio.rodin/src/de/bmotionstudio/rodin/StartEventBVisualizationHandler.java b/de.bmotionstudio.rodin/src/de/bmotionstudio/rodin/StartEventBVisualizationHandler.java
index 7d0799c38ad624891800d6b6cf41c0e6b64877d7..73fdccadfa2dac75a95554de9becd38b45f02744 100644
--- a/de.bmotionstudio.rodin/src/de/bmotionstudio/rodin/StartEventBVisualizationHandler.java
+++ b/de.bmotionstudio.rodin/src/de/bmotionstudio/rodin/StartEventBVisualizationHandler.java
@@ -1,40 +1,40 @@
-/** 
- * (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, 
- * Heinrich Heine Universitaet Duesseldorf
- * This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) 
- * */
-
-package de.bmotionstudio.rodin;
-
-import org.eclipse.core.commands.IHandler;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.viewers.IStructuredSelection;
-
-import de.bmotionstudio.gef.editor.handler.StartVisualizationFileHandler;
-
-/**
- * @author Lukas Ladenberger
- * 
- */
-public class StartEventBVisualizationHandler extends
-		StartVisualizationFileHandler implements IHandler {
-
-	@Override
-	protected IFile getBmsFileFromSelection(IStructuredSelection ssel) {
-		if (ssel.getFirstElement() instanceof BMotionStudioRodinFile) {
-			IResource resource = ((BMotionStudioRodinFile) ssel
-					.getFirstElement()).getResource();
-			IWorkspace workspace = ResourcesPlugin.getWorkspace();
-			IPath location = Path.fromOSString(resource.getFullPath()
-					.toOSString());
-			return workspace.getRoot().getFileForLocation(location);
-		}
-		return null;
-	}
-
-}
+/** 
+ * (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, 
+ * Heinrich Heine Universitaet Duesseldorf
+ * This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) 
+ * */
+
+package de.bmotionstudio.rodin;
+
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import de.bmotionstudio.gef.editor.handler.StartVisualizationFileHandler;
+
+/**
+ * @author Lukas Ladenberger
+ * 
+ */
+public class StartEventBVisualizationHandler extends
+		StartVisualizationFileHandler implements IHandler {
+
+	@Override
+	protected IFile getBmsFileFromSelection(IStructuredSelection ssel) {
+		if (ssel.getFirstElement() instanceof BMotionStudioRodinFile) {
+			IResource resource = ((BMotionStudioRodinFile) ssel
+					.getFirstElement()).getResource();
+			IWorkspace workspace = ResourcesPlugin.getWorkspace();
+			IPath location = Path.fromOSString(resource.getFullPath()
+					.toOSString());
+			return workspace.getRoot().getFile(location);
+		}
+		return null;
+	}
+
+}
diff --git a/de.prob.core/.classpath b/de.prob.core/.classpath
index 6037143e852ed9a2db70bc105172263b8d4bde55..2d8492b577e13616723ba613cfad88688ed06063 100644
--- a/de.prob.core/.classpath
+++ b/de.prob.core/.classpath
@@ -4,20 +4,20 @@
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
-	<classpathentry exported="true" kind="lib" path="lib/dependencies/answerparser-2.4.26-SNAPSHOT.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/dependencies/bparser-2.4.26-SNAPSHOT.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/dependencies/cliparser-2.4.26-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/dependencies/answerparser-2.4.35-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/dependencies/bparser-2.4.35-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/dependencies/cliparser-2.4.35-SNAPSHOT.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/dependencies/commons-codec-1.6.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/dependencies/commons-lang-2.6.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/dependencies/jfmi-1.0.2-SNAPSHOT.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/dependencies/jna-3.4.0.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/dependencies/jsr305-1.3.9.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/dependencies/ltlparser-2.4.26-SNAPSHOT.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/dependencies/parserbase-2.4.26-SNAPSHOT.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/dependencies/prologlib-2.4.26-SNAPSHOT.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/dependencies/theorymapping-2.4.26-SNAPSHOT.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/dependencies/unicode-2.4.26-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/dependencies/ltlparser-2.4.35-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/dependencies/parserbase-2.4.35-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/dependencies/prologlib-2.4.35-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/dependencies/theorymapping-2.4.35-SNAPSHOT.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/dependencies/unicode-2.4.35-SNAPSHOT.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/dependencies/xmlpull-1.1.3.1.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/dependencies/xpp3_min-1.1.4c.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/dependencies/xstream-1.4.3.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/dependencies/xstream-1.4.7.jar"/>
 </classpath>
diff --git a/de.prob.core/META-INF/MANIFEST.MF b/de.prob.core/META-INF/MANIFEST.MF
index 448ac968741ca08c110cd38087eb0df2906061d5..aaeb82bff53ac70e5c9bffdc9983531454dc95b1 100644
--- a/de.prob.core/META-INF/MANIFEST.MF
+++ b/de.prob.core/META-INF/MANIFEST.MF
@@ -2,10 +2,10 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: ProB Animator Core
 Bundle-SymbolicName: de.prob.core;singleton:=true
-Bundle-Version: 9.4.1.qualifier
+Bundle-Version: 9.4.3.qualifier
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.rodinp.core;bundle-version="[1.7.0,1.8.0)",
- org.eventb.theory.core;bundle-version="[2.0.0,3.0.0)";resolution:=optional,
+ org.eventb.theory.core;bundle-version="[3.0.0,3.1.0)";resolution:=optional,
  org.eventb.core.ast;bundle-version="[3.0.0,3.2.0)",
  org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)",
  org.eventb.core.seqprover;bundle-version="[3.0.0,3.2.0)",
@@ -122,28 +122,19 @@ Bundle-Activator: de.prob.core.internal.Activator
 Eclipse-BuddyPolicy: registered
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ClassPath: .,
- lib/dependencies/unicode-2.4.26-SNAPSHOT.jar,
- lib/dependencies/theorymapping-2.4.26-SNAPSHOT.jar,
- lib/dependencies/prologlib-2.4.26-SNAPSHOT.jar,
- lib/dependencies/parserbase-2.4.26-SNAPSHOT.jar,
- lib/dependencies/ltlparser-2.4.26-SNAPSHOT.jar,
- lib/dependencies/cliparser-2.4.26-SNAPSHOT.jar,
- lib/dependencies/bparser-2.4.26-SNAPSHOT.jar,
- lib/dependencies/answerparser-2.4.26-SNAPSHOT.jar,
- lib/dependencies/unicode-2.4.22-SNAPSHOT.jar,
- lib/dependencies/theorymapping-2.4.22-SNAPSHOT.jar,
- lib/dependencies/prologlib-2.4.22-SNAPSHOT.jar,
- lib/dependencies/parserbase-2.4.22-SNAPSHOT.jar,
- lib/dependencies/ltlparser-2.4.22-SNAPSHOT.jar,
- lib/dependencies/cliparser-2.4.22-SNAPSHOT.jar,
- lib/dependencies/bparser-2.4.22-SNAPSHOT.jar,
- lib/dependencies/answerparser-2.4.22-SNAPSHOT.jar,
- lib/dependencies/jgrapht-0.8.3.jar,
+ lib/dependencies/unicode-2.4.35-SNAPSHOT.jar,
+ lib/dependencies/theorymapping-2.4.35-SNAPSHOT.jar,
+ lib/dependencies/prologlib-2.4.35-SNAPSHOT.jar,
+ lib/dependencies/parserbase-2.4.35-SNAPSHOT.jar,
+ lib/dependencies/ltlparser-2.4.35-SNAPSHOT.jar,
+ lib/dependencies/cliparser-2.4.35-SNAPSHOT.jar,
+ lib/dependencies/bparser-2.4.35-SNAPSHOT.jar,
+ lib/dependencies/answerparser-2.4.35-SNAPSHOT.jar,
+ lib/dependencies/xstream-1.4.7.jar,
  lib/dependencies/commons-codec-1.6.jar,
  lib/dependencies/commons-lang-2.6.jar,
  lib/dependencies/jsr305-1.3.9.jar,
  lib/dependencies/xmlpull-1.1.3.1.jar,
  lib/dependencies/xpp3_min-1.1.4c.jar,
- lib/dependencies/xstream-1.4.3.jar,
  lib/dependencies/jfmi-1.0.2-SNAPSHOT.jar,
  lib/dependencies/jna-3.4.0.jar
diff --git a/de.prob.core/build.gradle b/de.prob.core/build.gradle
index 60dd16f13dc3acdbf16941f1423292a2600a4663..364ac58838c3736c60c6224ea0722075d9d82f0a 100644
--- a/de.prob.core/build.gradle
+++ b/de.prob.core/build.gradle
@@ -1,6 +1,6 @@
 apply plugin: 'java'
 
-def parser_version = '2.4.18-SNAPSHOT'
+def parser_version = '2.4.35-SNAPSHOT'
 
 dependencies {
  compile group: "de.prob", name: "answerparser", version: parser_version , changing: true
@@ -13,7 +13,7 @@ dependencies {
  compile group: "de.prob", name: "theorymapping", version: parser_version , changing: true
  compile 'commons-lang:commons-lang:2.6'
  compile 'commons-codec:commons-codec:1.6'
- compile 'com.thoughtworks.xstream:xstream:1.4.3'
+ compile 'com.thoughtworks.xstream:xstream:1.4.7'
  compile group: 'net.java.dev.jna', name: 'jna', version: '3.4.0'
  compile group: 'edu.berkeley.eecs.ptolemy', name: 'jfmi', version: '1.0.2-SNAPSHOT'
-}
\ No newline at end of file
+}
diff --git a/de.prob.core/build.properties b/de.prob.core/build.properties
index 99230d528427c77989fe9534724cf6533e521d2e..04b12c31027b62018da3c6e00c1c118328e8de94 100644
--- a/de.prob.core/build.properties
+++ b/de.prob.core/build.properties
@@ -8,7 +8,6 @@ bin.includes = META-INF/,\
                lib/dependencies/commons-codec-1.6.jar,\
                lib/dependencies/xmlpull-1.1.3.1.jar,\
                lib/dependencies/xpp3_min-1.1.4c.jar,\
-               lib/dependencies/xstream-1.4.3.jar,\
                lib/dependencies/jfmi-1.0.2-SNAPSHOT.jar,\
                lib/dependencies/jna-3.4.0.jar
              
diff --git a/de.prob.core/prob_target.target b/de.prob.core/prob_target.target
index 1d4ccde825dd2d9e8fc8956b8f5dc20e67ff458a..9b6eee4fa416c5d277c5cfb08020b490a9e6e069 100644
--- a/de.prob.core/prob_target.target
+++ b/de.prob.core/prob_target.target
@@ -1,21 +1,22 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="prob_target" sequenceNumber="32">
+<?pde version="3.8"?><target name="prob_target" sequenceNumber="39">
 <locations>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.gef" version="0.0.0"/>
-<repository location="http://download.eclipse.org/tools/gef/updates/releases"/>
+<unit id="org.eventb.ide.feature.group" version="3.1.0.201412171041-e1a03f3"/>
+<unit id="fr.systerel.editor.feature.group" version="0.8.0.201412171041-e1a03f3"/>
+<unit id="org.rodinp.feature.group" version="1.7.0.201412171041-e1a03f3"/>
+<unit id="org.rodinp.platform.feature.group" version="3.1.0.201412171041-e1a03f3"/>
+<unit id="org.rodinp.platform.sources.feature.group" version="3.1.0.201412171041-e1a03f3"/>
+<unit id="org.rodinp.platform.tests.feature.group" version="3.1.0.201412171041-e1a03f3"/>
+<repository location="http://www.stups.uni-duesseldorf.de/ProB/buildlibs/rodin/"/>
 </location>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eventb.theory.feature.feature.group" version="3.0.0"/>
 <repository location="http://rodin-b-sharp.sourceforge.net/updates/"/>
 </location>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eventb.ide.feature.group" version="3.0.1.201406111447-5326174"/>
-<unit id="fr.systerel.editor.feature.group" version="0.7.0.201406111447-5326174"/>
-<unit id="org.rodinp.feature.group" version="1.7.0.201406111447-5326174"/>
-<unit id="org.rodinp.platform.feature.group" version="3.0.0.201406111447-5326174"/>
-<unit id="org.rodinp.platform.tests.feature.group" version="3.0.0.201406111447-5326174"/>
-<unit id="org.rodinp.platform.sources.feature.group" version="3.0.0.201406111447-5326174"/>
-<repository location="http://www.stups.uni-duesseldorf.de/ProB/buildlibs/rodin/"/>
+<unit id="org.eclipse.gef.sdk.feature.group" version="3.9.101.201408150207"/>
+<repository location="http://download.eclipse.org/releases/luna"/>
 </location>
 </locations>
 </target>
diff --git a/de.prob.core/src/de/prob/core/Animator.java b/de.prob.core/src/de/prob/core/Animator.java
index e78a5611b36a4821ca7e01fd01fdc0075bfba21c..b147a8df738c304b71ccb83b5ed0a944bffa8a74 100644
--- a/de.prob.core/src/de/prob/core/Animator.java
+++ b/de.prob.core/src/de/prob/core/Animator.java
@@ -39,6 +39,7 @@ import de.prob.exceptions.ProBException;
 public final class Animator {
 
 	private static Animator animator = new Animator();
+	private static Animator auxanimator = null;
 
 	/**
 	 * 
@@ -66,6 +67,14 @@ public final class Animator {
 		return animator;
 	}
 
+	public final static Animator getAuxAnimator() {
+		if (auxanimator == null) {
+			auxanimator = new Animator();
+		}
+		return auxanimator;
+	}
+
+
 	/**
 	 * Terminates the current animation (forcefully!) and restarts the ProB
 	 * core. After calling this method, all information from the current
diff --git a/de.prob.core/src/de/prob/core/command/ConstructTraceCommand.java b/de.prob.core/src/de/prob/core/command/ConstructTraceCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..a12b0d913e8e0e1a8c92c6bddd407527defa97e5
--- /dev/null
+++ b/de.prob.core/src/de/prob/core/command/ConstructTraceCommand.java
@@ -0,0 +1,196 @@
+/**
+ * (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, Heinrich
+ * Heine Universitaet Duesseldorf This software is licenced under EPL 1.0
+ * (http://www.eclipse.org/org/documents/epl-v10.html)
+ * */
+
+package de.prob.core.command;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import de.be4.classicalb.core.parser.analysis.prolog.ASTProlog;
+import de.be4.classicalb.core.parser.exceptions.BException;
+import de.prob.core.Animator;
+import de.prob.core.domainobjects.Operation;
+import de.prob.core.domainobjects.State;
+import de.prob.core.domainobjects.StateError;
+import de.prob.core.domainobjects.Variable;
+import de.prob.core.domainobjects.eval.PredicateEvalElement;
+import de.prob.core.internal.Activator;
+import de.prob.exceptions.ProBException;
+import de.prob.parser.ISimplifiedROMap;
+import de.prob.prolog.output.IPrologTermOutput;
+import de.prob.prolog.term.CompoundPrologTerm;
+import de.prob.prolog.term.ListPrologTerm;
+import de.prob.prolog.term.PrologTerm;
+
+/**
+ * Command to execute an event that has not been enumerated by ProB.
+ * 
+ * @author Jens Bendisposto
+ * 
+ */
+public final class ConstructTraceCommand implements IComposableCommand {
+
+	private static final String RESULT_VARIABLE_STATES = "States";
+	private static final String RESULT_VARIABLE_OPS = "Ops";
+	private static final String RESULT_VARIABLE_ERRORS = "Errors";
+
+	private final List<PredicateEvalElement> evalElement;
+	private final List<String> name;
+	private final List<String> errors = new ArrayList<String>();
+	private List<Integer> executionNumber = new ArrayList<Integer>();
+
+	public ConstructTraceCommand(final List<String> name,
+			final List<String> predicates, Integer executionNumber) {
+		this.name = name;
+		this.evalElement = new ArrayList<PredicateEvalElement>();
+		for (String string : predicates) {
+			try {
+				evalElement.add(PredicateEvalElement.create(string));
+			} catch (BException e) {
+				throw new IllegalArgumentException(
+						"Formula must be a predicate: " + string);
+			}
+		}
+		if (name.size() != evalElement.size()) {
+			throw new IllegalArgumentException(
+					"Must provide the same number of names and predicates.");
+		}
+		int size = this.name.size();
+		for (int i = 0; i < size; ++i) {
+			this.executionNumber.add(executionNumber);
+		}
+	}
+
+	public ConstructTraceCommand(final List<String> name,
+			final List<String> predicate) {
+		this(name, predicate, 1);
+	}
+
+	public ConstructTraceCommand(final List<String> name,
+			final List<String> predicate, final List<Integer> executionNumber) {
+		this(name, predicate);
+		this.executionNumber = executionNumber;
+		if (name.size() != executionNumber.size()) {
+			throw new IllegalArgumentException(
+					"Must provide the same number of names and execution numbers.");
+		}
+	}
+
+	/**
+	 * This method is called when the command is prepared for sending. The
+	 * method is called by the Animator class, most likely it is not interesting
+	 * for other classes.
+	 * 
+	 * @throws ProBException
+	 * 
+	 * @see de.prob.animator.command.AbstractCommand#writeCommand(de.prob.prolog.output.IPrologTermOutput)
+	 */
+	@Override
+	public void writeCommand(final IPrologTermOutput pto) {
+		pto.openTerm("prob_construct_trace");
+		pto.openList();
+		for (String n : name) {
+			pto.printAtom(n);
+		}
+		pto.closeList();
+		final ASTProlog prolog = new ASTProlog(pto, null);
+		pto.openList();
+		for (PredicateEvalElement cb : evalElement) {
+			cb.getPrologAst().apply(prolog);
+		}
+		pto.closeList();
+		pto.openList();
+		for (Integer n : executionNumber) {
+			pto.printNumber(n);
+		}
+		pto.closeList();
+		pto.printVariable(RESULT_VARIABLE_STATES);
+		pto.printVariable(RESULT_VARIABLE_OPS);
+		pto.printVariable(RESULT_VARIABLE_ERRORS);
+		pto.closeTerm();
+	}
+
+	public boolean hasErrors() {
+		return !errors.isEmpty();
+	}
+
+	public List<String> getErrors() {
+		return errors;
+	}
+
+	@Override
+	public void processResult(
+			final ISimplifiedROMap<String, PrologTerm> bindings)
+			throws CommandException {
+		// errors
+		ListPrologTerm list = (ListPrologTerm) bindings
+				.get(RESULT_VARIABLE_ERRORS);
+		for (PrologTerm prologTerm : list) {
+			errors.add(prologTerm.toString());
+		}
+
+		// Change history in Animator ...
+		// need to reconstruct operations and states
+		final Animator animator = Animator.getAnimator();
+
+		ListPrologTerm operations = (ListPrologTerm) bindings
+				.get(RESULT_VARIABLE_OPS);
+		ListPrologTerm states = (ListPrologTerm) bindings
+				.get(RESULT_VARIABLE_STATES);
+
+		for (int i = 0; i < operations.size(); i++) {
+			PrologTerm operationPrologTerm = operations.get(i);
+			Operation op = Operation.fromPrologTerm(operationPrologTerm);
+
+			// state(NewStateId,StateValues,Initialised,InvKO,MaxOpsReached,Timeout,OpTimeout,StateErrors,UnsatProps,OperationsForState)
+			CompoundPrologTerm statePrologTerm = (CompoundPrologTerm) states
+					.get(i);
+
+			ListPrologTerm stateValuesPrologTerm = (ListPrologTerm) statePrologTerm
+					.getArgument(2);
+			List<Variable> stateValues = new LinkedList<Variable>();
+			for (PrologTerm prologTerm : stateValuesPrologTerm) {
+				stateValues.add(new Variable((CompoundPrologTerm) prologTerm));
+			}
+
+			ListPrologTerm stateErrorsPrologTerm = (ListPrologTerm) statePrologTerm
+					.getArgument(8);
+			Collection<StateError> stateErrors = new LinkedList<StateError>();
+			for (PrologTerm prologTerm : stateErrorsPrologTerm) {
+				stateErrors
+						.add(new StateError((CompoundPrologTerm) prologTerm));
+			}
+
+			Set<String> opTimeouts = new HashSet<String>(
+					PrologTerm.atomicStrings((ListPrologTerm) statePrologTerm
+							.getArgument(7)));
+
+			ArrayList<Operation> enabledOperations = new ArrayList<Operation>();
+
+			for (PrologTerm enop : (ListPrologTerm) statePrologTerm
+					.getArgument(10)) {
+				final CompoundPrologTerm cpt = (CompoundPrologTerm) enop;
+				enabledOperations.add(Operation.fromPrologTerm(cpt));
+			}
+
+			State s = new State(statePrologTerm.getArgument(1).toString(),
+					statePrologTerm.getArgument(2).toString().equals("true"),
+					statePrologTerm.getArgument(3).toString().equals("true"),
+					statePrologTerm.getArgument(5).toString().equals("true"),
+					statePrologTerm.getArgument(4).toString().equals("true"),
+					stateValues, enabledOperations, stateErrors, opTimeouts);
+
+			Activator.computedState(s);
+			animator.getHistory().add(s, op);
+			animator.announceCurrentStateChanged(s, op);
+		}
+
+	}
+}
diff --git a/de.prob.core/src/de/prob/core/command/ExploreStateCommand.java b/de.prob.core/src/de/prob/core/command/ExploreStateCommand.java
index 30af5f46ecbb2d1e8f9edb2ba904a18f628d5d9a..98f0b1e5a27112cbd10cc5a02acf5c297e31823c 100644
--- a/de.prob.core/src/de/prob/core/command/ExploreStateCommand.java
+++ b/de.prob.core/src/de/prob/core/command/ExploreStateCommand.java
@@ -6,10 +6,16 @@
 
 package de.prob.core.command;
 
-import java.util.*;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 import de.prob.core.Animator;
-import de.prob.core.domainobjects.*;
+import de.prob.core.domainobjects.Operation;
+import de.prob.core.domainobjects.State;
+import de.prob.core.domainobjects.StateError;
+import de.prob.core.domainobjects.Variable;
 import de.prob.core.internal.Activator;
 import de.prob.exceptions.ProBException;
 import de.prob.logging.Logger;
@@ -80,10 +86,8 @@ public final class ExploreStateCommand implements IComposableCommand {
 
 		// only show error message on SETUP_CONSTANTS and
 		// PARTIALLY_SETUP_CONSTANTS
-		if (enabledOperations.size() == 1
-				&& enabledOperations.get(0).getName().toLowerCase()
-						.contains("constants") && unsatPropertiesExist) {
-			Logger.notifyUserWithoutBugreport("ProB could not find valid constants wich satisfy the properties:\n\n"
+		if (unsatPropertiesExist) {
+			Logger.notifyUserWithoutBugreport("ProB could not find valid constants wich satisfy the properties.\n"
 					+ unsatPropsCommand.getUnsatPropertiesDescription());
 
 		} else if (!initialised && enabledOperations.isEmpty()
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExample.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExample.java
index 4c6990ac9afe0e480e24aa903e20273b343107c3..4c45e0f2ae892af17a5740468fe492d9a6511de1 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExample.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExample.java
@@ -51,10 +51,11 @@ public class CounterExample {
 				.asList(modelCheckingResult.getInitPathOps()));
 		ceSize = modelCheckingResult.getCounterexample().size();
 
+		final String[] atomicFormulaNames = createAtomicNames(modelCheckingResult);
+
 		final List<ArrayList<Boolean>> predicateValues = createStates(modelCheckingResult
-				.getCounterexample());
+				.getCounterexample(), atomicFormulaNames);
 
-		final String[] atomicFormulaNames = createAtomicNames(modelCheckingResult);
 		propositionRoot = createExample(modelCheckingResult.getStructure(),
 				atomicFormulaNames, predicateValues);
 		propositionRoot.setVisible(true);
@@ -73,10 +74,17 @@ public class CounterExample {
 		return res;
 	}
 
-	private List<ArrayList<Boolean>> createStates(final ListPrologTerm example) {
+	private List<ArrayList<Boolean>> createStates(final ListPrologTerm example, String[] atomicFormulaNames) {
 		List<ArrayList<Boolean>> predicateValues = new ArrayList<ArrayList<Boolean>>();
 
-		for (int i = 0; i < example.size(); i++) {
+		// A bug fix from 31.10.2014: changed the termination condition from
+		// 'i < example.size()' to 'i < atomicFormulaNames.length'. The statement
+		// predicateValues.get(i).add(value == 0 ? false : true) in the inner for-loop (lines 98-105)
+		// crashed once the reported counter-example 'example' had less atoms as atomic propositions,
+		// e.g. for 'G ({x/=1} & {y<=10})' with 'example = [atom(0,[0,1],none)]' an IndexOutOfBounds-Exception
+		// had been thrown. Note that the bug-fix has been not thoroughly tested and there may be other issues
+		// that may occur.
+		for (int i = 0; i < atomicFormulaNames.length; i++) {
 			predicateValues.add(new ArrayList<Boolean>());
 		}
 
@@ -92,12 +100,15 @@ public class CounterExample {
 			for (int i = 0; i < values.size(); i++) {
 				int value = ((IntegerPrologTerm) values.get(i)).getValue()
 						.intValue();
-				predicateValues.get(i).add(value == 0 ? false : true);
+				// Doesn't have to be a 'predicateValues.get(index)' and not
+				// 'predicateValues.get(i)' (predicateValues is a list of boolean lists)
+				//predicateValues.get(index).add(value == 0 ? false : true);
+ 				predicateValues.get(i).add(value == 0 ? false : true);
 			}
 
 			final Operation operation = NONE.equals(operationTerm) ? null
 					: Operation.fromPrologTerm(operationTerm);
-			final CounterExampleState ceState = new CounterExampleState(index,
+ 			final CounterExampleState ceState = new CounterExampleState(index,
 					stateId, operation);
 			states.add(ceState);
 			index++;
diff --git a/de.prob.core/src/de/prob/eventb/translator/Theories.java b/de.prob.core/src/de/prob/eventb/translator/Theories.java
index cede1459aa58b4d634ddc9deec9f54ded5ac49cb..15d6ace44a758cc4e5b5867a332973747c4fb370 100644
--- a/de.prob.core/src/de/prob/eventb/translator/Theories.java
+++ b/de.prob.core/src/de/prob/eventb/translator/Theories.java
@@ -407,7 +407,7 @@ public class Theories {
 	private static void processDefinitions(FormulaFactory ff,
 			ITypeEnvironment te, IPrologTermOutput prologOutput,
 			ISCDirectOperatorDefinition[] directOperatorDefinitions)
-			throws RodinDBException {
+			throws CoreException {
 		for (ISCDirectOperatorDefinition def : directOperatorDefinitions) {
 			Formula<?> scFormula = def.getSCFormula(ff, te);
 
diff --git a/de.prob.eventb.disprover.core/META-INF/MANIFEST.MF b/de.prob.eventb.disprover.core/META-INF/MANIFEST.MF
index 55ff7ade5f04b2d9eef77e6f8556b4c32bf394a6..8e09a35b7045ed04604c7a0de391377fcae6714f 100644
--- a/de.prob.eventb.disprover.core/META-INF/MANIFEST.MF
+++ b/de.prob.eventb.disprover.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: ProB Disprover Core for EventB
 Bundle-SymbolicName: de.prob.eventb.disprover.core;singleton:=true
-Bundle-Version: 1.3.2.qualifier
+Bundle-Version: 2.0.5.qualifier
 Bundle-Vendor: Heinrich-Heine University Dusseldorf
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  de.prob.core;bundle-version="[9.4.0,9.5.0)",
diff --git a/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/DisproverReasoner.java b/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/DisproverReasoner.java
index 1c7f3f8c8ecf5220c35770faf0e2d09d5a775647..6eaa13155176cc519eb31b21f24953b437741af0 100644
--- a/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/DisproverReasoner.java
+++ b/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/DisproverReasoner.java
@@ -1,17 +1,31 @@
 package de.prob.eventb.disprover.core;
 
-import java.util.*;
+import java.util.HashSet;
+import java.util.Set;
 
 import org.eclipse.core.runtime.Status;
-import org.eventb.core.*;
+import org.eventb.core.IEventBProject;
+import org.eventb.core.IPOSequent;
 import org.eventb.core.ast.Predicate;
-import org.eventb.core.seqprover.*;
+import org.eventb.core.seqprover.IConfidence;
+import org.eventb.core.seqprover.IProofMonitor;
+import org.eventb.core.seqprover.IProofRule;
 import org.eventb.core.seqprover.IProofRule.IAntecedent;
-import org.rodinp.core.*;
+import org.eventb.core.seqprover.IProverSequent;
+import org.eventb.core.seqprover.IReasoner;
+import org.eventb.core.seqprover.IReasonerInput;
+import org.eventb.core.seqprover.IReasonerInputReader;
+import org.eventb.core.seqprover.IReasonerInputWriter;
+import org.eventb.core.seqprover.IReasonerOutput;
+import org.eventb.core.seqprover.ProverFactory;
+import org.eventb.core.seqprover.SerializeException;
+import org.rodinp.core.IRodinProject;
+import org.rodinp.core.RodinDBException;
 
 import de.be4.classicalb.core.parser.analysis.prolog.ASTProlog;
 import de.be4.classicalb.core.parser.node.AEventBContextParseUnit;
-import de.prob.core.*;
+import de.prob.core.Animator;
+import de.prob.core.PrologException;
 import de.prob.eventb.disprover.core.internal.DisproverCommand;
 import de.prob.eventb.disprover.core.internal.ICounterExample;
 import de.prob.eventb.disprover.core.translation.DisproverContextCreator;
@@ -107,13 +121,14 @@ public class DisproverReasoner implements IReasoner {
 		IEventBProject evbProject = (IEventBProject) project
 				.getAdapter(IEventBProject.class);
 		ICounterExample counterExample = DisproverCommand.disprove(
-				Animator.getAnimator(), evbProject, allHypotheses,
+				Animator.getAuxAnimator(), evbProject, allHypotheses,
 				selectedHypotheses, goal, timeoutFactor, context, pm);
 		// Logger.info("Disprover: Result: " + counterExample.toString());
 
 		return counterExample;
 	}
 
+	@SuppressWarnings("unused")
 	private String predicateToProlog(Predicate pred) {
 		PrologTermStringOutput pto = new PrologTermStringOutput();
 		TranslationVisitor v = new TranslationVisitor();
@@ -132,8 +147,15 @@ public class DisproverReasoner implements IReasoner {
 
 		Predicate goal = sequent.goal();
 
+		// currently, we assume that all existing hypotheses have been used
+		// TODO: make ProB figure out which ones were actually used
+		Set<Predicate> usedHyps = new HashSet<Predicate>();
+		for (Predicate predicate : sequent.hypIterable()) {
+			usedHyps.add(predicate);
+		}
+
 		IAntecedent ante = ProverFactory.makeAntecedent(goal);
-		
+
 		if (counterExample == null) {
 			return ProverFactory.reasonerFailure(this, input,
 					"ProB: Error occurred.");
@@ -148,7 +170,7 @@ public class DisproverReasoner implements IReasoner {
 		if (!counterExample.counterExampleFound() && counterExample.isProof()) {
 			System.out.println(sequent.toString() + ": Proof.");
 			return ProverFactory.makeProofRule(this, input, sequent.goal(),
-					null, IConfidence.DISCHARGED_MAX,
+					usedHyps, IConfidence.DISCHARGED_MAX,
 					"ProB (no enumeration / all cases checked)");
 		}
 
@@ -176,8 +198,8 @@ public class DisproverReasoner implements IReasoner {
 		}
 
 		System.out.println(sequent.toString() + ": Counter-Example found.");
-		return ProverFactory.makeProofRule(this, input, null, null,
-				IConfidence.PENDING, counterExample.toString(), ante);
+		return ProverFactory.makeProofRule(this, input, sequent.goal(),
+				usedHyps, IConfidence.PENDING, counterExample.toString(), ante);
 	}
 
 	@Override
diff --git a/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/internal/DisproverCommand.java b/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/internal/DisproverCommand.java
index f2d5d87b2e85eb5be776b3ce573fa8b818cb0a50..8596f053818fcf67b9bc9360990fa697f13d31b8 100644
--- a/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/internal/DisproverCommand.java
+++ b/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/internal/DisproverCommand.java
@@ -12,15 +12,23 @@ import org.osgi.service.prefs.Preferences;
 
 import de.be4.classicalb.core.parser.analysis.prolog.ASTProlog;
 import de.be4.classicalb.core.parser.node.AEventBContextParseUnit;
-import de.prob.core.*;
-import de.prob.core.command.*;
+import de.prob.core.Animator;
+import de.prob.core.ProBCommandJob;
+import de.prob.core.command.ClearMachineCommand;
+import de.prob.core.command.CommandException;
+import de.prob.core.command.ComposedCommand;
+import de.prob.core.command.IComposableCommand;
+import de.prob.core.command.SetPreferenceCommand;
+import de.prob.core.command.SetPreferencesCommand;
+import de.prob.core.command.StartAnimationCommand;
 import de.prob.eventb.disprover.core.DisproverReasoner;
 import de.prob.eventb.disprover.core.command.DisproverLoadCommand;
 import de.prob.eventb.translator.internal.TranslationVisitor;
 import de.prob.exceptions.ProBException;
 import de.prob.parser.ISimplifiedROMap;
 import de.prob.prolog.output.IPrologTermOutput;
-import de.prob.prolog.term.*;
+import de.prob.prolog.term.ListPrologTerm;
+import de.prob.prolog.term.PrologTerm;
 
 /**
  * The DisproverCommand takes two sets of ASTs (one for the machine and a list
@@ -109,8 +117,7 @@ public class DisproverCommand implements IComposableCommand {
 	public void writeCommand(final IPrologTermOutput pto) {
 		pto.openTerm("cbc_disprove");
 
-		Predicate pred = goal;
-		translatePredicate(pto, pred);
+		translatePredicate(pto, goal);
 		pto.openList();
 		for (Predicate p : this.allHypotheses) {
 			translatePredicate(pto, p);
diff --git a/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/internal/DisproverIdentifier.java b/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/internal/DisproverIdentifier.java
index 00a0ed486fb1d86e1da41d85e1599329de85318d..69ec7ed4a45beab25c77f2e88dc18517e79004c9 100644
--- a/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/internal/DisproverIdentifier.java
+++ b/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/internal/DisproverIdentifier.java
@@ -4,7 +4,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.eventb.core.ast.Expression;
-import org.eventb.core.ast.FormulaFactory;
 import org.eventb.core.ast.Type;
 
 import de.be4.classicalb.core.parser.node.AIdentifierExpression;
@@ -28,13 +27,10 @@ public class DisproverIdentifier {
 
 	private final String name;
 	private final Type type;
-	private final FormulaFactory ff;
 	private final boolean givenSet;
 
-	public DisproverIdentifier(String name, Type type, boolean givenSet,
-			FormulaFactory ff) {
+	public DisproverIdentifier(String name, Type type, boolean givenSet) {
 		this.givenSet = givenSet;
-		this.ff = ff;
 		this.name = name;
 		this.type = type;
 	}
diff --git a/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/translation/DisproverContextCreator.java b/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/translation/DisproverContextCreator.java
index dceaec2b769aff5c1e4da9d0bacca51d47ff313f..12d68b9627987a665522e08558d083d861c64185 100644
--- a/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/translation/DisproverContextCreator.java
+++ b/de.prob.eventb.disprover.core/src/de/prob/eventb/disprover/core/translation/DisproverContextCreator.java
@@ -1,12 +1,26 @@
 package de.prob.eventb.disprover.core.translation;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
 
-import org.eventb.core.ast.*;
+import org.eventb.core.ast.FormulaFactory;
+import org.eventb.core.ast.ITypeEnvironment;
 import org.eventb.core.ast.ITypeEnvironment.IIterator;
+import org.eventb.core.ast.Predicate;
 import org.eventb.core.seqprover.IProverSequent;
 
-import de.be4.classicalb.core.parser.node.*;
+import de.be4.classicalb.core.parser.node.AAxiomsContextClause;
+import de.be4.classicalb.core.parser.node.AConstantsContextClause;
+import de.be4.classicalb.core.parser.node.ADeferredSetSet;
+import de.be4.classicalb.core.parser.node.AEventBContextParseUnit;
+import de.be4.classicalb.core.parser.node.AIdentifierExpression;
+import de.be4.classicalb.core.parser.node.AMemberPredicate;
+import de.be4.classicalb.core.parser.node.ASetsContextClause;
+import de.be4.classicalb.core.parser.node.PContextClause;
+import de.be4.classicalb.core.parser.node.PExpression;
+import de.be4.classicalb.core.parser.node.PPredicate;
+import de.be4.classicalb.core.parser.node.PSet;
+import de.be4.classicalb.core.parser.node.TIdentifierLiteral;
 import de.prob.eventb.disprover.core.internal.DisproverIdentifier;
 import de.prob.eventb.translator.internal.TranslationVisitor;
 
@@ -43,7 +57,7 @@ public class DisproverContextCreator {
 
 			DisproverIdentifier id = new DisproverIdentifier(
 					typeIterator.getName(), typeIterator.getType(),
-					typeIterator.isGivenSet(), ff);
+					typeIterator.isGivenSet());
 
 			// sets are added to the context, vars to the model
 			if (id.isGivenSet()) {
diff --git a/de.prob.eventb.disprover.ui/META-INF/MANIFEST.MF b/de.prob.eventb.disprover.ui/META-INF/MANIFEST.MF
index 01f62e3ae5639352456797082f2693b6a3c58ff1..3f936494719280c931789b2777a4d5b7bcda1628 100644
--- a/de.prob.eventb.disprover.ui/META-INF/MANIFEST.MF
+++ b/de.prob.eventb.disprover.ui/META-INF/MANIFEST.MF
@@ -2,18 +2,19 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: ProB Disprover UI for EventB
 Bundle-SymbolicName: de.prob.eventb.disprover.ui;singleton:=true
-Bundle-Version: 2.0.3.qualifier
+Bundle-Version: 2.0.5.qualifier
 Bundle-Vendor: Heinrich-Heine University Dusseldorf
 Require-Bundle: org.eclipse.core.runtime,
- org.eventb.ui;bundle-version="[3.0.0,3.1.0)",
- de.prob.eventb.disprover.core;bundle-version="[1.3.2,2.0.0)",
+ org.eventb.ui;bundle-version="[3.0.0,3.2.0)",
+ de.prob.eventb.disprover.core;bundle-version="[2.0.0,2.1.0)",
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
  de.prob.core,
  org.eventb.core.ast;bundle-version="[3.0.0,3.2.0)",
  org.eventb.core.seqprover;bundle-version="[3.0.0,3.2.0)",
  org.eclipse.osgi,
  org.rodinp.core;bundle-version="[1.7.0,1.8.0)",
- org.eventb.core;bundle-version="[3.0.0,3.2.0)"
+ org.eventb.core;bundle-version="[3.0.0,3.2.0)",
+ de.prob.ui;bundle-version="7.4.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
 Bundle-Localization: plugin
diff --git a/de.prob.eventb.disprover.ui/icons/prob_mini_logo.gif b/de.prob.eventb.disprover.ui/icons/prob_mini_logo.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c6867d469651f80e12a2021e619563e3f2a39b64
Binary files /dev/null and b/de.prob.eventb.disprover.ui/icons/prob_mini_logo.gif differ
diff --git a/de.prob.eventb.disprover.ui/plugin.xml b/de.prob.eventb.disprover.ui/plugin.xml
index 7518659c1c1a9942bcb13f5034489f98f82c05c7..9d24e750d23e001f5df639f2575b21f6dc5cef3e 100644
--- a/de.prob.eventb.disprover.ui/plugin.xml
+++ b/de.prob.eventb.disprover.ui/plugin.xml
@@ -72,5 +72,32 @@
             name="ProB (Dis-)Prover">
       </page>
    </extension>
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+            id="de.prob.eventb.disprover.ui.exportpos"
+            name="Export Proof Obligations for ProB">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            class="de.prob.eventb.disprover.ui.export.ExportPOsHandler"
+            commandId="de.prob.eventb.disprover.ui.exportpos">
+      </handler>
+   </extension>
+   <extension
+         point="org.eclipse.ui.menus">
+      <menuContribution
+            allPopups="false"
+            locationURI="popup:more_commands">
+         <command
+               commandId="de.prob.eventb.disprover.ui.exportpos"
+               icon="icons/prob_mini_logo.gif"
+               label="Export POs for ProB"
+               style="push">
+         </command>
+      </menuContribution>
+   </extension>
 
 </plugin>
diff --git a/de.prob.eventb.disprover.ui/src/de/prob/eventb/disprover/ui/export/ExportPOsHandler.java b/de.prob.eventb.disprover.ui/src/de/prob/eventb/disprover/ui/export/ExportPOsHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..01176ac53f0bff8a88529d0643a6b30a091afb95
--- /dev/null
+++ b/de.prob.eventb.disprover.ui/src/de/prob/eventb/disprover/ui/export/ExportPOsHandler.java
@@ -0,0 +1,236 @@
+package de.prob.eventb.disprover.ui.export;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Date;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eventb.core.EventBPlugin;
+import org.eventb.core.IContextRoot;
+import org.eventb.core.IEventBRoot;
+import org.eventb.core.IMachineRoot;
+import org.eventb.core.IPORoot;
+import org.eventb.core.IPOSequent;
+import org.eventb.core.IPSRoot;
+import org.eventb.core.IPSStatus;
+import org.eventb.core.ast.Predicate;
+import org.eventb.core.pm.IProofAttempt;
+import org.eventb.core.pm.IProofComponent;
+import org.eventb.core.pm.IProofManager;
+import org.eventb.core.seqprover.IConfidence;
+import org.eventb.core.seqprover.IProofTree;
+import org.eventb.core.seqprover.IProverSequent;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+import org.rodinp.core.RodinDBException;
+
+import de.be4.classicalb.core.parser.analysis.prolog.ASTProlog;
+import de.be4.classicalb.core.parser.node.AEventBContextParseUnit;
+import de.prob.eventb.disprover.core.translation.DisproverContextCreator;
+import de.prob.eventb.translator.internal.TranslationVisitor;
+import de.prob.logging.Logger;
+import de.prob.prolog.output.PrologTermOutput;
+
+public class ExportPOsHandler extends AbstractHandler implements IHandler {
+
+	@Override
+	public Object execute(final ExecutionEvent event) throws ExecutionException {
+		final IEventBRoot root = getSelectedEventBRoot(event);
+		if (root != null) {
+			final Preferences prefs = Platform.getPreferencesService()
+					.getRootNode().node(InstanceScope.SCOPE)
+					.node("prob_export_preferences");
+			final Shell shell = HandlerUtil.getActiveShell(event);
+			final String fileName = askForExportFile(prefs, shell, root);
+			if (fileName != null) {
+				exportPOs(fileName, root);
+			}
+		}
+		return null;
+	}
+
+	private IEventBRoot getSelectedEventBRoot(final ExecutionEvent event) {
+		final ISelection fSelection = HandlerUtil.getCurrentSelection(event);
+		IEventBRoot root = null;
+		if (fSelection instanceof IStructuredSelection) {
+			final IStructuredSelection ssel = (IStructuredSelection) fSelection;
+			if (ssel.size() == 1
+					&& ssel.getFirstElement() instanceof IEventBRoot) {
+				root = (IEventBRoot) ssel.getFirstElement();
+			}
+		}
+		return root;
+	}
+
+	private String askForExportFile(final Preferences prefs, final Shell shell,
+			final IEventBRoot root) {
+		final String path = prefs.get("dir", System.getProperty("user.home"));
+
+		final FileDialog dialog = new FileDialog(shell, SWT.SAVE);
+		dialog.setFilterExtensions(new String[] { "*.pl" });
+
+		dialog.setFilterPath(path);
+		final String subext = (root instanceof IMachineRoot) ? "_mch" : "_ctx";
+		dialog.setFileName(root.getComponentName() + subext + ".pl");
+		String result = dialog.open();
+		if (result != null) {
+			final String newPath = dialog.getFilterPath();
+			if (!path.equals(newPath)) {
+				prefs.put("dir", newPath);
+				try {
+					prefs.flush();
+				} catch (BackingStoreException e) {
+					// Ignore, if preferences are not stored correctly we simply
+					// ignore it (annoying, but not critical)
+				}
+			}
+			if (!result.endsWith(".pl")) {
+				result += ".pl";
+			}
+		}
+		return result;
+	}
+
+	public static void exportPOs(final String filename, final IEventBRoot root) {
+		final boolean isSafeToWrite = isSafeToWrite(filename);
+
+		if (isSafeToWrite) {
+			PrintWriter fw = null;
+			try {
+				fw = new PrintWriter(filename);
+				if (root instanceof IContextRoot) {
+					IContextRoot croot = (IContextRoot) root;
+					IPORoot poRoot = croot.getSCContextRoot().getPORoot();
+					IPSRoot psRoot = croot.getSCContextRoot().getPSRoot();
+					exportPOs(fw, poRoot, psRoot);
+				} else if (root instanceof IMachineRoot) {
+					IMachineRoot croot = (IMachineRoot) root;
+					IPORoot poRoot = croot.getSCMachineRoot().getPORoot();
+					IPSRoot psRoot = croot.getSCMachineRoot().getPSRoot();
+					exportPOs(fw, poRoot, psRoot);
+				} else {
+					throw new IllegalArgumentException(
+							"Not a Context or Machine root.");
+				}
+				fw.append('\n');
+
+			} catch (IllegalArgumentException e) {
+				Logger.notifyUser(e.getMessage());
+			} catch (IOException e) {
+				Logger.notifyUser("Unable to create file '" + filename + "'");
+			} catch (RodinDBException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} finally {
+				if (fw != null) {
+					fw.close();
+				}
+			}
+		}
+	}
+
+	private static void exportPOs(PrintWriter fw, IPORoot poRoot, IPSRoot psRoot)
+			throws RodinDBException {
+		PrologTermOutput pto = new PrologTermOutput(fw, false);
+		ASTProlog modelAst = new ASTProlog(pto, null);
+		TranslationVisitor tVisitor = new TranslationVisitor();
+
+		Date date = new Date();
+		pto.openTerm("generated");
+		pto.printNumber(date.getTime());
+		pto.printAtom(date.toString());
+		pto.closeTerm();
+		pto.fullstop();
+
+		pto.openTerm("project_name");
+		pto.printAtom(poRoot.getRodinProject().getElementName());
+		pto.closeTerm();
+		pto.fullstop();
+
+		pto.openTerm("machine_name");
+		pto.printAtom(poRoot.getElementName());
+		pto.closeTerm();
+		pto.fullstop();
+
+		IPOSequent[] sequents = poRoot.getSequents();
+		for (IPOSequent ipoSequent : sequents) {
+			IProverSequent proverSequent = toProverSequent(ipoSequent);
+			AEventBContextParseUnit disproverContext = DisproverContextCreator
+					.createDisproverContext(proverSequent);
+
+			// disprover_po(Name,Context,Goal,Hyps,SelectedHyps)
+			pto.openTerm("disprover_po");
+
+			pto.printAtom(ipoSequent.getElementName());
+
+			disproverContext.apply(modelAst);
+
+			proverSequent.goal().accept(tVisitor);
+			tVisitor.getPredicate().apply(modelAst);
+
+			pto.openList();
+			for (Predicate hyp : proverSequent.hypIterable()) {
+				hyp.accept(tVisitor);
+				tVisitor.getPredicate().apply(modelAst);
+			}
+			pto.closeList();
+
+			pto.openList();
+			for (Predicate hyp : proverSequent.selectedHypIterable()) {
+				hyp.accept(tVisitor);
+				tVisitor.getPredicate().apply(modelAst);
+			}
+			pto.closeList();
+
+			// The result: true = proven in rodin, unknown else
+			IPSStatus status = psRoot.getStatus(ipoSequent.getElementName());
+			if (status.getConfidence() == IConfidence.DISCHARGED_MAX) {
+				pto.printAtom("true");
+			} else {
+				pto.printAtom("unknown");
+			}
+
+			pto.closeTerm();
+			pto.fullstop();
+		}
+	}
+
+	public static IProverSequent toProverSequent(IPOSequent sequent)
+			throws RodinDBException {
+		IPORoot poRoot = (IPORoot) sequent.getRoot();
+		IProofManager pm = EventBPlugin.getProofManager();
+		IProofComponent pc = pm.getProofComponent(poRoot);
+		IProofAttempt pa = pc.createProofAttempt(sequent.getElementName(),
+				"ProB PO Export", null);
+
+		IProofTree proofTree = pa.getProofTree();
+
+		IProverSequent proverSequent = proofTree.getSequent();
+		pa.dispose();
+
+		return proverSequent;
+	}
+
+	private static boolean isSafeToWrite(final String filename) {
+		if (new File(filename).exists()) {
+			final MessageDialog dialog = new MessageDialog(null, "File exists",
+					null, "The file exists. Do you want to overwrite it?",
+					MessageDialog.QUESTION, new String[] { "Yes", "No" }, 0);
+			return dialog.open() == 0;
+		} else
+			return true;
+	}
+}
diff --git a/de.prob.plugin/META-INF/MANIFEST.MF b/de.prob.plugin/META-INF/MANIFEST.MF
index 57d4aa60176c7850a354a2f2de3db563ed6e402f..0e6729300d3e168ca78c55c5ef9a151b9883d0fd 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.3.0.qualifier
+Bundle-Version: 2.3.2.qualifier
 Fragment-Host: de.prob.ui;bundle-version="[7.4.0,7.5.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-Vendor: HHU Düsseldorf STUPS Group
diff --git a/de.prob.symbolic/META-INF/MANIFEST.MF b/de.prob.symbolic/META-INF/MANIFEST.MF
index 52e10653dc0de613fe409cd198ca0a1d16e8ad36..718636bd34bb20e63d61c454bb1fdee61a46fe30 100644
--- a/de.prob.symbolic/META-INF/MANIFEST.MF
+++ b/de.prob.symbolic/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: ProB Symbolic Evaluation Support
 Bundle-SymbolicName: de.prob.symbolic;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 7.4.2.qualifier
 Bundle-Activator: de.prob.symbolic.Activator
 Require-Bundle: org.eclipse.core.runtime,
  de.prob.core;bundle-version="[9.4.0,9.5.0)",
- org.eventb.ui;bundle-version="[3.0.0,3.1.0)",
+ org.eventb.ui;bundle-version="[3.0.0,3.2.0)",
  de.prob.ui;bundle-version="[7.4.0,7.5.0)",
  org.rodinp.core;bundle-version="[1.7.0,1.8.0)",
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
diff --git a/de.prob.ui/META-INF/MANIFEST.MF b/de.prob.ui/META-INF/MANIFEST.MF
index 9560d2533dc204f2eedfa3b23fd178923b35b896..a4bdc20fdd9b5502c53ad00bc577bd83b2b6cf8e 100644
--- a/de.prob.ui/META-INF/MANIFEST.MF
+++ b/de.prob.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: ProB Ui Plug-in
 Bundle-SymbolicName: de.prob.ui;singleton:=true
-Bundle-Version: 7.4.0.qualifier
+Bundle-Version: 7.4.2.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)",
diff --git a/de.prob.ui/plugin.xml b/de.prob.ui/plugin.xml
index 6bf2e1f287fe32c93a44f4924fcb7d4f3c4a6dfc..d7fbd3701c61ff4f570797202ad465b683d9ce93 100644
--- a/de.prob.ui/plugin.xml
+++ b/de.prob.ui/plugin.xml
@@ -1041,22 +1041,6 @@
          <separator
                name="de.prob.ui.separator2"
                visible="true">
-                           <visibleWhen>
-               <with
-                     variable="selection">
-                  <iterate
-                        operator="or">
-                     <or>
-                        <instanceof
-                              value="org.eventb.core.IMachineRoot">
-                        </instanceof>
-                        <instanceof
-                              value="org.eventb.core.IContextRoot">
-                        </instanceof>
-                     </or>
-                  </iterate>
-               </with>
-            </visibleWhen>
          </separator>
          <command
                commandId="de.prob.ui.starteventbanimation"
@@ -1135,22 +1119,6 @@
          <separator
                name="de.prob.ui.separator1"
                visible="true">
-                           <visibleWhen>
-               <with
-                     variable="selection">
-                  <iterate
-                        operator="or">
-                     <or>
-                        <instanceof
-                              value="org.eventb.core.IMachineRoot">
-                        </instanceof>
-                        <instanceof
-                              value="org.eventb.core.IContextRoot">
-                        </instanceof>
-                     </or>
-                  </iterate>
-               </with>
-            </visibleWhen>
          </separator>
       </menuContribution>
       <menuContribution
diff --git a/de.prob.ui/src/de/prob/ui/ltl/LtlCheckingJob.java b/de.prob.ui/src/de/prob/ui/ltl/LtlCheckingJob.java
index b4ec10349fd06183643c4b6eacfcc128c3688600..85b1420774409b4506cf1304b7f18e75a56093ab 100644
--- a/de.prob.ui/src/de/prob/ui/ltl/LtlCheckingJob.java
+++ b/de.prob.ui/src/de/prob/ui/ltl/LtlCheckingJob.java
@@ -70,7 +70,7 @@ public final class LtlCheckingJob extends Job {
 	}
 
 	private Result doSomeModelchecking() throws ProBException {
-		return LtlCheckingCommand.modelCheck(animator, formula, 500, option);
+		return LtlCheckingCommand.modelCheck(animator, formula, -1, option); // this used to be 500 instead of -1, but currently the Java side does not seem to cope with the LTL model checker returning; -1 means no maximum value
 	}
 
 	private boolean setSymmetry() {
diff --git a/de.prob.units/META-INF/MANIFEST.MF b/de.prob.units/META-INF/MANIFEST.MF
index fb821994124ddcbc1a64b988a414de1ce6920dc7..2d668cb186eb3384c26803c31f1a5789da4ffe57 100644
--- a/de.prob.units/META-INF/MANIFEST.MF
+++ b/de.prob.units/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: ProB Physical Units Support
 Bundle-SymbolicName: de.prob.units;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 7.4.2.qualifier
 Bundle-Activator: de.prob.units.Activator
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.core.commands,
@@ -10,7 +10,7 @@ Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.jface,
  org.rodinp.core;bundle-version="[1.7.0,1.8.0)",
  de.prob.core;bundle-version="[9.4.0,9.5.0)",
- org.eventb.ui;bundle-version="[3.0.0,3.1.0)",
+ org.eventb.ui;bundle-version="[3.0.0,3.2.0)",
  de.prob.ui;bundle-version="[7.4.0,7.5.0)",
  org.eventb.core;bundle-version="[3.0.0,3.2.0)",
  org.eclipse.ui.workbench
diff --git a/de.prob2.disprover.feature/feature.xml b/de.prob2.disprover.feature/feature.xml
index ef18a17292e2114b3dfef21becf966ad6f25ee1c..f31df8800fb762d5e60da20f1510b744ed9f5835 100644
--- a/de.prob2.disprover.feature/feature.xml
+++ b/de.prob2.disprover.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="de.prob2.disprover.feature"
       label="ProB for Rodin3 - EXPERIMENTAL (Dis)Prover"
-      version="3.0.5.qualifier"
+      version="3.0.8.qualifier"
       provider-name="HHU Düsseldorf STUPS Group">
 
    <description url="http://www.stups.uni-duesseldorf.de/ProB">
@@ -232,14 +232,15 @@ litigation.
    <requires>
       <import plugin="org.eclipse.core.runtime" version="3.5.0" match="compatible"/>
       <import plugin="de.prob.core" version="9.4.0" match="equivalent"/>
-      <import plugin="org.eclipse.ui" version="3.5.0" match="compatible"/>
-      <import plugin="org.rodinp.core" version="1.7.0" match="equivalent"/>
-      <import plugin="org.eventb.ui" version="3.0.0" match="equivalent"/>
-      <import plugin="de.prob.eventb.disprover.core" version="1.3.2" match="compatible"/>
-      <import plugin="org.eclipse.osgi"/>
       <import plugin="org.eventb.core.seqprover" version="3.0.0"/>
       <import plugin="org.eventb.core" version="3.0.0"/>
+      <import plugin="org.eclipse.ui" version="3.5.0" match="compatible"/>
       <import plugin="org.eventb.core.ast" version="3.0.0"/>
+      <import plugin="org.rodinp.core" version="1.7.0" match="equivalent"/>
+      <import plugin="org.eventb.ui" version="3.0.0"/>
+      <import plugin="org.eclipse.osgi"/>
+      <import plugin="de.prob.ui" version="7.4.0" match="greaterOrEqual"/>
+      <import plugin="de.prob.eventb.disprover.core" version="2.0.0" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/de.prob2.feature/feature.xml b/de.prob2.feature/feature.xml
index 51c720033b4933c43d42c49dab5db93d26350e98..4f63793dcdc2c14a4d0028d7b0cabd6212f6da49 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 Rodin3"
-      version="3.0.5.qualifier"
+      version="3.0.8.qualifier"
       provider-name="HHU Düsseldorf STUPS Group">
 
    <description url="http://www.stups.uni-duesseldorf.de/ProB">
@@ -226,23 +226,23 @@ litigation.
    <requires>
       <import plugin="org.eclipse.ui" version="3.5.0" match="compatible"/>
       <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.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.4.0" match="equivalent"/>
-      <import plugin="org.eclipse.help" version="3.5.100" match="greaterOrEqual"/>
+      <import plugin="org.eventb.core" version="3.0.0"/>
       <import plugin="org.eclipse.core.resources" version="3.5.0" match="compatible"/>
       <import plugin="org.rodinp.core" version="1.7.0" match="equivalent"/>
+      <import plugin="org.eventb.core.ast" version="3.0.0"/>
+      <import plugin="org.eventb.core.seqprover" version="3.0.0"/>
       <import plugin="de.prob.ui" version="7.4.0" match="equivalent"/>
       <import plugin="org.eclipse.core.expressions" version="3.4.101" match="compatible"/>
+      <import plugin="org.eclipse.ui.views" 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.help" version="3.5.100" match="greaterOrEqual"/>
       <import plugin="org.eclipse.ui.navigator" version="3.5.0" match="greaterOrEqual"/>
       <import plugin="de.bmotionstudio.gef.editor" version="5.5.0" match="equivalent"/>
-      <import plugin="org.eventb.core" version="3.0.0"/>
-      <import plugin="org.eventb.core.ast" version="3.0.0"/>
-      <import plugin="org.eventb.core.seqprover" version="3.0.0"/>
    </requires>
 
    <plugin
diff --git a/de.prob2.symbolic.feature/feature.xml b/de.prob2.symbolic.feature/feature.xml
index bfdeac8810ab27faeb15a9d47025172a29e69b97..e02e10ac1402d008b6b0c0922d43c5980a6c8ea4 100644
--- a/de.prob2.symbolic.feature/feature.xml
+++ b/de.prob2.symbolic.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="de.prob2.symbolic.feature"
       label="ProB for Rodin3 - Symbolic Constants Support"
-      version="3.0.5.qualifier"
+      version="3.0.8.qualifier"
       provider-name="HHU Düsseldorf STUPS Group">
 
    <description url="http://www.stups.uni-duesseldorf.de/ProB">
@@ -232,11 +232,11 @@ litigation.
    <requires>
       <import plugin="org.eclipse.core.runtime"/>
       <import plugin="de.prob.core" version="9.4.0" match="equivalent"/>
-      <import plugin="org.eventb.ui" version="3.0.0" match="equivalent"/>
       <import plugin="de.prob.ui" version="7.4.0" match="equivalent"/>
       <import plugin="org.rodinp.core" version="1.7.0" match="equivalent"/>
       <import plugin="org.eclipse.ui" version="3.5.0" match="compatible"/>
       <import plugin="org.eventb.core" version="3.0.0"/>
+      <import plugin="org.eventb.ui" version="3.0.0"/>
    </requires>
 
    <plugin
diff --git a/de.prob2.units.feature/feature.xml b/de.prob2.units.feature/feature.xml
index 4d04c511664d82b17498f794615778b121103fec..5a1514b4ba4c0bd6be0c7ebd9b5becb1b2a63dbb 100644
--- a/de.prob2.units.feature/feature.xml
+++ b/de.prob2.units.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="de.prob2.units.feature"
       label="ProB for Rodin3 - Physical Units Support"
-      version="3.0.5.qualifier"
+      version="3.0.8.qualifier"
       provider-name="HHU Düsseldorf STUPS Group">
 
    <description url="http://www.stups.uni-duesseldorf.de/ProB">
@@ -230,10 +230,10 @@ litigation.
       <import plugin="org.eclipse.jface"/>
       <import plugin="org.rodinp.core" version="1.7.0" match="equivalent"/>
       <import plugin="de.prob.core" version="9.4.0" match="equivalent"/>
-      <import plugin="org.eventb.ui" version="3.0.0" match="equivalent"/>
       <import plugin="de.prob.ui" version="7.4.0" match="equivalent"/>
-      <import plugin="org.eclipse.ui.workbench"/>
       <import plugin="org.eventb.core" version="3.0.0"/>
+      <import plugin="org.eclipse.ui.workbench"/>
+      <import plugin="org.eventb.ui" version="3.0.0"/>
    </requires>
 
    <plugin