Index: /Code/ModelTranslator/input/testModel.rsf
===================================================================
--- /Code/ModelTranslator/input/testModel.rsf	(revision 100)
+++ /Code/ModelTranslator/input/testModel.rsf	(revision 101)
@@ -1,4 +1,4 @@
 # A small test-model
-# Has 4 variables and 4 constraints
+# Has 6 variables (2 of them are tristates) and 6 constraints
 Item	a	boolean
 Item	b	boolean
@@ -9,2 +9,6 @@
 ItemSelects	a	d	"c && b"
 ItemSelects	b	c	"(!d && b) || a"
+Item	e	tristate
+Item	f	tristate
+Depends	e	"f!='m'"
+Depends	f	"e!='m'"
Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFCondition.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFCondition.java	(revision 100)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFCondition.java	(revision 101)
@@ -27,5 +27,4 @@
     abstract ConstraintSyntaxTree toConstraintSyntaxTree(AbstractReader reader) throws ParserException;
     
-    
     /**
      * Converts the given variable from a string to a {@link ConstraintSyntaxTree}.
@@ -33,11 +32,40 @@
      * @param reader The reader to read variable declarations from.
      * @param var The string representing a variable.
+     * @param originalVariable The variable that depends on the condition (used to handle 'm').
      * @return The variable as {@link ConstraintSyntaxTree}.
      */
