Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter2.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter2.java	(revision 99)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/MaxTermConverter2.java	(revision 100)
@@ -33,4 +33,5 @@
     private BigInteger totalSteps;
     private BigInteger elapsedSteps;
+    private EvaluationVisitor evaluationVisitor;
 
     @Override
@@ -48,4 +49,6 @@
         totalSteps = TWO.pow(declarationArray.length);
         elapsedSteps = BigInteger.ZERO;
+        evaluationVisitor = new EvaluationVisitor(config, null, false, null);
+        
         handleConstraint(originalConstraint, declarationArray, config, 0);
     }
@@ -143,5 +146,4 @@
      */
     private int checkConstraint(ConstraintSyntaxTree constraint, Configuration config) {
-        EvaluationVisitor evaluationVisitor = new EvaluationVisitor(config, null, false, null);
         constraint.accept(evaluationVisitor);
         
@@ -152,4 +154,7 @@
             result = 1;
         }
+        
+        evaluationVisitor.clearResult();
+        
         return result;
     }
Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/ModelOptimizer.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/ModelOptimizer.java	(revision 99)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/convert/ModelOptimizer.java	(revision 100)
@@ -60,10 +60,4 @@
             Set<AbstractVariable> declarations = finder.getDeclarations();
             varSet.removeAll(declarations);
-            
-            /*
-             *  Release constraint to deallocate memory.
-             *  set(index, null) avoids Array.copy
-             */
-            constraints.set(i, null);
         }
         
Index: /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/ModelReader.java
===================================================================
--- /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/ModelReader.java	(revision 99)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/ModelReader.java	(revision 100)
@@ -17,5 +17,5 @@
 import de.uni_hildesheim.sse.model.cst.OCLFeatureCall;
 import de.uni_hildesheim.sse.model.cst.Parenthesis;
-import de.uni_hildesheim.sse.model.cst.Variable;
+import de.uni_hildesheim.sse.model.cst.VariablePool;
 import de.uni_hildesheim.sse.model.validation.IvmlIdentifierCheck;
 import de.uni_hildesheim.sse.model.varModel.Constraint;
@@ -41,4 +41,5 @@
     private Map<String, DecisionVariableDeclaration> variables;
     private Set<String> parsedConstraints;
+    private VariablePool varPool;
     
     /**
@@ -66,4 +67,6 @@
         model = new Project(name);
         variables = new HashMap<String, DecisionVariableDeclaration>();
+        
+        varPool = new VariablePool();
     }
     
@@ -97,8 +100,8 @@
         if (line.startsWith("def(") && line.indexOf(')') == line.lastIndexOf(')')) {
             String variableName = line.substring("def(".length(), line.length() - 1);
-            result = new Variable(getVariable(variableName));
+            result = varPool.obtainVariable(getVariable(variableName));
         } else if (line.startsWith("!def(") && line.indexOf(')') == line.lastIndexOf(')')) {
             String variableName = line.substring("!def(".length(), line.length() - 1);
-            result = new OCLFeatureCall(new Variable(getVariable(variableName)), OclKeyWords.NOT);
+            result = new OCLFeatureCall(varPool.obtainVariable(getVariable(variableName)), OclKeyWords.NOT);
         } else {
             
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 99)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFCondition.java	(revision 100)
@@ -4,4 +4,5 @@
 import de.uni_hildesheim.sse.model.cst.OCLFeatureCall;
 import de.uni_hildesheim.sse.model.cst.Variable;
+import de.uni_hildesheim.sse.model.cst.VariablePool;
 import de.uni_hildesheim.sse.model.varModel.datatypes.OclKeyWords;
 import de.uni_hildesheim.sse.trans.in.AbstractReader;
@@ -16,4 +17,6 @@
 abstract class RSFCondition {
 
+    protected static VariablePool varPool = new VariablePool();
+    
     /**
      * Returns this condition as a {@link ConstraintSyntaxTree}.
@@ -23,4 +26,5 @@
      */
     abstract ConstraintSyntaxTree toConstraintSyntaxTree(AbstractReader reader) throws ParserException;
+    
     
     /**
@@ -34,8 +38,8 @@
         ConstraintSyntaxTree result = null;
         if (var.startsWith("!")) {
-            Variable variable = new Variable(reader.getVariable(var.substring(1)));
+            Variable variable = varPool.obtainVariable(reader.getVariable(var.substring(1)));
             result = new OCLFeatureCall(variable, OclKeyWords.NOT);
         } else {
-            result = new Variable(reader.getVariable(var));
+            result = varPool.obtainVariable(reader.getVariable(var));
         }
         return result;
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 99)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFDependsCondition.java	(revision 100)
@@ -47,5 +47,5 @@
     ConstraintSyntaxTree toConstraintSyntaxTree(AbstractReader reader) throws ParserException {
         DecisionVariableDeclaration varDecl = reader.getVariable(variable);
-        Variable var = new Variable(varDecl);
+        Variable var = varPool.obtainVariable(varDecl);
         OCLFeatureCall notVar = new OCLFeatureCall(var, OclKeyWords.NOT);
         
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 99)
+++ /Code/ModelTranslator/src/de/uni_hildesheim/sse/trans/in/rsf/RSFItemSelectsCondition.java	(revision 100)
@@ -53,10 +53,10 @@
     ConstraintSyntaxTree toConstraintSyntaxTree(AbstractReader reader) throws ParserException {
         DecisionVariableDeclaration varDecl = reader.getVariable(variable);
-        Variable var = new Variable(varDecl);
+        Variable var = varPool.obtainVariable(varDecl);
         OCLFeatureCall notVar = new OCLFeatureCall(var, OclKeyWords.NOT);
         
         // TODO can selectedVariable be a condition?
         DecisionVariableDeclaration selectedVarDecl = reader.getVariable(selectedVariable);
-        Variable selectedVar = new Variable(selectedVarDecl);
+        Variable selectedVar = varPool.obtainVariable(selectedVarDecl);
         
         ConstraintSyntaxTree condition = getConstraintSyntaxTree(reader, this.condition);
