diff --git a/config/settings.ini b/config/settings.ini
new file mode 100644
index 0000000000000000000000000000000000000000..97caedae8c41de95ab670a123a234befc66b0589
--- /dev/null
+++ b/config/settings.ini
@@ -0,0 +1,3 @@
+[DATA_SOURCE]
+# Absolute path of the base directory where the data files produced by the CFA are be stored.
+absolute_root_dir = /homel/ojossoud/_temp/data_cfa
diff --git a/src/config.py b/src/config.py
new file mode 100644
index 0000000000000000000000000000000000000000..3bf3c476843ec6aead204cbe43a56860317702bc
--- /dev/null
+++ b/src/config.py
@@ -0,0 +1,31 @@
+from configobj import ConfigObj
+import utils
+import threading
+
+
+class Config:
+
+    def __init__(self, filename):
+        self.full_filename = "../config/" + filename
+        self.config_parser = ConfigObj(self.full_filename)
+        self.file_access_lock = threading.Lock()
+
+    def write(self, instrument, key, value):
+        self.file_access_lock.acquire()
+
+        self.config_parser.reload()
+        self.config_parser[instrument][key] = str(value)
+        self.config_parser.write()
+        self.file_access_lock.release()
+
+    def read(self, instrument, key):
+        self.file_access_lock.acquire()
+        self.config_parser.reload()
+        try:
+            value = self.config_parser[instrument][key]
+        except:
+            self.file_access_lock.release()
+            raise
+        self.file_access_lock.release()
+        value = utils.convert_to_numeric(value)
+        return value
diff --git a/src/main.py b/src/main.py
index cf758f33edbae28ae0a8b89b27fccd205cd15d32..7dbeab7ae5395ab155a252b14df09d4ca5aee6f1 100755
--- a/src/main.py
+++ b/src/main.py
@@ -3,12 +3,18 @@ import sys
 from PyQt5.QtWidgets import QApplication
 from PyQt5.QtCore import QThread
 
+from config import Config
+
 from gui.mainwindow import MainWindow
 
 from dataprovider.conductcalibprovider import ConductCalibProvider
 
 from uim.conductcalibuim import ConductCalibUim
 
+########################################################################################################################
+# CONFIG
+########################################################################################################################
+config = Config("settings.ini")
 
 ########################################################################################################################
 # WINDOWS
@@ -27,7 +33,7 @@ conduct_prvd = ConductCalibProvider()
 # GUI MANAGERS
 ########################################################################################################################
 
-conductcalib_uim = ConductCalibUim(conduct_prvd, main_window_ui)
+conductcalib_uim = ConductCalibUim(conduct_prvd, main_window_ui, config)
 
 ########################################################################################################################
 # LAUNCH APPLICATION
diff --git a/src/uim/conductcalibuim.py b/src/uim/conductcalibuim.py
index e620168bca720e31fa247090ff6dddd829f39c6a..7b0d217f7b25cbc19271803eafc2ff67e114f63f 100644
--- a/src/uim/conductcalibuim.py
+++ b/src/uim/conductcalibuim.py
@@ -5,6 +5,7 @@ import pandas as pd
 import numpy as np
 
 import utils
+from config import Config
 from dataprovider.conductcalibprovider import ConductCalibProvider
 from dataprovider.conductcalibprovider import CalibRun
 from gui.uimainwindow import Ui_MainWindow
@@ -27,9 +28,10 @@ class ConductCalibUim:
     VALIDAUTO_COL = 5
     VALIDMANUAL_COL = 6
 
-    def __init__(self, conduct_prvd: ConductCalibProvider, main_ui: Ui_MainWindow):
+    def __init__(self, conduct_prvd: ConductCalibProvider, main_ui: Ui_MainWindow, config: Config):
         self.main_ui = main_ui
         self.conduct_prvd = conduct_prvd
+        self.config = config
         self.current_calib_run = None
         self.current_channel = int(self.main_ui.conduct_combobox_channel.currentText())
 
@@ -50,7 +52,8 @@ class ConductCalibUim:
         self.main_ui.conduct_tablewidget_run.cellClicked.connect(self.highlight_step)
 
     def load_data(self):
-        directory = QFileDialog.getExistingDirectory()
+        directory = QFileDialog.getExistingDirectory(
+            directory=self.config.read("DATA_SOURCE", "absolute_root_dir") + "/conduct_calib")
 
         # If user cancels directory selection, do nothing.
         if directory == "":
diff --git a/src/utils.py b/src/utils.py
index 309a333da806a85580682805cea84e436817d824..ba5d68868c4798c37b30da957cac922f04017417 100644
--- a/src/utils.py
+++ b/src/utils.py
@@ -2,6 +2,7 @@ import pyqtgraph as pg
 import datetime
 import pandas as pd
 import numpy as np
+import re
 from PyQt5.QtWidgets import QTableWidget
 from PyQt5.QtGui import QColor
 
@@ -16,6 +17,15 @@ def datetime64_to_epoch_ms(datetimes_list: np.ndarray) -> list:
     return [float(instant) / 1e9 for instant in datetimes_list]
 
 
+def convert_to_numeric(str_value: str):
+    """Convert a string to float (if there is a "." in the string) or to integer, if possible."""
+    if re.match("^-?\d+\.\d+$", str_value):
+        return float(str_value)
+    elif re.match("^-?\d+$", str_value):
+        return int(str_value)
+    else:
+        return str_value
+
 ####################################################################
 # Graphics