-    private ConstraintSyntaxTree getVariable(AbstractReader reader, String var) {
+    private ConstraintSyntaxTree getVariable(AbstractReader reader, String var, String originalVariable) {
         ConstraintSyntaxTree result = null;
         if (var.startsWith("!")) {
             Variable variable = varPool.obtainVariable(reader.getVariable(var.substring(1)));
             result = new OCLFeatureCall(variable, OclKeyWords.NOT);
+            
+        } else if (var.endsWith("!='y'")) {
+            var = var.substring(0, var.length() - "!='y'".length());
+            result = getVariable(reader, "!" + var, originalVariable);
+            
+        } else if (var.endsWith("='y'")) {
+            var = var.substring(0, var.length() - "='y'".length());
+            result = getVariable(reader, var, originalVariable);
+            
+        } else if (var.endsWith("!='n'")) {
+            var = var.substring(0, var.length() - "!='n'".length());
+            result = getVariable(reader, var, originalVariable);
+            
+        } else if (var.endsWith("='n'")) {
+            var = var.substring(0, var.length() - "='n'".length());
+            result = getVariable(reader, "!" + var, originalVariable);
+            
+        } else if (var.endsWith("!='m'")) {
+            var = var.substring(0, var.length() - "!='m'".length());
+            result = getVariable(reader, "!" + var + "_MODULE", originalVariable);
+            
+        } else if (var.endsWith("='m'")) {
+            var = var.substring(0, var.length() - "='m'".length());
+            result = getVariable(reader, var + "_MODULE", originalVariable);
+            
+        } else if (var.equals("'m'")) {
+            result = getVariable(reader, originalVariable + "_MODULE", originalVariable);
+            
         } else {
             result = varPool.obtainVariable(reader.getVariable(var));
@@ -50,10 +78,9 @@
      * @param reader The reader to get the variables from.
      * @param condition A string representing the condition as read from a .rsf file.
+     * @param variable The variable that depends on the condition (used to handle 'm').
      * @return A {@link ConstraintSyntaxTree} representing the condition.
      * @throws ParserException If the conditions contains an operation, that is not supported by the parser.
-     * 
-     * TODO handle constants.
      */
-    protected ConstraintSyntaxTree getConstraintSyntaxTree(AbstractReader reader, String condition)
+    protected ConstraintSyntaxTree getConstraintSyntaxTree(AbstractReader reader, String condition, String variable)
         throws ParserException {
         
@@ -110,11 +137,11 @@
         if (highestOperandPos == -1) {
             // we only have a variable
-            result = getVariable(reader, condition);
+            result = getVariable(reader, condition, variable);
         } else {
             StringBuffer left = new StringBuffer();
             StringBuffer right = new StringBuffer();
             split(condition, highestOperandPos, highestOperandLevel, left, right);
-            result = new OCLFeatureCall(getConstraintSyntaxTree(reader, left.toString()), highestOperand,
-                    getConstraintSyntaxTree(reader, right.toString()));
+            result = new OCLFeatureCall(getConstraintSyntaxTree(reader, left.toString(), variable), highestOperand,
+                    getConstraintSyntaxTree(reader, right.toString(), variable));
         }
         
Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFDependsCondition.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFDependsCondition.java	(revision 100)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFDependsCondition.java	(revision 101)
@@ -3,5 +3,4 @@
 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.DecisionVariableDeclaration;
 import de.uni_hildesheim.sse.model.varModel.datatypes.OclKeyWords;
@@ -18,5 +17,5 @@
  * {@link RSFCondition#getConstraintSyntaxTreeHack(AbstractReader, String)} will convert it into: <br />
  * <code>
- * (<i>variable</i> AND <i>condition</i>) OR (NOT <i>variable</i> AND NOT <i>condition</i>)
+ * NOT <i>variable</i> OR <i>condition</i>
  * </code>
  * 
@@ -42,19 +41,12 @@
     }
     
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     ConstraintSyntaxTree toConstraintSyntaxTree(AbstractReader reader) throws ParserException {
         DecisionVariableDeclaration varDecl = reader.getVariable(variable);
-        Variable var = varPool.obtainVariable(varDecl);
-        OCLFeatureCall notVar = new OCLFeatureCall(var, OclKeyWords.NOT);
+        OCLFeatureCall notVar = new OCLFeatureCall(varPool.obtainVariable(varDecl), OclKeyWords.NOT);
         
-        ConstraintSyntaxTree condition = getConstraintSyntaxTree(reader, this.condition);
-        OCLFeatureCall notCondition = new OCLFeatureCall(condition, OclKeyWords.NOT);
+        ConstraintSyntaxTree condition = getConstraintSyntaxTree(reader, this.condition, variable);
         
-        OCLFeatureCall leftANDCall = new OCLFeatureCall(var, OclKeyWords.AND, condition);
-        OCLFeatureCall rightANDCall = new OCLFeatureCall(notVar , OclKeyWords.AND, notCondition);
-        
-        return new OCLFeatureCall(leftANDCall, OclKeyWords.OR, rightANDCall);
+        return new OCLFeatureCall(notVar, OclKeyWords.OR, condition);
     }
     
Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItemSelectsCondition.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItemSelectsCondition.java	(revision 100)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItemSelectsCondition.java	(revision 101)
@@ -48,7 +48,5 @@
     }
     
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     ConstraintSyntaxTree toConstraintSyntaxTree(AbstractReader reader) throws ParserException {
         DecisionVariableDeclaration varDecl = reader.getVariable(variable);
@@ -60,5 +58,5 @@
         Variable selectedVar = varPool.obtainVariable(selectedVarDecl);
         
-        ConstraintSyntaxTree condition = getConstraintSyntaxTree(reader, this.condition);
+        ConstraintSyntaxTree condition = getConstraintSyntaxTree(reader, this.condition, variable);
         OCLFeatureCall notCondition = new OCLFeatureCall(condition, OclKeyWords.NOT);
         
Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFModuleCondition.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFModuleCondition.java	(revision 101)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFModuleCondition.java	(revision 101)
@@ -0,0 +1,38 @@
+package de.uni_hildesheim.sse.trans.in.rsf;
+
+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.datatypes.OclKeyWords;
+import de.uni_hildesheim.sse.trans.in.AbstractReader;
+import de.uni_hildesheim.sse.trans.in.ParserException;
+
+/**
+ * A condition to ensure that VAR_MODULE variable is only true, if VAR is true.
+ * 
+ * @author Adam Krafczyk
+ */
+class RSFModuleCondition extends RSFCondition {
+
+    private String variable;
+    private String moduleVariable;
+    
+    /**
+     * Creates a condition with the given variable and its module version.
+     * @param variable The variable
+     * @param moduleVariable The module version of the variable
+     */
+    RSFModuleCondition(String variable, String moduleVariable) {
+        this.variable = variable;
+        this.moduleVariable = moduleVariable;
+    }
+    
+    @Override
+    ConstraintSyntaxTree toConstraintSyntaxTree(AbstractReader reader) throws ParserException {
+        Variable var = varPool.obtainVariable(reader.getVariable(variable));
+        Variable moduleVar = varPool.obtainVariable(reader.getVariable(moduleVariable));
+        
+        return new OCLFeatureCall(var, OclKeyWords.OR, new OCLFeatureCall(moduleVar, OclKeyWords.NOT));
+    }
+
+}
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 100)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFReader.java	(revision 101)
@@ -98,4 +98,5 @@
      */
     private void createPureBooleanModel(Project model) throws ParserException {
+        // Add variables
         for (RSFItem item : items.values()) {
             switch(item.getDatatype()) {
@@ -106,5 +107,5 @@
                 getVariable(item.getName(), BooleanType.TYPE);
                 getVariable(item.getName() + "_MODULE", BooleanType.TYPE);
-                //TODO consider 'm' constraints -> Module only
+                conditions.add(new RSFModuleCondition(item.getName(), item.getName() + "_MODULE"));
                 break;
             case INTEGER:
@@ -118,45 +119,7 @@
                 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");
-        model.add(tristate);
-        
-        // 2. Add all Variables with correct datatype
-        for (RSFItem item : items.values()) {
-            IDatatype type = null;
-            switch(item.getDatatype()) {
-            case BOOLEAN:
-                type = BooleanType.TYPE;
-                break;
-            case TRISTATE:
-                type = tristate;
-                break;
-            case INTEGER:
-                type = IntegerType.TYPE;
-                break;
-            case HEX:
-                // TODO handle as enum
-                type = RealType.TYPE;
-                break;
-            case STRING:
-                type = StringType.TYPE;
-                break;
-            default:
-                throw new ParserException(ParserExceptionType.NOT_SUPPORTED_DATATYPE);
-            }
-            getVariable(item.getName(), type);
-        }
-        
-        // 3. Add all conditions
+        }
+        
+        // Add conditions
         for (RSFCondition condition : conditions) {
             try {
@@ -168,4 +131,43 @@
             }
         }
+    }
+    
+    /**
+     * 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");
+        model.add(tristate);
+        
+        // 2. Add all Variables with correct datatype
+        for (RSFItem item : items.values()) {
+            IDatatype type = null;
+            switch(item.getDatatype()) {
+            case BOOLEAN:
+                type = BooleanType.TYPE;
+                break;
+            case TRISTATE:
+                type = tristate;
+                break;
+            case INTEGER:
+                type = IntegerType.TYPE;
+                break;
+            case HEX:
+                // TODO handle as enum
+                type = RealType.TYPE;
+                break;
+            case STRING:
+                type = StringType.TYPE;
+                break;
+            default:
+                throw new ParserException(ParserExceptionType.NOT_SUPPORTED_DATATYPE);
+            }
+            getVariable(item.getName(), type);
+        }
+        
+        // TODO: 3. Add all conditions
     }
 
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 100)
+++ /Code/ModelTranslator/test/de/uni_hildesheim/sse/trans/in/rsf/RSFReaderTest.java	(revision 101)
@@ -30,10 +30,11 @@
     public void testRead() throws IOException, ParserException {
         File modelFile = new File(AllTests.INPUT_FOLDER, "testModel.rsf");
-        RSFReader reader = new RSFReader(modelFile, false);
+        RSFReader reader = new RSFReader(modelFile, true);
         
         Project project = reader.read();
         
         ConstraintFinder cFinder = new ConstraintFinder(project);
-        Assert.assertEquals(4, cFinder.getConstraints().size());
+        // 6 conditions + 2 _MODULE conditions
+        Assert.assertEquals(8, cFinder.getConstraints().size());
         
 //        for (Constraint c : cFinder.getConstraints()) {
@@ -42,5 +43,6 @@
         
         DeclarationFinder varFinder = new DeclarationFinder(project, FilterType.ALL, null);
-        Assert.assertEquals(4, varFinder.getVariableDeclarations(VisibilityType.ALL).size());
+        // 6 variables + 2 _MODULE variables
+        Assert.assertEquals(8, varFinder.getVariableDeclarations(VisibilityType.ALL).size());
     }
     
