diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/WeightingFunctionEvaluator.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/WeightingFunctionEvaluator.java
index 1aa5c0dba566f883c991cb6ddada59cece315c2d..ba9ffcc412dcce75246f0086081efe8720fc67ee 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/WeightingFunctionEvaluator.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/WeightingFunctionEvaluator.java
@@ -1,6 +1,8 @@
 package edu.kit.ipd.descartes.adaptation.evaluation;
 
-import edu.kit.ipd.descartes.adaptation.evaluation.weightingfunction.WeightedSumCalculator;
+import org.apache.log4j.Logger;
+
+import edu.kit.ipd.descartes.adaptation.evaluation.weightingfunction.IWeightingFunction;
 import edu.kit.ipd.descartes.mm.adaptation.WeightedTactic;
 import edu.kit.ipd.descartes.mm.adaptation.WeightingFunction;
 
@@ -12,12 +14,9 @@ import edu.kit.ipd.descartes.mm.adaptation.WeightingFunction;
  */
 public class WeightingFunctionEvaluator implements IEvaluator {
 
-    private WeightedSumCalculator calculator = null;
+    private IWeightingFunction calculator = null;
+    private static Logger logger = Logger.getLogger(WeightingFunctionEvaluator.class);
 
-    public WeightingFunctionEvaluator() {
-        calculator = new WeightedSumCalculator();
-    }
-    
     /*
      * (non-Javadoc)
      * 
@@ -26,7 +25,27 @@ public class WeightingFunctionEvaluator implements IEvaluator {
     @Override
     public void evaluate(WeightedTactic tactic) {
         WeightingFunction f = tactic.getParentStrategy().getWeightingFunction();
-        calculator.setWeightingFunction(f);
-        calculator.updateWeight(tactic);
+        
+        final String functionClassName = f.getWeightingFunction();
+
+        Object o = null;
+        try {
+            o = Class.forName(functionClassName).newInstance();
+        } catch (final ClassNotFoundException e) {
+            e.printStackTrace();
+        } catch (final InstantiationException e) {
+            e.printStackTrace();
+        } catch (final IllegalAccessException e) {
+            e.printStackTrace();
+        }
+
+        if (!IWeightingFunction.class.isInstance(o)) {
+            throw new RuntimeException("Expected a class implementing " + IWeightingFunction.class.getName());
+        }
+        
+        calculator = (IWeightingFunction) o;
+        double newWeight = calculator.calculateWeight(tactic);
+        logger.debug("Setting new weight of " + tactic.getName() + " to " + newWeight);
+        tactic.setCurrentWeight(newWeight);
     }
 }
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunctionCalculator.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunction.java
similarity index 60%
rename from edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunctionCalculator.java
rename to edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunction.java
index bc3a6e786bdc980b811f196c00c9caa72e890dda..68571370992a8b28e09098ef37e037bbd1090234 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunctionCalculator.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunction.java
@@ -3,7 +3,7 @@ package edu.kit.ipd.descartes.adaptation.evaluation.weightingfunction;
 import edu.kit.ipd.descartes.mm.adaptation.Tactic;
 import edu.kit.ipd.descartes.mm.adaptation.WeightedTactic;
 
-public interface IWeightingFunctionCalculator {
+public interface IWeightingFunction {
 	
 	/**
 	 * Calculates the new weight of the given {@link Tactic}.
@@ -12,13 +12,4 @@ public interface IWeightingFunctionCalculator {
 	 * @return
 	 */
 	double calculateWeight(WeightedTactic weightedTactic);
-	
-	/**
-	 * Calculates and sets the new weight of the given {@link WeightedTactic}.
-	 * 
-	 * @param impact
-	 * @return
-	 */
-	void updateWeight(WeightedTactic weightedTactic);
-
 }
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightCalculator.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightsWeightingFunction.java
similarity index 59%
rename from edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightCalculator.java
rename to edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightsWeightingFunction.java
index 8ff3a547b25d701b4d26b523cec98cfc6b76c6d7..245197beda84f53cf0320f0c3c1943c7bb983029 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightCalculator.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightsWeightingFunction.java
@@ -4,16 +4,11 @@ import java.util.Random;
 
 import edu.kit.ipd.descartes.mm.adaptation.WeightedTactic;
 
