Index: /ModelTranslator/resources/testdata/input/testModel_Choices.rsf
===================================================================
--- /ModelTranslator/resources/testdata/input/testModel_Choices.rsf	(revision 404)
+++ /ModelTranslator/resources/testdata/input/testModel_Choices.rsf	(revision 405)
@@ -1,2 +1,6 @@
+Item	A	boolean
+Item	B	boolean
+Item	C	boolean
+Item	D	boolean
 #startchoice
 Choice	CHOICE_12	required	boolean
@@ -4,16 +8,16 @@
 ChoiceItem	HZ_100	CHOICE_12
 Item	HZ_100	boolean
-Depends	HZ_100	"CHOICE_12"
+Depends	HZ_100	"A"
 #choice value
 ChoiceItem	HZ_250	CHOICE_12
 Item	HZ_250	boolean
-Depends	HZ_250	"CHOICE_12"
+Depends	HZ_250	"B"
 #choice value
 ChoiceItem	HZ_300	CHOICE_12
 Item	HZ_300	boolean
-Depends	HZ_300	"CHOICE_12"
+Depends	HZ_300	"C"
 #choice value
 ChoiceItem	HZ_1000	CHOICE_12
 Item	HZ_1000	boolean
-Depends	HZ_1000	"CHOICE_12"
+Depends	HZ_1000	"D"
 #endchoice
Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFChoice.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFChoice.java	(revision 404)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFChoice.java	(revision 405)
@@ -23,4 +23,7 @@
     private List<RSFItem> choiceItems;
     
+    private List<String> choiceItemConditions;
+    private String choiceCondition;
+    
     /**
      * Creates a new Choice with no ChoiceItems.
@@ -30,4 +33,5 @@
         this.choiceItem = choiceItem;
         choiceItems = new ArrayList<RSFItem>();
+        choiceItemConditions = new ArrayList<String>();
     }
     
@@ -38,4 +42,73 @@
     void addChoiceItem(RSFItem item) {
         choiceItems.add(item);
+    }
+    
+    /**
+     * Adds a constraint of a choice item of this choice.
+     * @param condition The condition as read from a depends line in the .rsf file.
+     */
+    void addChoiceItemDepends(String condition) {
+        // TODO error handling if only one is true?
+        if (condition.startsWith("\"") && condition.endsWith("\"")) {
+            condition = condition.substring(1, condition.length() - 1);
+        }
+        
+        choiceItemConditions.add(condition);
+    }
+    
+    /**
+     * Adds a constraint the choice.
+     * @param condition A condition as read from a depends line in the .rsf file.
+     */
+    void addChoiceCondition(String condition) {
+        // TODO error handling if only one is true?
+        if (condition.startsWith("\"") && condition.endsWith("\"")) {
+            condition = condition.substring(1, condition.length() - 1);
+        }
+        
+        if (choiceCondition == null) {
+            choiceCondition = condition;
+        } else {
+            choiceCondition = "(" + choiceCondition + ") || (" + condition + ")";
+        }
+    }
+    
+    /**
+     * Creates and returns the additional depends condition that is needed to ensure that the model is not broken
+     * when all choice items can't fulfill their conditions.
+     * @return A {@link RSFDependsCondition} or <code>null</code> if no conditions have been added.
+     */
+    RSFDependsCondition getAdditionalDependsCondition() {
+        RSFDependsCondition result = null;
+        
+        if (choiceItemConditions.size() > 0) {
+            StringBuffer condition = new StringBuffer();
+            if (choiceCondition != null) {
+                condition.append("\"(");
+                condition.append(choiceCondition);
+                condition.append(") && (");
+            } else {
+                condition.append("\"(");
+            }
+            
+            for (int i = 0; i < choiceItemConditions.size(); i++) {
+                String choiceItemCondition = choiceItemConditions.get(i);
+                boolean addBrackets = choiceItemCondition.contains("||") || choiceItemCondition.contains("&&");
+                if (addBrackets) {
+                    condition.append("(");
+                }
+                condition.append(choiceItemCondition);
+                if (addBrackets) {
+                    condition.append(")");
+                }
+                if (i != choiceItemConditions.size() - 1) {
+                    condition.append(" || ");
+                }
+            }
+            condition.append(")\"");
+            result = new RSFDependsCondition(choiceItem, condition.toString());
+        }
+        
+        return result;
     }
     
Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItem.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItem.java	(revision 404)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItem.java	(revision 405)
@@ -15,8 +15,14 @@
     private String name;
     private Datatype type;
+    
     private boolean hasPrompt;
     private String promptCondition;
+    
     private RSFDefaultCondition defaultCondition;
+    
     private List<Variable> comparisonVariables;
