Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/ModelTranslator.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/ModelTranslator.java	(revision 96)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/ModelTranslator.java	(revision 97)
@@ -51,5 +51,5 @@
         String version) {
         
-        Project model = readSourceModel(in, inType);
+        Project model = readSourceModel(in, inType, outType);
         transformAndWriteModel(out, outType, comment, version, model);
     }
@@ -65,5 +65,6 @@
      */
     private static void transformAndWriteModel(Writer out, OutputType outType, String comment, String version,
-            Project model) {
+        Project model) {
+        
         if (null != model) {
             IModelWriter writer = null;
@@ -117,7 +118,9 @@
      * @param in The input model, which shall be translated.
      * @param inType The type of <tt>in</tt>. Must be one of {@link InputType}.
+     * @param outType Specification in which format <tt>in</tt> shall be translated. Must be one of {@link OutputType}.
+     *     Depending of the {@link OutputType} some optimizations are already possible while reading the input model.
      * @return The read model or <tt>null</tt> if an error occurred.
      */
-    private static Project readSourceModel(File in, InputType inType) {
+    private static Project readSourceModel(File in, InputType inType, OutputType outType) {
         Project model = null;
 
@@ -128,8 +131,5 @@
             try {
                 reader = new ModelReader(in);
-                model = reader.read();
             } catch (IOException e) {
-                LOGGER.exception(e);
-            } catch (ParserException e) {
                 LOGGER.exception(e);
             }
@@ -137,9 +137,6 @@
         case RSF:
             try {
-                reader = new RSFReader(in);
-                model = reader.read();
+                reader = new RSFReader(in, outType == OutputType.DIMCAS);
             } catch (IOException e) {
-                LOGGER.exception(e);
-            } catch (ParserException e) {
                 LOGGER.exception(e);
             }
@@ -149,4 +146,15 @@
             break;
         }
+        
+        if (null != reader) {
+            try {
+                model = reader.read();
+            } catch (IOException e) {
+                LOGGER.exception(e);
+            } catch (ParserException e) {
+                LOGGER.exception(e);
+            }
+        }
+        
         return model;
     }
Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/ModelReader.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/ModelReader.java	(revision 96)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/ModelReader.java	(revision 97)
@@ -7,5 +7,7 @@
 import java.io.IOException;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.commons.io.FilenameUtils;
@@ -38,4 +40,5 @@
     private Project model;
     private Map<String, DecisionVariableDeclaration> variables;
+    private Set<String> parsedConstraints;
     
     /**
@@ -47,4 +50,5 @@
     public ModelReader(File modelFile) throws FileNotFoundException {
         reader = new BufferedReader(new FileReader(modelFile));
+        parsedConstraints = new HashSet<String>();
         
         String name = FilenameUtils.removeExtension(modelFile.getName());
@@ -90,4 +94,5 @@
     ConstraintSyntaxTree parseLine(String line, int layer) {
         ConstraintSyntaxTree result = null;
+        
         if (line.startsWith("def(") && line.indexOf(')') == line.lastIndexOf(')')) {
             String variableName = line.substring("def(".length(), line.length() - 1);
@@ -198,5 +203,7 @@
         while ((line = reader.readLine()) != null) {
             // Skip lines starting with a #
-            if (line.charAt(0) != '#') {
+            if (line.charAt(0) != '#' && !parsedConstraints.contains(line)) {
+                // Avoid parsing the same constraint twice
+                parsedConstraints.add(line);
                 ConstraintSyntaxTree cst = parseLine(line, 0);
                 Constraint constraint = new Constraint(model);
Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFReader.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFReader.java	(revision 96)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFReader.java	(revision 97)
@@ -36,15 +36,29 @@
     
     private Map<String, RSFItem> items;
-    
     private List<RSFCondition> conditions;
+
+    /**
+     * Specification, whether the resulting model shall be a pure boolean model.
+     * <ul>
+     * <li>true: Translation to pure boolean variables</li>
+     * <li>false: Translation will include Tristates and Integers</li>
+     * </ul>
+     */
+    private boolean booleanTranslation;
     
     /**
      * Loads a <a href="https://github.com/ckaestne/undertaker">Undertaker's Dumpconf</a> rsf file.
      * @param rsfFile A RSF file, created by Undertaker's dumpconf
+     * @param booleanTranslation Specification, whether the resulting model shall be a pure boolean model.
+     *   <ul>
+     *   <li>true: Translation to pure boolean variables</li>
+     *   <li>false: Translation will include Tristates and Integers</li>
+     *   </ul>
      * @throws FileNotFoundException if the file does not exist, is a directory rather than a regular file,
      * or for some other reason cannot be opened for reading.
      */
-    public RSFReader(File rsfFile) throws FileNotFoundException {
+    public RSFReader(File rsfFile, boolean booleanTranslation) throws FileNotFoundException {
         super(rsfFile);
+        this.booleanTranslation = booleanTranslation;
         items = new LinkedHashMap<String, RSFItem>();
         conditions = new ArrayList<RSFCondition>();
@@ -70,4 +84,48 @@
         readItems();
         Project model = getModel();
+        if (booleanTranslation) {
+            createPureBooleanModel(model);
+        } else {
+            createNotBooleanModel(model);
+        }
+        return model;
+    }
+
+    /**
+     * Creates a pure boolean model.
+     * @param model An empty {@link Project} where variables and constraints shall be added to.
+     * @throws ParserException ParserException If the input file could not be parsed completely.
+     */
+    private void createPureBooleanModel(Project model) throws ParserException {
+        for (RSFItem item : items.values()) {
+            switch(item.getDatatype()) {
+            case BOOLEAN:
+                getVariable(item.getName(), BooleanType.TYPE);
+                break;
+            case TRISTATE:
+                getVariable(item.getName(), BooleanType.TYPE);
+                getVariable(item.getName() + "_MODULE", BooleanType.TYPE);
+                //TODO consider 'm' constraints -> Module only
+                break;
+            case INTEGER:
+                //
+                break;
+            case HEX:
+                break;
+            case STRING:
+                break;
+            default:
+                throw new ParserException(ParserExceptionType.NOT_SUPPORTED_DATATYPE);
+            }
+//            getVariable(item.getName(), type);
+        }
+    }
+    
+    /**
+     * Creates a not pure boolean model, which will also include Tristate variables, Integers and so on.
+     * @param model An empty {@link Project} where variables and constraints shall be added to.
+     * @throws ParserException ParserException If the input file could not be parsed completely.
+     */
+    private void createNotBooleanModel(Project model) throws ParserException {
         // 1. Create Tristate type
         Enum tristate = new Enum("Tristate", model, "Undefined", "Defined", "Module");
@@ -110,6 +168,4 @@
             }
         }
-        
-        return model;
     }
 
Index: /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/in/rsf/RSFReaderTest.java
===================================================================
--- /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/in/rsf/RSFReaderTest.java	(revision 96)
+++ /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/in/rsf/RSFReaderTest.java	(revision 97)
@@ -30,5 +30,5 @@
     public void testRead() throws IOException, ParserException {
         File modelFile = new File(AllTests.INPUT_FOLDER, "testModel.rsf");
-        RSFReader reader = new RSFReader(modelFile);
+        RSFReader reader = new RSFReader(modelFile, false);
         
         Project project = reader.read();
