diff --git a/public/js/appChart.js b/public/js/appChart.js
index 3dfad8eb42c18d47a8096576f567b5a847b8908c..81de4543060fcf9d5a591a561b1b97a1c689dd3c 100644
--- a/public/js/appChart.js
+++ b/public/js/appChart.js
@@ -182,6 +182,7 @@ const getMetadataFromSingleDatastream = async function (urlDatastream) {
 
 /**
  * Retrieve metadata from multiple datastreams
+ * @async
  * @param {Array} datastreamsUrlArr An array that contains N Datastream URL strings
  * @returns {Promise} A promise that contains an array of N Datastream metadata objects when fulfilled
  */
@@ -193,7 +194,9 @@ const getMetadataFromMultipleDatastreams = async function (datastreamsUrlArr) {
     // Use for/of loop - we need to maintain the order of execution of the async operations
     for (const datastreamUrl of datastreamsUrlArr) {
       // Metadata from a single Datastream
-      const datastreamMetadata = await getDatastreamMetadata(datastreamUrl);
+      const datastreamMetadata = await getMetadataFromSingleDatastream(
+        datastreamUrl
+      );
       datastreamMetadataArr.push(datastreamMetadata);
     }
 
@@ -525,7 +528,7 @@ const getCombinedObservationsFromAllNextLinks = function (
  * @param {Promise} metadataPlusObsPromiseArray An array that contains two promises, one for datastream metadata, the other for observations
  * @returns {Promise} A promise that contains two arrays when fulfilled, one for datastream metadata and the other for observations
  */
-const getMetadataPlusObservationsForChart = async function (
+const getMetadataPlusObservationsFromSingleDatastream = async function (
   metadataPlusObsPromiseArray
 ) {
   try {
@@ -571,57 +574,93 @@ const getObservationsFromMultipleDatastreams = async function (
   }
 };
 
-// Building + phenomenon + sampling rate
-const buildingsSensorSamplingRateRLArr = [
-  ["101", "rl", "60min"],
-  ["102", "rl", "60min"],
-  ["107", "rl", "60min"],
-  ["112, 118", "rl", "60min"],
-  ["125", "rl", "60min"],
-  ["225", "rl", "60min"],
-];
-
-// Datastreams IDs
-const datastreamsRLArr = buildingsSensorSamplingRateRLArr.map((bldg) =>
-  getDatastreamIdFromBuildingNumber(...bldg)
-);
+/**
+ * Retrieve the metadata from multiple Datastreams and the Observations corresponding to these Datastreams
+ * @async
+ * @param {Array} bldgSensorSamplingRateArr A 3*N array containing buildings, sensors & sampling rates as strings, e.g. ["101", "rl", "60min"]
+ * @returns {Promise} A promise that contains a N*2 array (the first element is an array of Observations and the second element is an array of Datastream metadata objects) when fulfilled
+ */
+const getMetadataPlusObservationsFromMultipleDatastreams = async function (
+  bldgSensorSamplingRateArr
+) {
+  try {
+    if (!bldgSensorSamplingRateArr) return;
 
-// Datastreams URLs
-const datastreamsUrlRLArr = datastreamsRLArr.map((datastreamId) =>
-  getObservationsUrl(BASE_URL, datastreamId)
-);
+    // Datastreams IDs
+    const datastreamsIdsArr = bldgSensorSamplingRateArr.map(
+      (bldgSensorSamplingRate) =>
+        getDatastreamIdFromBuildingNumber(...bldgSensorSamplingRate)
+    );
 
-// Promise objects - Observations / RL
-const observationsPromisesRLArr = datastreamsUrlRLArr.map((obsUrl) =>
-  getCombinedObservationsFromAllNextLinks(
-    axiosGetRequest(obsUrl, QUERY_PARAMS_COMBINED)
-  )
-);
+    // Observations URLs
+    const observationsUrlArr = datastreamsIdsArr.map((datastreamId) =>
+      getObservationsUrl(BASE_URL, datastreamId)
+    );
+
+    // Datastreams URLs
+    const datastreamsUrlArr = datastreamsIdsArr.map((datastreamId) =>
+      getDatastreamUrl(BASE_URL, datastreamId)
+    );
+
+    // Promise objects - Observations
+    const observationsPromisesArr = observationsUrlArr.map((obsUrl) =>
+      getCombinedObservationsFromAllNextLinks(
+        axiosGetRequest(obsUrl, QUERY_PARAMS_COMBINED)
+      )
+    );
+
+    // Observations array
+    const observationsArr = await getObservationsFromMultipleDatastreams(
+      observationsPromisesArr
+    );
+
+    // Metadata array
+    const metadataArr = await getMetadataFromMultipleDatastreams(
+      datastreamsUrlArr
+    );
 
-// getObservationsFromMultipleDatastreams(observationsPromisesRLArr).then((x) =>
-//   console.log(x)
-// );
+    return [observationsArr, metadataArr];
+  } catch (err) {
+    console.error(err);
+  }
+};
 
 const drawScatterPlotHC = function (
   formattedObsArrayForSeriesOne,
-  formattedDatastreamMetadataSeriesOne = "",
+  formattedDatastreamMetadataSeriesOne,
   formattedObsArrayForSeriesTwo,
-  formattedDatastreamMetadataSeriesTwo = ""
+  formattedDatastreamMetadataSeriesTwo
 ) {
-  const CHART_TITLE = "Height Versus Weight of 507 Individuals by Gender";
-  const CHART_SUBTITLE = "Source: Heinz  2003";
+  const {
+    datastreamDescription: DATASTREAM_DESCRIPTION_SERIES_1,
+    datastreamName: DATASTREAM_NAME_SERIES_1,
+    phenomenonName: PHENOMENON_NAME_SERIES_1,
+    unitOfMeasurementSymbol: PHENOMENON_SYMBOL_SERIES_1,
+  } = formattedDatastreamMetadataSeriesOne;
 
-  const X_AXIS_TITLE = "Height (cm)";
+  const {
+    datastreamDescription: DATASTREAM_DESCRIPTION_SERIES_2,
+    datastreamName: DATASTREAM_NAME_SERIES_2,
+    phenomenonName: PHENOMENON_NAME_SERIES_2,
+    unitOfMeasurementSymbol: PHENOMENON_SYMBOL_SERIES_2,
+  } = formattedDatastreamMetadataSeriesTwo;
+
+  const CHART_TITLE = `${PHENOMENON_NAME_SERIES_1} Versus ${PHENOMENON_NAME_SERIES_2}`;
+  const CHART_SUBTITLE = `Source: ${DATASTREAM_NAME_SERIES_1} & ${DATASTREAM_NAME_SERIES_2}`;
+
+  const X_AXIS_TITLE = `Date / Time`;
 
-  const SERIES_1_NAME = "Rücklauftemp";
-  const SERIES_1_SYMBOL_COLOR = "rgba(119, 152, 191, .5)";
-  const SERIES_1_TEXT_COLOR = "rgb(119, 152, 191)"; // remove transparency from symbol color for a more "intense" color
-  const SERIES_1_SYMBOL = "°C";
+  const SERIES_1_NAME = `${PHENOMENON_NAME_SERIES_1}`;
+  const SERIES_1_SYMBOL_COLOR_RGB_ELEMENTS = "119, 152, 191";
+  const SERIES_1_SYMBOL_COLOR = `rgba(${SERIES_1_SYMBOL_COLOR_RGB_ELEMENTS}, .5)`;
+  const SERIES_1_TEXT_COLOR = `rgb(${SERIES_1_SYMBOL_COLOR_RGB_ELEMENTS})`; // remove transparency from symbol color for a more "intense" color
+  const SERIES_1_SYMBOL = `${PHENOMENON_SYMBOL_SERIES_1}`;
 
-  const SERIES_2_NAME = "Power";
-  const SERIES_2_SYMBOL_COLOR = "rgba(223, 83, 83, .5)";
-  const SERIES_2_TEXT_COLOR = "rgb(223, 83, 83)"; // remove transparency from symbol color for a more "intense" color
-  const SERIES_2_SYMBOL = "kW";
+  const SERIES_2_NAME = `${PHENOMENON_NAME_SERIES_2}`;
+  const SERIES_2_SYMBOL_COLOR_RGB_ELEMENTS = "223, 83, 83";
+  const SERIES_2_SYMBOL_COLOR = `rgba(${SERIES_2_SYMBOL_COLOR_RGB_ELEMENTS}, .5)`;
+  const SERIES_2_TEXT_COLOR = `rgb(${SERIES_2_SYMBOL_COLOR_RGB_ELEMENTS})`; // remove transparency from symbol color for a more "intense" color
+  const SERIES_2_SYMBOL = `${PHENOMENON_SYMBOL_SERIES_2}`;
 
   Highcharts.chart("chart-scatter-plot", {
     chart: {
@@ -744,75 +783,29 @@ const drawScatterPlotHC = function (
 };
 
 (async () => {
-  const DATASTREAM_ID_SERIES_1 = getDatastreamIdFromBuildingNumber(
-    "weather_station_521",
-    "outside_temp",
-    "60min"
-  );
-  const URL_DATASTREAM_SERIES_1 = getDatastreamUrl(
-    BASE_URL,
-    DATASTREAM_ID_SERIES_1
-  );
-  const URL_OBSERVATIONS_SERIES_1 = getObservationsUrl(
-    BASE_URL,
-    DATASTREAM_ID_SERIES_1
-  );
-
-  const DATASTREAM_ID_SERIES_2 = getDatastreamIdFromBuildingNumber(
-    "225",
-    "vl",
-    "60min"
-  );
-  const URL_DATASTREAM_SERIES_2 = getDatastreamUrl(
-    BASE_URL,
-    DATASTREAM_ID_SERIES_2
-  );
-  const URL_OBSERVATIONS_SERIES_2 = getObservationsUrl(
-    BASE_URL,
-    DATASTREAM_ID_SERIES_2
-  );
-
-  // Create promises
-  const promiseDatastreamMetadataSeries1 = getMetadataFromSingleDatastream(
-    URL_DATASTREAM_SERIES_1
-  );
-  const promiseCombinedObservationsSeries1 =
-    getCombinedObservationsFromAllNextLinks(
-      axiosGetRequest(URL_OBSERVATIONS_SERIES_1, QUERY_PARAMS_COMBINED)
-    );
-
-  const promiseDatastreamMetadataSeries2 = getMetadataFromSingleDatastream(
-    URL_DATASTREAM_SERIES_2
-  );
-  const promiseCombinedObservationsSeries2 =
-    getCombinedObservationsFromAllNextLinks(
-      axiosGetRequest(URL_OBSERVATIONS_SERIES_2, QUERY_PARAMS_COMBINED)
+  // Input array - building, sensor, samplingRate
+  const sensorsOfInterestArr = [
+    ["weather_station_521", "outside_temp", "60min"],
+    ["225", "vl", "60min"],
+  ];
+
+  const observationsPlusMetadata =
+    await getMetadataPlusObservationsFromMultipleDatastreams(
+      sensorsOfInterestArr
     );
 
-  // Pass promises to our async function
-  const metadataPlusObservationsSeries1 =
-    await getMetadataPlusObservationsForChart([
-      promiseCombinedObservationsSeries1,
-      promiseDatastreamMetadataSeries1,
-    ]);
-  const metadataPlusObservationsSeries2 =
-    await getMetadataPlusObservationsForChart([
-      promiseCombinedObservationsSeries2,
-      promiseDatastreamMetadataSeries2,
-    ]);
-
-  // Extract the metadata and the observations from resulting arrays
-  const combinedObsSeries1 = metadataPlusObservationsSeries1[0];
-  const datastreamMetadataSeries1 = metadataPlusObservationsSeries1[1];
-
-  const combinedObsSeries2 = metadataPlusObservationsSeries2[0];
-  const datastreamMetadataSeries2 = metadataPlusObservationsSeries2[1];
+  // Extract the observations and metadata for each sensor
+  // Array elements in same order as input array
+  const [
+    [obsSensorOneArr, obsSensorTwoArr],
+    [metadataSensorOne, metadataSensorTwo],
+  ] = observationsPlusMetadata;
 
   drawScatterPlotHC(
-    formatSTAResponseForLineChartOrScatterPlot(combinedObsSeries1),
-    formatDatastreamMetadataForChart(datastreamMetadataSeries1),
-    formatSTAResponseForLineChartOrScatterPlot(combinedObsSeries2),
-    formatDatastreamMetadataForChart(datastreamMetadataSeries2)
+    formatSTAResponseForLineChartOrScatterPlot(obsSensorOneArr),
+    formatDatastreamMetadataForChart(metadataSensorOne),
+    formatSTAResponseForLineChartOrScatterPlot(obsSensorTwoArr),
+    formatDatastreamMetadataForChart(metadataSensorTwo)
   );
 })();
 
@@ -831,5 +824,5 @@ export {
   formatSTAResponseForLineChartOrScatterPlot,
   drawLineChartHC,
   getCombinedObservationsFromAllNextLinks,
-  getMetadataPlusObservationsForChart,
+  getMetadataPlusObservationsFromSingleDatastream,
 };
diff --git a/public/js/dropDownList.js b/public/js/dropDownList.js
index e39dbcfebd35bed4df426c56c2acae0a70eb935f..ac3a750c2a202da17d00e82360584771320082ca 100644
--- a/public/js/dropDownList.js
+++ b/public/js/dropDownList.js
@@ -14,7 +14,7 @@ import {
   formatSTAResponseForLineChartOrScatterPlot,
   drawLineChartHC,
   getCombinedObservationsFromAllNextLinks,
-  getMetadataPlusObservationsForChart,
+  getMetadataPlusObservationsFromSingleDatastream,
 } from "./appChart.js";
 
 const buildingsAvailableSensorsArr = [
@@ -296,10 +296,11 @@ const selectChartTypeFromDropDown = async function () {
     );
 
     // Pass promises to our async function
-    const metadataPlusObservations = await getMetadataPlusObservationsForChart([
-      promiseCombinedObservations,
-      promiseDatastreamMetadata,
-    ]);
+    const metadataPlusObservations =
+      await getMetadataPlusObservationsFromSingleDatastream([
+        promiseCombinedObservations,
+        promiseDatastreamMetadata,
+      ]);
 
     // Extract the metadata and the observations from resulting array
     const combinedObs = metadataPlusObservations[0];