Index: /ModelTranslator/resources/testdata/input/stringAndIntegerVariablesTest.rsf
===================================================================
--- /ModelTranslator/resources/testdata/input/stringAndIntegerVariablesTest.rsf	(revision 395)
+++ /ModelTranslator/resources/testdata/input/stringAndIntegerVariablesTest.rsf	(revision 395)
@@ -0,0 +1,5 @@
+Item	INT_VAR	integer
+Item	STR_VAR	string
+Depends	STR_VAR	"INT_VAR='5'"
+Depends	INT_VAR	"STR_VAR='Hallo'"
+Depends	INT_VAR	"STR_VAR=''"
Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFChoice.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFChoice.java	(revision 394)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFChoice.java	(revision 395)
@@ -8,46 +8,46 @@
 import de.uni_hildesheim.sse.model.cst.Variable;
 import de.uni_hildesheim.sse.model.cst.VariablePool;
+import de.uni_hildesheim.sse.model.varModel.datatypes.Enum;
 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;
 
 /**
  * Contains a Choice and the ChoiceItems.
+ * {@link RSFChoice#toPureBooleanConstraintSyntaxTree(RSFReader)} assures, that only one variable of the choice is
+ * selected.
  * 
  * @author Adam Krafczyk
  */
-class RSFChoice {
+class RSFChoice extends RSFCondition {
 
     private static VariablePool varPool = new VariablePool();
     
-    private String choiceName;
-    private List<String> choiceItems;
+    private RSFItem choiceItem;
+    private List<RSFItem> choiceItems;
     
     /**
      * Creates a new Choice with no ChoiceItems.
-     * @param choiceName The name of the Choice.
+     * @param choiceItem The name of the Choice.
      */
-    RSFChoice(String choiceName) {
-        this.choiceName = choiceName;
-        choiceItems = new ArrayList<String>();
+    RSFChoice(RSFItem choiceItem) {
+        this.choiceItem = choiceItem;
+        choiceItems = new ArrayList<RSFItem>();
     }
     
     /**
      * Adds a ChoiceItem to the Choice.
-     * @param name The name of the ChoiceItem.
+     * @param item The name of the ChoiceItem.
      */
-    void addChoiceItem(String name) {
-        choiceItems.add(name);
+    void addChoiceItem(RSFItem item) {
+        choiceItems.add(item);
     }
     
-    /**
-     * Creates a {@link ConstraintSyntaxTree}s to assure that only one ChoiceItem is selected.
-     * @param reader A reader to get variable declarations from.
-     * @return An array of {@link ConstraintSyntaxTree}s.
-     */
-    List<ConstraintSyntaxTree> getBooleanConstraintSyntaxTree(AbstractReader reader) {
+    @Override
+    List<ConstraintSyntaxTree> toPureBooleanConstraintSyntaxTree(RSFReader reader) throws ParserException {
         //ConstraintSyntaxTree[] trees = new ConstraintSyntaxTree[choiceItems.size()];
         List<ConstraintSyntaxTree> trees = new ArrayList<ConstraintSyntaxTree>();
-        Variable choiceVar = varPool.obtainVariable(reader.getVariable(choiceName));
-        OCLFeatureCall notChoiceVar = new OCLFeatureCall(choiceVar, OclKeyWords.NOT);
+        
+        ConstraintSyntaxTree notChoiceVar = getUnselectedVariable(choiceItem, reader);
         
         // Create one tree with all variables OR'd together
@@ -56,10 +56,12 @@
         // And for each unique combination of choiceItems:
         for (int i = 0; i < choiceItems.size(); i++) {
-            Variable var1 = varPool.obtainVariable(reader.getVariable(choiceItems.get(i)));
-            OCLFeatureCall notVar1 = new OCLFeatureCall(var1, OclKeyWords.NOT);
+            
+            Variable var1 = varPool.obtainVariable(reader.getVariable(choiceItems.get(i).getName()));
+            ConstraintSyntaxTree notVar1 = getUnselectedVariable(choiceItems.get(i), reader);
+            
             for (int j = i + 1; j < choiceItems.size(); j++) {
                 // Add the 2 variables negated and OR'd together:
-                Variable var2 = varPool.obtainVariable(reader.getVariable(choiceItems.get(j)));
-                OCLFeatureCall notVar2 = new OCLFeatureCall(var2, OclKeyWords.NOT);
+                ConstraintSyntaxTree notVar2 = getUnselectedVariable(choiceItems.get(j), reader);
+                
                 OCLFeatureCall call = new OCLFeatureCall(notVar1, OclKeyWords.OR, notVar2);
                 trees.add(new OCLFeatureCall(notChoiceVar, OclKeyWords.OR, call));
@@ -73,4 +75,10 @@
         return trees;
     }
+
+    @Override
+    ConstraintSyntaxTree toNotBooleanConstraintSyntaxTree(AbstractReader reader, Enum tristate) throws ParserException {
+        // TODO implement
+        return null;
+    }
     
 }
Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFCondition.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFCondition.java	(revision 394)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFCondition.java	(revision 395)
@@ -6,4 +6,5 @@
 import de.uni_hildesheim.sse.model.cst.OCLFeatureCall;
 import de.uni_hildesheim.sse.model.cst.VariablePool;
+import de.uni_hildesheim.sse.model.varModel.DecisionVariableDeclaration;
 import de.uni_hildesheim.sse.model.varModel.datatypes.Enum;
 import de.uni_hildesheim.sse.model.varModel.datatypes.OclKeyWords;
@@ -151,11 +152,11 @@
             var = var.substring(0, index);
             
-            result = getVariable(reader, var, originalVariable);
+            result = getVariable(reader, "!" + var + "=n", originalVariable);
             
         } else if (var.contains("=''")) {
-            int index = var.indexOf("!=''");
+            int index = var.indexOf("=''");
             var = var.substring(0, index);
             
-            result = getVariable(reader, "!" + var, originalVariable);
+            result = getVariable(reader, var + "=n", originalVariable);
             
         } else if (var.contains("!='")) {
@@ -314,3 +315,29 @@
     }
     
+    /**
+     * Returns a {@link ConstraintSyntaxTree} with the expression that the variable is not set.
+     * This method is meant to handle HEX, INTEGER and STRING correctly. It does not handle _MODULE variables of
+     * tristates.
+     * @param variable The variable that should be empty.
+     * @param reader The reader to get varible declarations from.
+     * @return A {@link ConstraintSyntaxTree}.
+     */
+    protected ConstraintSyntaxTree getUnselectedVariable(RSFItem variable, AbstractReader reader) {
+        ConstraintSyntaxTree notVar = null;
+        
+        switch (variable.getDatatype()) {
+        case HEX:
+        case INTEGER:
+        case STRING:
+            notVar = varPool.obtainVariable(reader.getVariable(variable.getName() + "=n"));
+            break;
+        default:
+            DecisionVariableDeclaration varDecl = reader.getVariable(variable.getName());
+            notVar = new OCLFeatureCall(varPool.obtainVariable(varDecl), OclKeyWords.NOT);
+            break;
+        }
+        
+        return notVar;
+    }
+    
 }
Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFDefaultCondition.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFDefaultCondition.java	(revision 394)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFDefaultCondition.java	(revision 395)
@@ -142,5 +142,5 @@
         } else {
             /*
-             * If not boolean that add add string (or integer) comparison directly
+             * If not boolean then add string (or integer) comparison directly
              */
             defaultValue = defaultValue.replace("'", "");
Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFDependsCondition.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFDependsCondition.java	(revision 394)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFDependsCondition.java	(revision 395)
@@ -42,5 +42,5 @@
             "RSFDependsCondition");
 
-    private String variable;
+    private RSFItem variable;
     private String condition;
     
@@ -50,5 +50,5 @@
      * @param condition The condition as read from the .rsf file
      */
-    RSFDependsCondition(String variable, String condition) {
+    RSFDependsCondition(RSFItem variable, String condition) {
         this.variable = variable;
         this.condition = condition;
@@ -61,8 +61,7 @@
     @Override
     List<ConstraintSyntaxTree> toPureBooleanConstraintSyntaxTree(RSFReader reader) throws ParserException {
-        DecisionVariableDeclaration varDecl = reader.getVariable(variable);
-        OCLFeatureCall notVar = new OCLFeatureCall(varPool.obtainVariable(varDecl), OclKeyWords.NOT);
+        ConstraintSyntaxTree notVar = getUnselectedVariable(variable, reader);
         
-        ConstraintSyntaxTree condition = getPureBooleanConstraintSyntaxTree(reader, this.condition, variable);
+        ConstraintSyntaxTree condition = getPureBooleanConstraintSyntaxTree(reader, this.condition, variable.getName());
         
         List<ConstraintSyntaxTree> result  = new ArrayList<ConstraintSyntaxTree>();
@@ -84,5 +83,5 @@
                 LOGGER.debug("More than 1 tristate in Depends condition");
             } else if (tristates.size() == 1) {
-                RSFItem item = reader.getItemNoCreate(variable);
+                RSFItem item = reader.getItemNoCreate(variable.getName());
                 if (item.getDatatype().equals(Datatype.TRISTATE)) {
                     DecisionVariableDeclaration moduleVarDecl = reader.getVariable(variable + "_MODULE");
Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItemSelectsCondition.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItemSelectsCondition.java	(revision 394)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItemSelectsCondition.java	(revision 395)
@@ -33,5 +33,5 @@
 class RSFItemSelectsCondition extends RSFCondition {
 
-    private String variable;
+    private RSFItem variable;
     private String selectedVariable;
     private String condition;
@@ -43,5 +43,5 @@
      * @param condition The condition as read from the .rsf file
      */
-    RSFItemSelectsCondition(String variable, String selectedVaraible, String condition) {
+    RSFItemSelectsCondition(RSFItem variable, String selectedVaraible, String condition) {
         this.variable = variable;
         this.selectedVariable = selectedVaraible;
@@ -59,12 +59,10 @@
     @Override
     List<ConstraintSyntaxTree> toPureBooleanConstraintSyntaxTree(RSFReader reader) throws ParserException {
-        DecisionVariableDeclaration varDecl = reader.getVariable(variable);
-        Variable var = varPool.obtainVariable(varDecl);
-        OCLFeatureCall notVar = new OCLFeatureCall(var, OclKeyWords.NOT);
+        ConstraintSyntaxTree notVar = getUnselectedVariable(variable, reader);
         
         DecisionVariableDeclaration selectedVarDecl = reader.getVariable(selectedVariable);
         Variable selectedVar = varPool.obtainVariable(selectedVarDecl);
         
-        ConstraintSyntaxTree condition = getPureBooleanConstraintSyntaxTree(reader, this.condition, variable);
+        ConstraintSyntaxTree condition = getPureBooleanConstraintSyntaxTree(reader, this.condition, variable.getName());
         
         ConstraintSyntaxTree result = null;
Index: /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFReader.java
===================================================================
--- /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFReader.java	(revision 394)
+++ /ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFReader.java	(revision 395)
@@ -124,11 +124,7 @@
             case INTEGER:
             case HEX:
+            case STRING:
                 // Ignore these variables here; they will be created depending on the comparisons found in the
                 //  constraints
-                break;
-            case STRING:
-                // This variable is true if the string is not empty
-                // Other variables will be added depending on the comparisons found in the constraints 
-                getVariable(item.getName(), BooleanType.TYPE);
                 break;
             default:
@@ -164,5 +160,5 @@
         // 3. Add choice conditions
         for (RSFChoice choice : choices.values()) {
-            List<ConstraintSyntaxTree> trees = choice.getBooleanConstraintSyntaxTree(this);
+            List<ConstraintSyntaxTree> trees = choice.toPureBooleanConstraintSyntaxTree(this);
             for (ConstraintSyntaxTree tree : trees) {
                 Constraint constraint = new Constraint(model);
@@ -266,10 +262,10 @@
                 case "ItemSelects":
                     // other variable in [2], condition in [3]
-                    conditions.add(new RSFItemSelectsCondition(itemName, normalizeString(columns[2]),
+                    conditions.add(new RSFItemSelectsCondition(item, normalizeString(columns[2]),
                         normalizeString(columns[3])));
                     break;
                 case "Depends":
                     // condition in [2]
-                    conditions.add(new RSFDependsCondition(itemName, columns[2]));
+                    conditions.add(new RSFDependsCondition(item, columns[2]));
                     break;
                 case "Choice":
@@ -277,5 +273,5 @@
                     item.setDatatype(columns[3]);
                     if (choices.get(itemName) == null) {
-                        choices.put(itemName, new RSFChoice(itemName));
+                        choices.put(itemName, new RSFChoice(item));
                     } else {
                         LOGGER.debug("Double decleratation of choice");
@@ -287,5 +283,5 @@
                     RSFChoice choice = choices.get(columns[2]);
                     if (choice != null) {
-                        choice.addChoiceItem(itemName);
+                        choice.addChoiceItem(item);
                     } else {
                         LOGGER.debug("Missing choice declaration for ChoiceItem");
Index: /ModelTranslator/test/de/uni_hildesheim/sse/trans/DimacsTestUtils.java
===================================================================
--- /ModelTranslator/test/de/uni_hildesheim/sse/trans/DimacsTestUtils.java	(revision 394)
+++ /ModelTranslator/test/de/uni_hildesheim/sse/trans/DimacsTestUtils.java	(revision 395)
@@ -85,5 +85,6 @@
     
     /**
-     * Returns the DIMACs number of the given variable which is used inside the constraints.
+     * Returns the DIMACs number of the given variable which is used inside the constraints.´
+     * Asserts that the variable is found.
      * @param dimacsModel The complete dimacs model
      * @param variable The variable for which the number shall be retrieved.
@@ -91,4 +92,18 @@
      */
     public static int getNumberOfVariable(String dimacsModel, String variable) {
+        int var = getNumberOfVariableNoAssert(dimacsModel, variable);
+        
+        Assert.assertTrue("Error: Variable not found.", var != -1);
+        
+        return var;
+    }
+    
+    /**
+     * Returns the DIMACs number of the given variable which is used inside the constraints.
+     * @param dimacsModel The complete dimacs model
+     * @param variable The variable for which the number shall be retrieved.
+     * @return The number of the variable used inside the constraints or -1 if not found.
+     */
+    public static int getNumberOfVariableNoAssert(String dimacsModel, String variable) {
         Pattern dimacsVarDefintion = Pattern.compile("(?m)^c (\\d+) " + variable + "$");
         Matcher m = dimacsVarDefintion.matcher(dimacsModel);
@@ -98,8 +113,9 @@
         }
         
-        Assert.assertNotNull("Error: Variable not found.", result);
-        
-        
-        return Integer.valueOf(result);
+        int ret = -1;
+        if (result != null) {
+            ret = Integer.valueOf(result);
+        }
+        return ret;
     }
     
Index: /ModelTranslator/test/de/uni_hildesheim/sse/trans/in/rsf/RSFReaderTest.java
===================================================================
--- /ModelTranslator/test/de/uni_hildesheim/sse/trans/in/rsf/RSFReaderTest.java	(revision 394)
+++ /ModelTranslator/test/de/uni_hildesheim/sse/trans/in/rsf/RSFReaderTest.java	(revision 395)
@@ -47,5 +47,5 @@
         DeclarationFinder varFinder = new DeclarationFinder(project, FilterType.ALL, null);
         // 4 boolean variables + 2 tristate variables (with another _MODULE version each) + 1 constant
-        //  + 1 string variable + 1 string comparison
+        //  + 1 string comparison + 1 empty string variable
         List<AbstractVariable> variables = varFinder.getVariableDeclarations(VisibilityType.ALL);
         Assert.assertEquals(11, variables.size());
Index: /ModelTranslator/test/de/uni_hildesheim/sse/trans/scenario/RsfToDimacsTranslationTest.java
===================================================================
--- /ModelTranslator/test/de/uni_hildesheim/sse/trans/scenario/RsfToDimacsTranslationTest.java	(revision 394)
+++ /ModelTranslator/test/de/uni_hildesheim/sse/trans/scenario/RsfToDimacsTranslationTest.java	(revision 395)
@@ -23,5 +23,5 @@
     @Test
     public void testTristateVariables() {
-        File input = new File(AllTests.INPUT_FOLDER, "tristateTestModel.rsf");
+        File input = new File(AllTests.INPUT_FOLDER, "tristateVariableTest.rsf");
         OptimizationParameter noOptimization = new OptimizationParameter();
         
@@ -39,4 +39,30 @@
         Assert.assertTrue("Tristate conditition not included",
                 DimacsTestUtils.containsConstraint(result, -var, -moduleVar));
+    }
+    
+    /**
+     * Tests whether string and integer variables are translated correctly.
+     */
+    @Test
+    public void testStringAndIntegerVariables() {
+        File input = new File(AllTests.INPUT_FOLDER, "stringAndIntegerVariablesTest.rsf");
+        OptimizationParameter noOptimization = new OptimizationParameter();
+        
+        // Test precondition
+        Assert.assertFalse(noOptimization.hasAtLeastOneOption());
+        
+        // Translation
+        String result = DimacsTestUtils.loadModel(input, noOptimization, true);
+        
+        // Variables
+        DimacsTestUtils.getNumberOfVariable(result, "INT_VAR=5");
+        DimacsTestUtils.getNumberOfVariable(result, "STR_VAR=Hallo");
+        DimacsTestUtils.getNumberOfVariable(result, "STR_VAR=n");
+        
+        int strVar = DimacsTestUtils.getNumberOfVariableNoAssert(result, "STR_VAR");
+        Assert.assertTrue("String variable without comparision included", strVar == -1);
+        
+        int intVar = DimacsTestUtils.getNumberOfVariableNoAssert(result, "INT_VAR");
+        Assert.assertTrue("Integer variable without comparision included", intVar == -1);
     }
     
@@ -58,6 +84,6 @@
         String result = DimacsTestUtils.loadModel(input, noOptimization, true);
         int fwLoader = DimacsTestUtils.getNumberOfVariable(result, "FW_LOADER");
-        int extraFirmware = DimacsTestUtils.getNumberOfVariable(result, "EXTRA_FIRMWARE");
-        int extraFirmwareDir = DimacsTestUtils.getNumberOfVariable(result, "EXTRA_FIRMWARE_DIR");
+        int extraFirmwareEmpty = DimacsTestUtils.getNumberOfVariable(result, "EXTRA_FIRMWARE=n");
+        int extraFirmwareDirEmpty = DimacsTestUtils.getNumberOfVariable(result, "EXTRA_FIRMWARE_DIR=n");
         
         /*
@@ -71,7 +97,7 @@
          */
         Assert.assertTrue("Error: Expected Constraint not included.",
-            DimacsTestUtils.containsConstraint(result, fwLoader, -1 * extraFirmware));
+            DimacsTestUtils.containsConstraint(result, fwLoader, extraFirmwareEmpty));
         Assert.assertTrue("Error: Expected Constraint not included.",
-            DimacsTestUtils.containsConstraint(result, extraFirmware, -1 * extraFirmwareDir));
+            DimacsTestUtils.containsConstraint(result, -1 * extraFirmwareEmpty, extraFirmwareDirEmpty));
     }
     
