diff --git a/input_files/models/prosumer_models/office_pv_heatpump/config.csv b/input_files/models/prosumer_models/office_pv_heatpump/config.csv
new file mode 100644
index 0000000000000000000000000000000000000000..be5d6200a2f1f62a9a82ce2293bdb5ec8a02d3d5
--- /dev/null
+++ b/input_files/models/prosumer_models/office_pv_heatpump/config.csv
@@ -0,0 +1,2 @@
+injection_price,injection_price_variable,injection/pvpeak,gas_price,gas_price_variable,elec_price,elec_price_variable,heat_price,heat_price_variable,cooling_price,cooling_price_variable,injection_price_gas,injection_price_gas_variable,injection_price_heat,injection_price_heat_variable,injection_price_cooling,injection_price_cooling_variable,elec_emission,gas_emission,yearly_interest,planning_horizon,elec_price_cap_low,elec_price_cap_high
+0.0793,0,0.7,0.0606,0,0.3046,0,0,0,0,0,0,0,0,0,0,0,0.401,0.21,0.03,20,15,107
diff --git a/input_files/models/prosumer_models/office_pv_heatpump/data_path.csv b/input_files/models/prosumer_models/office_pv_heatpump/data_path.csv
new file mode 100644
index 0000000000000000000000000000000000000000..aa0479f160f0098ef724bba48c299f1cb0ca738d
--- /dev/null
+++ b/input_files/models/prosumer_models/office_pv_heatpump/data_path.csv
@@ -0,0 +1,5 @@
+type,path,unit
+demand_electric,generate,h
+demand_heat,generate,h
+irradiance,input_files/data/irradiance/Lindenberg2006BSRN_Irradiance_60sec.csv,min
+temperature,input_files/data/temperature/temperature.csv,h
diff --git a/input_files/models/prosumer_models/office_pv_heatpump/elec_matrix.csv b/input_files/models/prosumer_models/office_pv_heatpump/elec_matrix.csv
new file mode 100644
index 0000000000000000000000000000000000000000..51d563713936974eda2a41a665fe4485c81d93a9
--- /dev/null
+++ b/input_files/models/prosumer_models/office_pv_heatpump/elec_matrix.csv
@@ -0,0 +1,7 @@
+comp_name,comp_type,model,min_size,max_size,current_size,pv_roof,inv_pv_bat,battery,heat_pump,grd,elec_cns
+pv_roof,StandardPVGenerator,PV2,0,30,0,0,1,0,0,0,0
+inv_pv_bat,Inverter,STP-7000TL-20,0,30,0,0,0,1,1,1,1
+battery,LiionBattery,BAT1,0,1000,0,0,1,0,0,0,0
+heat_pump,HeatPump,EHP1,2,50,0,0,0,0,0,0,0
+grd,StandardACGrid,GRD1,1000,1000,0,0,1,0,1,0,1
+elec_cns,StandardElectricalConsumption,CNS1,1000,1000,0,0,0,0,0,0,0
diff --git a/input_files/models/prosumer_models/office_pv_heatpump/therm_matrix.csv b/input_files/models/prosumer_models/office_pv_heatpump/therm_matrix.csv
new file mode 100644
index 0000000000000000000000000000000000000000..3f54f72d2981ba422a521c1bdb61070f66b6d997
--- /dev/null
+++ b/input_files/models/prosumer_models/office_pv_heatpump/therm_matrix.csv
@@ -0,0 +1,5 @@
+comp_name,comp_type,model,min_size,max_size,current_size,heat_pump,therm_cns,dhw_dmd,water_tes
+heat_pump,HeatPump,EHP1,,,,0,0,0,1
+therm_cns,HeatConsumption,HeatCNS1,1000,1000,0,0,0,0,0
+dhw_dmd,HotWaterConsumption,HWCNS1,1000,1000,0,0,0,0,0
+water_tes,HotWaterStorage,TES1,10,93,0,0,1,1,0
diff --git a/runme.py b/runme.py
index 7eaa0a1f645ef803730315d894e985fc66091dc0..493848312945111bb14ea7f15d105b29f9efdb48 100644
--- a/runme.py
+++ b/runme.py
@@ -30,11 +30,14 @@ import Model_Library.Prosumer.main as main
 from multiprocessing import Pool
 import os
 from functools import partial
