Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/cli/ArgumentsParser.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/cli/ArgumentsParser.java	(revision 95)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/cli/ArgumentsParser.java	(revision 96)
@@ -13,7 +13,4 @@
 
 import de.uni_hildesheim.sse.model.varModel.IvmlKeyWords;
-import de.uni_hildesheim.sse.utils.logger.AdvancedJavaLogger;
-import de.uni_hildesheim.sse.utils.logger.EASyLoggerFactory;
-import de.uni_hildesheim.sse.utils.logger.LoggingLevel;
 
 /**
Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter.java	(revision 95)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter.java	(revision 96)
@@ -15,4 +15,5 @@
 import de.uni_hildesheim.sse.model.cst.ConstraintSyntaxTree;
 import de.uni_hildesheim.sse.model.cst.OCLFeatureCall;
+import de.uni_hildesheim.sse.model.cst.Parenthesis;
 import de.uni_hildesheim.sse.model.cst.Variable;
 import de.uni_hildesheim.sse.model.cstEvaluation.EvaluationVisitor;
@@ -36,4 +37,5 @@
  */
 public class MaxTermConverter implements ICNFConvertStrategy {
+    public static final BigInteger TWO = BigInteger.valueOf(2);
     private static final EASyLogger LOGGER = EASyLoggerFactory.INSTANCE.getLogger(MaxTermConverter.class, Bundle.ID);
 
@@ -71,37 +73,51 @@
      */
     private void createCNFParts(ConstraintSyntaxTree originalConstraint) {
-        // Get an array of all variables in the constraint
-        DeclrationInConstraintFinder finder = new DeclrationInConstraintFinder(originalConstraint);
-        Set<AbstractVariable> declarations = finder.getDeclarations();
-        AbstractVariable[] declarationArray = declarations.toArray(new AbstractVariable[] {});
-        Arrays.sort(declarationArray, new Comparator<AbstractVariable>() {
-            public int compare(AbstractVariable o1, AbstractVariable o2) {
-                return o1.getName().compareTo(o2.getName());
-            }
-        });
-        
-        // Create a project which only contains our single Constraint
-        Project singleConstraintProject = new Project("SingleConstraintProject");
-        Constraint constraintCopy = null;
-        try {
-            constraintCopy = new Constraint(originalConstraint, singleConstraintProject);
-        } catch (CSTSemanticException e) {
-            // Cannot happen
-            LOGGER.exception(e);
-        }
-        singleConstraintProject.add(constraintCopy);
-        for (AbstractVariable var : declarationArray) {
-            singleConstraintProject.add(var);
-        }
-        
-        // Create a configuration object for the singleConstraintProject
-        Configuration config = new Configuration(singleConstraintProject);
-        
-        if (declarationArray.length >= 16) {
-//            System.out.println("Handling big constraint: " + declarationArray.length);
-            handleBigConstraint(originalConstraint, declarationArray, config);
-//            System.out.println("Done.");
+        if (originalConstraint instanceof Parenthesis) {
+            // Unpack constraint if there are parenthesis at the top level
+            createCNFParts(((Parenthesis) originalConstraint).getExpr()); 
+        } else if (originalConstraint instanceof OCLFeatureCall
+            && OclKeyWords.AND.equals(((OCLFeatureCall) originalConstraint).getOperation())) {
+            
+            // Split top level AND calls into two separate terms
+            OCLFeatureCall call = (OCLFeatureCall) originalConstraint;
+            createCNFParts(call.getOperand());
+            createCNFParts(call.getParameter(0));
         } else {
-            handleSmallConstraint(originalConstraint, declarationArray, config);
+            // Stop recursion!
+            
+            // Get an array of all variables in the constraint
+            DeclrationInConstraintFinder finder = new DeclrationInConstraintFinder(originalConstraint);
+            Set<AbstractVariable> declarations = finder.getDeclarations();
+            AbstractVariable[] declarationArray = declarations.toArray(new AbstractVariable[] {});
+            Arrays.sort(declarationArray, new Comparator<AbstractVariable>() {
+                public int compare(AbstractVariable o1, AbstractVariable o2) {
+                    return o1.getName().compareTo(o2.getName());
+                }
+            });
+            
+            // Create a project which only contains our single Constraint
+            Project singleConstraintProject = new Project("SingleConstraintProject");
+            Constraint constraintCopy = null;
+            try {
+                constraintCopy = new Constraint(originalConstraint, singleConstraintProject);
+            } catch (CSTSemanticException e) {
+                // Cannot happen
+                LOGGER.exception(e);
+            }
+            singleConstraintProject.add(constraintCopy);
+            for (AbstractVariable var : declarationArray) {
+                singleConstraintProject.add(var);
+            }
+            
+            // Create a configuration object for the singleConstraintProject
+            Configuration config = new Configuration(singleConstraintProject);
+            
+            if (declarationArray.length >= 16) {
+    //            System.out.println("Handling big constraint: " + declarationArray.length);
+                handleBigConstraint(originalConstraint, declarationArray, config);
+    //            System.out.println("Done.");
+            } else {
+                handleSmallConstraint(originalConstraint, declarationArray, config);
+            }
         }
     }
@@ -180,9 +196,7 @@
         evalVisitor.init(config, null, false, null);
         // for each combination of the variables (true or false)
-        for (BigInteger i = new BigInteger("0"); i.compareTo(new BigInteger("2").pow(declarationArray.length)) == -1;
-                i = i.add(new BigInteger("1"))) {
-//            if (i.mod(new BigInteger("1000")).compareTo(new BigInteger("0")) == 0) {
-//                System.out.println(i + "/" + new BigInteger("2").pow(declarationArray.length));
-//            }
+        for (BigInteger i = BigInteger.ZERO; i.compareTo(TWO.pow(declarationArray.length)) == -1;
+            i = i.add(BigInteger.ONE)) {
+            
             boolean[] state = new boolean[declarationArray.length];
             for (int j = 0; j < state.length; j++) {
Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter2.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter2.java	(revision 95)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter2.java	(revision 96)
@@ -25,5 +25,4 @@
 public class MaxTermConverter2 extends MaxTermConverter {
     private static final EASyLogger LOGGER = EASyLoggerFactory.INSTANCE.getLogger(MaxTermConverter2.class, Bundle.ID);
-    private static final BigInteger TWO = BigInteger.valueOf(2);
     private static final NumberFormat PERCENT_FORMAT = NumberFormat.getPercentInstance();
     static {
@@ -39,8 +38,5 @@
         Configuration config) {
         
-        lastTime = System.currentTimeMillis();
-        totalSteps = TWO.pow(declarationArray.length);
-        elapsedSteps = BigInteger.ZERO;
-        handleConstraint(originalConstraint, declarationArray, config, 0);
+        handleBigConstraint(originalConstraint, declarationArray, config);
     }
     
