diff --git a/ausarbeitung_laborversuch.ipynb b/ausarbeitung_laborversuch.ipynb
index d91c177fff3a8cf19eebfc127f26cddebbbdb2c1..0240f3f62d35ad5df9aaadaf0380402c67120223 100644
--- a/ausarbeitung_laborversuch.ipynb
+++ b/ausarbeitung_laborversuch.ipynb
@@ -22,11 +22,6 @@
                 "Formulieren Sie eine oder mehrere Forschungsfragen zu diesem Versuch."
             ]
         },
-        {
-            "cell_type": "markdown",
-            "metadata": {},
-            "source": []
-        },
         {
             "cell_type": "markdown",
             "metadata": {},
@@ -54,7 +49,19 @@
             "cell_type": "code",
             "execution_count": null,
             "metadata": {},
-            "outputs": [],
+            "outputs": [
+                {
+                    "ename": "ModuleNotFoundError",
+                    "evalue": "No module named 'matplotlib'",
+                    "output_type": "error",
+                    "traceback": [
+                        "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+                        "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
+                        "\u001b[1;32mc:\\Users\\bnjhe\\Documents\\calorimetry_laboratory\\ausarbeitung_laborversuch.ipynb Cell 6\u001b[0m line \u001b[0;36m2\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/Users/bnjhe/Documents/calorimetry_laboratory/ausarbeitung_laborversuch.ipynb#W5sZmlsZQ%3D%3D?line=0'>1</a>\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mnumpy\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mnp\u001b[39;00m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/Users/bnjhe/Documents/calorimetry_laboratory/ausarbeitung_laborversuch.ipynb#W5sZmlsZQ%3D%3D?line=1'>2</a>\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mmatplotlib\u001b[39;00m \u001b[39mimport\u001b[39;00m pyplot \u001b[39mas\u001b[39;00m plt\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/Users/bnjhe/Documents/calorimetry_laboratory/ausarbeitung_laborversuch.ipynb#W5sZmlsZQ%3D%3D?line=2'>3</a>\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mh5py\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mh5\u001b[39;00m\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/Users/bnjhe/Documents/calorimetry_laboratory/ausarbeitung_laborversuch.ipynb#W5sZmlsZQ%3D%3D?line=3'>4</a>\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mimportlib\u001b[39;00m\n",
+                        "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'matplotlib'"
+                    ]
+                }
+            ],
             "source": [
                 "import numpy as np\n",
                 "from matplotlib import pyplot as plt\n",
@@ -73,13 +80,9 @@
             "metadata": {},
             "source": [
                 "### Kalorimeterkonstante\n",
-                "Hinweis: Nutzen Sie die Funktionenl *get_json_entry* um auf Metadaten zuzugreifen. \n",
-                "\n",
-                "Sie sollten Ihr Programm zwischen TODO und DONE implementieren, und versuchen die Anweisung zu verfolgen. Das ist aber nicht erforderlich.\n",
-                "\n",
-                "Das Modul *utility* gibt Hilfsfunktionen vor. Sie können sich dafür entscheiden, ob Sie das Modul implementieren und verwenden.\n",
+                "Hinweis: Sie können die Funktion *get_json_entry* nutzen um auf Metadaten zuzugreifen. \n",
                 "\n",
-                "Die Initialisierung der Variablen in manchen Zellen bient zu den Hinweisen, welche Daten in der Zelle bekommen werden sollten.\n"
+                "Für die Messdatenauswertung steht Ihnen bereits ein Modul utility.py zur Verfügung. Ergänzen sie die Funktionen im Modul zwischen TODO und DONE. Sie finden weitere Hinweise im jeweiligen Bereich TODO->DONE. \n"
             ]
         },
         {
@@ -87,7 +90,7 @@
             "metadata": {},
             "source": [
                 "#### (i) Messdaten einlesen\n",
-                "Messdaten werden in das Notebook eingelesen."
+                "Lesen Sie die Messdaten in ihr Notebook ein."
             ]
         },
         {
@@ -96,10 +99,9 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "datafile_path_const = None\n",
-                "\n",
                 "# TODO: Define the path to hdf5 file, which containing experiment data for constant.\n",
                 "\n",
+                "datafile_path_const = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -111,10 +113,10 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "data_dict = None\n",
                 "\n",
                 "# TODO: Read all experimental data and associated metadata from HDF5 files for data processing.\n",
                 "\n",
+                "data_dict = utility.get_plot_data_from_dataset()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -125,12 +127,14 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "index_calorimeter = []\n",
-                "index_environment = []\n",
-                "\n",
                 "# TODO: In order to be able to process data from sensors with the same position,\n",
-                "# it is first necessary to obtain the index of the sensors with different positions in the list.\n",
+                "# it is first necessary to obtain the index of the sensors with different positions in the list(np.array).\n",
+                "# List the index of all calorimeter sensors (index_calorimeter) and\n",
+                "# the environment sensor (index_environment).\n",
+                "# You can use this variables to easily get access to the correct measurement data later.\n",
                 "\n",
+                "index_calorimeter = []\n",
+                "index_environment = []\n",
                 "\n",
                 "# DONE #"
             ]
@@ -153,11 +157,12 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "calorimeter_data = np.array([[],[]])\n",
-                "environment_data = np.array([[],[]])\n",
                 "\n",
-                "# TODO: Calculate the average value and standard deviation of sensors.\n",
+                "# TODO: Calculate the average value and standard deviation of the calorimeter sensors and the environment sensor.\n",
+                "# You can use the indices from above.\n",
                 "\n",
+                "mean_std_calorimeter = utility.cal_mean_and_standard_deviation()\n",
+                "mean_std_environment = utility.cal_mean_and_standard_deviation()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -168,7 +173,7 @@
             "source": [
                 "#### (iii) Daten ploten\n",
                 "\n",
-                "Im Kalorimeter befinden sich mehrere Sensoren, deren Mittelwerte sowie Standardabweichungen der Messung an jeden Zeitpunkt bestimmt wurden. Die Messdaten bzw. ihre Mittelwerte müssen auf ein Scatter Plot eingetragen werden. Die Standardabweichungen der Sensoren sind als Errorbar im Plot zu sehen."
+                "Im Kalorimeter befinden sich mehrere Sensoren, deren Mittelwerte sowie Standardabweichungen der Messung an jeden Zeitpunkt bestimmt wurden. Die Messdaten bzw. ihre Mittelwerte sollen in einem Plot eingetragen werden. Die Standardabweichungen der Sensoren sind als Errorbar im Plot zu sehen."
             ]
         },
         {
@@ -181,6 +186,7 @@
                 "\n",
                 "# TODO: Use the temperature and time data for plotting\n",
                 "\n",
+                "plot_temp_over_time()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -196,16 +202,16 @@
         },
         {
             "cell_type": "code",
-            "execution_count": 1,
+            "execution_count": null,
             "metadata": {},
             "outputs": [],
             "source": [
                 "# Heat capacity of Water has been given\n",
                 "water_heat_capa = 4.18\n",
-                "water_mass = None\n",
                 "\n",
                 "# TODO: Read mass of the water from the metadata of the experiment.\n",
                 "\n",
+                "water_mass = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -216,13 +222,12 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "current = None\n",
-                "heat_time = None\n",
-                "voltage = None\n",
-                "\n",
                 "# TODO: Reading heater related data from hdf5 file, please use the same datafile_path_const variable for the HDF5 path.\n",
                 "# Hint: Note whether the data is stored as an array or a scalar in the hdf5 dataset.\n",
                 "\n",
+                "current = None\n",
+                "heat_time = None\n",
+                "voltage = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -246,11 +251,10 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "temperature_end = None\n",
-                "temperature_start = None\n",
                 "\n",
                 "# TODO: Calculation of temperature data necessary to determine the specific heat capacity\n",
                 "\n",
+                "temperature_end, temperature_start = utility.get_start_end_temperature() \n",
                 "\n",
                 "# DONE #"
             ]
@@ -271,10 +275,9 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "calorimeter_const = None\n",
-                "\n",
                 "# TODO: Calculate heat capacity of the calorimeter\n",
                 "\n",
+                "calorimeter_const = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -315,10 +318,9 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "datafile_path_prob1 = None\n",
-                "\n",
                 "# TODO: Define the path to hdf5 file, which containing experiment data for constant.\n",
                 "\n",
+                "datafile_path_prob1 = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -330,10 +332,10 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "data_dict = None\n",
                 "\n",
                 "# TODO: Read all experimental data and associated metadata from HDF5 files for data processing.\n",
                 "\n",
+                "data_dict = utility.get_plot_data_from_dataset()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -344,13 +346,14 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "index_calorimeter = []\n",
-                "index_bath = []\n",
-                "index_env = []\n",
+                "\n",
                 "\n",
                 "# TODO: In order to be able to process data from sensors with the same position,\n",
                 "# it is first necessary to obtain the index of the sensors with different positions in the list.\n",
                 "\n",
+                "index_calorimeter = []\n",
+                "index_bath = []\n",
+                "index_env = []\n",
                 "\n",
                 "# DONE #"
             ]
