diff --git a/processall.m b/processall.m
index ba46c5a8d88928a979f0bf3165e87451fc9867f0..106a58eea4931555fb0c3ee84e673d6fca803c82 100644
--- a/processall.m
+++ b/processall.m
@@ -44,21 +44,27 @@ function ExpData = processall(idFile)
     % Input checks and processing
     % [filePaths, fileNames] = getfiles(idFile); %TODO
 
+    % FIXME: Detect automatically from idFile
+    fileRootDir = 'data/2022-campaign1'; % Root directory of data files (e.g. data/YYYY-campaignX)
+
     idTable = loadid(idFile);
+
     ExpData(size(idTable, 1)) = struct;
     for iTest = 1:size(idTable, 1)
 
-        ExpData(iTest).arduFile = idTable(iTest, :).arduinoFile{:};
-        ExpData(iTest).tunnelFile = idTable(iTest, :).wtFile{:};
+        ExpData(iTest).arduFile = fullfile(fileRootDir, 'arduinoData', ...
+                                           idTable(iTest, :).arduinoData{:});
+        ExpData(iTest).tunnelFile = fullfile(fileRootDir, 'windtunnelData', ...
+                                             idTable(iTest, :).windtunnelData{:});
         ExpData(iTest).dx = idTable(iTest, :).dstX;
-        ExpData(iTest).airspeed = idTable(iTest, :).v_air;
-        ExpData(iTest).freq = idTable(iTest, :).freq;
+        ExpData(iTest).airspeed = idTable(iTest, :).airspeed;
+        ExpData(iTest).freq = idTable(iTest, :).target_freq;
 
         fprintf('Processing file: %s\n', ExpData(iTest).tunnelFile);
 
         % Load, clean and sync experimental data
         tunnelData = loadtunnel(ExpData(iTest).tunnelFile, ...
-                                CUTOFF_MULTIPLIER * idTable(iTest, :).freq);
+                                CUTOFF_MULTIPLIER * idTable(iTest, :).target_freq);
 
         if ~isempty(ExpData(iTest).arduFile) % Not for static tests (no ardu data)
             [arduShort, ~] = loadardu(ExpData(iTest).arduFile);
@@ -103,10 +109,10 @@ function ExpData = processall(idFile)
         ExpData(iTest).Aft.moments = tunnelData(:, 6 + (4:6));
 
         ExpData(iTest).Testcase.dx = idTable(iTest, :).dstX;
-        ExpData(iTest).Testcase.airspeed = idTable(iTest, :).v_air;
-        ExpData(iTest).Testcase.freq = idTable(iTest, :).freq;
-        ExpData(iTest).Testcase.temp = idTable(iTest, :).temp_air;
-        ExpData(iTest).Testcase.press = idTable(iTest, :).pres_air;
+        ExpData(iTest).Testcase.airspeed = idTable(iTest, :).airspeed;
+        ExpData(iTest).Testcase.freq = idTable(iTest, :).target_freq;
+        ExpData(iTest).Testcase.temp = idTable(iTest, :).temperature;
+        ExpData(iTest).Testcase.press = idTable(iTest, :).pressure;
 
         if PLOT_CLEANED
             figure;
diff --git a/utils/loadardu.m b/utils/loadardu.m
index cceda540a41b31502d26aaedc652d98b2097b9a3..71a01976775a8d53483bd185f73bbe1d12af9663 100644
--- a/utils/loadardu.m
+++ b/utils/loadardu.m
@@ -35,7 +35,7 @@ function [arduShort, arduData] = loadardu(arduFile)
     % Load data
     arduTable = table;
     if ~isempty(arduFile)
-        arduTable = loadcsv(['arduinoFiles/', arduFile, '.csv']);
+        arduTable = loadcsv([arduFile, '.csv']);
     end
 
     arduTable.time = timetosec(arduTable.time);
diff --git a/utils/loadid.m b/utils/loadid.m
index 784984937d1386f7619f7a1b4db7ab839c67c2a9..80513c5f05b6b56bfe55c75fbcc84440ce60c446 100644
--- a/utils/loadid.m
+++ b/utils/loadid.m
@@ -1,5 +1,16 @@
 function idTable = loadid(idFile)
     % LOADID Load the identification file into a table.
+    %
+    % Note
+    %   The identification table must obey to the following scheme
+    %       # Header line 1
+    %       # ... (any number of header lines)
+    %       # Header last line
+    %       DataName1, DataName2, ..., DataNameN
+    %       DataUnit1, DataUnit2, ..., DataUnitN
+    %       Data1, Data2, ..., Data3
+    %
+    %   The number of header lines is NOT detected automatically and must be specified as a constant
     % -----
     %
     % Syntax:
@@ -22,12 +33,16 @@ function idTable = loadid(idFile)
     % MIT License
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+    % Defaults and constants
+    COMMENT_LINES = 3; % Number of commented lines in the header
+
     % Tweak options before import
     opts = detectImportOptions(idFile);
-    opts.VariableNamesLine = 3;
-    opts.VariableUnitsLine = 4;
-    opts.DataLines = [5 Inf];
+    opts.VariableNamesLine = COMMENT_LINES + 1;
+    opts.VariableUnitsLine = COMMENT_LINES + 2;
+    opts.DataLines = [COMMENT_LINES + 3 Inf];
 
     % Import
     idTable = readtable(idFile, opts);
+
 end
diff --git a/utils/loadtunnel.m b/utils/loadtunnel.m
index 4a8cee49a074795b2e6c828c3a1b1570ce1fcf50..714a2a689d74b1f98b18dbec467489e3eef0de55 100644
--- a/utils/loadtunnel.m
+++ b/utils/loadtunnel.m
@@ -35,7 +35,7 @@ function tunnelData = loadtunnel(tunnelFile, cutoff)
     % Load data
     tunnelTable = table;
     if ~isempty(tunnelFile)
-        tunnelTable = loadcsv(['wtFiles/', tunnelFile, '.txt']);
+        tunnelTable = loadcsv([tunnelFile, '.txt']);
     end
 
     % Convert into table
diff --git a/utils/savecsv.m b/utils/savecsv.m
index 6a9f7450c0db4316e9168afe7eff09fa34ae7e9f..09b663a896f2fce578d55c121dc0098845c134b6 100644
--- a/utils/savecsv.m
+++ b/utils/savecsv.m
@@ -36,7 +36,8 @@ function savecsv(ExpData, arduShort, tunnelData)
     testCase = string(dirSplits(end));
     filename = sprintf('%s-%0.0fcm-f%0.2f-U%0.1f.csv', ...
                        testCase, ExpData.dx * 100, ExpData.freq, ExpData.airspeed);
-    savefile = fullfile('data/cleaned', dirSplits(1), filename);
+
+    savefile = fullfile('data/cleaned', dirSplits(4), filename); % FIXME Better detect splits
 
     if ~exist(string(savefile), 'file') || ALWAYS_OVERWRITE
         % Merges the two arrays together and put it in table