-public class RandomWeightCalculator implements IWeightingFunctionCalculator {
+public class RandomWeightsWeightingFunction implements IWeightingFunction {
 
 	@Override
 	public double calculateWeight(WeightedTactic weightedTactic) {
 		Random r = new Random(System.currentTimeMillis());
 		return r.nextDouble();
 	}
-
-	@Override
-	public void updateWeight(WeightedTactic weightedTactic) {
-		weightedTactic.setCurrentWeight(calculateWeight(weightedTactic));
-	}
 }
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumCalculator.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSum.java
similarity index 74%
rename from edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumCalculator.java
rename to edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSum.java
index ebc3697a1fa7a2e25f554fe5ca8ed54140c5b082..5394adb87e4a7ed165825b9744ba759d87db7808 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumCalculator.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSum.java
@@ -9,18 +9,15 @@ import edu.kit.ipd.descartes.perfdatarepo.Impact;
 import edu.kit.ipd.descartes.perfdatarepo.MetricValue;
 import edu.kit.ipd.descartes.perfdatarepo.Result;
 
-public class WeightedSumCalculator implements IWeightingFunctionCalculator {
+public class WeightedSum implements IWeightingFunction {
 
-	private Logger logger = Logger.getLogger(WeightedSumCalculator.class);
+	private Logger logger = Logger.getLogger(WeightedSum.class);
 	private WeightingFunction weightingFunction = null;
 
-	public WeightedSumCalculator(WeightingFunction f) {
+	public WeightedSum(WeightingFunction f) {
 	    setWeightingFunction(f);
 	}
 	
-	public WeightedSumCalculator() {
-    }
-
     public WeightingFunction getWeightingFunction() {
         return weightingFunction;
     }
@@ -41,12 +38,12 @@ public class WeightedSumCalculator implements IWeightingFunctionCalculator {
 		for (MetricValue afterMetricValue : afterMetricValues) {
 			// calculated delta=(after-before)
 			double afterValue = afterMetricValue.getValue();
-			double beforeValue = WeightingFunctionHelper
+			double beforeValue = WeightedSumWeightingFunctionHelper
 					.getValueForMetricType(afterMetricValue.getMetricType(), before);
 			double delta = afterValue - beforeValue;
 
 			// get the corresponding weight
-			double weightOfMetric = WeightingFunctionHelper.getWeightForMetricType(weightingFunction,
+			double weightOfMetric = WeightedSumWeightingFunctionHelper.getWeightForMetricType(weightingFunction,
 					afterMetricValue.getMetricType());
 
             if (Double.isNaN(weightOfMetric))
@@ -61,12 +58,4 @@ public class WeightedSumCalculator implements IWeightingFunctionCalculator {
 
 		return newWeight;
 	}
-
-	@Override
-	public void updateWeight(WeightedTactic weightedTactic) {
-		double newWeight = calculateWeight(weightedTactic);
-		logger.debug("Setting new weight of " + weightedTactic.getName() + " to " + newWeight);
-		weightedTactic.setCurrentWeight(newWeight);
-	}
-
 }
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightingFunctionHelper.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumWeightingFunctionHelper.java
similarity index 94%
rename from edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightingFunctionHelper.java
rename to edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumWeightingFunctionHelper.java
index 75ecdd9d6adfb320ca277aa672e3c593946fb1bf..98c0b27a68204b4f5d37b21663fdab8a9f047c50 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightingFunctionHelper.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumWeightingFunctionHelper.java
@@ -10,9 +10,9 @@ import edu.kit.ipd.descartes.perfdatarepo.MetricType;
 import edu.kit.ipd.descartes.perfdatarepo.MetricValue;
 import edu.kit.ipd.descartes.perfdatarepo.Result;
 
-public class WeightingFunctionHelper {
+public class WeightedSumWeightingFunctionHelper {
     
-    static Logger logger = Logger.getLogger(WeightingFunctionHelper.class);
+    static Logger logger = Logger.getLogger(WeightedSumWeightingFunctionHelper.class);
 
     /**
      * 
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/ObjectivesHelper.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/ObjectivesHelper.java
index 73beb60cf811ab713cfa9fdcf08edf5e0188b4b3..18125287f66d1de04cfd61fd335837f46bbf970b 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/ObjectivesHelper.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/ObjectivesHelper.java
@@ -2,8 +2,7 @@ package edu.kit.ipd.descartes.adaptation.model.dmm.util;
 
 import java.util.List;
 
-import edu.kit.ipd.descartes.adaptation.evaluation.weightingfunction.WeightingFunctionHelper;
-import edu.kit.ipd.descartes.adaptation.ql.QueryLanguageAdapter;
+import edu.kit.ipd.descartes.adaptation.evaluation.weightingfunction.WeightedSumWeightingFunctionHelper;
 import edu.kit.ipd.descartes.mm.adaptation.Event;
 import edu.kit.ipd.descartes.mm.adaptation.RelationalOperator;
 import edu.kit.ipd.descartes.mm.adaptation.Specification;
@@ -36,7 +35,7 @@ public class ObjectivesHelper {
         for (Specification specification : specs) {
             MetricType m = specification.getMetricType();
 //          TODO: Connect QueryEngine:  Double actualValue = QueryLanguageAdapter.getValueForMetricType(m);
-            Double actualValue = WeightingFunctionHelper.getValueForMetricType(m, result);
+            Double actualValue = WeightedSumWeightingFunctionHelper.getValueForMetricType(m, result);
             Double threshold = specification.getValue();
             if (!ObjectivesHelper.compare(actualValue, threshold, specification.getRelationalOperator()))
                 return false;