Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter.java	(revision 181)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter.java	(revision 182)
@@ -14,4 +14,5 @@
 import de.uni_hildesheim.sse.model.cst.CSTSemanticException;
 import de.uni_hildesheim.sse.model.cst.ConstraintSyntaxTree;
+import de.uni_hildesheim.sse.model.cst.DebugConstraintTreeVisitor;
 import de.uni_hildesheim.sse.model.cst.OCLFeatureCall;
 import de.uni_hildesheim.sse.model.cst.Parenthesis;
@@ -73,16 +74,60 @@
      */
     private void createCNFParts(ConstraintSyntaxTree originalConstraint) {
+        boolean handled = false;
+        
+        // Unpack constraint if there are parenthesis at the top level
         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
+            createCNFParts(((Parenthesis) originalConstraint).getExpr());
+            handled = true;
+        }
+        
+        // Split top level AND calls into two separate terms
+        if (!handled && originalConstraint instanceof OCLFeatureCall) {
             OCLFeatureCall call = (OCLFeatureCall) originalConstraint;
-            createCNFParts(call.getOperand());
-            createCNFParts(call.getParameter(0));
-        } else {
+            if (call.getOperation().equals(OclKeyWords.AND)) {
+                createCNFParts(call.getOperand());
+                createCNFParts(call.getParameter(0));
+                handled = true;
+            }
+        }
+        
+        // Handle an OR with an AND at one side TODO: handle !AND
+        if (!handled && originalConstraint instanceof OCLFeatureCall) {
+            OCLFeatureCall call = (OCLFeatureCall) originalConstraint;
+            if (call.getOperation().equals(OclKeyWords.OR)) {
+                if (call.getOperand() instanceof OCLFeatureCall) {
+                    OCLFeatureCall operand = (OCLFeatureCall) call.getOperand();
+                    if (operand.getOperation().equals(OclKeyWords.AND)) {
+                        OCLFeatureCall call1 = new OCLFeatureCall(operand.getOperand(),
+                                OclKeyWords.OR, call.getParameter(0));
+                        OCLFeatureCall call2 = new OCLFeatureCall(operand.getParameter(0),
+                                OclKeyWords.OR, call.getParameter(0));
+                        
+                        createCNFParts(call1);
+                        createCNFParts(call2);
+                        handled = true;
+                    }
+                }
+                
+                if (!handled && call.getParameter(0) instanceof OCLFeatureCall) {
+                    OCLFeatureCall parameter = (OCLFeatureCall) call.getParameter(0);
+                    if (parameter.getOperation().equals(OclKeyWords.AND)) {
+                        OCLFeatureCall call1 = new OCLFeatureCall(parameter.getOperand(),
+                                OclKeyWords.OR, call.getOperand());
+                        OCLFeatureCall call2 = new OCLFeatureCall(parameter.getParameter(0),
+                                OclKeyWords.OR, call.getOperand());
+                        
+                        createCNFParts(call1);
+                        createCNFParts(call2);
+                        handled = true;
+                    }
+                }
+            }
+        }
+        
+        if (!handled) {
             // Stop recursion!
+            
+            originalConstraint.accept(new DebugConstraintTreeVisitor());
             
             // Get an array of all variables in the constraint
Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter2.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter2.java	(revision 181)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter2.java	(revision 182)
@@ -12,5 +12,4 @@
 import de.uni_hildesheim.sse.model.varModel.AbstractVariable;
 import de.uni_hildesheim.sse.model.varModel.values.BooleanValue;
-import de.uni_hildesheim.sse.persistency.StringProvider;
 import de.uni_hildesheim.sse.trans.Main;
 import de.uni_hildesheim.sse.utils.logger.EASyLoggerFactory;
@@ -53,9 +52,9 @@
         
         // SE: Arrays with 21 variables are not supported inside my 32 Bit JVM
-        if (declarationArray.length < 21 || "64".equals(System.getProperty("sun.arch.data.model"))) {
-            handleConstraint(originalConstraint, declarationArray, config, 0);            
-        } else {
-            LOGGER.debug(StringProvider.toIvmlString(originalConstraint));
-        }
+//        if (declarationArray.length < 21 || "64".equals(System.getProperty("sun.arch.data.model"))) {
+        handleConstraint(originalConstraint, declarationArray, config, 0);            
+//        } else {
+//            LOGGER.debug(StringProvider.toIvmlString(originalConstraint));
+//        }
     }
     
