diff --git a/src/main/java/de/tla2b/analysis/BOperation.java b/src/main/java/de/tla2b/analysis/BOperation.java
index ee9a4d89c6114338debcb4c70dd27fc1a778dc82..2a0a2e8d992a6a5e22b35a7b520be41a585190ad 100644
--- a/src/main/java/de/tla2b/analysis/BOperation.java
+++ b/src/main/java/de/tla2b/analysis/BOperation.java
@@ -4,16 +4,35 @@
 
 package de.tla2b.analysis;
 
-
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
 
+import de.be4.classicalb.core.parser.node.AAnySubstitution;
+import de.be4.classicalb.core.parser.node.AAssignSubstitution;
+import de.be4.classicalb.core.parser.node.ABlockSubstitution;
+import de.be4.classicalb.core.parser.node.AMemberPredicate;
+import de.be4.classicalb.core.parser.node.AOperation;
+import de.be4.classicalb.core.parser.node.ASelectSubstitution;
+import de.be4.classicalb.core.parser.node.ASkipSubstitution;
+import de.be4.classicalb.core.parser.node.PExpression;
+import de.be4.classicalb.core.parser.node.PPredicate;
 import de.tla2b.global.BBuiltInOPs;
 import de.tla2b.global.TranslationGlobals;
+import de.tla2b.types.TLAType;
+import de.tla2bAst.BAstCreator;
 import tla2sany.semantic.ASTConstants;
 import tla2sany.semantic.ExprNode;
+import tla2sany.semantic.ExprOrOpArgNode;
 import tla2sany.semantic.FormalParamNode;
 import tla2sany.semantic.LetInNode;
 import tla2sany.semantic.OpApplNode;
+import tla2sany.semantic.OpDeclNode;
 import tla2sany.semantic.OpDefNode;
 import tla2sany.semantic.SemanticNode;
 import tla2sany.semantic.SubstInNode;
@@ -21,21 +40,217 @@ import tla2sany.semantic.SymbolNode;
 import tlc2.tool.BuiltInOPs;
 import tlc2.tool.ToolGlobals;
 