+    
+    private String choiceParent;
+   
     
     /**
@@ -124,4 +130,20 @@
     }
     
+    /**
+     * Sets the name of the choice if this RSFItem is a ChoiceItem.
+     * @param parent The name of the choice this item belongs to (<code>null</code> if none).
+     */
+    public void setChoiceParent(String parent) {
+        choiceParent = parent;
+    }
+    
+    /**
+     * Gets the name of the choice this RSFItem belongs to.
+     * @return The name of the parent choice; <code>null</code> if this item isn't a ChoiceItem.
+     */
+    public String getChoiceParent() {
+        return choiceParent;
+    }
+    
     @Override
     public String toString() {
Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFReader.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFReader.java	(revision 404)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFReader.java	(revision 405)
@@ -152,4 +152,11 @@
         conditions.addAll(choices.values());
         
+        for (RSFChoice choice : choices.values()) {
+            RSFDependsCondition condition = choice.getAdditionalDependsCondition();
+            if (condition != null) {
+                conditions.add(condition);
+            }
+        }
+        
         for (RSFCondition condition : conditions) {
             List<ConstraintSyntaxTree> trees = condition.toPureBooleanConstraintSyntaxTree(this);
@@ -281,4 +288,23 @@
                         dependsConditions.put(itemName, new RSFDependsCondition(item, columns[2]));
                     }
+                    
+                    /*
+                     * Add condition to choice if this is a choice or ChoiceItem
+                     */
+                    if (choices.containsKey(itemName)) {
+                        choices.get(itemName).addChoiceCondition(columns[2]);
+                    }
+                    
+                    String choiceParent = item.getChoiceParent();
+                    if (choiceParent != null) {
+                        RSFChoice choice = choices.get(choiceParent);
+                        if (choice != null) {
+                            choice.addChoiceItemDepends(columns[2]);
+                        } else {
+                            // TODO
+                            LOGGER.debug("Found depends of choice item with invalid choice parent");
+                        }
+                    }
+                    
                     break;
                 case "Choice":
@@ -297,4 +323,5 @@
                     if (choice != null) {
                         choice.addChoiceItem(item);
+                        item.setChoiceParent(columns[2]);
                     } else {
                         LOGGER.debug("Missing choice declaration for ChoiceItem");
Index: /ModelTranslator/test/de/uni_hildesheim/sse/trans/scenario/RsfToDimacsTranslationTest.java
===================================================================
--- /ModelTranslator/test/de/uni_hildesheim/sse/trans/scenario/RsfToDimacsTranslationTest.java	(revision 404)
+++ /ModelTranslator/test/de/uni_hildesheim/sse/trans/scenario/RsfToDimacsTranslationTest.java	(revision 405)
@@ -55,5 +55,4 @@
         // Translation
         String result = DimacsTestUtils.loadModel(input, noOptimization, true);
-        System.out.println(result);
         
         // Variables
@@ -246,4 +245,6 @@
         // Translation
         String result = DimacsTestUtils.loadModel(input, noOptimization, true);
+        System.out.println(result);
+        
         int choice12 = DimacsTestUtils.getNumberOfVariable(result, "CHOICE_12");
         int hz100 = DimacsTestUtils.getNumberOfVariable(result, "HZ_100");
@@ -251,4 +252,8 @@
         int hz300 = DimacsTestUtils.getNumberOfVariable(result, "HZ_300");
         int hz1000 = DimacsTestUtils.getNumberOfVariable(result, "HZ_1000");
+        int a = DimacsTestUtils.getNumberOfVariable(result, "A");
+        int b = DimacsTestUtils.getNumberOfVariable(result, "B");
+        int c = DimacsTestUtils.getNumberOfVariable(result, "C");
+        int d = DimacsTestUtils.getNumberOfVariable(result, "D");
         
         /*
@@ -258,5 +263,19 @@
          * NOT(CHOICE_12) OR NOT(HZ_100) OR NOT(HZ_1000)
          * (skip other combinations)
+         */
+        Assert.assertTrue("Error: Missing choice constraint",
+            DimacsTestUtils.containsConstraint(result, -hz100, -hz250));
+        Assert.assertTrue("Error: Missing choice constraint",
+            DimacsTestUtils.containsConstraint(result, -hz100, -hz300));
+        Assert.assertTrue("Error: Missing choice constraint",
+            DimacsTestUtils.containsConstraint(result, -hz100, -hz1000));
+        
+        /*
          * NOT(CHOICE_12) OR HZ_100 OR HZ_250 OR HZ_300 OR HZ_1000
+         */
+        Assert.assertTrue("Error: Missing choice constraint",
+            DimacsTestUtils.containsConstraint(result, -choice12, hz100, hz250, hz300, hz1000));
+        
+        /*
          * CHOICE_12 OR NOT(HZ_100)
          * CHOICE_12 OR NOT(HZ_250)
@@ -264,17 +283,17 @@
          */
         Assert.assertTrue("Error: Missing choice constraint",
-            DimacsTestUtils.containsConstraint(result, -hz100, -hz250));
-        Assert.assertTrue("Error: Missing choice constraint",
-            DimacsTestUtils.containsConstraint(result, -hz100, -hz300));
-        Assert.assertTrue("Error: Missing choice constraint",
-            DimacsTestUtils.containsConstraint(result, -hz100, -hz1000));
-        
-        Assert.assertTrue("Error: Missing choice constraint",
-            DimacsTestUtils.containsConstraint(result, -choice12, hz100, hz250, hz300, hz1000));
-        
-        Assert.assertTrue("Error: Missing choice constraint",
                 DimacsTestUtils.containsConstraint(result, choice12, -hz100));
         Assert.assertTrue("Error: Missing choice constraint",
                 DimacsTestUtils.containsConstraint(result, choice12, -hz250));
+        
+        /*
+         * Check if the following additional constraint is included:
+         * - depends  CHOICE  (dependsOf(CHOICE) &&
+         *      (dependsOf(hz100) || dependsOf(hz250) || ependsOf(hz300) || ependsOf(hz1000))
+         * = depends  CHOICE  (A || B || C || D)
+         * -> Not(CHOICE) or A or B or C or D
+         */
+        Assert.assertTrue("Error: Missing constraint", 
+                DimacsTestUtils.containsConstraint(result, -choice12, a, b, c, d));
     }
     