@@ -369,12 +372,12 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "calorimeter_data = np.array([[],[]])\n",
-                "env_data = np.array([[],[]])\n",
-                "heat_data = np.array([[],[]])\n",
                 "\n",
                 "# TODO: Calculate the average value and standard deviation of sensors.\n",
                 "\n",
+                "mean_std_calorimeter = utility.cal_mean_and_standard_deviation()\n",
+                "mean_std_environment = utility.cal_mean_and_standard_deviation()\n",
+                "mean_std_heater = utility.cal_mean_and_standard_deviation()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -396,6 +399,7 @@
                 "\n",
                 "# TODO: Use the temperature and time data for plotting.\n",
                 "\n",
+                "plot_temp_over_time()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -413,10 +417,9 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "sample_mass = None\n",
-                "\n",
                 "# TODO: Read mass of the sample from the metadata of the experiment.\n",
                 "\n",
+                "sample_mass = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -436,11 +439,10 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "temperature_mix = None\n",
-                "temperature_start_water = None\n",
                 "\n",
                 "# TODO: Calculation of temperature data necessary to determine the specific heat capacity\n",
                 "\n",
+                "temperature_mix, temperature_start_water = utility.get_start_end_temperature() \n",
                 "\n",
                 "# DONE #"
             ]
@@ -451,11 +453,11 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "temperature_start_sample = None\n",
-                "\n",
                 "# TODO: Determine the initial temperature of the sample. \n",
                 "# Since the temperature of the water bath is stable, the initial temperature\n",
