Index: /Code/ModelTranslator/.classpath
===================================================================
--- /Code/ModelTranslator/.classpath	(revision 64)
+++ /Code/ModelTranslator/.classpath	(revision 65)
@@ -2,5 +2,5 @@
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry excluding="de/uni_hildesheim/sse/trans/package-info.java|de/uni_hildesheim/sse/trans/in/package-info.java|de/uni_hildesheim/sse/trans/convert/package-info.java" kind="src" path="test"/>
+	<classpathentry excluding="de/uni_hildesheim/sse/trans/package-info.java|de/uni_hildesheim/sse/trans/in/package-info.java|de/uni_hildesheim/sse/trans/convert/package-info.java|de/uni_hildesheim/sse/trans/out/package-info.java" kind="src" path="test"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/Model"/>
Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/out/DimacsWriter.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/out/DimacsWriter.java	(revision 64)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/out/DimacsWriter.java	(revision 65)
@@ -10,8 +10,11 @@
 
 import de.uni_hildesheim.sse.model.cst.ConstraintSyntaxTree;
+import de.uni_hildesheim.sse.model.cst.OCLFeatureCall;
+import de.uni_hildesheim.sse.model.cst.Variable;
 import de.uni_hildesheim.sse.model.varModel.AbstractVariable;
 import de.uni_hildesheim.sse.model.varModel.Constraint;
 import de.uni_hildesheim.sse.model.varModel.IvmlKeyWords;
 import de.uni_hildesheim.sse.model.varModel.Project;
+import de.uni_hildesheim.sse.model.varModel.datatypes.OclKeyWords;
 import de.uni_hildesheim.sse.model.varModel.filter.ConstraintFinder;
 import de.uni_hildesheim.sse.model.varModel.filter.DeclarationFinder;
@@ -67,5 +70,5 @@
         Integer i = 1;
         for (AbstractVariable variable : variableDeclarations) {
-            variables.put(variable.getName(), i++);
+            variables.put(variable.getName(), i);
             writer.append("c ");
             writer.append(i.toString());
@@ -73,4 +76,5 @@
             writer.append(variable.getName());
             writer.append(IvmlKeyWords.LINEFEED);
+            i++;
         }
         
@@ -81,4 +85,6 @@
             ConstraintSyntaxTree tree = constraint.getConsSyntax();
             writeTree(tree);
+            writer.append("0");
+            writer.append(IvmlKeyWords.LINEFEED);
         }
         
@@ -93,5 +99,22 @@
      */
     private void writeTree(ConstraintSyntaxTree tree) throws IOException {
-        
+        if (tree instanceof Variable) {
+            AbstractVariable variable = ((Variable) tree).getVariable();
+            int number = variables.get(variable.getName());
+            writer.append(number + " ");
+        } else if (tree instanceof OCLFeatureCall) {
+            OCLFeatureCall call = (OCLFeatureCall) tree;
+            if (call.getOperation().equals(OclKeyWords.OR)) {
+                writeTree(call.getParameter(0));
+                writeTree(call.getOperand());
+            } else if (call.getOperation().equals(OclKeyWords.NOT)) {
+                writer.append("-");
+                writeTree(call.getOperand());
+            } else {
+                LOGGER.debug("Unexpected Operation in model... skipping"); // TODO
+            }
+        } else {
+            LOGGER.debug("Unexpected ConstraintSyntaxTree in model... skipping"); // TODO
+        }
     }
 
@@ -114,77 +137,4 @@
         }
     }
-    
-        /*DeclarationFinder declarationFinder = new DeclarationFinder(project, FilterType.ALL, null);
-        List<AbstractVariable> variableDeclarations = declarationFinder.getVariableDeclarations(VisibilityType.ALL);
-        Collections.sort(variableDeclarations, new Comparator<AbstractVariable>() {
-            public int compare(AbstractVariable o1, AbstractVariable o2) {
-                return o1.getName().compareTo(o2.getName());
-            }
-        });
-        
-        Integer i = 1;
-        for (AbstractVariable variable : variableDeclarations) {
-            variables.put(variable.getName(), i++);
-            out.print("c ");
-            out.print(i.toString());
-            out.print(" ");
-            out.print(variable.getName());
-            out.println();
-        }
-        
-        // TODO print(p CNF numVars numConstrains);
-        
-        ConstraintFinder constraintFinder = new ConstraintFinder(project);
-        
-        Configuration config = new Configuration(project);
-        EvaluationVisitor evalVisitor = new EvaluationVisitor();
-        // Assignment state = null avoids value assignment in configuration
-        evalVisitor.init(config, null, false, null);
-        
-        int anz = 0;
-        for (Constraint constraint : constraintFinder.getConstraints()) {
-            anz++;
-            if (anz > 100) {
-                break;
-            }
-            
-            DeclrationInConstraintFinder varFinder = new DeclrationInConstraintFinder(constraint.getConsSyntax());
-            
-            Object[] vars = varFinder.getDeclarations().toArray();
-            
-            int bitmask = 0;
-            for (int k = 0; k < Math.pow(2, vars.length); k++) {
-                bitmask++;
-                boolean[] values = new boolean[vars.length];
-                for (int j = 0; j < vars.length; j++) {
-                    IDecisionVariable decisionVar = config.getDecision((AbstractVariable) vars[j]);
-                    try {
-                        boolean bool = (bitmask & 1 << j) != 0;
-                        values[j] = bool;
-                        decisionVar.setValue(bool ? BooleanValue.TRUE : BooleanValue.FALSE, AssignmentState.ASSIGNED);
-                    } catch (ConfigurationException e) {
-                        e.printStackTrace();
-                    }
-                }
-                
-                boolean result = Math.random() >= 0.5; // TODO
-                
-                if (result) {
-                    for (int j = 0; j < vars.length; j++) {
-                        if (!values[j]) {
-                            out.print("-");
-                        }
-                        out.print(variables.get(((AbstractVariable) vars[j]).getName()));
-                        out.print(" ");
-                    }
-                    out.println("0");
-                }
-            }
-            
-            
-            //out.print(constraint.toString());
-            //out.println();
-        }
-        out.flush();*/
-    
+
 }