-from Model_Library.Prosumer.scripts.results_evaluation.results_evaluation import Plot_savings
+from Model_Library.Prosumer.scripts.results_evaluation.results_evaluation import \
+    Plot_savings
+
 
 # from Tooling.results_evaluation.results_evaluation import Plot_savings
 
-def process_each_prosumer(prosumer_name, prosumer_dict, data_source, commentary, no_process_bar_rh):
+def process_each_prosumer(prosumer_name, prosumer_dict, data_source, commentary,
+                          no_process_bar_rh):
     """
     The method XYZ adds ...
     :param
@@ -100,13 +103,18 @@ def process_each_prosumer(prosumer_name, prosumer_dict, data_source, commentary,
         final_iteration = False
 
         # Set aggregation options
-        parser = argparse.ArgumentParser(description='Start optimization from DB or local data')
-        parser.add_argument('-a', '--aggregate', action="store_true", dest="aggregate",
-                            help="activating aggregation of input time series", default=False)
+        parser = argparse.ArgumentParser(
+            description='Start optimization from DB or local data')
+        parser.add_argument('-a', '--aggregate', action="store_true",
+                            dest="aggregate",
+                            help="activating aggregation of input time series",
+                            default=False)
         options = parser.parse_args()
 
         # Calculate number of rolling horizon intervals and loop through them
-        for t in tqdm(pd.date_range(t_start, t_end - pd.Timedelta(hours=t_rh_shift + 1), freq=str(t_rh_shift) + 'H'),
+        for t in tqdm(pd.date_range(t_start,
+                                    t_end - pd.Timedelta(hours=t_rh_shift + 1),
+                                    freq=str(t_rh_shift) + 'H'),
                       disable=no_process_bar_rh):
             # ToDo: replace first value with perfect value (can be done in runme)
             # set end date for current loop
@@ -115,23 +123,29 @@ def process_each_prosumer(prosumer_name, prosumer_dict, data_source, commentary,
             # exceptions that occur at global end of simulation horizon
             if t_end_loop > t_end:
                 t_end_loop = t_end
-            if t_current_value_length > (t_end_loop - t) / pd.Timedelta(hours=1):
-                t_current_value_length = (t_end_loop - t) / pd.Timedelta(hours=1)
+            if t_current_value_length > (t_end_loop - t) / pd.Timedelta(
+                    hours=1):
+                t_current_value_length = (t_end_loop - t) / pd.Timedelta(
+                    hours=1)
 
             # Set flag for final iteration
             if t == t_end - pd.Timedelta(hours=t_rh_shift + 1):
                 final_iteration = True
 
             # Start main programme
-            prosumer = main.Main(data_source, {prosumer_name: prosumer_dict[prosumer_name]}, t, t_end_loop, t_step,
+            prosumer = main.Main(data_source,
+                                 {prosumer_name: prosumer_dict[prosumer_name]},
+                                 t, t_end_loop, t_step,
                                  predictions, t_current_value_length, t_end,
-                                 t_history, commentary, storage_states, t_rh_shift, aggregation=options.aggregate)
+                                 t_history, commentary, storage_states,
+                                 t_rh_shift, aggregation=options.aggregate)
 
             # Run optimization
             prosumer.run_optimization(prosumer.prosumer_name_list)
 
             # Show results - Results are only plotted after last iteration of rolling horizon
-            prosumer.show_results(prosumer.prosumer_name_list, interim_results, final_iteration)
+            prosumer.show_results(prosumer.prosumer_name_list, interim_results,
+                                  final_iteration)
 
             # Get storage states from this iteration
             storage_states = prosumer.charge_status
@@ -164,16 +178,16 @@ if __name__ == "__main__":
     # data_path = topology_path + '/data_path.csv'
     # prosumer_name = 'office'
     # prosumer_dict = {prosumer_name: {'topology_path': topology_path, 'config_path': config_path, 'data_path': data_path}}
-    topology_path = ['input_files/models/SCN0_CAT1']
-    prosumer_name = ['SCN0_CAT1']
-    rolling_horizon = [False]
-    elec_demand = [1500, 10000]
-    therm_demand = [5000, 20000]
-    hot_water_demand = 1500  # [1500, 1500]
-    step_elec_demand = 500
-    step_therm_demand = 500
+    # topology_path = ['input_files/models/SCN0_CAT1']
+    # prosumer_name = ['SCN0_CAT1']
+    # rolling_horizon = [False]
+    # elec_demand = [1500, 10000]
+    # therm_demand = [5000, 20000]
+    # hot_water_demand = 1500  # [1500, 1500]
+    # step_elec_demand = 500
+    # step_therm_demand = 500
     # step_hot_water_demand = 0
-    prosumer_dict = {}
+    # prosumer_dict = {}
     """    for i in range(len(prosumer_name)):
         for j in range(elec_demand[0], elec_demand[1], step_elec_demand):
             for k in range(therm_demand[0], therm_demand[1], step_therm_demand):