-                "# of the sample can be taken as the average of the 10 data after the start of the measurement.\n",
+                "# of the sample can be taken as the average of the 10 temperature-values after the start of the measurement.\n",
+                "\n",
+                "temperature_start_sample = None\n",
                 "\n",
                 "\n",
                 "# DONE #"
@@ -477,10 +479,9 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "sample_heat_capa = None\n",
-                "\n",
                 "# TODO: Calulate specific heat capacity of the sample.\n",
                 "\n",
+                "sample_heat_capa = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -521,10 +522,9 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "datafile_path_prob2 = None\n",
-                "\n",
                 "# TODO: Define the path to hdf5 file, which containing experiment data for constant.\n",
                 "\n",
+                "datafile_path_prob2 = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -536,10 +536,10 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "data_dict = None\n",
                 "\n",
                 "# TODO: Read all experimental data and associated metadata from HDF5 files for data processing.\n",
                 "\n",
+                "data_dict = utility.get_plot_data_from_dataset()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -550,13 +550,12 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "index_calorimeter = []\n",
-                "index_bath = []\n",
-                "index_env = []\n",
-                "\n",
                 "# TODO: In order to be able to process data from sensors with the same position,\n",
                 "# it is first necessary to obtain the index of the sensors with different positions in the list.\n",
                 "\n",
+                "index_calorimeter = []\n",
+                "index_bath = []\n",
+                "index_env = []\n",
                 "\n",
                 "# DONE #"
             ]
@@ -575,12 +574,12 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "calorimeter_data = np.array([[],[]])\n",
-                "env_data = np.array([[],[]])\n",
-                "heat_data = np.array([[],[]])\n",
                 "\n",
                 "# TODO: Calculate the average value and standard deviation of sensors.\n",
                 "\n",
