diff --git a/pareto_analysis/pareto_analysis.py b/pareto_analysis/pareto_analysis.py
index 3a8f51b5d3784703491f334332f20df20785f472..71d548b86bd2f204e3efc5f9b6dd037fb228a4de 100644
--- a/pareto_analysis/pareto_analysis.py
+++ b/pareto_analysis/pareto_analysis.py
@@ -21,53 +21,65 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 """
-import pyomo.environ as pyomo
-from pyomo.opt import SolverStatus, TerminationCondition
+from Model_Library.optimization_model import OptimizationModel
+
 import matplotlib.pyplot as plot
 import os
+import pyomo.environ as pyo
+from pyomo.opt import SolverStatus, TerminationCondition
+
+def pareto_analysis(entity, strategy):
+    if len(strategy) != 2:
+            raise ValueError('Pareto analysis can only be done with two strategies!')
+    model = OptimizationModel(entity._name, entity._dynamic)
+
+    entity._topology.build_model(model, strategy)
+
+    model.collect_objectives()
 
-def pareto_analysis(prosumer, model, strategy_names):
+    model = model.block
+    strategy_names = list(strategy.keys())
     strategy_name_1 = strategy_names[0]
     strategy_name_2 = strategy_names[1]
-    solver = pyomo.SolverFactory("gurobi")
+    solver = pyo.SolverFactory("gurobi")
     solver.options['MIPGap'] = 0.01
     solver.options['Presolve'] = 2
     solver.options['TimeLimit'] = 200
     payoff = [[0.0, 0.0], [0.0, 0.0]]
-    f1 = getattr(model, 'f' + strategy_name_1)
-    O1 = getattr(model, 'O' + strategy_name_1)
-    f2 = getattr(model, 'f' + strategy_name_2)
-    O2 = getattr(model, 'O' + strategy_name_2)
+    f1 = getattr(model, 'f_' + strategy_name_1)
+    O1 = getattr(model, 'O_' + strategy_name_1)
+    f2 = getattr(model, 'f_' + strategy_name_2)
+    O2 = getattr(model, 'O_' + strategy_name_2)
     O2.deactivate()
     solver.solve(model)
-    payoff[0][0] = pyomo.value(f1)
-    model.cp11 = pyomo.Constraint(expr = f1 == payoff[0][0])
+    payoff[0][0] = pyo.value(f1)
+    model.cp11 = pyo.Constraint(expr = f1 == payoff[0][0])
     O1.deactivate()
     O2.activate()
     solver.solve(model)
-    payoff[0][1] = pyomo.value(f2)
+    payoff[0][1] = pyo.value(f2)
     model.del_component(model.cp11)
     solver.solve(model)
-    payoff[1][1] = pyomo.value(f2)
-    model.cp22 = pyomo.Constraint(expr = f2 == payoff[1][1])
+    payoff[1][1] = pyo.value(f2)
+    model.cp22 = pyo.Constraint(expr = f2 == payoff[1][1])
     O2.deactivate()
     O1.activate()
     solver.solve(model)
-    payoff[1][0] = pyomo.value(f1)
+    payoff[1][0] = pyo.value(f1)
     r2 = payoff[1][1] - payoff[0][1]
     g2 = 4
     i2 = 0
     number_of_solutions = 0
-    model.s2 = pyomo.Var(bounds = (0, None))
-    model.e2 = pyomo.Param(mutable = True)
+    model.s2 = pyo.Var(bounds = (0, None))
+    model.e2 = pyo.Param(mutable = True)
     model.del_component(model.cp22)
-    if O2.sense == pyomo.maximize:
+    if O2.sense == pyo.maximize:
         factor = -1
     else:
         factor = 1
-    model.cp2 = pyomo.Constraint(expr = f2 + factor * model.s2 == model.e2)
+    model.cp2 = pyo.Constraint(expr = f2 + factor * model.s2 == model.e2)
     O1.deactivate()
-    model.O = pyomo.Objective(expr = f1 + 0.001 * (model.s2 / r2), sense = O1.sense)
+    model.O = pyo.Objective(expr = f1 + 0.001 * (model.s2 / r2), sense = O1.sense)
     f1_list = []
     f2_list = []
     pareto_rsl = dict()
@@ -75,21 +87,19 @@ def pareto_analysis(prosumer, model, strategy_names):
         model.e2 = payoff[0][1] + (i2 / g2) * r2
         solver_result = solver.solve(model)
         if solver_result.solver.status == SolverStatus.ok and solver_result.solver.termination_condition == TerminationCondition.optimal:
-            f1_list.append(pyomo.value(f1))
-            f2_list.append(pyomo.value(f2))
-            pareto_rsl[number_of_solutions] = (pyomo.value(model.x1), pyomo.value(model.x2))
+            f1_list.append(pyo.value(f1))
+            f2_list.append(pyo.value(f2))
+            pareto_rsl[number_of_solutions] = (pyo.value(f1), pyo.value(f2))
             number_of_solutions += 1
             i2 += 1
         else:
             i2 = g2 + 1
-    if not os.path.exists('output_files/'):
-        os.makedirs('output_files/')
-    if not os.path.exists('output_files/' + prosumer.name + '/'):
-        os.makedirs('output_files/' + prosumer.name + '/')
+    if not os.path.exists('output_files'):
+        os.makedirs('output_files')
     fig, ax = plot.subplots(figsize = (16, 9))
     ax.plot(f1_list, f2_list, 'o-.', linewidth = 0.5)
     plot.title('Pareto-Front')
     plot.grid(True)
     plot.xlabel(strategy_name_1)
     plot.ylabel(strategy_name_2)
-    plot.savefig('output_files/' + prosumer.name + '/pareto_front.png')
\ No newline at end of file
+    plot.savefig('output_files/' + entity._name + '_pareto_front.png')
\ No newline at end of file