diff --git a/build.gradle b/build.gradle
index 946dc73707cffc16da65f53a7db5d122d4a2b3d6..f3ce79c93c20a6ec89088ec8e79abcb5f79f759d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -37,7 +37,7 @@ dependencies {
 
 	testCompile (group: 'junit', name: 'junit', version: '4.7')
 	testCompile (group: 'de.prob', name: 'tla2b', version: '1.0.4-SNAPSHOT')
-    testCompile (group: 'de.prob', name: 'tla2bAST', version: '1.0.0-SNAPSHOT')
+    testCompile (group: 'de.prob', name: 'tla2bAST', version: '1.0.5-SNAPSHOT')
 
 	releaseJars (group: 'de.tla', name: 'tlatools', version: '1.0.0-SNAPSHOT')
 	releaseJars (group: 'de.prob', name: 'prologlib', version: parser_version)
diff --git a/src/main/java/de/tlc4b/analysis/ConstantsEliminator.java b/src/main/java/de/tlc4b/analysis/ConstantsEliminator.java
index d97d97f409c00004c820f169da14a56320026179..329d7290dcedc3cce236043284a5a4e15bf16ded 100644
--- a/src/main/java/de/tlc4b/analysis/ConstantsEliminator.java
+++ b/src/main/java/de/tlc4b/analysis/ConstantsEliminator.java
@@ -10,6 +10,7 @@ import java.util.LinkedList;
 import java.util.Map.Entry;
 
 import de.be4.classicalb.core.parser.analysis.DepthFirstAdapter;
+import de.be4.classicalb.core.parser.node.AAbstractConstantsMachineClause;
 import de.be4.classicalb.core.parser.node.ACardExpression;
 import de.be4.classicalb.core.parser.node.AConjunctPredicate;
 import de.be4.classicalb.core.parser.node.AConstantsMachineClause;
@@ -54,7 +55,7 @@ public class ConstantsEliminator extends DepthFirstAdapter {
 		this.integerValueTable = new HashMap<Node, Integer>();
 		this.machineContext = machineContext;
 	}
-	
+
 	public void start() {
 		ConstantsInTreeFinder constantInTreeFinder = new ConstantsInTreeFinder();
 
@@ -76,16 +77,13 @@ public class ConstantsEliminator extends DepthFirstAdapter {
 
 		// creating a new list of the constants, because constants will be
 		// removed from the original list
-		AConstantsMachineClause constantsMachineClause = machineContext
-				.getConstantsMachineClause();
-		if (null != constantsMachineClause) {
-			LinkedList<Node> oldConstants = new LinkedList<Node>(machineContext
-					.getConstantsMachineClause().getIdentifiers());
+		LinkedList<Node> oldConstants = new LinkedList<Node>(machineContext.getConstantArrayList());
+		if (oldConstants.size() > 0) {
 			evalIdentifier(oldConstants);
 		}
-		
-		//TODO adapting the elimination of constants to scalar parameters  
-		//evalIdentifier(machineContext.getScalarParameter().values());
+
+		// TODO adapting the elimination of constants to scalar parameters
+		// evalIdentifier(machineContext.getScalarParameter().values());
 	}
 
 	private void evalIdentifier(Collection<Node> ids) {
@@ -140,13 +138,9 @@ public class ConstantsEliminator extends DepthFirstAdapter {
 	}
 
 	private void removeConstant(AIdentifierExpression id) {
-		AConstantsMachineClause constantsMachineClause = machineContext
-				.getConstantsMachineClause();
-		constantsMachineClause.getIdentifiers().remove(id);
-
 		HashMap<String, Node> constants = machineContext.getConstants();
 		for (Entry<String, Node> entry : constants.entrySet()) {
-			if(entry.getValue() == id){
+			if (entry.getValue() == id) {
 				constants.remove(entry.getKey());
 				break;
 			}
@@ -167,10 +161,10 @@ public class ConstantsEliminator extends DepthFirstAdapter {
 			Node parentParent = conjunction.parent();
 			if (parentParent instanceof APropertiesMachineClause) {
 				((APropertiesMachineClause) parentParent).setPredicates(other);
-			}else if (parentParent instanceof AConjunctPredicate){
-				if (((AConjunctPredicate) parentParent).getLeft() == parent){
+			} else if (parentParent instanceof AConjunctPredicate) {
+				if (((AConjunctPredicate) parentParent).getLeft() == parent) {
 					((AConjunctPredicate) parentParent).setLeft(other);
-				}else{
+				} else {
 					((AConjunctPredicate) parentParent).setRight(other);
 				}
 			}
@@ -270,9 +264,9 @@ public class ConstantsEliminator extends DepthFirstAdapter {
 				analyseEqualsPredicate((AEqualPredicate) n);
 				return;
 			} else if (n instanceof AGreaterPredicate) {
-				//analyseGreaterPredicate((AGreaterPredicate) n);
+				// analyseGreaterPredicate((AGreaterPredicate) n);
 			} else if (n instanceof ALessEqualPredicate) {
-				//analyseLessEqualPredicate((ALessEqualPredicate) n);
+				// analyseLessEqualPredicate((ALessEqualPredicate) n);
 			} else if (n instanceof AConjunctPredicate) {
 				analysePredicate(((AConjunctPredicate) n).getLeft());
 				analysePredicate(((AConjunctPredicate) n).getRight());
diff --git a/src/main/java/de/tlc4b/analysis/MachineContext.java b/src/main/java/de/tlc4b/analysis/MachineContext.java
index 8f603c19bd5a5584291eb942b5aa1d6e4244ec7f..837641969cbfd6bec11394dec15b160206ef3fd0 100644
--- a/src/main/java/de/tlc4b/analysis/MachineContext.java
+++ b/src/main/java/de/tlc4b/analysis/MachineContext.java
@@ -10,9 +10,11 @@ import java.util.Hashtable;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map.Entry;
 
 import de.be4.classicalb.core.parser.Utils;
 import de.be4.classicalb.core.parser.analysis.DepthFirstAdapter;
+import de.be4.classicalb.core.parser.node.AAbstractConstantsMachineClause;
 import de.be4.classicalb.core.parser.node.AAbstractMachineParseUnit;
 import de.be4.classicalb.core.parser.node.AAnySubstitution;
 import de.be4.classicalb.core.parser.node.AAssertionsMachineClause;
@@ -79,6 +81,7 @@ public class MachineContext extends DepthFirstAdapter {
 	private final ArrayList<LTLFormulaVisitor> ltlVisitors;
 	private final PPredicate constantsSetup;
 
+	private boolean originallyHadConstants = false;
 	// machine identifier
 	private final LinkedHashMap<String, Node> setParameter;
 	private final LinkedHashMap<String, Node> scalarParameter;
@@ -98,7 +101,6 @@ public class MachineContext extends DepthFirstAdapter {
 	private AConstraintsMachineClause constraintMachineClause;
 	private ASeesMachineClause seesMachineClause;
 	private ASetsContextClause setsMachineClause;
-	private AConstantsMachineClause constantsMachineClause;
 	private ADefinitionsMachineClause definitionMachineClause;
 	private APropertiesMachineClause propertiesMachineClause;
 	private AInvariantMachineClause invariantMachineClause;
@@ -474,7 +476,21 @@ public class MachineContext extends DepthFirstAdapter {
 
 	@Override
 	public void caseAConstantsMachineClause(AConstantsMachineClause node) {
-		this.constantsMachineClause = node;
+		originallyHadConstants = true;
+		List<PExpression> copy = new ArrayList<PExpression>(
+				node.getIdentifiers());
+		for (PExpression e : copy) {
+			AIdentifierExpression c = (AIdentifierExpression) e;
+			String name = Utils.getIdentifierAsString(c.getIdentifier());
+			exist(c.getIdentifier());
+			constants.put(name, c);
+		}
+	}
+
+	@Override
+	public void caseAAbstractConstantsMachineClause(
+			AAbstractConstantsMachineClause node) {
+		originallyHadConstants = true;
 		List<PExpression> copy = new ArrayList<PExpression>(
 				node.getIdentifiers());
 		for (PExpression e : copy) {
@@ -979,6 +995,14 @@ public class MachineContext extends DepthFirstAdapter {
 		return scalarParameter;
 	}
 
+	public ArrayList<Node> getConstantArrayList() {
+		ArrayList<Node> list = new ArrayList<Node>();
+		for (Entry<String, Node> entry : constants.entrySet()) {
+			list.add(entry.getValue());
+		}
+		return list;
+	}
+
 	public LinkedHashMap<String, Node> getConstants() {
 		return constants;
 	}
@@ -1047,10 +1071,6 @@ public class MachineContext extends DepthFirstAdapter {
 		return setsMachineClause;
 	}
 
-	public AConstantsMachineClause getConstantsMachineClause() {
-		return constantsMachineClause;
-	}
-
 	public APropertiesMachineClause getPropertiesMachineClause() {
 		return propertiesMachineClause;
 	}
@@ -1089,6 +1109,9 @@ public class MachineContext extends DepthFirstAdapter {
 		return constantsSetup;
 	}
 
+	public boolean originallyHadConstants() {
+		return originallyHadConstants;
+	}
 }
 
 class PMachineClauseComparator implements Comparator<PMachineClause>,
@@ -1099,8 +1122,9 @@ class PMachineClauseComparator implements Comparator<PMachineClause>,
 	static {
 		// declarations clauses
 
-		priority.put(ASeesMachineClause.class, 11);
-		priority.put(ASetsMachineClause.class, 10);
+		priority.put(ASeesMachineClause.class, 12);
+		priority.put(ASetsMachineClause.class, 11);
+		priority.put(AAbstractConstantsMachineClause.class, 10);
 		priority.put(AConstantsMachineClause.class, 9);
 		priority.put(AVariablesMachineClause.class, 8);
 		priority.put(AConcreteVariablesMachineClause.class, 7);
diff --git a/src/main/java/de/tlc4b/analysis/PrecedenceCollector.java b/src/main/java/de/tlc4b/analysis/PrecedenceCollector.java
index a735877e2b5b9aa4ad426ecd6bb44ebd3ca5c1f9..559140c2640cba38d9675d0cf725207d4953d06a 100644
--- a/src/main/java/de/tlc4b/analysis/PrecedenceCollector.java
+++ b/src/main/java/de/tlc4b/analysis/PrecedenceCollector.java
@@ -56,7 +56,6 @@ public class PrecedenceCollector extends DepthFirstAdapter {
 		put("ASetSubtractionExpression", 8, 8, false);
 		put("AIntervalExpression", 9, 9, true);
 
-		put("AAddExpression", 10, 10, true);
 		put("AAddExpression", 10, 10, true);
 
 		put("AModuloExpression", 10, 11, true);
diff --git a/src/main/java/de/tlc4b/analysis/Typechecker.java b/src/main/java/de/tlc4b/analysis/Typechecker.java
index 58d21f244c243c687b13877f32239f6ae203cc1b..d5939c6544ac8753e0a7a4e513c8f594a87cb32c 100644
--- a/src/main/java/de/tlc4b/analysis/Typechecker.java
+++ b/src/main/java/de/tlc4b/analysis/Typechecker.java
@@ -76,7 +76,7 @@ public class Typechecker extends DepthFirstAdapter implements ITypechecker {
 		}
 
 	}
-	
+
 	private void checkConstantsSetup() {
 		PPredicate p = machineContext.getConstantsSetup();
 		if (p != null) {
@@ -87,8 +87,9 @@ public class Typechecker extends DepthFirstAdapter implements ITypechecker {
 				String c = entry.getKey();
 				Node n = entry.getValue();
 				if (getType(n).isUntyped()) {
-					throw new TypeErrorException("Can not infer type of constant '"
-							+ c + "': " + getType(n));
+					throw new TypeErrorException(
+							"Can not infer type of constant '" + c + "': "
+									+ getType(n));
 				}
 			}
 		}
@@ -100,7 +101,6 @@ public class Typechecker extends DepthFirstAdapter implements ITypechecker {
 		node.getPredicate().apply(this);
 	}
 
-
 	public void setType(Node node, BType t) {
 		this.types.put(node, t);
 		if (t instanceof AbstractHasFollowers) {
@@ -205,6 +205,18 @@ public class Typechecker extends DepthFirstAdapter implements ITypechecker {
 		}
 	}
 
+	@Override
+	public void caseAAbstractConstantsMachineClause(
+			AAbstractConstantsMachineClause node) {
+		List<PExpression> copy = new ArrayList<PExpression>(
+				node.getIdentifiers());
+		for (PExpression e : copy) {
+			AIdentifierExpression id = (AIdentifierExpression) e;
+			UntypedType u = new UntypedType();
+			setType(id, u);
+		}
+	}
+
 	@Override
 	public void caseAVariablesMachineClause(AVariablesMachineClause node) {
 		List<PExpression> copy = new ArrayList<PExpression>(
@@ -215,9 +227,10 @@ public class Typechecker extends DepthFirstAdapter implements ITypechecker {
 			setType(v, u);
 		}
 	}
-	
+
 	@Override
-	public void caseAConcreteVariablesMachineClause(AConcreteVariablesMachineClause node) {
+	public void caseAConcreteVariablesMachineClause(
+			AConcreteVariablesMachineClause node) {
 		List<PExpression> copy = new ArrayList<PExpression>(
 				node.getIdentifiers());
 		for (PExpression e : copy) {
@@ -226,8 +239,7 @@ public class Typechecker extends DepthFirstAdapter implements ITypechecker {
 			setType(v, u);
 		}
 	}
-	
-	
+
 	/**
 	 * Definitions
 	 */
@@ -327,7 +339,8 @@ public class Typechecker extends DepthFirstAdapter implements ITypechecker {
 			setType(node.getPredicates(), BoolType.getInstance());
 			node.getPredicates().apply(this);
 		}
-		for (Entry<String, Node> entry : machineContext.getScalarParameter().entrySet()) {
+		for (Entry<String, Node> entry : machineContext.getScalarParameter()
+				.entrySet()) {
 			String name = entry.getKey();
 			Node n = entry.getValue();
 			if (getType(n).isUntyped()) {
diff --git a/src/main/java/de/tlc4b/tlc/TLCOutputInfo.java b/src/main/java/de/tlc4b/tlc/TLCOutputInfo.java
index 912acc2edf9b98507edd4702787b40551fd16f65..69e237151d5b0f97dbc804bfebbdd432fcbaa03c 100644
--- a/src/main/java/de/tlc4b/tlc/TLCOutputInfo.java
+++ b/src/main/java/de/tlc4b/tlc/TLCOutputInfo.java
@@ -52,7 +52,7 @@ public class TLCOutputInfo {
 		this.constants = machineContext.getConstants().keySet();
 		this.hasInit = tlaModule.getInitPredicates().size() > 0;
 
-		if (machineContext.getConstantsMachineClause() != null) {
+		if (machineContext.originallyHadConstants()) {
 			this.constantSetup = true;
 		}
 
@@ -69,7 +69,6 @@ public class TLCOutputInfo {
 			namesMapping.put(newName, name);
 			typesTable.put(newName, typechecker.getType(node));
 		}
-
 	}
 
 }
diff --git a/src/test/java/de/tlc4b/prettyprint/ClausesTest.java b/src/test/java/de/tlc4b/prettyprint/ClausesTest.java
index 213ae762fff335e96db2076265ca212e56007122..a4a78c37e1f9a1cb92d72a483a5b04b2031df9e7 100644
--- a/src/test/java/de/tlc4b/prettyprint/ClausesTest.java
+++ b/src/test/java/de/tlc4b/prettyprint/ClausesTest.java
@@ -29,4 +29,28 @@ public class ClausesTest {
 		compare(expected, machine);
 	}
 	
+	@Test
+	public void testAbstractConstants() throws Exception {
+		String machine = "MACHINE test\n"
+				+ "ABSTRACT_CONSTANTS k\n"
+				+ "PROPERTIES k = 1\n"
+				+ "END";
+		String expected = "---- MODULE test ----\n"
+				+ "k == 1 "
+				+ "======";
+		compare(expected, machine);
+	}
+	
+	@Test
+	public void testConcreteConstants() throws Exception {
+		String machine = "MACHINE test\n"
+				+ "CONCRETE_CONSTANTS k\n"
+				+ "PROPERTIES k = 1\n"
+				+ "END";
+		String expected = "---- MODULE test ----\n"
+				+ "k == 1 "
+				+ "======";
+		compare(expected, machine);
+	}
+	
 }
diff --git a/src/test/java/de/tlc4b/util/AbstractParseMachineTest.java b/src/test/java/de/tlc4b/util/AbstractParseMachineTest.java
index 47bfb0fc2b08d6c13aa138b967e14fc9e63957e9..d42a95784f371448ec170fa68541b09deda09940 100644
--- a/src/test/java/de/tlc4b/util/AbstractParseMachineTest.java
+++ b/src/test/java/de/tlc4b/util/AbstractParseMachineTest.java
@@ -29,7 +29,7 @@ public abstract class AbstractParseMachineTest {
 		return dir.listFiles(new MachineFilenameFilter());
 	}
 
-	protected static File[] getMachinesRecursive(String path, ArrayList<String> ignoreList) {
+	protected static File[] getMachinesRecursively(String path, ArrayList<String> ignoreList) {
 		File[] files = walk(path, ignoreList).toArray(new File[0]);
 		return files;
 	}
@@ -74,7 +74,7 @@ public abstract class AbstractParseMachineTest {
 
 		final ArrayList<TLCResult> expectedValues = new ArrayList<TLCResult>();
 		for (String path : list) {
-			File[] machines = getMachinesRecursive(path, ignoreList);
+			File[] machines = getMachinesRecursively(path, ignoreList);
 			allMachines.addAll(Arrays.asList(machines));
 			for (int i = 0; i < machines.length; i++) {
 				expectedValues.add(TLCResult.NoError);