diff --git a/public/js/src_modules/calculateTemperatureDiff.mjs b/public/js/src_modules/calculateTemperatureDiff.mjs
index dde16c2c4b11654fecfa119867ea63fd6f817fee..c661ba89eda7836de500cc1bbc2c7c0a8545ba4e 100644
--- a/public/js/src_modules/calculateTemperatureDiff.mjs
+++ b/public/js/src_modules/calculateTemperatureDiff.mjs
@@ -6,6 +6,69 @@ import { getMetadataPlusObservationsFromSingleOrMultipleDatastreams } from "./fe
 
 import { extractPhenomenonNameFromDatastreamName } from "./fetchedDataProcessing.mjs";
 
+/**
+ * Calculate the temperature difference, dT, between Vorlauf temperature [VL] and
+ * RÞcklauf temperature [RL] (i.e., dT = VL - RL) for a single building
+ *
+ * @param {Array} observationsPlusMetadataArr A 1*2 array, where the first element is an array made up of two arrays of observations and the second element is an array of two metadata objects
+ * @returns {Array} An array made up of timestamps + values for dT
+ */
+const calculateVorlaufMinusRuecklaufTemperatureObservations = function (
+  observationsPlusMetadataArr
+) {
+  // Extract Vorlauf temperature, Ruecklauf temperature; first element of array
+  const [[vorlaufTemperatureObsArr, ruecklaufTemperatureObsArr]] =
+    observationsPlusMetadataArr;
+
+  // Compare the lengths of the observations arrays for VL and RL,
+  // delete the unique observation(s), if necessary
+  const [vorlaufTemperatureObsFinalArr, ruecklaufTemperatureObsFinalArr] =
+    vorlaufTemperatureObsArr.length === ruecklaufTemperatureObsArr.length
+      ? [vorlaufTemperatureObsArr, ruecklaufTemperatureObsArr]
+      : checkForAndDeleteUniqueObservationsFromLargerArray(
+          vorlaufTemperatureObsArr,
+          ruecklaufTemperatureObsArr
+        );
+
+  // Extract the temperature values
+  const vorlaufTemperatureValues = vorlaufTemperatureObsFinalArr.map(
+    (vlTempObs) => vlTempObs[1]
+  );
+  const ruecklaufTemperatureValues = ruecklaufTemperatureObsFinalArr.map(
+    (rlTempObs) => rlTempObs[1]
+  );
+
+  // Check that the final observation arrays have equal lengths
+  if (
+    vorlaufTemperatureObsFinalArr.length !==
+    ruecklaufTemperatureObsFinalArr.length
+  ) {
+    throw new Error(
+      "The two observations arrays (VL and RL) have different lengths"
+    );
+  }
+  // The final observation arrays now have equal length, we need only use one of them for looping
+  // Resulting array contains the following pairs (timestamp + dT)
+  else {
+    return vorlaufTemperatureObsFinalArr.map((vlTempObsFinal, i) => {
+      // Use timestamp from VL, since is equal to that of RL
+      const timestamp = vlTempObsFinal[0];
+
+      // Case 1: One of the observation values is `null`,
+      // no need to calculate temperature difference
+      // Case 2: Neither of the observation values is `null`,
+      // calculate temperature difference
+      return vorlaufTemperatureValues[i] === null ||
+        ruecklaufTemperatureValues[i] === null
+        ? [timestamp, null]
+        : [
+            timestamp,
+            vorlaufTemperatureValues[i] - ruecklaufTemperatureValues[i],
+          ];
+    });
+  }
+};
+
 /**
  * Calculate the temperature difference, dT, between Vorlauf temperature [VL] and
  * RÞcklauf temperature [RL] (i.e., dT = VL - RL). In addition, create synthetic metadata
@@ -51,55 +114,13 @@ export const calculateVorlaufMinusRuecklaufTemperature = async function (
           bldgDataPtSamplingRateNestedArr
         );
 
-      // Extract Vorlauf temperature, Ruecklauf temperature and metadata
-      const [
-        [vorlaufTemperatureObsArr, ruecklaufTemperatureObsArr],
-        [metadataVorlauf, metadataRuecklauf],
-      ] = observationsPlusMetadata;
-
-      // Compare the lengths of the observations arrays for VL and RL,
-      // delete the unique observation(s), if necessary
-      const [vorlaufTemperatureObsFinalArr, ruecklaufTemperatureObsFinalArr] =
-        vorlaufTemperatureObsArr.length === ruecklaufTemperatureObsArr.length
-          ? [vorlaufTemperatureObsArr, ruecklaufTemperatureObsArr]
-          : checkForAndDeleteUniqueObservationsFromLargerArray(
-              vorlaufTemperatureObsArr,
-              ruecklaufTemperatureObsArr
-            );
-
-      // Extract the temperature values
-      const vorlaufTemperatureValues = vorlaufTemperatureObsFinalArr.map(
-        (vlTempObs) => vlTempObs[1]
-      );
-      const ruecklaufTemperatureValues = ruecklaufTemperatureObsFinalArr.map(
-        (rlTempObs) => rlTempObs[1]
-      );
-
-      // The final observation arrays now have equal length, we need only use one of them for looping
-      // Resulting array contains the following pairs (timestamp + dT)
       const vorlaufMinusRuecklaufTemperatureObs =
-        vorlaufTemperatureObsFinalArr.map((vlTempObsFinal, i) => {
-          // Use timestamp from VL, since is equal to that of RL
-          const timestamp = vlTempObsFinal[0];
-
-          // Case 1: One of the observation values is `null`,
-          // no need to calculate temperature difference
-          // Case 2: Neither of the observation values is `null`,
-          // calculate temperature difference
-          return vorlaufTemperatureValues[i] === null ||
-            ruecklaufTemperatureValues[i] === null
-            ? [timestamp, null]
-            : [
-                timestamp,
-                vorlaufTemperatureValues[i] - ruecklaufTemperatureValues[i],
-              ];
-        });
-
-      // From Vorlauf metadata, extract `name` and `unitOfMeasurement`
-      const {
-        name: datastreamNameVorlauf,
-        unitOfMeasurement: unitOfMeasurementVorlauf,
-      } = metadataVorlauf;
+        calculateVorlaufMinusRuecklaufTemperatureObservations(
+          observationsPlusMetadata
+        );
+
+      // Extract Vorlauf temperature, Ruecklauf temperature and metadata
+      const [, [metadataVorlauf, metadataRuecklauf]] = observationsPlusMetadata;
 
       // From Ruecklauf metadata, extract `name`
       const { name: datastreamNameRuecklauf } = metadataRuecklauf;