+                "mean_std_calorimeter = utility.cal_mean_and_standard_deviation()\n",
+                "mean_std_environment = utility.cal_mean_and_standard_deviation()\n",
+                "mean_std_heater = utility.cal_mean_and_standard_deviation()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -602,6 +601,7 @@
                 "\n",
                 "# TODO: Use the temperature and time data for plotting.\n",
                 "\n",
+                "plot_temp_over_time()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -619,10 +619,9 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "sample_mass = None\n",
-                "\n",
                 "# TODO: Read mass of the sample from the metadata of the experiment.\n",
                 "\n",
+                "sample_mass = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -641,11 +640,10 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "temperature_mix = None\n",
-                "temperature_start_water = None\n",
                 "\n",
                 "# TODO: Calculation of temperature data necessary to determine the specific heat capacity\n",
                 "\n",
+                "temperature_mix, temperature_start_water = utility.get_start_end_temperature() \n",
                 "\n",
                 "# DONE #"
             ]
@@ -656,12 +654,11 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "temperature_start_sample = None\n",
-                "\n",
                 "# TODO: Determine the initial temperature of the sample. \n",
                 "# Since the temperature of the water bath is stable, the initial temperature\n",
                 "# of the sample can be taken as the average of the 10 data after the start of the measurement.\n",
                 "\n",
+                "temperature_start_sample = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -679,10 +676,9 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "sample_heat_capa = None\n",
-                "\n",
                 "# TODO: Calulate specific heat capacity of the sample.\n",
                 "\n",
+                "sample_heat_capa = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -723,10 +719,9 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "datafile_path_prob3 = None\n",
-                "\n",
                 "# TODO: Define the path to hdf5 file, which containing experiment data for constant.\n",
                 "\n",
+                "datafile_path_prob3 = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -738,10 +733,10 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "data_dict = None\n",
                 "\n",
                 "# TODO: Read all experimental data and associated metadata from HDF5 files for data processing.\n",
                 "\n",
+                "data_dict = utility.get_plot_data_from_dataset()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -752,13 +747,12 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "index_calorimeter = []\n",
-                "index_bath = []\n",
-                "index_env = []\n",
-                "\n",
                 "# TODO: In order to be able to process data from sensors with the same position,\n",
                 "# it is first necessary to obtain the index of the sensors with different positions in the list.\n",
                 "\n",
+                "index_calorimeter = []\n",
+                "index_bath = []\n",
+                "index_env = []\n",
                 "\n",
                 "# DONE #"
             ]
@@ -777,12 +771,12 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "calorimeter_data = np.array([[],[]])\n",
-                "env_data = np.array([[],[]])\n",
-                "heat_data = np.array([[],[]])\n",
                 "\n",
                 "# TODO: Calculate the average value and standard deviation of sensors.\n",
                 "\n",
+                "mean_std_calorimeter = utility.cal_mean_and_standard_deviation()\n",
+                "mean_std_environment = utility.cal_mean_and_standard_deviation()\n",
+                "mean_std_heater = utility.cal_mean_and_standard_deviation()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -804,6 +798,7 @@
                 "\n",
                 "# TODO: Use the temperature and time data for plotting.\n",
                 "\n",
+                "plot_temp_over_time()\n",
                 "\n",
                 "# DONE #"
             ]
@@ -821,10 +816,9 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "sample_mass = None\n",
-                "\n",
                 "# TODO: Read mass of the sample from the metadata of the experiment.\n",
                 "\n",
+                "sample_mass = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -843,11 +837,10 @@
             "outputs": [],
             "source": [
                 "importlib.reload(utility)\n",
-                "temperature_mix = None\n",
-                "temperature_start_water = None\n",
                 "\n",
                 "# TODO: Calculation of temperature data necessary to determine the specific heat capacity\n",
                 "\n",
+                "temperature_mix, temperature_start_water = utility.get_start_end_temperature() \n",
                 "\n",
                 "# DONE #"
             ]