@@ -186,16 +200,24 @@ if __name__ == "__main__":
                                                                                     'data_path': topology_path[i] + '/data_path.csv',
                                                                                     'rolling_horizon': rolling_horizon[i]}"""
 
-    prosumer_dict={#'SCN0_CAT1_2000_6000': {'elec_demand': 2000, 'therm_demand': 6000, 'hot_water_demand': 1500, 'topology_path': 'input_files/models/SCN0_CAT1', 'config_path': 'input_files/models/SCN0_CAT1/config.csv', 'data_path': 'input_files/models/SCN0_CAT1/data_path.csv', 'rolling_horizon': False},
-                    #'SCN3_CAT1_3000_6000': {'elec_demand': 3000, 'therm_demand': 6000, 'hot_water_demand': 1500, 'topology_path': 'input_files/models/SCN3_CAT1', 'config_path': 'input_files/models/SCN3_CAT1/config.csv', 'data_path': 'input_files/models/SCN3_CAT1/data_path.csv', 'rolling_horizon': False},
-                   #'SCN1_CAT1_3000_6000': {'elec_demand': 3000, 'therm_demand': 6000, 'hot_water_demand': 1500, 'topology_path': 'input_files/models/SCN1_CAT1', 'config_path': 'input_files/models/SCN1_CAT1/config.csv', 'data_path': 'input_files/models/SCN1_CAT1/data_path.csv', 'rolling_horizon': False},
-                      'SCN2_CAT1_PV14_HP_3000_6000': {'elec_demand': 3000, 'therm_demand': 6000,
-                                                      'hot_water_demand': 1500,
-                                                      'topology_path': 'input_files/models/prosumer_models/SCN2_CAT1_PV14_HP',
-                                                      'config_path': 'input_files/models/prosumer_models/SCN2_CAT1_PV14_HP/config.csv',
-                                                      'data_path': 'input_files/models/prosumer_models/SCN2_CAT1_PV14_HP/data_path.csv',
-                                                      'rolling_horizon': False}
-                   #'SCN2_CAT1_PV12_BA_3000_6000': {'elec_demand': 9000, 'therm_demand': 20000, 'hot_water_demand': 1500, 'topology_path': 'input_files/models/SCN2_CAT1_PV12_BA', 'config_path': 'input_files/models/SCN2_CAT1_PV12_BA/config.csv', 'data_path': 'input_files/models/SCN3_CAT1_PV12_BA/data_path.csv', 'rolling_horizon': True}}
+    prosumer_dict = {
+        # 'SCN0_CAT1_2000_6000': {'elec_demand': 2000, 'therm_demand': 6000, 'hot_water_demand': 1500, 'topology_path': 'input_files/models/SCN0_CAT1', 'config_path': 'input_files/models/SCN0_CAT1/config.csv', 'data_path': 'input_files/models/SCN0_CAT1/data_path.csv', 'rolling_horizon': False},
+        # 'SCN3_CAT1_3000_6000': {'elec_demand': 3000, 'therm_demand': 6000, 'hot_water_demand': 1500, 'topology_path': 'input_files/models/SCN3_CAT1', 'config_path': 'input_files/models/SCN3_CAT1/config.csv', 'data_path': 'input_files/models/SCN3_CAT1/data_path.csv', 'rolling_horizon': False},
+        # 'SCN1_CAT1_3000_6000': {'elec_demand': 3000, 'therm_demand': 6000, 'hot_water_demand': 1500, 'topology_path': 'input_files/models/SCN1_CAT1', 'config_path': 'input_files/models/SCN1_CAT1/config.csv', 'data_path': 'input_files/models/SCN1_CAT1/data_path.csv', 'rolling_horizon': False},
+        # 'SCN2_CAT1_PV14_HP_3000_6000': {'elec_demand': 3000, 'therm_demand': 6000,
+        #                                 'hot_water_demand': 1500,
+        #                                 'topology_path': 'input_files/models/prosumer_models/SCN2_CAT1_PV14_HP',
+        #                                 'config_path': 'input_files/models/prosumer_models/SCN2_CAT1_PV14_HP/config.csv',
+        #                                 'data_path': 'input_files/models/prosumer_models/SCN2_CAT1_PV14_HP/data_path.csv',
+        #                                 'rolling_horizon': False}
+        'office_pv_heatpump': {'elec_demand': 32905,
+                               'therm_demand': 115154,
+                               'hot_water_demand': 11882,
+                               'topology_path': 'input_files/models/prosumer_models/office_pv_heatpump',
+                               'config_path': 'input_files/models/prosumer_models/office_pv_heatpump/config.csv',
+                               'data_path': 'input_files/models/prosumer_models/office_pv_heatpump/data_path.csv',
+                               'rolling_horizon': False}
+        # 'SCN2_CAT1_PV12_BA_3000_6000': {'elec_demand': 9000, 'therm_demand': 20000, 'hot_water_demand': 1500, 'topology_path': 'input_files/models/SCN2_CAT1_PV12_BA', 'config_path': 'input_files/models/SCN2_CAT1_PV12_BA/config.csv', 'data_path': 'input_files/models/SCN3_CAT1_PV12_BA/data_path.csv', 'rolling_horizon': True}}
 
     }
     # PLEASE CHANGE HERE
@@ -214,14 +236,22 @@ if __name__ == "__main__":
     if parallel_processing:
         count_processes = len(prosumer_dict.keys())
         pool = Pool(os.cpu_count())
-        parallel_func = partial(process_each_prosumer, prosumer_dict=prosumer_dict, data_source=data_source,
-                                commentary=commentary, no_process_bar_rh=no_process_bar_rh)
-        mapped_values = list(tqdm(pool.map(parallel_func, list(prosumer_dict.keys())), total=count_processes))
+        parallel_func = partial(process_each_prosumer,
+                                prosumer_dict=prosumer_dict,
+                                data_source=data_source,
+                                commentary=commentary,
+                                no_process_bar_rh=no_process_bar_rh)
+        mapped_values = list(
+            tqdm(pool.map(parallel_func, list(prosumer_dict.keys())),
+                 total=count_processes))
     # Normal processing, one core only
     else:
         for prosumer_name in list(prosumer_dict.keys()):
-            process_each_prosumer(prosumer_name=prosumer_name, prosumer_dict=prosumer_dict, data_source=data_source,
-                                  commentary=commentary, no_process_bar_rh=no_process_bar_rh)
+            process_each_prosumer(prosumer_name=prosumer_name,
+                                  prosumer_dict=prosumer_dict,
+                                  data_source=data_source,
+                                  commentary=commentary,
+                                  no_process_bar_rh=no_process_bar_rh)
 
     # Timer output
     toc = time.time()