Index: /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/AllTests.java
===================================================================
--- /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/AllTests.java	(revision 64)
+++ /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/AllTests.java	(revision 65)
@@ -10,4 +10,5 @@
 import de.uni_hildesheim.sse.trans.convert.MaxTermConverterTest;
 import de.uni_hildesheim.sse.trans.in.ModelReaderTest;
+import de.uni_hildesheim.sse.trans.out.DimacsWriterTest;
 
 
@@ -18,5 +19,10 @@
  */
 @RunWith(Suite.class)
-@SuiteClasses({ ModelReaderTest.class, DisjunctionCheckerTest.class, MaxTermConverterTest.class })
+@SuiteClasses({
+    ModelReaderTest.class,
+    DisjunctionCheckerTest.class,
+    MaxTermConverterTest.class,
+    DimacsWriterTest.class
+})
 public class AllTests {
     
Index: /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/out/DimacsWriterTest.java
===================================================================
--- /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/out/DimacsWriterTest.java	(revision 65)
+++ /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/out/DimacsWriterTest.java	(revision 65)
@@ -0,0 +1,78 @@
+package de.uni_hildesheim.sse.trans.out;
+
+import java.io.StringWriter;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import de.uni_hildesheim.sse.model.cst.CSTSemanticException;
+import de.uni_hildesheim.sse.model.cst.OCLFeatureCall;
+import de.uni_hildesheim.sse.model.cst.Variable;
+import de.uni_hildesheim.sse.model.varModel.Constraint;
+import de.uni_hildesheim.sse.model.varModel.DecisionVariableDeclaration;
+import de.uni_hildesheim.sse.model.varModel.IvmlKeyWords;
+import de.uni_hildesheim.sse.model.varModel.Project;
+import de.uni_hildesheim.sse.model.varModel.datatypes.BooleanType;
+import de.uni_hildesheim.sse.model.varModel.datatypes.OclKeyWords;
+
+/**
+ * Tests the {@link DimacsWriterTest} class.
+ * 
+ * @author Adam Krafczyk
+ */
+public class DimacsWriterTest {
+
+    /**
+     * Tests the write method.
+     */
+    @Test
+    public void testWrite() {
+        Project project = new Project("testModel");
+        
+        DecisionVariableDeclaration declA = new DecisionVariableDeclaration("a", BooleanType.TYPE, null);
+        DecisionVariableDeclaration declB = new DecisionVariableDeclaration("b", BooleanType.TYPE, null);
+        DecisionVariableDeclaration declC = new DecisionVariableDeclaration("c", BooleanType.TYPE, null);
+        
+        project.add(declA);
+        project.add(declB);
+        project.add(declC);
+        
+        Variable varA = new Variable(declA);
+        Variable varB = new Variable(declB);
+        Variable varC = new Variable(declC);
+        
+        OCLFeatureCall termA1 = new OCLFeatureCall(varA, OclKeyWords.OR, new OCLFeatureCall(varB, OclKeyWords.NOT));
+        OCLFeatureCall completeTerm1 = new OCLFeatureCall(termA1, OclKeyWords.OR, varC);
+        
+        OCLFeatureCall termA2 = new OCLFeatureCall(new OCLFeatureCall(varA, OclKeyWords.NOT), OclKeyWords.OR, varB);
+        OCLFeatureCall completeTerm2 = new OCLFeatureCall(termA2, OclKeyWords.OR,
+                new OCLFeatureCall(varC, OclKeyWords.NOT));
+        
+        Constraint constraint1 = null;
+        Constraint constraint2 = null;
+        try {
+            constraint1 = new Constraint(completeTerm1, project);
+            constraint2 = new Constraint(completeTerm2, project);
+        } catch (CSTSemanticException e) {
+            // Can't happen...
+            Assert.fail();
+        }
+        project.add(constraint1);
+        project.add(constraint2);
+        
+        StringWriter stringWriter = new StringWriter();
+        DimacsWriter writer = new DimacsWriter(project, stringWriter);
+        writer.write("A test-file", "1.0");
+        //System.out.println(stringWriter.toString());
+        
+        Assert.assertEquals("c A test-file" + IvmlKeyWords.LINEFEED
+            + "c Version 1.0" + IvmlKeyWords.LINEFEED
+            + "c 1 a" + IvmlKeyWords.LINEFEED
+            + "c 2 b" + IvmlKeyWords.LINEFEED
+            + "c 3 c" + IvmlKeyWords.LINEFEED
+            + "p CNF 3 2" + IvmlKeyWords.LINEFEED
+            + "3 -2 1 0" + IvmlKeyWords.LINEFEED
+            + "-3 2 -1 0" + IvmlKeyWords.LINEFEED, stringWriter.toString());
+    }
+    
+}
Index: /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/out/package-info.java
===================================================================
--- /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/out/package-info.java	(revision 65)
+++ /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/out/package-info.java	(revision 65)
@@ -0,0 +1,7 @@
+
+/**
+ * Tests for writing model files.
+ * @author Adam Krafczyk
+ *
+ */
+package de.uni_hildesheim.sse.trans.out;