@@ -858,12 +851,11 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "temperature_start_sample = None\n",
-                "\n",
                 "# TODO: Determine the initial temperature of the sample. \n",
                 "# Since the temperature of the water bath is stable, the initial temperature\n",
                 "# of the sample can be taken as the average of the 10 data after the start of the measurement.\n",
                 "\n",
+                "temperature_start_sample = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -881,10 +873,9 @@
             "metadata": {},
             "outputs": [],
             "source": [
-                "sample_heat_capa = None\n",
-                "\n",
                 "# TODO: Calulate specific heat capacity of the sample.\n",
                 "\n",
+                "sample_heat_capa = None\n",
                 "\n",
                 "# DONE #"
             ]
@@ -909,29 +900,10 @@
             "cell_type": "markdown",
             "metadata": {},
             "source": [
-                "## Genutzte Daten und Metadaten\n",
-                "\n",
-                "Geben Sie an welche Daten Sie verwenden und wie diese aufgebaut sind. Erklären Sie weiterhin in wenigen Sätzen das genutzte Metadaten-Konzept, sodass eine andere Person Ihre genutzten Daten versteht."
-            ]
-        },
-        {
-            "cell_type": "markdown",
-            "metadata": {},
-            "source": []
-        },
-        {
-            "cell_type": "markdown",
-            "metadata": {},
-            "source": [
-                "## Analyse\n",
+                "## Diskussion\n",
                 "Analysieren Sie Ihre Ergebnisse aus wissenschaflticher Sicht. Berücksichtigen Sie dabei Ihre oben genannte Forschungsfrage. Wie wirkt sich die mit der Probe aus dem Heißwasserbad transportierte Wassermenge auf das Ergebnis aus? Welche weiteren Fehlerquellen gibt es?"
             ]
         },
-        {
-            "cell_type": "markdown",
-            "metadata": {},
-            "source": []
-        },
         {
             "cell_type": "markdown",
             "metadata": {},
@@ -939,11 +911,6 @@
                 "## Fazit\n",
                 "Ziehe Sie ein persönliches Fazit zum Versuch."
             ]
-        },
-        {
-            "cell_type": "markdown",
-            "metadata": {},
-            "source": []
         }
     ],
     "metadata": {
@@ -962,7 +929,7 @@
             "name": "python",
             "nbconvert_exporter": "python",
             "pygments_lexer": "ipython3",
-            "version": "3.9.18"
+            "version": "3.11.6"
         }
     },
     "nbformat": 4,
diff --git a/functions/utility.py b/functions/utility.py
index 163ab37300cd492e4dc564eb1ae97d114f854b1c..3d10d0540b90d418213ab7d4649eb33e7d45be31 100644
--- a/functions/utility.py
+++ b/functions/utility.py
@@ -81,13 +81,13 @@ def get_plot_data_from_dataset(
                             [24.89, 24.92, 24.00, 25.39],
                             [24.89, 24.92, 24.00, 25.39],
                             [24.89, 24.92, 24.00, 25.39]
-                        ]) -> temperature from each sensor, The first dimension represents the sensor.
+                        ]) -> temperature from each sensor, The first dimension(row) represents the sensor.
             "timestamp": np.array([
                             [0.43, 1.60, 3.05, 4.25],
                             [0.81, 2.13, 3.49, 4.62],
                             [1.34, 2.60, 3.85, 5.08],
-                        ]) -> timestamp for each sensor, The first dimension represents the sensor.
-            "name": np.ndarray(["sensor_1", "sensor_2", "sensor_3"]) -> name of each sensor should be hier
+                        ]) -> timestamp for each sensor, The first dimension(row) represents the sensor.
+            "name": np.array(["sensor_1", "sensor_2", "sensor_3"]) -> name of each sensor should be hier
         }
 
     """
@@ -127,7 +127,7 @@ def get_plot_data_from_dataset(
             # DONE #
 
         for subgroup in subgroups:
-            # TODO: Save data in to the lists temperature, time and mame.
+            # TODO: Save data in to the lists temperature, time and name.
             # Data for each sensor must have the same length because of np.ndarray will be use in the output.
 
             raise NotImplementedError(