-public class BOperation implements ASTConstants, ToolGlobals, TranslationGlobals {
-	private String name;
-	private ExprNode node;
-	private ArrayList<OpApplNode> existQuans;
+public class BOperation extends BuiltInOPs implements ASTConstants,
+		ToolGlobals, TranslationGlobals {
+	private final String name;
+	private final ExprNode node;
+	private final ArrayList<OpApplNode> existQuans;
 	private ArrayList<String> opParams;
 	private ArrayList<FormalParamNode> formalParams;
 	private ArrayList<String> unchangedVariables;
+	private final ArrayList<OpDeclNode> unchangedVariablesList;
+	private final ArrayList<ExprOrOpArgNode> guards;
+	private final ArrayList<ExprOrOpArgNode> beforeAfterPredicates;
+	private LinkedHashMap<SymbolNode, ExprOrOpArgNode> assignments = new LinkedHashMap<SymbolNode, ExprOrOpArgNode>();
+	private List<OpDeclNode> anyVariables;
+
+	final int SUBSTITUTE_PARAM = 29;
 
 	public BOperation(String name, ExprNode n,
-			ArrayList<OpApplNode> existQuans) {
+			ArrayList<OpApplNode> existQuans, SpecAnalyser specAnalyser) {
 		this.name = name;
 		this.node = n;
 		this.existQuans = existQuans;
+		this.unchangedVariablesList = new ArrayList<OpDeclNode>();
+		this.guards = new ArrayList<ExprOrOpArgNode>();
+		this.beforeAfterPredicates = new ArrayList<ExprOrOpArgNode>();
+		anyVariables = new ArrayList<OpDeclNode>(Arrays.asList(specAnalyser
+				.getModuleNode().getVariableDecls()));
+
 		evalParams();
 		findUnchangedVariables();
+		separateGuardsAndBeforeAfterPredicates(node);
+		findAssignments();
+	}
+
+	public AOperation getBOperation(BAstCreator bASTCreator) {
+
+		AOperation operation = new AOperation();
+		List<PExpression> paramList = new ArrayList<PExpression>();
+		ArrayList<PPredicate> whereList = new ArrayList<PPredicate>();
+		for (int j = 0; j < this.getFormalParams().size(); j++) {
+			paramList.add(bASTCreator.createIdentifierNode(this
+					.getFormalParams().get(j)));
+		}
+		for (int j = 0; j < this.getExistQuans().size(); j++) {
+			OpApplNode o = this.getExistQuans().get(j);
+			whereList.add(bASTCreator.visitBounded(o));
+		}
+
+		operation.setOpName(BAstCreator.createTIdentifierLiteral(name));
+		operation.setParameters(paramList);
+		operation.setReturnValues(new ArrayList<PExpression>());
+
+		for (ExprOrOpArgNode g : guards) {
+			whereList.add(bASTCreator.visitExprOrOpArgNodePredicate(g));
+		}
+
+		ArrayList<PExpression> left = new ArrayList<PExpression>();
+		ArrayList<PExpression> right = new ArrayList<PExpression>();
+		for (Entry<SymbolNode, ExprOrOpArgNode> entry : assignments.entrySet()) {
+			left.add(bASTCreator.createIdentifierNode(entry.getKey()));
+			right.add(bASTCreator.visitExprOrOpArgNodeExpression(entry
+					.getValue()));
+		}
+		AAssignSubstitution assign = new AAssignSubstitution();
+
+		if (anyVariables.size() > 0) { // ANY x_n WHERE P THEN A END
+			AAnySubstitution any = new AAnySubstitution();
+			any = new AAnySubstitution();
+			List<PExpression> anyParams = new ArrayList<PExpression>();
+			for (OpDeclNode var : anyVariables) {
+				String varName = var.getName().toString();
+				String nextName = varName + "_n";
+				anyParams.add(BAstCreator.createIdentifierNode(nextName));
+
+				AMemberPredicate member = new AMemberPredicate();
+				member.setLeft(BAstCreator.createIdentifierNode(nextName));
+				TLAType t = (TLAType) var.getToolObject(TYPE_ID);
+				member.setRight(t.getBNode());
+				whereList.add(member);
+				left.add(bASTCreator.createIdentifierNode(var));
+				right.add(BAstCreator.createIdentifierNode(nextName));
+			}
+			any.setIdentifiers(anyParams);
+			whereList.addAll(createBeforeAfterPredicates(bASTCreator));
+			any.setWhere(bASTCreator.createConjunction(whereList));
+			any.setThen(assign);
+			operation.setOperationBody(any);
+		} else if (whereList.size() > 0) { // SELECT P THEN A END
+			ASelectSubstitution select = new ASelectSubstitution();
+			whereList.addAll(createBeforeAfterPredicates(bASTCreator));
+			for (ExprOrOpArgNode e : beforeAfterPredicates) {
+				whereList.add(bASTCreator.visitExprOrOpArgNodePredicate(e));
+			}
+			select.setCondition(bASTCreator.createConjunction(whereList));
+			select.setThen(assign);
+			operation.setOperationBody(select);
+		} else { // BEGIN A END
+			ABlockSubstitution block = new ABlockSubstitution(assign);
+			operation.setOperationBody(block);
+		}
+
+		if (left.size() > 0) {
+			assign.setLhsExpression(left);
+			assign.setRhsExpressions(right);
+		} else { // skip
+			assign.replaceBy(new ASkipSubstitution());
+		}
+
+		return operation;
+	}
+
+	private ArrayList<PPredicate> createBeforeAfterPredicates(
+			BAstCreator bAstCreator) {
+		ArrayList<PPredicate> predicates = new ArrayList<PPredicate>();
+		for (ExprOrOpArgNode e : beforeAfterPredicates) {
+			PPredicate body = null;
+			if (e instanceof OpApplNode) {
+				OpApplNode opApplNode = (OpApplNode) e;
+				if (opApplNode.getOperator().getKind() == UserDefinedOpKind
+						&& !BBuiltInOPs.contains(opApplNode.getOperator()
+								.getName())) {
+					OpDefNode def = (OpDefNode) opApplNode.getOperator();
+					FormalParamNode[] params = def.getParams();
+					for (int j = 0; j < params.length; j++) {
+						FormalParamNode param = params[j];
+						param.setToolObject(SUBSTITUTE_PARAM,
+								opApplNode.getArgs()[j]);
+					}
+					body = bAstCreator.visitExprNodePredicate(def.getBody());
+				}
+			}
+			if (body == null) {
+				body = bAstCreator.visitExprOrOpArgNodePredicate(e);
+			}
+			predicates.add(body);
+		}
+		return predicates;
+	}
+
+	private void findAssignments() {
+		PrimedVariablesFinder primedVariablesFinder = new PrimedVariablesFinder(
+				beforeAfterPredicates);
+		for (ExprOrOpArgNode node : new ArrayList<ExprOrOpArgNode>(
+				beforeAfterPredicates)) {
+			if (node instanceof OpApplNode) {
+				OpApplNode opApplNode = (OpApplNode) node;
+				if (opApplNode.getOperator().getKind() == BuiltInKind) {
+					switch (getOpCode(opApplNode.getOperator().getName())) {
+					case OPCODE_eq: {
+						ExprOrOpArgNode arg1 = opApplNode.getArgs()[0];
+						try {
+							OpApplNode arg11 = (OpApplNode) arg1;
+							if (getOpCode(arg11.getOperator().getName()) == OPCODE_prime) {
+								OpApplNode v = (OpApplNode) arg11.getArgs()[0];
+								SymbolNode var = v.getOperator();
+								if (!primedVariablesFinder
+										.getTwiceUsedVariables().contains(var)) {
+									// var is only used once in all before after
+									// predicates
+									assignments.put(v.getOperator(),
+											opApplNode.getArgs()[1]);
+									beforeAfterPredicates.remove(node);
+								}
+
+							}
+						} catch (ClassCastException e) {
+
+						}
+
+					}
+
+					}
+				}
+			}
+		}
+
+		anyVariables.removeAll(assignments.keySet());
+	}
+
+	private void separateGuardsAndBeforeAfterPredicates(ExprOrOpArgNode node) {
+		if (node instanceof OpApplNode) {
+			OpApplNode opApplNode = (OpApplNode) node;
+			if (opApplNode.getOperator().getKind() == BuiltInKind) {
+				switch (getOpCode(opApplNode.getOperator().getName())) {
+				case OPCODE_land: // \land
+				{
+					separateGuardsAndBeforeAfterPredicates(opApplNode.getArgs()[0]);
+					separateGuardsAndBeforeAfterPredicates(opApplNode.getArgs()[1]);
+					return;
+				}
+				case OPCODE_cl: // $ConjList
+				{
+					for (int i = 0; i < opApplNode.getArgs().length; i++) {
+						separateGuardsAndBeforeAfterPredicates(opApplNode
+								.getArgs()[i]);
+					}
+					return;
+				}
+				default: {
+					if (opApplNode.level < 2) {
+						guards.add(node);
+						return;
+					} else {
+						beforeAfterPredicates.add(node);
+						return;
+					}
+				}
+
+				}
+			}
+		}
+		beforeAfterPredicates.add(node);
 	}
 
 	private void evalParams() {
@@ -53,17 +268,16 @@ public class BOperation implements ASTConstants, ToolGlobals, TranslationGlobals
 		}
 	}
 
-	public SymbolNode getSymbolNode(){
-		if(node instanceof OpApplNode){
+	public SymbolNode getSymbolNode() {
+		if (node instanceof OpApplNode) {
 			OpApplNode n = ((OpApplNode) node);
-			System.out.println(n.getOperator().getKind());
-			if(n.getOperator().getKind() == UserDefinedOpKind){
+			if (n.getOperator().getKind() == UserDefinedOpKind) {
 				return ((OpApplNode) node).getOperator();
 			}
 		}
-			return null;
+		return null;
 	}
-	
+
 	public String getName() {
 		return name;
 	}
@@ -79,20 +293,20 @@ public class BOperation implements ASTConstants, ToolGlobals, TranslationGlobals
 	public ArrayList<String> getOpParams() {
 		return opParams;
 	}
-	
-	public ArrayList<FormalParamNode> getFormalParams(){
+
+	public ArrayList<FormalParamNode> getFormalParams() {
 		return formalParams;
 	}
 
-	public ArrayList<String> getUnchangedVariables(){
+	public ArrayList<String> getUnchangedVariables() {
 		return unchangedVariables;
 	}
-	
+
 	private void findUnchangedVariables() {
 		unchangedVariables = new ArrayList<String>();
 		findUnchangedVaribalesInSemanticNode(node);
+		anyVariables.removeAll(unchangedVariablesList);
 	}
-	
 
 	/**
 	 * @param node2
@@ -138,25 +352,81 @@ public class BOperation implements ASTConstants, ToolGlobals, TranslationGlobals
 				}
 				return;
 			}
-			case OPCODE_unchanged:{
+			case OPCODE_unchanged: {
 				n.setToolObject(USED, false);
 				OpApplNode k = (OpApplNode) n.getArgs()[0];
 				if (k.getOperator().getKind() == VariableDeclKind) {
+					unchangedVariablesList.add((OpDeclNode) k.getOperator());
 					String name = k.getOperator().getName().toString();
 					unchangedVariables.add(name);
 				} else {
 					// Tuple
 					for (int i = 0; i < k.getArgs().length; i++) {
 						OpApplNode var = (OpApplNode) k.getArgs()[i];
+						unchangedVariablesList.add((OpDeclNode) var
+								.getOperator());
 						String name = var.getOperator().getName().toString();
 						unchangedVariables.add(name);
 					}
 				}
 			}
-			
+
 			}
 		}
 	}
-	
-	
+
+}
+
+class PrimedVariablesFinder extends AbstractASTVisitor {
+	private final Set<SymbolNode> all;
+	private final Set<SymbolNode> twiceUsedVariables;
+	private final Hashtable<SemanticNode, Set<SymbolNode>> table;
+	private Set<SymbolNode> currentSet;
+
+	public PrimedVariablesFinder(ArrayList<ExprOrOpArgNode> list) {
+		this.all = new HashSet<SymbolNode>();
+		this.twiceUsedVariables = new HashSet<SymbolNode>();
+		this.table = new Hashtable<SemanticNode, Set<SymbolNode>>();
+		
+		for (ExprOrOpArgNode exprOrOpArgNode : list) {
+			findPrimedVariables(exprOrOpArgNode);
+		}
+	}
+
+	public void findPrimedVariables(ExprOrOpArgNode n) {
+		currentSet = new HashSet<SymbolNode>();
+		this.visitExprOrOpArgNode(n);
+		table.put(n, currentSet);
+	}
+
+	public void visitBuiltInNode(OpApplNode n) {
+		switch (getOpCode(n.getOperator().getName())) {
+
+		case OPCODE_prime: // prime
+		{
+			if (n.getArgs()[0] instanceof OpApplNode){
+				OpApplNode varNode = (OpApplNode) n.getArgs()[0];
+				SymbolNode var = varNode.getOperator();
+
+				currentSet.add(var);
+
+				if (all.contains(var)) {
+					twiceUsedVariables.add(var);
+				} else {
+					all.add(var);
+				}
+			}
+		}
+
+		default: {
+			super.visitBuiltInNode(n);
+		}
+
+		}
+	}
+
+	public Set<SymbolNode> getTwiceUsedVariables() {
+		return this.twiceUsedVariables;
+	}
+
 }
diff --git a/src/main/java/de/tla2b/analysis/SpecAnalyser.java b/src/main/java/de/tla2b/analysis/SpecAnalyser.java
index f0de31afdc577bbfafa9e67785bc52cf8a90732a..2152ce5c212a3cb19d9779dc3cad628b9b73a976 100644
--- a/src/main/java/de/tla2b/analysis/SpecAnalyser.java
+++ b/src/main/java/de/tla2b/analysis/SpecAnalyser.java
@@ -44,14 +44,15 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants,
 	private OpDefNode next;
 	private ArrayList<OpDefNode> invariants;
 
-	private ModuleNode moduleNode;
+	private final ModuleNode moduleNode;
 	private ExprNode nextExpr;
 	private String nextName;
+
 	private ArrayList<OpDeclNode> bConstants;
 	// used to check if a b constant has arguments and is not overriden in the
 	// configfile
 
-	private ArrayList<BOperation> bOperations;
+	private final ArrayList<BOperation> bOperations = new ArrayList<BOperation>();
 	private ArrayList<ExprNode> inits;
 	private ArrayList<LetInNode> globalLets = new ArrayList<LetInNode>();
 	// these local definitions occur in assume nodes or in BOperations and will
@@ -75,40 +76,44 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants,
 
 	private ConfigfileEvaluator conEval;
 
-	/**
-	 * @param m
-	 * @param conEval
-	 */
-	public SpecAnalyser(ModuleNode m, ConfigfileEvaluator conEval) {
+	private SpecAnalyser(ModuleNode m) {
 		this.moduleNode = m;
-		this.spec = conEval.getSpecNode();
-		this.init = conEval.getInitNode();
-		this.next = conEval.getNextNode();
-		this.invariants = conEval.getInvariants();
-		this.bConstants = conEval.getbConstantList();
-		this.conEval = conEval;
+		this.bConstants = new ArrayList<OpDeclNode>();
 	}
 
-	public SpecAnalyser(ModuleNode m) {
-		this.moduleNode = m;
+	public static SpecAnalyser createSpecAnalyser(ModuleNode m,
+			ConfigfileEvaluator conEval) {
+		SpecAnalyser specAnalyser = new SpecAnalyser(m);
+		specAnalyser.spec = conEval.getSpecNode();
+		specAnalyser.init = conEval.getInitNode();
+		specAnalyser.next = conEval.getNextNode();
+		specAnalyser.invariants = conEval.getInvariants();
+		specAnalyser.bConstants = conEval.getbConstantList();
+		specAnalyser.conEval = conEval;
+
+		return specAnalyser;
+	}
+
+	public static SpecAnalyser createSpecAnalyser(ModuleNode m) {
+		SpecAnalyser specAnalyser = new SpecAnalyser(m);
 		Hashtable<String, OpDefNode> definitions = new Hashtable<String, OpDefNode>();
 		for (int i = 0; i < m.getOpDefs().length; i++) {
 			definitions.put(m.getOpDefs()[i].getName().toString(),
 					m.getOpDefs()[i]);
 		}
-		this.spec = definitions.get("Spec");
-		this.init = definitions.get("Init");
-		this.next = definitions.get("Next");
-
+		specAnalyser.spec = definitions.get("Spec");
+		specAnalyser.init = definitions.get("Init");
+		specAnalyser.next = definitions.get("Next");
 		// TODO are constant in the right order
-		this.bConstants = new ArrayList<OpDeclNode>();
-		this.bConstants.addAll(Arrays.asList(m.getConstantDecls()));
+
+		specAnalyser.bConstants.addAll(Arrays.asList(m.getConstantDecls()));
+
+		return specAnalyser;
 	}
 
 	public void start() throws SemanticErrorException, FrontEndException,
 			ConfigFileErrorException, NotImplementedException {
-		
-		
+
 		if (spec != null) {
 			evalSpec();
 		} else {
@@ -231,7 +236,6 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants,
 			ConfigFileErrorException {
 		if (nextExpr == null)
 			return;
-		bOperations = new ArrayList<BOperation>();
 		findOperationsInSemanticNode(nextExpr, nextName,
 				new ArrayList<OpApplNode>());
 	}
@@ -293,7 +297,7 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants,
 			usedDefinitions.add(def);
 			if (def.getParams().length > 0) {
 				BOperation op = new BOperation(def.getName().toString(), n,
-						existQuans);
+						existQuans, this);
 				bOperations.add(op);
 				return;
 			} else {
@@ -349,7 +353,7 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants,
 			case OPCODE_fa: // $FcnApply f[1]
 			case OPCODE_ite: // IF THEN ELSE
 			case OPCODE_case: {
-				BOperation op = new BOperation(name, n, existQuans);
+				BOperation op = new BOperation(name, n, existQuans, this);
 				bOperations.add(op);
 				return;
 			}
@@ -585,17 +589,17 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants,
 		}
 	}
 
-//	public void evalIfThenElse() {
-//		boolean b = false;
-//		for (int i = 0; i < ifThenElseNodes.size() && !b; i++) {
-//			OpApplNode node = ifThenElseNodes.get(i);
-//			TLAType t = (TLAType) node.getToolObject(TYPE_ID);
-//			if (t.getKind() != BOOL)
-//				b = true;
-//		}
-//		if (b)
-//			definitionMacros.add(IF_THEN_ELSE);
-//	}
+	// public void evalIfThenElse() {
+	// boolean b = false;
+	// for (int i = 0; i < ifThenElseNodes.size() && !b; i++) {
+	// OpApplNode node = ifThenElseNodes.get(i);
+	// TLAType t = (TLAType) node.getToolObject(TYPE_ID);
+	// if (t.getKind() != BOOL)
+	// b = true;
+	// }
+	// if (b)
+	// definitionMacros.add(IF_THEN_ELSE);
+	// }
 
 	public ArrayList<LetInNode> getGlobalLets() {
 		return this.globalLets;
diff --git a/src/main/java/de/tla2b/output/ASTPrettyPrinter.java b/src/main/java/de/tla2b/output/ASTPrettyPrinter.java
index 3768be4f6808898ff93eb87e3a24e422c03c0bc5..f36db50939a1a31ed0d1a567a6dc90e843c0dd1e 100644
--- a/src/main/java/de/tla2b/output/ASTPrettyPrinter.java
+++ b/src/main/java/de/tla2b/output/ASTPrettyPrinter.java
@@ -9,6 +9,7 @@ import de.be4.classicalb.core.parser.analysis.ExtendedDFAdapter;
 import de.be4.classicalb.core.parser.node.AAbstractMachineParseUnit;
 import de.be4.classicalb.core.parser.node.AAnySubstitution;
 import de.be4.classicalb.core.parser.node.ABecomesSuchSubstitution;
+import de.be4.classicalb.core.parser.node.ABlockSubstitution;
 import de.be4.classicalb.core.parser.node.ADefinitionExpression;
 import de.be4.classicalb.core.parser.node.ADefinitionPredicate;
 import de.be4.classicalb.core.parser.node.AExpressionDefinitionDefinition;
@@ -17,10 +18,13 @@ import de.be4.classicalb.core.parser.node.ALambdaExpression;
 import de.be4.classicalb.core.parser.node.AOperation;
 import de.be4.classicalb.core.parser.node.AOperationsMachineClause;
 import de.be4.classicalb.core.parser.node.APredicateDefinitionDefinition;
+import de.be4.classicalb.core.parser.node.ASelectSubstitution;
+import de.be4.classicalb.core.parser.node.ASkipSubstitution;
 import de.be4.classicalb.core.parser.node.Node;
 import de.be4.classicalb.core.parser.node.PExpression;
 import de.be4.classicalb.core.parser.node.PMachineClause;
 import de.be4.classicalb.core.parser.node.POperation;
+import de.be4.classicalb.core.parser.node.PSubstitution;
 import de.be4.classicalb.core.parser.node.Start;
 import de.be4.classicalb.core.parser.node.TIdentifierLiteral;
 import de.be4.classicalb.core.parser.node.Token;
@@ -173,7 +177,8 @@ public class ASTPrettyPrinter extends ExtendedDFAdapter {
 		putSymbol("AEmptySetExpression", "{}");
 		putSymbol("ABoolSetExpression", "BOOL");
 		putSymbol("AStringSetExpression", "STRING");
-
+		putSymbol("ASkipSubstitution", "skip");
+		
 		putPreEnd("APowSubsetExpression", "POW(", ")");
 		putPreEnd("AConvertBoolExpression", "bool(", ")");
 		putPreEnd("ADomainExpression", "dom(", ")");
@@ -189,6 +194,10 @@ public class ASTPrettyPrinter extends ExtendedDFAdapter {
 		putPreEnd("ATailExpression", "tail(", ")");
 		putPreEnd("AEmptySequenceExpression", "[", "]");
 
+		putPreEnd("ABlockSubstitution", "BEGIN ", " END");
+		// TODO other substitutions
+		
+		
 		put("ASetExtensionExpression", null, "{", ", ", "}", null, null);
 		put("AStructExpression", "struct", "(", ", ", ")", null, null);
 		put("ARecExpression", "rec", "(", ", ", ")", null, null);
@@ -474,6 +483,35 @@ public class ASTPrettyPrinter extends ExtendedDFAdapter {
 		sb.append(" END");
 	}
 
+	@Override
+	public void caseASelectSubstitution(final ASelectSubstitution node) {
+		sb.append("SELECT ");
+		node.getCondition().apply(this);
+		sb.append(" THEN ");
+		betweenChildren(node);
+		node.getThen().apply(this);
+		{
+			final List<PSubstitution> copy = new ArrayList<PSubstitution>(
+					node.getWhenSubstitutions());
+			beginList(node);
+			for (final Iterator<PSubstitution> iterator = copy.iterator(); iterator
+					.hasNext();) {
+				final PSubstitution e = iterator.next();
+				e.apply(this);
+
+				if (iterator.hasNext()) {
+					betweenListElements(node);
+				}
+			}
+			endList(node);
+		}
+		betweenChildren(node);
+		if (node.getElse() != null) {
+			node.getElse().apply(this);
+		}
+		sb.append(" END");
+	}
+
 	@Override
 	public void caseAPredicateDefinitionDefinition(
 			APredicateDefinitionDefinition node) {
diff --git a/src/main/java/de/tla2b/translation/BMacroHandler.java b/src/main/java/de/tla2b/translation/BMacroHandler.java
index 4852956defe7b4098cab47a26a9ab569de318a4a..21443fb9aed69c4ae5206561b762d7bb1c18bd76 100644
--- a/src/main/java/de/tla2b/translation/BMacroHandler.java
+++ b/src/main/java/de/tla2b/translation/BMacroHandler.java
@@ -15,6 +15,7 @@ import tla2sany.semantic.OpApplNode;
 import tla2sany.semantic.OpDefNode;
 import tla2sany.semantic.SymbolNode;
 import de.tla2b.analysis.AbstractASTVisitor;
+import de.tla2b.analysis.BOperation;
 import de.tla2b.analysis.SpecAnalyser;
 import de.tla2b.config.ConfigfileEvaluator;
 
@@ -25,7 +26,7 @@ public class BMacroHandler extends AbstractASTVisitor {
 		ArrayList<OpDefNode> bDefs = new ArrayList<OpDefNode>();
 		for (int i = 0; i < moduleNode.getOpDefs().length; i++) {
 			OpDefNode def = moduleNode.getOpDefs()[i];
-			if (specAnalyser.getBDefinitions().contains(def)) {
+			if(specAnalyser.getUsedDefinitions().contains(def)){
 				if (conEval != null
 						&& conEval.getConstantOverrideTable()
 								.containsValue(def)) {
@@ -40,6 +41,16 @@ public class BMacroHandler extends AbstractASTVisitor {
 		}
 
 		visitAssumptions(moduleNode.getAssumptions());
+		
+		for (BOperation op :  specAnalyser.getBOperations()) {
+			definitionParameters = new HashSet<FormalParamNode>();
+			localVariables = new HashSet<FormalParamNode>();
+
+			visitExprNode(op.getNode());
+
+			definitionParameters = null;
+			localVariables = null;
+		}
 	}
 
 	private HashSet<FormalParamNode> definitionParameters;
@@ -72,6 +83,7 @@ public class BMacroHandler extends AbstractASTVisitor {
 		localVariables = null;
 
 	}
+	
 
 	@Override
 	public void visitBuiltInNode(OpApplNode n) {
diff --git a/src/main/java/de/tla2b/translation/RecursiveFunctionHandler.java b/src/main/java/de/tla2b/translation/RecursiveFunctionHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..fe1a737e9bd9afc5f7ec09d4d51f4b639dfcc0d2
--- /dev/null
+++ b/src/main/java/de/tla2b/translation/RecursiveFunctionHandler.java
@@ -0,0 +1,66 @@
+package de.tla2b.translation;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Hashtable;
+
+import tla2sany.semantic.FormalParamNode;
+import tla2sany.semantic.OpApplNode;
+import tla2sany.semantic.OpDefNode;
+import tla2sany.semantic.SemanticNode;
+import tla2sany.semantic.SymbolNode;
+import de.tla2b.analysis.AbstractASTVisitor;
+import de.tla2b.analysis.SpecAnalyser;
+
+public class RecursiveFunctionHandler extends AbstractASTVisitor {
+
+	private ArrayList<FormalParamNode> paramList;
+	private ArrayList<SymbolNode> externParams;
+
+	private HashSet<OpApplNode> recursiveFunctions = new HashSet<OpApplNode>();
+	private Hashtable<SemanticNode, ArrayList<SymbolNode>> additionalParamsTable = new Hashtable<SemanticNode, ArrayList<SymbolNode>>();
+
+	public RecursiveFunctionHandler(SpecAnalyser specAnalyser) {
+		for (OpDefNode recFunc : specAnalyser.getRecursiveFunctions()) {
+			OpApplNode body = (OpApplNode) recFunc.getBody();
+			recursiveFunctions.add(body);
+			FormalParamNode[][] params = body.getBdedQuantSymbolLists();
+
+			paramList = new ArrayList<FormalParamNode>();
+			FormalParamNode self = body.getUnbdedQuantSymbols()[0];
+			paramList.add(self);
+			for (int i = 0; i < params.length; i++) {
+				for (int j = 0; j < params[i].length; j++) {
+					paramList.add(params[i][j]);
+				}
+			}
+			externParams = new ArrayList<SymbolNode>();
+			visitExprNode(recFunc.getBody());
+			paramList = null;
+			additionalParamsTable.put(body, externParams);
+			additionalParamsTable.put(recFunc, externParams);
+			additionalParamsTable.put(self, externParams);
+		}
+	}
+
+	public void visitFormalParamNode(OpApplNode n) {
+		FormalParamNode param = (FormalParamNode) n.getOperator();
+		if (!paramList.contains(param)) {
+			externParams.add(param);
+		}
+	}
+	
+	public void visitVariableNode(OpApplNode n) {
+		externParams.add(n.getOperator());
+	}
+
+	public ArrayList<SymbolNode> getAdditionalParams(SemanticNode n) {
+		return additionalParamsTable.get(n);
+	}
+
+	
+	public boolean isRecursiveFunction(SemanticNode n) {
+		return additionalParamsTable.containsKey(n);
+	}
+	
+}
diff --git a/src/main/java/de/tla2b/translation/TLA2B.java b/src/main/java/de/tla2b/translation/TLA2B.java
index 0875681a782c9a442f3a961cfd5aae1a2802eab3..9c01419449232e866b3f019decf85e05a426919c 100644
--- a/src/main/java/de/tla2b/translation/TLA2B.java
+++ b/src/main/java/de/tla2b/translation/TLA2B.java
@@ -16,6 +16,7 @@ import de.tla2b.exceptions.FrontEndException;
 import de.tla2b.exceptions.NotImplementedException;
 import de.tla2b.exceptions.TLA2BException;
 import de.tla2b.global.TranslationGlobals;
+import de.tla2b.util.FileUtils;
 import util.FileUtil;
 import util.ToolIO;
 
diff --git a/src/main/java/de/tla2b/translation/Tla2BTranslator.java b/src/main/java/de/tla2b/translation/Tla2BTranslator.java
index 7ec593ee29303a4629a23d696613764c1b222999..64c0659c17601600389997416b3383f509d87da3 100644
--- a/src/main/java/de/tla2b/translation/Tla2BTranslator.java
+++ b/src/main/java/de/tla2b/translation/Tla2BTranslator.java
@@ -13,7 +13,7 @@ import de.tla2b.config.ConfigfileEvaluator;
 import de.tla2b.config.ModuleOverrider;
 import de.tla2b.exceptions.TLA2BException;
 import de.tla2b.global.TranslationGlobals;
-import de.tla2b.pprint.BMachinePrinter;
+import de.tla2b.util.FileUtils;
 import tla2sany.drivers.FrontEndException;
 import tla2sany.drivers.SANY;
 import tla2sany.modanalyzer.SpecObj;
@@ -112,9 +112,9 @@ public class Tla2BTranslator implements TranslationGlobals {
 
 			ModuleOverrider modOver = new ModuleOverrider(moduleNode, conEval);
 			modOver.start();
-			specAnalyser = new SpecAnalyser(moduleNode, conEval);
+			specAnalyser = SpecAnalyser.createSpecAnalyser(moduleNode, conEval);
 		} else {
-			specAnalyser = new SpecAnalyser(moduleNode);
+			specAnalyser = SpecAnalyser.createSpecAnalyser(moduleNode);
 		}
 
 		specAnalyser.start();
diff --git a/src/main/java/de/tla2bAst/BAstCreator.java b/src/main/java/de/tla2bAst/BAstCreator.java
index c885712c9baf614e488f8250f518936f26e9d2b2..3366bc9e3ab857f6c9af06879dcdb9c3fadccf2a 100644
--- a/src/main/java/de/tla2bAst/BAstCreator.java
+++ b/src/main/java/de/tla2bAst/BAstCreator.java
@@ -140,6 +140,7 @@ import de.tla2b.global.BBuiltInOPs;
 import de.tla2b.global.Priorities;
 import de.tla2b.global.TranslationGlobals;
 import de.tla2b.translation.BMacroHandler;
+import de.tla2b.translation.RecursiveFunctionHandler;
 import de.tla2b.types.EnumType;
 import de.tla2b.types.FunctionType;
 import de.tla2b.types.IType;
@@ -156,6 +157,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 	SpecAnalyser specAnalyser;
 	private final PredicateVsExpression predicateVsExpression;
 	private final BMacroHandler bMacroHandler;
+	private final RecursiveFunctionHandler recursiveFunctionHandler;
 
 	final int SUBSTITUTE_PARAM = 29;
 
@@ -180,9 +182,12 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 			SpecAnalyser specAnalyser,
 			UsedExternalFunctions usedExternalFunctions,
 			PredicateVsExpression predicateVsExpression,
-			BMacroHandler bMacroHandler) {
+			BMacroHandler bMacroHandler,
+			RecursiveFunctionHandler recursiveFunctionHandler) {
 		this.predicateVsExpression = predicateVsExpression;
 		this.bMacroHandler = bMacroHandler;
+		this.recursiveFunctionHandler = recursiveFunctionHandler;
+
 		this.conEval = conEval;
 		this.moduleNode = moduleNode;
 		this.specAnalyser = specAnalyser;
@@ -437,7 +442,8 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 					valueList);
 			any.setThen(assign);
 			operation.setOperationBody(any);
-			opList.add(operation);
+			//opList.add(operation);
+			opList.add(op.getBOperation(this));
 		}
 
 		AOperationsMachineClause opClause = new AOperationsMachineClause(opList);
@@ -517,7 +523,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 
 	}
 
-	private AIdentifierExpression createIdentifierNode(SymbolNode symbolNode) {
+	public AIdentifierExpression createIdentifierNode(SymbolNode symbolNode) {
 		if (bMacroHandler.containsSymbolNode(symbolNode)) {
 			return createIdentifierNode(bMacroHandler.getNewName(symbolNode));
 		} else {
@@ -638,7 +644,6 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 				paramList1.add(createIdentifierNode(p));
 				// paramList2.add(createIdentifierNode(p.getName().toString()));
 				TLAType paramType = (TLAType) p.getToolObject(TYPE_ID);
-				// System.out.println(paramType);
 				AEqualPredicate equal = new AEqualPredicate(
 						createIdentifierNode(p), paramType.getBNode());
 				typeList.add(equal);
@@ -710,7 +715,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 		return visitExprNodePredicate(assumeNode.getAssume());
 	}
 
-	private PPredicate visitExprNodePredicate(ExprNode n) {
+	public PPredicate visitExprNodePredicate(ExprNode n) {
 		switch (n.getKind()) {
 		case OpApplKind:
 			return visitOpApplNodePredicate((OpApplNode) n);
@@ -726,9 +731,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 
 		}
 
-		System.out.println(n);
-		System.out.println(n.getClass());
-		throw new RuntimeException();
+		throw new RuntimeException(n.getClass().toString());
 	}
 
 	private PExpression visitExprNodeExpression(ExprNode n) {
@@ -783,8 +786,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 
 		}
 
-		System.out.println(n.getClass());
-		throw new RuntimeException();
+		throw new RuntimeException(n.getClass().toString());
 	}
 
 	private PPredicate visitOpApplNodePredicate(OpApplNode n) {
@@ -803,8 +805,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 		}
 
 		}
-		System.out.println(n.getOperator().getName());
-		throw new RuntimeException();
+		throw new RuntimeException(n.getOperator().getName().toString());
 	}
 
 	private PExpression visitOpApplNodeExpression(OpApplNode n) {
@@ -821,6 +822,19 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 			ExprOrOpArgNode e = (ExprOrOpArgNode) param
 					.getToolObject(SUBSTITUTE_PARAM);
 			if (e == null) {
+				if (recursiveFunctionHandler.isRecursiveFunction(param)) {
+					ArrayList<SymbolNode> list = recursiveFunctionHandler.getAdditionalParams(param);
+					if (list.size() > 0) {
+						AFunctionExpression call = new AFunctionExpression();
+						call.setIdentifier(createIdentifierNode(param));
+						ArrayList<PExpression> params = new ArrayList<PExpression>();
+						for (SymbolNode symbolNode : list) {
+							params.add(createIdentifierNode(symbolNode));
+						}
+						call.setParameters(params);
+						return call;
+					}
+				}
 				return createIdentifierNode(n.getOperator());
 			} else {
 				return visitExprOrOpArgNodeExpression(e);
@@ -836,8 +850,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 		}
 		}
 
-		System.out.println(n.getOperator().getName());
-		throw new RuntimeException();
+		throw new RuntimeException(n.getOperator().getName().toString());
 	}
 
 	private PPredicate visitUserdefinedOpPredicate(OpApplNode n) {
@@ -850,15 +863,16 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 			return visitBBuitInsPredicate(n);
 		}
 
-		List<PExpression> params = new ArrayList<PExpression>();
-		for (int i = 0; i < n.getArgs().length; i++) {
-			params.add(visitExprOrOpArgNodeExpression(n.getArgs()[i]));
-		}
 		if (specAnalyser.getRecursiveFunctions().contains(def)) {
 			return new AEqualPredicate(createIdentifierNode(def),
 					new ABooleanTrueExpression());
 		}
 
+		List<PExpression> params = new ArrayList<PExpression>();
+		for (int i = 0; i < n.getArgs().length; i++) {
+			params.add(visitExprOrOpArgNodeExpression(n.getArgs()[i]));
+		}
+
 		if (predicateVsExpression.getDefinitionType(def) == DefinitionType.EXPRESSION) {
 			ADefinitionExpression defCall = new ADefinitionExpression();
 			defCall.setDefLiteral(new TIdentifierLiteral(getName(def)));
@@ -889,7 +903,19 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 		}
 
 		if (specAnalyser.getRecursiveFunctions().contains(def)) {
-			return createIdentifierNode(def);
+			ArrayList<SymbolNode> list = recursiveFunctionHandler.getAdditionalParams(def);
+			if (list.size() > 0) {
+				AFunctionExpression call = new AFunctionExpression();
+				call.setIdentifier(createIdentifierNode(def));
+				ArrayList<PExpression> params = new ArrayList<PExpression>();
+				for (SymbolNode symbolNode : list) {
+					params.add(createIdentifierNode(symbolNode));
+				}
+				call.setParameters(params);
+				return call;
+			} else {
+				return createIdentifierNode(def);
+			}
 		}
 
 		if (allTLADefinitions.contains(def)) {
@@ -987,8 +1013,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 					new ABooleanTrueExpression());
 
 		}
-		System.out.println(n.getOperator().getName());
-		throw new RuntimeException();
+		throw new RuntimeException(n.getOperator().getName().toString());
 	}
 
 	private PExpression visitBBuitInsExpression(OpApplNode n) {
@@ -1140,8 +1165,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 		}
 
 		}
-		System.out.println(n.getOperator().getName());
-		throw new RuntimeException();
+		throw new RuntimeException(n.getOperator().getName().toString());
 	}
 
 	private PExpression visitBuiltInKindExpression(OpApplNode n) {
@@ -1400,6 +1424,29 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 			lambda.setIdentifiers(idList);
 			lambda.setPredicate(createConjunction(predList));
 			lambda.setExpression(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+
+			if (recursiveFunctionHandler.isRecursiveFunction(n)) {
+				
+				ArrayList<SymbolNode> externParams = recursiveFunctionHandler.getAdditionalParams(n);
+				if(externParams.size()>0){
+					ALambdaExpression lambda2 = new ALambdaExpression();
+					ArrayList<PExpression> shiftedParams = new ArrayList<PExpression>();
+					List<PPredicate> predList2 = new ArrayList<PPredicate>();
+					for (SymbolNode p :externParams) {
+						shiftedParams.add(createIdentifierNode(p));
+
+						AMemberPredicate member = new AMemberPredicate();
+						member.setLeft(createIdentifierNode(p));
+						TLAType t = (TLAType) p.getToolObject(TYPE_ID);
+						member.setRight(t.getBNode());
+						predList2.add(member);
+					}
+					lambda2.setIdentifiers(shiftedParams);
+					lambda2.setPredicate(createConjunction(predList2));
+					lambda2.setExpression(lambda);
+					return lambda2;
+				}
+			}
 			return lambda;
 		}
 
@@ -1658,8 +1705,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 
 		}
 
-		System.out.println(n.getOperator().getName());
-		throw new RuntimeException();
+		throw new RuntimeException(n.getOperator().getName().toString());
 	}
 
 	private PExpression createUnboundedChoose(OpApplNode n) {
@@ -1939,11 +1985,10 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 
 		}
 
-		System.out.println(n.getOperator().getName());
-		throw new RuntimeException();
+		throw new RuntimeException(n.getOperator().getName().toString());
 	}
 
-	private PPredicate visitBounded(OpApplNode n) {
+	public PPredicate visitBounded(OpApplNode n) {
 		FormalParamNode[][] params = n.getBdedQuantSymbolLists();
 		ExprNode[] in = n.getBdedQuantBounds();
 		boolean[] isTuple = n.isBdedQuantATuple();
@@ -1972,7 +2017,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 		return createConjunction(predList);
 	}
 
-	private PPredicate visitExprOrOpArgNodePredicate(ExprOrOpArgNode n) {
+	public PPredicate visitExprOrOpArgNodePredicate(ExprOrOpArgNode n) {
 		if (n instanceof ExprNode) {
 			return visitExprNodePredicate((ExprNode) n);
 		} else {
@@ -1980,7 +2025,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 		}
 	}
 
-	private PExpression visitExprOrOpArgNodeExpression(ExprOrOpArgNode n) {
+	public PExpression visitExprOrOpArgNodeExpression(ExprOrOpArgNode n) {
 
 		if (n instanceof ExprNode) {
 			return visitExprNodeExpression((ExprNode) n);
@@ -1993,7 +2038,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals,
 		return new AIdentifierExpression(createTIdentifierLiteral(name));
 	}
 
-	private PPredicate createConjunction(List<PPredicate> list) {
+	public PPredicate createConjunction(List<PPredicate> list) {
 		if (list.size() == 1)
 			return list.get(0);
 		AConjunctPredicate conj = new AConjunctPredicate();
diff --git a/src/main/java/de/tla2bAst/Translator.java b/src/main/java/de/tla2bAst/Translator.java
index 199fb4812b2574845785a178402e3a47254b14dd..83aeb9218d963174912028ab5b67de67e9a39ce0 100644
--- a/src/main/java/de/tla2bAst/Translator.java
+++ b/src/main/java/de/tla2bAst/Translator.java
@@ -25,6 +25,8 @@ import de.tla2b.global.TranslationGlobals;
 import de.tla2b.output.ASTPrettyPrinter;
 import de.tla2b.pprint.BMachinePrinter;
 import de.tla2b.translation.BMacroHandler;
+import de.tla2b.translation.RecursiveFunctionHandler;
+import de.tla2b.util.FileUtils;
 import tla2sany.drivers.SANY;
 import tla2sany.modanalyzer.SpecObj;
 import tla2sany.semantic.ModuleNode;
@@ -55,7 +57,7 @@ public class Translator implements TranslationGlobals {
 	}
 
 	private void findConfigFile() {
-		String configFileName = removeExtention(moduleFile.getAbsolutePath());
+		String configFileName = FileUtils.removeExtention(moduleFile.getAbsolutePath());
 		configFileName = configFileName + ".cfg";
 		configFile = new File(configFileName);
 		if (!configFile.exists()) {
@@ -189,35 +191,36 @@ public class Translator implements TranslationGlobals {
 
 			ModuleOverrider modOver = new ModuleOverrider(moduleNode, conEval);
 			modOver.start();
-			specAnalyser = new SpecAnalyser(moduleNode, conEval);
+			specAnalyser = SpecAnalyser.createSpecAnalyser(moduleNode, conEval);
 		} else {
-			specAnalyser = new SpecAnalyser(moduleNode);
+			specAnalyser = SpecAnalyser.createSpecAnalyser(moduleNode);
 		}
 		specAnalyser.start();
 		TypeChecker typechecker = new TypeChecker(moduleNode, conEval,
 				specAnalyser);
 		typechecker.start();
-		//specAnalyser.evalIfThenElse();
+		// specAnalyser.evalIfThenElse();
 
 		SymbolRenamer symRenamer = new SymbolRenamer(moduleNode, specAnalyser);
 		symRenamer.start();
-//		BMachinePrinter p = new BMachinePrinter(moduleNode, conEval,
-//				specAnalyser);
-//		bMachineString = p.start().toString();
-
+		// BMachinePrinter p = new BMachinePrinter(moduleNode, conEval,
+		// specAnalyser);
+		// bMachineString = p.start().toString();
 		UsedExternalFunctions usedExternalFunctions = new UsedExternalFunctions(
 				moduleNode, specAnalyser);
-
+		RecursiveFunctionHandler recursiveFunctionHandler = new RecursiveFunctionHandler(
+				specAnalyser);
 		BMacroHandler bMacroHandler = new BMacroHandler(specAnalyser, conEval);
 		BAstCreator bAstCreator = new BAstCreator(moduleNode, conEval,
-				specAnalyser, usedExternalFunctions, predicateVsExpression, bMacroHandler);
+				specAnalyser, usedExternalFunctions, predicateVsExpression,
+				bMacroHandler, recursiveFunctionHandler);
 		this.BAst = bAstCreator.getStartNode();
 		this.bDefinitions = bAstCreator.getBDefinitions();
 		return BAst;
 	}
 
 	public void createMachineFile() {
-		String bFile = removeExtention(moduleFile.getAbsolutePath());
+		String bFile = FileUtils.removeExtention(moduleFile.getAbsolutePath());
 		bFile = bFile + "_tla.mch";
 
 		File machineFile;
@@ -228,7 +231,8 @@ public class Translator implements TranslationGlobals {
 				in = new BufferedReader(new FileReader(machineFile));
 				String firstLine = in.readLine();
 				in.close();
-				if (firstLine != null && !firstLine.startsWith("/*@ generated by TLA2B ")) {
+				if (firstLine != null
+						&& !firstLine.startsWith("/*@ generated by TLA2B ")) {
 					System.err.println("Error: File " + machineFile.getName()
 							+ " already exists"
 							+ " and was not generated by TLA2B.\n"
@@ -249,7 +253,6 @@ public class Translator implements TranslationGlobals {
 			System.exit(-1);
 		}
 
-		
 		ASTPrettyPrinter aP = new ASTPrettyPrinter();
 		BAst.apply(aP);
 		StringBuilder result = aP.getResultAsStringbuilder();
@@ -271,28 +274,7 @@ public class Translator implements TranslationGlobals {
 
 	}
 
-	public static String removeExtention(String filePath) {
-		File f = new File(filePath);
 
-		// if it's a directory, don't remove the extention
-		if (f.isDirectory())
-			return filePath;
-
-		String name = f.getName();
-
-		// Now we know it's a file - don't need to do any special hidden
-		// checking or contains() checking because of:
-		final int lastPeriodPos = name.lastIndexOf('.');
-		if (lastPeriodPos <= 0) {
-			// No period after first character - return name as it was passed in
-			return filePath;
-		} else {
-			// Remove the last period and everything after it
-			File renamed = new File(f.getParent(), name.substring(0,
-					lastPeriodPos));
-			return renamed.getPath();
-		}
-	}
 
 	public Definitions getBDefinitions() {
 		return bDefinitions;
@@ -301,8 +283,8 @@ public class Translator implements TranslationGlobals {
 	public String getBMachineString() {
 		return bMachineString;
 	}
-	
-	public ModuleNode getModuleNode(){
+
+	public ModuleNode getModuleNode() {
 		return moduleNode;
 	}
 
diff --git a/src/test/java/de/tla2b/prettyprintb/RecursiveFunctionTest.java b/src/test/java/de/tla2b/prettyprintb/RecursiveFunctionTest.java
index 3341f3cecf25f5cebf32cd3a3daf2f06606b4021..645819dd4e87e9e98b78e5cf288292741e7c3d38 100644
--- a/src/test/java/de/tla2b/prettyprintb/RecursiveFunctionTest.java
+++ b/src/test/java/de/tla2b/prettyprintb/RecursiveFunctionTest.java
@@ -69,7 +69,7 @@ public class RecursiveFunctionTest {
 				+ "END";
 		compare(expected, module);
 	}
-
+	
 
 
 }
diff --git a/src/test/java/de/tla2b/prettyprintb/SimpleModulesTest.java b/src/test/java/de/tla2b/prettyprintb/SimpleModulesTest.java
index 59879408384a5491b3c3843ef243307cf4c215c9..97dc470262498e22646cff9ac2b7914f272d5369 100644
--- a/src/test/java/de/tla2b/prettyprintb/SimpleModulesTest.java
+++ b/src/test/java/de/tla2b/prettyprintb/SimpleModulesTest.java
@@ -17,7 +17,6 @@ public class SimpleModulesTest {
 		compare(expected, module);
 	}
 
-	
 	@Test
 	public void testSingleOperator() throws Exception {
 		final String module = "-------------- MODULE Testing ----------------\n"
@@ -49,11 +48,32 @@ public class SimpleModulesTest {
 				+ "INVARIANT x : INTEGER \n"
 				+ "INITIALISATION x :(x = 1) \n"
 				+ "OPERATIONS \n"
-				+ "e1 = ANY x_n WHERE x_n : INTEGER & x_n = 1 THEN x := x_n END; \n"
-				+ "e2 = ANY x_n WHERE x_n : INTEGER & x_n = 2 THEN x := x_n END \n"
+				+ "e1 = BEGIN x := 1 END; \n"
+				+ "e2 = BEGIN x := 2 END \n"
 				+ "END";
 		compare(expected, module);
 	}
 	
+	@Test
+	public void testVariables2() throws Exception {
+		final String module = "-------------- MODULE Testing ----------------\n"
+				+ "EXTENDS Naturals\n"
+				+ "VARIABLES x \n"
+				+ "Init == x = 1\n"
+				+ "e1 == /\\ 1= 2 /\\ x'+ 1= 1 \n"
+				+ "e2 == x = 1 /\\ x'= 2 \n"
+				+ "Next == e1 \\/ e2 \n"
+				+ "=================================";
+
+		final String expected = "MACHINE Testing\n"
+				+ "VARIABLES x \n"
+				+ "INVARIANT x : INTEGER \n"
+				+ "INITIALISATION x :(x = 1) \n"
+				+ "OPERATIONS \n"
+				+ "e1 = ANY x_n WHERE 1 = 2 & x_n : INTEGER & x_n + 1 = 1 THEN x := x_n END; \n"
+				+ "e2 = SELECT x = 1 THEN x := 2 END \n"
+				+ "END";
+		compare(expected, module);
+	}
 	
 }
diff --git a/src/test/java/de/tla2b/regression/RegressionTests.java b/src/test/java/de/tla2b/regression/RegressionTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..36e9651dceceb6632ba14cc29415c0f0749fae4c
--- /dev/null
+++ b/src/test/java/de/tla2b/regression/RegressionTests.java
@@ -0,0 +1,40 @@
+package de.tla2b.regression;
+
+import static de.tla2b.util.TestUtil.runModule;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import de.tla2b.util.AbstractParseModuleTest;
+import de.tla2b.util.PolySuite;
+import de.tla2b.util.PolySuite.Config;
+import de.tla2b.util.PolySuite.Configuration;
+
+@RunWith(PolySuite.class)
+public class RegressionTests extends AbstractParseModuleTest{
+	private final File moduleFile;
+
+	public RegressionTests(File machine, Object result) {
+		this.moduleFile = machine;
+	}
+
+	@Test
+	public void testRunTLC() throws Exception {
+		//String[] a = new String[] { moduleFile.getPath() };
+		System.out.println(moduleFile.getPath());
+		runModule(moduleFile.getPath());
+	}
+
+	@Config
+	public static Configuration getConfig() {
+		final ArrayList<String> list = new ArrayList<String>();
+		final ArrayList<String> ignoreList = new ArrayList<String>();
+		
+		list.add("./src/test/resources/examples"); 
+		ignoreList.add("./src/test/resources/testing/");
+		return getConfiguration2(list, ignoreList);
+	}
+}
diff --git a/src/test/java/de/tla2b/util/TestUtil.java b/src/test/java/de/tla2b/util/TestUtil.java
index f7146256f376753125e04a429e303c8700fd5302..4d9e0d079f09b063011722f5469db3c7df2348a5 100644
--- a/src/test/java/de/tla2b/util/TestUtil.java
+++ b/src/test/java/de/tla2b/util/TestUtil.java
@@ -10,6 +10,7 @@ import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
 
+import util.FileUtil;
 import de.be4.classicalb.core.parser.BParser;
 import de.be4.classicalb.core.parser.exceptions.BException;
 import de.be4.classicalb.core.parser.node.Node;
@@ -21,7 +22,6 @@ import de.tla2b.output.Renamer;
 import de.tla2b.translation.Tla2BTranslator;
 import de.tla2bAst.Translator;
 import tla2sany.semantic.AbortException;
-import util.FileUtil;
 import util.ToolIO;
 
 public class TestUtil {
@@ -38,8 +38,6 @@ public class TestUtil {
 	public static void runModule(String tlaFile) throws Exception{
 		Translator t = new Translator(tlaFile);
 		Start start = t.translate();
-		System.out.println(t.getBMachineString());
-		System.out.println("---------------------");
 		//String printResult = getAstStringofBMachineString(t.getBMachineString());
 		//System.out.println(printResult);
 		//System.out.println(getTreeAsString(start));
@@ -205,19 +203,6 @@ public class TestUtil {
 		return testTypeChecker;
 	}
 	
-
-	public static String fileToString(String fileName) throws IOException {
-		StringBuilder res = new StringBuilder();
-		BufferedReader in = new BufferedReader(new FileReader(fileName));
-		String str;
-		while ((str = in.readLine()) != null) {
-			res.append(str + "\n");
-		}
-		in.close();
-		return res.toString();
-	}
-
-
 	public static String getAstStringofBMachineString(final String testMachine)
 			throws BException {
 		final BParser parser = new BParser("testcase");
diff --git a/src/test/resources/prettyprint/OperationsTest/OperationsTest.mch b/src/test/resources/prettyprint/OperationsTest/OperationsTest.mch
new file mode 100644
index 0000000000000000000000000000000000000000..7d8c2bc85a39abb63edfc6e6a3d3a9580da6d8b2
--- /dev/null
+++ b/src/test/resources/prettyprint/OperationsTest/OperationsTest.mch
@@ -0,0 +1,19 @@
+MACHINE OperationsTest
+VARIABLES a, b, c
+INVARIANT
+(a : INTEGER & b : INTEGER) & c : INTEGER
+INITIALISATION
+a, b, c:((a = 1 & b = 2) & c = 3)
+OPERATIONS
+ begin1 = BEGIN skip END;
+
+ begin2 = BEGIN a,b,c := 1,2,3 END;
+
+ any1 = ANY a_n WHERE (a_n : INTEGER & a_n + 1 = 2) & TRUE = TRUE THEN a := a_n END;
+
+ any2 = ANY a_n WHERE ((1 = 1 & a_n : INTEGER) & a_n + 1 = 2) & TRUE = TRUE THEN a := a_n END;
+
+ any3 = ANY a_n WHERE ((a_n : INTEGER & a_n = 2) & a_n > 1) & TRUE = TRUE THEN a := a_n END;
+
+ select = SELECT 1 = 1 THEN a,b,c := 1,2,3 END
+END
diff --git a/src/test/resources/prettyprint/OperationsTest/OperationsTest.tla b/src/test/resources/prettyprint/OperationsTest/OperationsTest.tla
new file mode 100644
index 0000000000000000000000000000000000000000..6ba867cafcef0d110efa12a5141af9720017d7ac
--- /dev/null
+++ b/src/test/resources/prettyprint/OperationsTest/OperationsTest.tla
@@ -0,0 +1,22 @@
+-------------- MODULE OperationsTest ----------------
+EXTENDS Naturals
+VARIABLES a,b,c
+Init == a = 1 /\ b = 2 /\ c =3
+
+begin1 == UNCHANGED<<a,b,c>>
+begin2 == a' = 1  /\ b' = 2 /\ c' = 3
+
+any1 == a' + 1 = 2 /\ UNCHANGED<<b,c>>
+any2 == 1 = 1 /\ a' + 1 = 2 /\ UNCHANGED<<b,c>>
+any3 == a'= 2 /\ a' >1 /\ UNCHANGED<<b,c>>
+
+select == 1 = 1 /\ a' = 1  /\ b' = 2 /\ c' =3
+
+Next == 
+    \/ begin1
+    \/ begin2
+    \/ any1
+    \/ any2
+    \/ any3
+    \/ select
+=================================
\ No newline at end of file
diff --git a/src/test/resources/prettyprint/realworld/FastPaxos.cfg b/src/test/resources/prettyprint/realworld/FastPaxos.cfg
deleted file mode 100644
index abc34f264e9817eac70466647bbf4e109f3fa4d5..0000000000000000000000000000000000000000
--- a/src/test/resources/prettyprint/realworld/FastPaxos.cfg
+++ /dev/null
@@ -1,11 +0,0 @@
-INIT Init
-NEXT Next
-CONSTANTS
-  ClassicNum = {1,3}
-  FastNum    = {2}
-  Acceptor   = {a1,a2,a3}
-  PVal       = {v1,v2}
-  any = any
-  a1=a1 a2=a2 a3=a3  v1=v1 v2=v2
-  Max <- MaxOfSet
-INVARIANT TypeOK
\ No newline at end of file
diff --git a/src/test/resources/prettyprint/realworld/FastPaxos.tla b/src/test/resources/prettyprint/realworld/FastPaxos.tla
deleted file mode 100644
index 1b7faa5424bb1afbdc7071dc347360787b15d677..0000000000000000000000000000000000000000
--- a/src/test/resources/prettyprint/realworld/FastPaxos.tla
+++ /dev/null
@@ -1,178 +0,0 @@
------------------------------- MODULE FastPaxos -----------------------------
-EXTENDS Naturals
-CONSTANTS PVal, Acceptor, FastNum, ClassicNum, a1, a2, a3, v1, v2
-
-NextNum(a) == IF a+1 \in FastNum \cup ClassicNum THEN a+1 ELSE 0
-
-RNum == FastNum \cup ClassicNum
-
-any == CHOOSE v : v \notin PVal
-
-i \prec j == i < j 
-i \preceq j == (i \prec j) \/ (i = j)
-
-MaxOfSet(S) == CHOOSE p \in S: \A n \in S: p \geq n
-Max(S) == CHOOSE i \in S : \A j \in S : j \preceq i
-Message ==
-       [type : {"propose"}, pval : PVal]
-  \cup [type : {"phase1a"}, rnd : RNum]
-  \cup [type : {"phase1b"}, rnd : RNum, vrnd : RNum \cup {0}, 
-         pval : PVal \cup {any}, acc : Acceptor]
-  \cup [type : {"phase2a"}, rnd : RNum, pval : PVal \cup {any}]
-  \cup [type : {"phase2b"}, rnd : RNum, pval : PVal, acc : Acceptor]
-
-Quorum(i) == IF i \in ClassicNum THEN {{a1,a2}, {a1,a3}, {a2, a3}}
-                                   ELSE {{a1,a2,a3}}
-
-
-
-ASSUME 
-  /\ FastNum \cap ClassicNum = {}
-  /\ \A i, j, k \in RNum : (i \prec j) /\ (j \prec k) => (i \prec k)
-  /\ \A i \in RNum : ~(i \prec i)
-  /\ \A i, j \in RNum : (i \preceq j) \/ (j \preceq i)
-  /\ (0 \notin RNum) /\ \A i \in RNum : 0 \prec i
-  /\ \A i \in FastNum : NextNum(i) \in RNum => 
-                          ~\E j \in RNum : (i \prec j) /\ (j \prec NextNum(i))
-                          
-                          
-
-VARIABLES rnd, vrnd, pval, sentMsg, learned
-vars == <<rnd, vrnd, pval, sentMsg, learned>>
-
-TypeOK == 
-  /\ rnd  \in [Acceptor -> RNum \cup {0}]
-  /\ vrnd \in [Acceptor -> RNum \cup {0}]
-  /\ pval \in [Acceptor -> PVal \cup {any}]
-  /\ sentMsg  \in SUBSET Message
-  /\ learned  \in SUBSET PVal
-
-Init ==
-  /\ rnd  = [a \in Acceptor |-> 0]
-  /\ vrnd = [a \in Acceptor |-> 0]
-  /\ pval = [a \in Acceptor |-> any]
-  /\ sentMsg  = {}
-  /\ learned  = {}
------------------------------------------------------------------------------
-Send(m) == sentMsg' = sentMsg \cup {m}
-
-Propose(v) ==  
-  /\ Send([type |-> "propose", pval |-> v])
-  /\ UNCHANGED <<rnd, vrnd, pval, learned>>
-  
-Phase1a(i) == 
-  /\ Send([type |-> "phase1a", rnd |-> i])
-  /\ UNCHANGED <<rnd, vrnd, pval, learned>>
-
-Phase1b(a, i) ==
-  /\ rnd[a] \prec i
-  /\ \E m \in sentMsg : (m.type = "phase1a") /\ (m.rnd = i)
-  /\ rnd' = [rnd EXCEPT ![a] = i]
-  /\ Send([type |-> "phase1b", rnd |-> i, vrnd |-> vrnd[a], pval |-> pval[a], 
-           acc |-> a])
-  /\ UNCHANGED <<vrnd, pval, learned>>
-
-P1bMsg(Q, i) == 
-   {m \in sentMsg : (m.type = "phase1b") /\ (m.acc \in Q) /\ (m.rnd = i)}
-
-SafeSet(M, Q, i) ==
-    LET k  == Max({m.vrnd : m \in M})
-        Vk == {m.pval : m \in {mm \in M : mm.vrnd = k}}
-        Only(v) == \/ Vk = {v}
-                   \/ /\ k \in FastNum
-                      /\ \E R \in Quorum(k) : 
-                           \A a \in Q \cap R :
-                             \E m \in M : /\ m.vrnd = k
-                                          /\ m.pval = v
-                                          /\ m.acc = a
-    IN  IF k = 0 
-          THEN PVal
-          ELSE IF \E v \in  Vk : Only(v)
-                 THEN {CHOOSE v \in {v1}(*Vk*) : Only(v)}
-                 ELSE PVal                     
-
-Phase2a(i, va) ==
-  /\ ~\E m \in sentMsg : (m.type = "phase2a") /\ (m.rnd = i)
-  /\ \E Q \in Quorum(i) : 
-       /\ \A a \in Q : \E m \in sentMsg : /\ m.type = "phase1b"
-                                          /\ m.rnd  = i
-                                          /\ m.acc  = a
-       /\ \/ /\ va \in SafeSet(P1bMsg(Q,i), Q, i)
-             /\ \E m \in sentMsg : /\ m.type \in {"propose", "phase1b"} 
-                                   /\ m.pval = va
-          \/ /\ SafeSet(P1bMsg(Q,i), Q, i) = PVal
-             /\ i \in FastNum
-             /\ va = any
-  /\ Send([type |-> "phase2a", rnd |-> i, pval |-> va])
-  /\ UNCHANGED <<rnd, vrnd, pval, learned>>
-
-Phase2b(i, a, v) ==
-  /\ rnd[a] \preceq i
-  /\ vrnd[a] \prec i
-  /\ \E m \in sentMsg : 
-       /\ m.type = "phase2a"
-       /\ m.rnd = i
-       /\ \/ m.pval = v
-          \/ /\ m.pval = any
-             /\ \E mm \in sentMsg  : (mm.type = "propose") /\ (mm.pval = v)
-  /\ rnd' = [rnd EXCEPT ![a] = i]
-  /\ vrnd'  = [vrnd  EXCEPT ![a] = i]
-  /\ pval' = [pval EXCEPT ![a] = v]
-  /\ Send([type |-> "phase2b", rnd |-> i, pval |-> v, acc |-> a])
-  /\ UNCHANGED learned
-
-Learn(v) ==
-  /\ \E i \in RNum :
-       \E Q \in Quorum(i) : 
-         \A a \in Q : 
-           \E m \in sentMsg : /\ m.type = "phase2b"
-                              /\ m.rnd = i
-                              /\ m.pval = v
-                              /\ m.acc  = a
-  /\ learned' = learned \cup {v}
-  /\ UNCHANGED <<rnd, vrnd, pval, sentMsg>>
------------------------------------------------------------------------------
-P2bToP1b(Q, i) ==
-  LET iMsg == 
-        {m \in sentMsg : (m.type = "phase2b") /\ (m.rnd = i) /\ (m.acc \in Q)}
-  IN  {[type |-> "phase1b", rnd |-> NextNum(i), vrnd |-> i, 
-           pval |-> m.pval, acc |-> m.acc] : m \in iMsg}
-
-LeaderRecovery(i, v) ==
-  /\ ~\E m \in sentMsg : (m.type = "phase2a") /\ (m.rnd = NextNum(i))
-  /\ \E Q \in Quorum(i) : 
-        /\ \A a \in Q : \E m \in P2bToP1b(Q, i) : m.acc  = a
-        /\ v \in SafeSet(P2bToP1b(Q, i), Q, NextNum(i))
-        /\ \E m \in P2bToP1b(Q, i) : m.pval = v
-  /\ Send([type |-> "phase2a", rnd |-> NextNum(i), pval |-> v])
-  /\ UNCHANGED <<rnd, vrnd, pval, learned>>
-
-LeaderlessRecovery(i, a, v) ==  
-  /\ NextNum(i) \in FastNum
-  /\ rnd[a] = i
-  /\ vrnd[a] = i
-  /\ \E Q \in Quorum(i) : 
-        /\ \A b \in Q : \E m \in P2bToP1b(Q, i) : m.acc  = b
-        /\ v \in SafeSet(P2bToP1b(Q, i), Q, NextNum(i))
-        /\ \E m \in P2bToP1b(Q, i): m.pval = v
-  /\ rnd' = [rnd EXCEPT ![a] = NextNum(i)]
-  /\ vrnd'  = [vrnd  EXCEPT ![a] = NextNum(i)]
-  /\ pval' = [pval EXCEPT ![a] = v]
-  /\ Send([type |-> "phase2b", rnd |-> NextNum(i), pval |-> v, acc |-> a])
-  /\ UNCHANGED learned
-
-
------------------------------------------------------------------------------
-Next ==
-  \/ \E v \in PVal : Propose(v) \/  Learn(v)
-  \/ \E i \in RNum : \/ Phase1a(i)
-                     \/ \E a \in Acceptor : \/ Phase1b(a, i)
-                                            \/ \E v \in PVal : Phase2b(i, a, v)
-                     \/ \E va \in PVal \cup {any} : Phase2a(i, va)
-  \/ \E i \in FastNum, v \in PVal : 
-         \/ LeaderRecovery(i, v)
-         \/ \E a \in Acceptor :LeaderlessRecovery(i, a, v)
-
-
-
-=============================================================================
diff --git a/src/test/resources/prettyprint/realworld/ManyAssumes.tla b/src/test/resources/prettyprint/realworld/ManyAssumes.tla
deleted file mode 100644
index 64d96f930c9bd6268f40a9cb4821098b58b65536..0000000000000000000000000000000000000000
--- a/src/test/resources/prettyprint/realworld/ManyAssumes.tla
+++ /dev/null
@@ -1,518 +0,0 @@
------ MODULE ManyAssumes -----
-CONSTANTS a, b, c, d
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-ASSUME a = 1 /\ b = 1 /\ c = 1 /\ d = 1
-
-
-
-
-==========
\ No newline at end of file
diff --git a/src/test/resources/prettyprint/realworld/fowler.mch b/src/test/resources/prettyprint/realworld/fowler.mch
index 7b52dd004d45604ce2eebca929c6dc8abd8b97a1..df9602cdf4f980e91261510e756845221d49c6da 100644
--- a/src/test/resources/prettyprint/realworld/fowler.mch
+++ b/src/test/resources/prettyprint/realworld/fowler.mch
@@ -1,55 +1,17 @@
 MACHINE fowler
 DEFINITIONS
- Init == state = "idle"
-	 & light = "off"
-	 & draw = "closed"
-	 & door = "unlocked"
-	 & panel = "locked"
+ Init == (((state = "idle" & light = "off") & draw = "closed") & door = "unlocked") & panel = "locked";
 VARIABLES state, light, draw, panel, door
 INVARIANT
- state : STRING
- & light : STRING
- & draw : STRING
- & panel : STRING
- & door : STRING
+(((state : STRING & light : STRING) & draw : STRING) & panel : STRING) & door : STRING
 INITIALISATION
- state, light, draw, panel, door:(Init)
+state, light, draw, panel, door:(Init)
 OPERATIONS
- CloseDoor_Op = ANY state_n, door_n
-	WHERE state_n : STRING & door_n : STRING & door = "unlocked"
-	 & door_n = "locked"
-	 & state_n = "active"
-	 & TRUE = TRUE
-	THEN state, door := state_n, door_n END;
+ CloseDoor = SELECT (door = "unlocked" & TRUE = TRUE) & TRUE = TRUE THEN door,state := "locked","active" END;
 
- LightOn_Op = ANY state_n, light_n, panel_n, door_n
-	WHERE state_n : STRING & light_n : STRING & panel_n : STRING & door_n : STRING & light = "off"
-	 & light_n = "on"
-	 & ((draw = "opened" 
-	  => state_n = "unlockedPanel" & panel_n = "unlocked" & door_n = "locked") 
-	 & (not(draw = "opened") 
-	  => state_n = "waitingForDraw"
-	  & panel_n = panel & door_n = door))
-	  & TRUE = TRUE
-	THEN state, light, panel, door := state_n, light_n, panel_n, door_n END;
+ LightOn = ANY state_n, panel_n, door_n WHERE ((((light = "off" & state_n : STRING) & panel_n : STRING) & door_n : STRING) & ((draw = "opened" => (state_n = "unlockedPanel" & panel_n = "unlocked") & door_n = "locked") & (not(draw = "opened") => state_n = "waitingForDraw" & TRUE = TRUE))) & TRUE = TRUE THEN light,state,panel,door := "on",state_n,panel_n,door_n END;
 
- OpenDraw_Op = ANY state_n, draw_n, panel_n, door_n
-	WHERE state_n : STRING & draw_n : STRING & panel_n : STRING & door_n : STRING & draw = "closed"
-	 & draw_n = "opened"
-	 & ((light = "on" 
-	  => state_n = "unlockedPanel" & panel_n = "unlocked" & door_n = "locked") 
-	 & (not(light = "on") 
-	  => state_n = "waitingForLight"
-	  & panel_n = panel & door_n = door))
-	  & TRUE = TRUE
-	THEN state, draw, panel, door := state_n, draw_n, panel_n, door_n END;
+ OpenDraw = ANY state_n, panel_n, door_n WHERE ((((draw = "closed" & state_n : STRING) & panel_n : STRING) & door_n : STRING) & ((light = "on" => (state_n = "unlockedPanel" & panel_n = "unlocked") & door_n = "locked") & (not(light = "on") => state_n = "waitingForLight" & TRUE = TRUE))) & TRUE = TRUE THEN draw,state,panel,door := "opened",state_n,panel_n,door_n END;
 
- ClosePanel_Op = ANY state_n, light_n, draw_n, panel_n, door_n
-	WHERE state_n : STRING & light_n : STRING & draw_n : STRING & panel_n : STRING & door_n : STRING & panel = "unlocked"
-	 & panel_n = "locked"
-	 & light_n = "off"
-	 & draw_n = "closed"
-	 & door_n = "unlocked"
-	 & state_n = "idle"
-	THEN state, light, draw, panel, door := state_n, light_n, draw_n, panel_n, door_n END
-END
+ ClosePanel = SELECT panel = "unlocked" THEN panel,light,draw,door,state := "locked","off","closed","unlocked","idle" END
+END
\ No newline at end of file
diff --git a/src/test/resources/prettyprint/realworld/microwave.mch b/src/test/resources/prettyprint/realworld/microwave.mch
index 9a31d390f00429985df08f9d5946dfa82c35a097..479ea776d580db4c7bdcb17744c7311115d5f9f6 100644
--- a/src/test/resources/prettyprint/realworld/microwave.mch
+++ b/src/test/resources/prettyprint/realworld/microwave.mch
@@ -1,94 +1,24 @@
 MACHINE microwave
 DEFINITIONS
- Init == magnetron_running = FALSE
-	 & door_open = FALSE
-	 & button_locked = FALSE
-	 & error = FALSE
-	 & time = 0;
-
- Action_Start == error = FALSE
-	 & magnetron_running = FALSE
-	 & door_open = FALSE
-	 & time /= 0
-	 & magnetron_running_n = TRUE
-	 & button_locked_n = TRUE
-	 & door_open_n = door_open & time_n = time & error_n = error;
-
- Action_Stop == magnetron_running = TRUE
-	 & magnetron_running_n = FALSE
-	 & button_locked_n = FALSE
-	 & time_n = 0
-	 & door_open_n = door_open & error_n = error;
-
- Door_Locked_When_Heating == (magnetron_running = TRUE => door_open = FALSE)
-	 & (magnetron_running = TRUE => button_locked = TRUE);
-
+ Init == (((magnetron_running = FALSE & door_open = FALSE) & button_locked = FALSE) & error = FALSE) & time = 0;
+ Action_Start == (((((error = FALSE & magnetron_running = FALSE) & door_open = FALSE) & time /= 0) & magnetron_running_n = TRUE) & button_locked_n = TRUE) & TRUE = TRUE;
+ Action_Stop == (((magnetron_running = TRUE & magnetron_running_n = FALSE) & button_locked_n = FALSE) & time_n = 0) & TRUE = TRUE;
+ Door_Locked_When_Heating == (magnetron_running = TRUE => door_open = FALSE) & (magnetron_running = TRUE => button_locked = TRUE);
 VARIABLES magnetron_running, door_open, button_locked, time, error
 INVARIANT
- magnetron_running : BOOL
- & door_open : BOOL
- & button_locked : BOOL
- & time : INTEGER
- & error : BOOL
- & Door_Locked_When_Heating
+((((magnetron_running : BOOL & door_open : BOOL) & button_locked : BOOL) & time : INTEGER) & error : BOOL) & Door_Locked_When_Heating
 INITIALISATION
- magnetron_running, door_open, button_locked, time, error:(Init)
+magnetron_running, door_open, button_locked, time, error:(Init)
 OPERATIONS
- Action_Open_Door_Op = ANY door_open_n
-	WHERE door_open_n : BOOL & button_locked = FALSE
-	 & magnetron_running = FALSE
-	 & door_open = FALSE
-	 & door_open_n = TRUE
-	 & TRUE = TRUE
-	THEN door_open := door_open_n END;
+ Action_Open_Door = SELECT (((button_locked = FALSE & magnetron_running = FALSE) & door_open = FALSE) & TRUE = TRUE) & TRUE = TRUE THEN door_open := TRUE END;
 
- Action_Close_Door_Op = ANY door_open_n
-	WHERE door_open_n : BOOL & door_open = TRUE
-	 & door_open_n = FALSE
-	 & TRUE = TRUE
-	THEN door_open := door_open_n END;
+ Action_Close_Door = SELECT (door_open = TRUE & TRUE = TRUE) & TRUE = TRUE THEN door_open := FALSE END;
 
- Action_Change_Time_Op = ANY time_n
-	WHERE time_n : INTEGER & magnetron_running = FALSE
-	 & (time = 180
-	 & time_n = 120
-	 or (time = 120
-	 & time_n = 90)
-	 or (time = 90
-	 & time_n = 60)
-	 or (time = 60
-	 & time_n = 30)
-	 or (time = 30
-	 & time_n = 15)
-	 or (time = 15
-	 & time_n = 180)
-	 or (time = 0
-	 & time_n = 180))
-	 & TRUE = TRUE
-	THEN time := time_n END;
+ Action_Change_Time = ANY time_n WHERE ((magnetron_running = FALSE & time_n : INTEGER) & (((((((time = 180 & time_n = 120) or (time = 120 & time_n = 90)) or (time = 90 & time_n = 60)) or (time = 60 & time_n = 30)) or (time = 30 & time_n = 15)) or (time = 15 & time_n = 180)) or (time = 0 & time_n = 180))) & TRUE = TRUE THEN time := time_n END;
 
- Action_Button_S_Op = ANY magnetron_running_n, door_open_n, button_locked_n, time_n, error_n
-	WHERE magnetron_running_n : BOOL & door_open_n : BOOL & button_locked_n : BOOL & time_n : INTEGER & error_n : BOOL & (magnetron_running = FALSE 
-	  => Action_Start) 
-	 & (not(magnetron_running = FALSE) 
-	  => Action_Stop)
-	THEN magnetron_running, door_open, button_locked, time, error := magnetron_running_n, door_open_n, button_locked_n, time_n, error_n END;
+ Action_Button_S = ANY magnetron_running_n, door_open_n, button_locked_n, time_n, error_n WHERE ((((magnetron_running_n : BOOL & door_open_n : BOOL) & button_locked_n : BOOL) & time_n : INTEGER) & error_n : BOOL) & ((magnetron_running = FALSE => Action_Start) & (not(magnetron_running = FALSE) => Action_Stop)) THEN magnetron_running,door_open,button_locked,time,error := magnetron_running_n,door_open_n,button_locked_n,time_n,error_n END;
 
- Action_Error_Op = ANY magnetron_running_n, error_n
-	WHERE magnetron_running_n : BOOL & error_n : BOOL & error_n = TRUE
-	 & magnetron_running_n = FALSE
-	 & TRUE = TRUE
-	THEN magnetron_running, error := magnetron_running_n, error_n END;
+ Action_Error = BEGIN error,magnetron_running := TRUE,FALSE END;
 
- Action_Tick_Op = ANY magnetron_running_n, door_open_n, button_locked_n, time_n, error_n
-	WHERE magnetron_running_n : BOOL & door_open_n : BOOL & button_locked_n : BOOL & time_n : INTEGER & error_n : BOOL & magnetron_running = TRUE
-	 & ((time /= 1 
-	  => time_n = time - 1
-	  & door_open_n = door_open & magnetron_running_n = magnetron_running & button_locked_n = button_locked & error_n = error) 
-	 & (not(time /= 1) 
-	  => time_n = 0
-	  & magnetron_running_n = FALSE
-	  & button_locked_n = FALSE
-	  & door_open_n = door_open & error_n = error))
-	THEN magnetron_running, door_open, button_locked, time, error := magnetron_running_n, door_open_n, button_locked_n, time_n, error_n END
+ Action_Tick = ANY magnetron_running_n, door_open_n, button_locked_n, time_n, error_n WHERE (((((magnetron_running = TRUE & magnetron_running_n : BOOL) & door_open_n : BOOL) & button_locked_n : BOOL) & time_n : INTEGER) & error_n : BOOL) & ((time /= 1 => time_n = time - 1 & TRUE = TRUE) & (not(time /= 1) => ((time_n = 0 & magnetron_running_n = FALSE) & button_locked_n = FALSE) & TRUE = TRUE)) THEN magnetron_running,door_open,button_locked,time,error := magnetron_running_n,door_open_n,button_locked_n,time_n,error_n END
 END
\ No newline at end of file
diff --git a/src/test/resources/simpleModules/Foo1.tla b/src/test/resources/simpleModules/Foo1.tla
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000