Index: /ModelTranslator/resources/testdata/input/testModel_BooleanItemSelects.rsf
===================================================================
--- /ModelTranslator/resources/testdata/input/testModel_BooleanItemSelects.rsf	(revision 407)
+++ /ModelTranslator/resources/testdata/input/testModel_BooleanItemSelects.rsf	(revision 407)
@@ -0,0 +1,4 @@
+Item	A	boolean
+Item	B	boolean
+Item	C	boolean
+ItemSelects	A	C	B
Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItemSelectsCondition.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItemSelectsCondition.java	(revision 406)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItemSelectsCondition.java	(revision 407)
@@ -30,5 +30,5 @@
  */
 class RSFItemSelectsCondition extends RSFCondition {
-
+    
     private RSFItem variable;
     private String selectedVariable;
@@ -63,17 +63,40 @@
         ConstraintSyntaxTree condition = getPureBooleanConstraintSyntaxTree(reader, this.condition, variable.getName());
         
-        ConstraintSyntaxTree result = null;
+        
+        List<ConstraintSyntaxTree> trees  = new ArrayList<ConstraintSyntaxTree>();
         
         if (condition != null) {
             ConstraintSyntaxTree notCondition = new OCLFeatureCall(condition, OclKeyWords.NOT);
-            result = new OCLFeatureCall(notCondition, OclKeyWords.OR, selectedVar);
+            ConstraintSyntaxTree result = new OCLFeatureCall(notCondition, OclKeyWords.OR, selectedVar);
             result = new OCLFeatureCall(notVar, OclKeyWords.OR, result);
+            trees.add(result);
+            
+            if (variable.getDatatype().equals(Datatype.TRISTATE)) {
+                ConstraintSyntaxTree varModule = varPool.obtainVariable(
+                        reader.getVariable(variable.getName() + "_MODULE"));
+                ConstraintSyntaxTree notVarModule = new OCLFeatureCall(varModule, OclKeyWords.NOT);
+                ConstraintSyntaxTree selectedVarModule = varPool.obtainVariable(
+                        reader.getVariable(selectedVariable + "_MODULE"));
+                
+                ConstraintSyntaxTree moduleResult = new OCLFeatureCall(notVarModule, OclKeyWords.OR, selectedVarModule);
+                moduleResult = new OCLFeatureCall(moduleResult, OclKeyWords.OR, notCondition);
+                trees.add(moduleResult);
+            }
+            
         } else {
-            result = new OCLFeatureCall(notVar, OclKeyWords.OR, selectedVar);
+            trees.add(new OCLFeatureCall(notVar, OclKeyWords.OR, selectedVar));
+            
+            if (variable.getDatatype().equals(Datatype.TRISTATE)) {
+                ConstraintSyntaxTree varModule = varPool.obtainVariable(
+                        reader.getVariable(variable.getName() + "_MODULE"));
+                ConstraintSyntaxTree notVarModule = new OCLFeatureCall(varModule, OclKeyWords.NOT);
+                ConstraintSyntaxTree selectedVarModule = varPool.obtainVariable(
+                        reader.getVariable(selectedVariable + "_MODULE"));
+                
+                trees.add(new OCLFeatureCall(notVarModule, OclKeyWords.OR, selectedVarModule));
+            }
         }
         
-        List<ConstraintSyntaxTree> list  = new ArrayList<ConstraintSyntaxTree>();
-        list.add(result);
-        return list;
+        return trees;
     }
     
Index: /ModelTranslator/test/de/uni_hildesheim/sse/trans/scenario/RsfToDimacsTranslationTest.java
===================================================================
--- /ModelTranslator/test/de/uni_hildesheim/sse/trans/scenario/RsfToDimacsTranslationTest.java	(revision 406)
+++ /ModelTranslator/test/de/uni_hildesheim/sse/trans/scenario/RsfToDimacsTranslationTest.java	(revision 407)
@@ -175,7 +175,9 @@
         // Translation
         String result = DimacsTestUtils.loadModel(input, noOptimization, true);
-        int iwc3200top = DimacsTestUtils.getNumberOfVariable(result, "IWMC3200TOP") * -1;
+        int iwc3200top = DimacsTestUtils.getNumberOfVariable(result, "IWMC3200TOP");
+        int iwc3200topModule = DimacsTestUtils.getNumberOfVariable(result, "IWMC3200TOP_MODULE");
         int fwLoader = DimacsTestUtils.getNumberOfVariable(result, "FW_LOADER");
-        int blubb = DimacsTestUtils.getNumberOfVariable(result, "BLUBB") * -1;
+        int fwLoaderModule = DimacsTestUtils.getNumberOfVariable(result, "FW_LOADER_MODULE");
+        int blubb = DimacsTestUtils.getNumberOfVariable(result, "BLUBB");
         
         /* 
@@ -186,5 +188,28 @@
          */
         Assert.assertTrue("Error: Expected Constraint not included.",
-            DimacsTestUtils.containsConstraint(result, iwc3200top, blubb, fwLoader));
+            DimacsTestUtils.containsConstraint(result, -iwc3200top, -blubb, fwLoader));
+        Assert.assertTrue("Error: Expected Constraint not included.",
+                DimacsTestUtils.containsConstraint(result, -iwc3200topModule, -blubb, fwLoaderModule));
+    }
+    
+    /**
+     * Tests whether ItemSelect statements are translated correctly into CNF constraints.
+     */
+    @Test
+    public void testBooleaItemSelects() {
+        File input = new File(AllTests.INPUT_FOLDER, "testModel_BooleanItemSelects.rsf");
+        OptimizationParameter noOptimization = new OptimizationParameter();
+        
+        // Test precondition
+        Assert.assertFalse(noOptimization.hasAtLeastOneOption());
+        
+        // Translation
+        String result = DimacsTestUtils.loadModel(input, noOptimization, true);
+        int a = DimacsTestUtils.getNumberOfVariable(result, "A");
+        int b = DimacsTestUtils.getNumberOfVariable(result, "B");
+        int c = DimacsTestUtils.getNumberOfVariable(result, "C");
+        
+        Assert.assertTrue("Error: Expected Constraint not included.",
+            DimacsTestUtils.containsConstraint(result, -a, -b, c));
     }
     
