diff --git a/demand_generator/tek_data/gen_heat_profile.py b/demand_generator/tek_data/gen_heat_profile.py
index 49e260f03bf17bc6fadbf75d1c54fbebd4bdb83e..cb8ced976abbcdf2c0b28ed38d28075ab349e9e2 100644
--- a/demand_generator/tek_data/gen_heat_profile.py
+++ b/demand_generator/tek_data/gen_heat_profile.py
@@ -24,7 +24,9 @@ building_typ_list = ["Verwaltungsgebäude",
                      "Beherbergen und Verpflegen",
                      "Gewerbliche und industrielle",
                      "Verkaufsstätten",
-                     "Technikgebäude"]
+                     "Technikgebäude",
+                     "Wohngebäude",
+                     "Wohngebäude (MFH)"]
 energy_typ_list = ["sehr hoch", "hoch", "mittel", "gering", "sehr gering"]
 
 # ==============================================================================
@@ -82,36 +84,39 @@ def gen_heat_profile(building_typ,
 
 
 def gen_hot_water_profile(building_typ, area, year=2021, energy_typ="mittel"):
-    new_zone_df = analysis_bld_zone(building_typ, area)
-    for row in range(len(new_zone_df)):
-        zone = new_zone_df.loc[row, 'DIN_Zone']
+    # new_zone_df = analysis_bld_zone(building_typ, area)
+    # for row in range(len(new_zone_df)):
+    #     zone = new_zone_df.loc[row, 'DIN_Zone']
 
     bld_hot_water_demand = calc_bld_demand(building_typ, area, 'hot_water',
                                            energy_typ)
-    hot_water_heating_demand_df = pd.read_excel(input_dhw_path,
-                                                sheet_name='DHW',
-                                                header=None,
-                                                usecols=[1],
-                                                skiprows=1)
-    hot_water_heating_demand_df.columns = ['Wärmebedarf für '
-                                           'Trinkwassererwärmung (kWh)']
-    # The data is for 300 liter hot water demand and 60 grade Celsius supply
-    # hot water with 12 grade Celsius inlet water.
-    hot_water_heating_demand_df['Aktueller Wärmebedarf für ' \
-                                'Trinkwassererwärmung (kWh)'] = \
-        hot_water_heating_demand_df['Wärmebedarf für Trinkwassererwärmung (' \
-                                    'kWh)'].map(
-            lambda x: x / (4180 * 300 * (60 - 12) / 3600 / 1000 * 365) *
-                      bld_hot_water_demand)
-
-    hot_water_heating_demand_array = np.array(
-        hot_water_heating_demand_df['Aktueller Wärmebedarf für '
-                                    'Trinkwassererwärmung (kWh)'])
-
-    if building_typ == 'Verwaltungsgebäude':
-        hour_status_array = np.array(op_time_status(year, zone))
-        hot_water_heating_demand_array = np.multiply(hour_status_array,
-                                                     hot_water_heating_demand_array)
+    if building_typ == "Wohngebäude" or building_typ == "Wohngebäude (MFH)":
+        hot_water_heating_demand_df = pd.read_excel(input_dhw_path,
+                                                    sheet_name='DHW',
+                                                    header=None,
+                                                    usecols=[1],
+                                                    skiprows=1)
+        hot_water_heating_demand_df.columns = ['Wärmebedarf für '
+                                               'Trinkwassererwärmung (kWh)']
+        # The data is for 300 liter hot water demand and 60 grade Celsius supply
+        # hot water with 12 grade Celsius inlet water.
+        hot_water_heating_demand_df['Aktueller Wärmebedarf für ' \
+                                    'Trinkwassererwärmung (kWh)'] = \
+            hot_water_heating_demand_df['Wärmebedarf für ' \
+                                        'Trinkwassererwärmung (kWh)'].map(
+                lambda x: x / (4180 * 300 * (60 - 12) / 3600 / 1000 * 365) *
+                          bld_hot_water_demand)
+
+        hot_water_heating_demand_array = np.array(
+            hot_water_heating_demand_df['Aktueller Wärmebedarf für '
+                                        'Trinkwassererwärmung (kWh)'])
+
+    elif building_typ in building_typ_list and building_typ != "Wohngebäude" \
+            or building_typ != "Wohngebäude (MFH)":
+        bld_occupancy = calc_bld_occupancy(building_typ, area, year)
+        hot_water_heating_demand_array = bld_hot_water_demand / sum(
+            bld_occupancy) * np.array(bld_occupancy)
+        # print(hot_water_heating_demand_array)
 
     return hot_water_heating_demand_array
 
@@ -277,6 +282,49 @@ def calc_zone_demand(demand_df, demand_typ, zone_typ, zone_area):
     return total_demand
 
 
+def calc_bld_occupancy(building_typ,
+                       area,
+                       year):
+    """According to standard SIA2024, the occupancy for each hour are given
+    for each thermal zone"""
+    din_table = pd.read_excel(input_profile_path, sheet_name='DIN V 18599')
+    sia_table = pd.read_excel(input_profile_path, sheet_name='SIA2024')
+    bld_occupancy = [0] * 8760
+
+    new_zone_df = analysis_bld_zone(building_typ, area)
+    # print(new_zone_df)
+
+    for row in range(len(new_zone_df)):
+        din_zone = new_zone_df.loc[row, 'DIN_Zone']
+        sia_zone = din_table.loc[
+            din_table['Raumtyp'] == din_zone, 'Raumtyp_SIA'].values[0]
+        hour_status = op_time_status(year, din_zone)
+        # print(sia_zone)
+        zone_area = new_zone_df.loc[row, 'new_area']
+        sia_pers = sia_table.loc[
+            sia_table['Raumtyp'] == sia_zone, 'Personenfläche'].values[0]
+        # print(sia_pers)
+        sia_pers_profile = sia_table.loc[
+            sia_table['Raumtyp'] == sia_zone, 'Personenbelegung'].values[0]
+        sia_pers_profile = sia_pers_profile.split(', ')
+        sia_pers_profile = list(map(float, sia_pers_profile))
+        # print(sia_pers_profile)
+        if not np.isnan(sia_pers):
+            zone_pers = zone_area / sia_pers
+            # print(zone_pers)
+            zone_pers_profile = zone_pers * np.array(sia_pers_profile)
+            zone_occupancy = [0] * 8760
+
+            for day in range(365):
+                for hour in range(24):
+                    if hour_status[day*24+hour] == 1:
+                        zone_occupancy[day*24+hour] = zone_pers_profile[hour]
+            # print(zone_pers_profile)
+            bld_occupancy += np.array(zone_occupancy)
+    # print(bld_occupancy)
+    return bld_occupancy
+
+
 def degree_day(zone_typ, annual_value, profile_df, temperature_profile,
                status_list):
     heat_profile = []
@@ -347,7 +395,9 @@ if __name__ == "__main__":
     input_temp_path = os.path.join(base_path, 'tek_data', 'temperature.csv')
     temperature = pd.read_csv(input_temp_path)['temperature'].values
     # gen_heat_profile("Wohngebäude", 300, temperature, plot=True)
-    print('Space heating demand profile:')
-    print(gen_heat_profile("Verwaltungsgebäude", 300, temperature))
+    # print('Space heating demand profile:')
+    # print(gen_heat_profile("Wohngebäude (MFH)", 300, temperature))
     print('Hot water demand profile:')
     print(gen_hot_water_profile("Verwaltungsgebäude", 300))
+
+    # calc_bld_occupancy("Verwaltungsgebäude", 300, year=2021)