diff --git a/1_preprocessing/gtSetup.m b/1_preprocessing/gtSetup.m
index c3dda07e8006f5df2e6b4acc4ebca47947426d64..5b4091b48d0e8c396ca36199018f7cb282fa9c19 100644
--- a/1_preprocessing/gtSetup.m
+++ b/1_preprocessing/gtSetup.m
@@ -210,9 +210,9 @@ if (exist(parameters_name, 'file'))
     % if a parameters.mat already exists in the analysis directory, use it.
     disp('Using existing parameters file in the analysis directory...');
     disp(parameters_name);
-    p = load(parameters_name, 'parameters');
-    p.parameters.acq.dir = parameters.acq.dir;
-    parameters = p.parameters;
+    new_params = gtLoadParameters(parameters.acq.dir);
+    new_params.acq.dir = parameters.acq.dir;
+    parameters = new_params;
     clear p;
 else
     % Otherwise just load stuff from XML and guess default parameters
@@ -244,7 +244,7 @@ else
     clear params_acq;
     
     parameters = gtCheckParameters(parameters, 'acq', 'verbose', true);
-    save(parameters_name, 'parameters');
+    gtSaveParameters(parameters);
 
     % Default SAMPLE REFERENCE
     % Default voxel size is set to 1 lab unit, so samgeo is like labgeo at
@@ -252,7 +252,7 @@ else
     parameters.samgeo = gtGeoSamDefaultParameters();
     
     parameters = gtCheckParameters(parameters, 'samgeo', 'verbose', true);
-    save(parameters_name, 'parameters');
+    gtSaveParameters(parameters);
 
     % Default RECONSTRUCTION REFERENCE
     % Default voxel size is set to 1e-3 lab unit, so recgeo is like samgeo
@@ -260,7 +260,7 @@ else
     parameters.recgeo = gtGeoRecDefaultParameters();
 
     parameters = gtCheckParameters(parameters, 'recgeo', 'verbose', true);
-    save(parameters_name, 'parameters');
+    gtSaveParameters(parameters);
 end
 
 % Get or confirm the important parameters: choosing flag = 1 from
@@ -275,7 +275,7 @@ if strcmpi(parameters.acq.rotation_axis, 'horizontal')
 end
 
 disp('Saving parameters.mat in the analysis directory...');
-save(parameters_name, 'parameters');
+gtSaveParameters(parameters);
 clear xmlfname;
 
 % get edf info structure from first image file
@@ -308,6 +308,7 @@ end
 
 % get default values for labgeo
 parameters.labgeo = gtGeoLabDefaultParameters(parameters.acq);
+parameters.detgeo = gtGeoDetDefaultParameters(parameters.acq);
 parameters.acq    = rmfield(parameters.acq, 'rotation_name');
 clear tmp_motors info
 
@@ -322,28 +323,29 @@ else
 end
 
 if isempty(minangle)
-    parameters.labgeo.detanglemin = 0;
+    parameters.detgeo.detanglemin = 0;
 else
-    parameters.labgeo.detanglemin = minangle;
+    parameters.detgeo.detanglemin = minangle;
 end
 if isempty(maxangle)
-    parameters.labgeo.detanglemax = 45;
+    parameters.detgeo.detanglemax = 45;
 else
-    parameters.labgeo.detanglemax = maxangle;
+    parameters.detgeo.detanglemax = maxangle;
 end
 
 
 parameters = gtCheckParameters(parameters, 'labgeo', 'verbose', true);
-save(parameters_name, 'parameters');
+gtSaveParameters(parameters);
 
 header = 'Parameters dealing with arbitrary geometry:';
 
 % Note! Some other fields are calculated later, typically during 
 % preprocessing when know the direct beam bounding box.
 parameters.labgeo = gtModifyStructure(parameters.labgeo, list.labgeo, 1, header);
+% parameters.detgeo = gtModifyStructure(parameters.detgeo, list.detgeo, 1, header);
 
 disp('Saving parameters.mat in the analysis directory...');
-save(parameters_name, 'parameters');
+gtSaveParameters(parameters);
 
 disp('Saving list.mat in the data collection directory...');
 list_name = fullfile(parameters.acq.collection_dir, 'list.mat');
@@ -365,7 +367,7 @@ parameters.prep = gtAddMatFile(parameters.prep, params_prep, true, false, false)
 clear params_prep;
 
 disp('Saving parameters.mat in the analysis directory...');
-save(parameters_name, 'parameters');
+gtSaveParameters(parameters);
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -374,18 +376,18 @@ save(parameters_name, 'parameters');
 parameters.seg = gtSegDefaultParameters();
 
 disp('Saving parameters.mat in the analysis directory...');
-save(parameters_name, 'parameters');
+gtSaveParameters(parameters);
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % MATCH - for Friedel pair matching
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 parameters.match = gtMatchDefaultParametersGUI();
-parameters.match.thetalimits = 0.5*[parameters.labgeo.detanglemin, ...
-                                    parameters.labgeo.detanglemax];
+parameters.match.thetalimits = 0.5*[parameters.detgeo.detanglemin, ...
+                                    parameters.detgeo.detanglemax];
 
 disp('Saving parameters.mat in the analysis directory...');
-save(parameters_name, 'parameters');
+gtSaveParameters(parameters);
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -394,7 +396,7 @@ save(parameters_name, 'parameters');
 parameters.index = gtIndexDefaultParameters();
 
 disp('Saving parameters.mat in the analysis directory...');
-save(parameters_name, 'parameters');
+gtSaveParameters(parameters);
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -402,7 +404,7 @@ save(parameters_name, 'parameters');
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 parameters.fsim = gtFsimDefaultParameters();
 disp('Saving parameters.mat in the analysis directory...');
-save(parameters_name, 'parameters');
+gtSaveParameters(parameters);
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -410,7 +412,7 @@ save(parameters_name, 'parameters');
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 parameters.rec = gtRecDefaultParameters();
 disp('Saving parameters.mat in the analysis directory...');
-save(parameters_name, 'parameters');
+gtSaveParameters(parameters);
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -422,7 +424,7 @@ parameters.fed.dct_offset    = [0 0 0];
 parameters.fed.renumber_list = [];
 
 disp('Saving parameters.mat in the analysis directory...');
-save(parameters_name, 'parameters');
+gtSaveParameters(parameters);
 disp(' ');
 close('all');
 
@@ -454,7 +456,7 @@ try
 	end % end crystallography
 	
 	disp('Saving parameters.mat in the analysis directory...');
-	save(parameters_name, 'parameters');
+	gtSaveParameters(parameters);
 	disp(' ');
 catch err
 	disp(' ')
diff --git a/zUtil_Geo/gtGeoComputeExtraDetgeoProperties.m b/zUtil_Geo/gtGeoComputeExtraDetgeoProperties.m
new file mode 100644
index 0000000000000000000000000000000000000000..31734bf3af588b58dfa95b770a6f59f3926daaa9
--- /dev/null
+++ b/zUtil_Geo/gtGeoComputeExtraDetgeoProperties.m
@@ -0,0 +1,9 @@
+function detgeo = gtGeoComputeExtraDetgeoProperties(detgeo)
+    detgeo.detnorm = gtMathsCross(detgeo.detdiru, detgeo.detdirv); % unit vector
+
+    detgeo.detorig = gtGeoDetOrig(detgeo);
+
+    detgeo.Qdet = gtFedDetectorProjectionTensor( ...
+        detgeo.detdiru, detgeo.detdirv, ...
+        detgeo.detscaleu, detgeo.detscalev);
+end
diff --git a/zUtil_Geo/gtGeoConvertLegacyLabgeo2Detgeo.m b/zUtil_Geo/gtGeoConvertLegacyLabgeo2Detgeo.m
index 59c9403162c74fd3f5d60460b331ee8a887dcbbf..d4fe6e7ecafa0d3781a558283d4469a6dc5da6ab 100644
--- a/zUtil_Geo/gtGeoConvertLegacyLabgeo2Detgeo.m
+++ b/zUtil_Geo/gtGeoConvertLegacyLabgeo2Detgeo.m
@@ -17,13 +17,7 @@ function [detgeo, labgeo] = gtGeoConvertLegacyLabgeo2Detgeo(labgeo)
     detgeo.detscaleu = 1 / detgeo.pixelsizeu;
     detgeo.detscalev = 1 / detgeo.pixelsizev;
 
-    detgeo.detnorm = gtMathsCross(labgeo.detdiru, labgeo.detdirv); % unit vector
-
-    detgeo.detorig = gtGeoDetOrig(detgeo);
-
-    detgeo.Qdet = gtFedDetectorProjectionTensor( ...
-        detgeo.detdiru, detgeo.detdirv, ...
-        detgeo.detscaleu, detgeo.detscalev);
+    detgeo = gtGeoComputeExtraDetgeoProperties(detgeo);
 
     % Removing duplicates
     detfields = fieldnames(detgeo);
diff --git a/zUtil_Geo/gtGeoDetDefaultParameters.m b/zUtil_Geo/gtGeoDetDefaultParameters.m
new file mode 100644
index 0000000000000000000000000000000000000000..3c3e319b9c5bd69a6f7aa7db54821b6cd5dae58e
--- /dev/null
+++ b/zUtil_Geo/gtGeoDetDefaultParameters.m
@@ -0,0 +1,98 @@
+function par_detgeo = gtGeoDetDefaultParameters(acq)
+% GTGEOLABDEFAULTPARAMETERS
+%     par_labgeo = gtGeoDetDefaultParameters(acq)
+%     -------------------------------------------
+%     Use of acq.dist, acq.pixelsize, acq.xdet, acq.ydet,
+%     acq.no_direct_beam, acq.bb, acq.rotation_axis, acq.rotation_direction,
+%     acq.detector_definition, [acq.rotationname]
+%
+
+par_detgeo = [];
+
+% Pixel and detector size
+par_detgeo.pixelsizeu = acq.pixelsize;
+par_detgeo.pixelsizev = acq.pixelsize;
+par_detgeo.detsizeu   = acq.xdet; % number of pixels along the u direction
+par_detgeo.detsizev   = acq.ydet; % number of pixels along the v direction
+
+par_detgeo.detrefu = (par_detgeo.detsizeu/2) + 0.5;
+par_detgeo.detrefv = (par_detgeo.detsizev/2) + 0.5;
+
+% Detector angular coverage limits (2theta) for entire sample volume
+par_detgeo.detanglemin = 0;
+par_detgeo.detanglemax = 45;
+
+if (acq.no_direct_beam && strcmp(acq.detector_definition, 'vertical'))
+    % Assume vertical setup; detector is above sample pointing downwards (-Z)
+    disp(['No direct beam case with a vetical detector. ' ...
+        'Any flip was applied during the scan... Please check if it is true'])
+    par_detgeo.detrefpos = [0 acq.dist 0];
+    par_detgeo.detdiru   = [0 0 -1];
+    par_detgeo.detdirv   = [1 0 0];
+
+    if (strcmp(acq.rotation_direction, 'counterclockwise'))
+        % is this really true?
+        par_detgeo.detrefpos = -1 * par_detgeo.detrefpos;
+        par_detgeo.detdiru   = -1 * par_detgeo.detdiru;
+    end
+
+elseif (~acq.no_direct_beam)
+    % inline detector HR camera - suppose it on x-axis
+    disp('High resolution direct beam scan...')
+    
+    par_detgeo.detrefpos = [acq.dist 0 0];
+    par_detgeo.detdiru   = [0  1  0];
+    par_detgeo.detdirv   = [0  0 -1];
+
+    if (strcmp(acq.rotation_direction, 'counterclockwise'))
+        % is this really true?
+        par_detgeo.detdiru = -1 * par_detgeo.detdiru;
+        par_detgeo.detdirv = -1 * par_detgeo.detdirv;
+    end
+    % Should take sample envelope from sample bbox (parameters.acq.bb) if
+    % exists, otherwise in gtPreprocessing
+    if (isfield(acq, 'bb') && ~isempty(acq.bb))
+        par_detgeo.detrefpos(2:3) = sfDetrefpos(acq.bb, par_detgeo);
+    end
+	
+elseif (acq.no_direct_beam && strcmp(acq.detector_definition, 'inline'))
+    % inline detector - suppose it on x-axis
+    % taper scan (far field)
+    disp('This looks like a taper scan...')
+    par_detgeo.detrefpos = [acq.dist 0 0];
+    par_detgeo.detdiru   = [0 1 0];
+    par_detgeo.detdirv   = [0 0 -1];
+
+    % Should take sample envelope from sample bbox (parameters.acq.bb) if
+    % exists, otherwise in gtPreprocessing
+    if (isfield(acq,'bb') && isempty(acq.bb))
+        % guess a sample bounding box
+        acq.bb = [acq.xdet/2-50 acq.ydet/2-50 100 100];
+    end
+    if (isfield(acq,'bb') && ~isempty(acq.bb))
+        par_detgeo.detrefpos(2:3) = sfDetrefpos(acq.bb, par_detgeo);
+    end
+    disp('Choose a squared sample bounding box in the center of the image...')
+end
+
+par_detgeo = gtGeoComputeExtraDetgeoProperties(par_detgeo);
+
+end % end of function
+
+
+%%%%%%%%%%%%%%%%%%%%%
+% SUB-FUNCTIONS
+%%%%%%%%%%%%%%%%%%%%%
+
+function [dy, dz] = sfDetrefpos(acq_bb, par_labgeo)
+% Returns the detector lateral (Y) and vertical (Z) positions which approximately
+% account for an offset of the sample bounding box position:
+%   Y lateral: It assumes that the projection of the rotation axis is at the
+%   center of the sample bounding box.
+%   Z vertical: set in a way that the vertical center of the sample bounding
+%   box will have coordinate Z=0.
+% It assumes rotpos = [0 0 0] and view into the beam.
+
+    dy = -((acq_bb(1) + acq_bb(3)/2) - par_labgeo.detrefu) * par_labgeo.pixelsizeu;
+    dz =  ((acq_bb(2) + acq_bb(4)/2) - par_labgeo.detrefv) * par_labgeo.pixelsizev;
+end
\ No newline at end of file
diff --git a/zUtil_Geo/gtGeoLabDefaultParameters.m b/zUtil_Geo/gtGeoLabDefaultParameters.m
index 8424749ba0516a8a320c35bfa0574e6c7bd5ebdb..461546e398aa0fefe7a8a8af3338faca7110b2a0 100644
--- a/zUtil_Geo/gtGeoLabDefaultParameters.m
+++ b/zUtil_Geo/gtGeoLabDefaultParameters.m
@@ -9,17 +9,9 @@ function par_labgeo = gtGeoLabDefaultParameters(acq)
 
 par_labgeo = [];
 
-% Pixel and detector size
-par_labgeo.pixelsizeu = acq.pixelsize;
-par_labgeo.pixelsizev = acq.pixelsize;
-par_labgeo.detsizeu   = acq.xdet; % number of pixels along the u direction
-par_labgeo.detsizev   = acq.ydet; % number of pixels along the v direction
-
-% Beam direction, rot. axis position and detector properties
+% Beam direction, rot. axis position
 par_labgeo.beamdir = [1 0 0];
 par_labgeo.rotpos  = [0 0 0];
-par_labgeo.detrefu = (par_labgeo.detsizeu/2) + 0.5;
-par_labgeo.detrefv = (par_labgeo.detsizev/2) + 0.5;
 
 % Coordinate axes definition and Lab unit (for records only)
 par_labgeo.deflabX = 'Along the beam direction.';
@@ -27,10 +19,6 @@ par_labgeo.deflabY = 'Right-handed from Y=cross(Z,X).';
 par_labgeo.deflabZ = 'Along rotation axis. Positive away from sample stage.';
 par_labgeo.labunit = 'mm';
 
-% Detector angular coverage limits (2theta) for entire sample volume
-par_labgeo.detanglemin = 0;
-par_labgeo.detanglemax = 45;
-
 % Rotation axis direction
 switch (acq.rotation_name)
     case 'pmo'
@@ -49,24 +37,10 @@ if strcmp(acq.rotation_axis, 'horizontal')
     end    
 end
 
-
 if (acq.no_direct_beam && strcmp(acq.detector_definition, 'vertical'))
     % Assume vertical setup; detector is above sample pointing downwards (-Z)
     disp(['No direct beam case with a vetical detector. ' ...
         'Any flip was applied during the scan... Please check if it is true'])
-    par_labgeo.detrefpos = [0 acq.dist 0];
-    par_labgeo.detdiru   = [0 0 -1];
-    par_labgeo.detdirv   = [1 0 0];
-    if (strcmp(acq.rotation_direction, 'counterclockwise'))
-        % is this really true?
-        par_labgeo.detrefpos = -1 * par_labgeo.detrefpos;
-        par_labgeo.detdiru   = -1 * par_labgeo.detdiru;
-    end
-    if (isfield(acq, 'bb') && isempty(acq.bb))
-        % guess a sample bounding box
-        acq.bb = [1 1 4 4];
-        disp('Choose a ''fake'' squared sample bounding box in the left-top corner of the image...')
-    end
     % Should guess sample envelope
     par_labgeo.samenvtop = [];
     par_labgeo.samenvbot = [];
@@ -75,33 +49,21 @@ if (acq.no_direct_beam && strcmp(acq.detector_definition, 'vertical'))
 elseif (~acq.no_direct_beam)
     % inline detector HR camera - suppose it on x-axis
     disp('High resolution direct beam scan...')
-    
-    par_labgeo.detrefpos = [acq.dist 0 0];
-    par_labgeo.detdiru   = [0  1  0];
-    par_labgeo.detdirv   = [0  0 -1];
-    if (strcmp(acq.rotation_direction, 'counterclockwise'))
-        % is this really true?
-        par_labgeo.detdiru = -1 * par_labgeo.detdiru;
-        par_labgeo.detdirv = -1 * par_labgeo.detdirv;
-    end
+
     % Should take sample envelope from sample bbox (parameters.acq.bb) if
     % exists, otherwise in gtPreprocessing
     if (isfield(acq, 'bb') && ~isempty(acq.bb))
         par_labgeo = gtGeoSamEnvFromAcq(par_labgeo, acq);
-		par_labgeo.detrefpos(2:3) = sfDetrefpos(acq.bb, par_labgeo);
     else
         par_labgeo.samenvtop = [];
         par_labgeo.samenvbot = [];
         par_labgeo.samenvrad = [];
-	end
+    end
 	
 elseif (acq.no_direct_beam && strcmp(acq.detector_definition, 'inline'))
     % inline detector - suppose it on x-axis
     % taper scan (far field)
     disp('This looks like a taper scan...')
-    par_labgeo.detrefpos = [acq.dist 0 0];
-    par_labgeo.detdiru   = [0 1 0];
-    par_labgeo.detdirv   = [0 0 -1];
 
     % Should take sample envelope from sample bbox (parameters.acq.bb) if
     % exists, otherwise in gtPreprocessing
@@ -109,31 +71,8 @@ elseif (acq.no_direct_beam && strcmp(acq.detector_definition, 'inline'))
         % guess a sample bounding box
         acq.bb = [acq.xdet/2-50 acq.ydet/2-50 100 100];
     end
-    if (isfield(acq,'bb') && ~isempty(acq.bb))
-        par_labgeo.detrefpos(2:3) = sfDetrefpos(acq.bb, par_labgeo);
-    end
     par_labgeo = gtGeoSamEnvFromAcq(par_labgeo, acq);
     disp('Choose a squared sample bounding box in the center of the image...')
 end
 
-
-end % end of function
-
-
-%%%%%%%%%%%%%%%%%%%%%
-% SUB-FUNCTIONS
-%%%%%%%%%%%%%%%%%%%%%
-
-function [dy, dz] = sfDetrefpos(acq_bb, par_labgeo)
-% Returns the detector lateral (Y) and vertical (Z) positions which approximately
-% account for an offset of the sample bounding box position:
-%   Y lateral: It assumes that the projection of the rotation axis is at the
-%   center of the sample bounding box.
-%   Z vertical: set in a way that the vertical center of the sample bounding
-%   box will have coordinate Z=0.
-% It assumes rotpos = [0 0 0] and view into the beam.
-
-dy = -((acq_bb(1) + acq_bb(3)/2) - par_labgeo.detrefu) * par_labgeo.pixelsizeu;
-dz =  ((acq_bb(2) + acq_bb(4)/2) - par_labgeo.detrefv) * par_labgeo.pixelsizev;
-
-end
\ No newline at end of file
+end
diff --git a/zUtil_Parameters/build_list_v2.m b/zUtil_Parameters/build_list_v2.m
index af9c41d42cfb11c5c935357f65e108ffbc9f597f..24cd23701c605969fa11fed53fe704442a54a8ae 100644
--- a/zUtil_Parameters/build_list_v2.m
+++ b/zUtil_Parameters/build_list_v2.m
@@ -248,30 +248,12 @@ list.labgeo(end+1, :) = {'rotdir', ...
     'Rotation axis direction in LAB (unit row vector); omega is right-handed rotation', 'double', 1};
 list.labgeo(end+1, :) = {'rotpos', ...
     'Rotation axis position (arbitrary point on axis) in LAB', 'double', 1};
-list.labgeo(end+1, :) = {'detrefpos', ...
-    'Detector reference point (usually center) position in LAB', 'double', 1};
-list.labgeo(end+1, :) = {'detrefu', ...
-    'Detector reference point U coordinate in pixels', 'double', 1};
-list.labgeo(end+1, :) = {'detrefv', ...
-    'Detector reference point V coordinate in pixels', 'double', 1};
-list.labgeo(end+1, :) = {'detdiru', ...
-    'Detector U direction in LAB (unit row vector)', 'double', 1};
-list.labgeo(end+1, :) = {'detdirv', ...
-    'Detector V direction in LAB (unit row vector)', 'double', 1};
-list.labgeo(end+1, :) = {'pixelsizeu', ...
-    'Detector pixel size in direction U (lab unit/pixel)', 'double', 1};
-list.labgeo(end+1, :) = {'pixelsizev', ...
-    'Detector pixel size in direction V (lab unit/pixel)', 'double', 1};
 list.labgeo(end+1, :) = {'samenvtop', ...
     '[Computed] Distance from rotpos to top of sample envelope along rotdir (signed scalar in lab units)', 'double', 0};
 list.labgeo(end+1, :) = {'samenvbot', ...
     '[Computed] Distance from rotpos to bottom of sample envelope along rotdir (signed scalar in lab units)', 'double', 0};
 list.labgeo(end+1, :) = {'samenvrad', ...
     '[Computed] Radius of sample envelope (in lab units)', 'double', 0};
-list.labgeo(end+1, :) = {'detanglemin', ...
-    '[Computed] Detector minimum 2Theta angle to consider', 'double', 0};
-list.labgeo(end+1, :) = {'detanglemax', ...
-    '[Computed] Detector maximum 2Theta angle to consider', 'double', 0};
 list.labgeo(end+1, :) = {'labunit', ...
     'LAB units (default is mm) [for records only]', 'char', 1};
 list.labgeo(end+1, :) = {'deflabX', ...
@@ -280,9 +262,33 @@ list.labgeo(end+1, :) = {'deflabY', ...
     'Description how Lab Y direction was chosen [for records only]', 'char', 1};
 list.labgeo(end+1, :) = {'deflabZ', ...
     'Description how Lab Z direction was chosen [for records only]', 'char', 1};
-list.labgeo(end+1, :) = {'detsizeu', ...
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Parameters to describe the setup geometry
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% coordinates are given in the Det reference
+list.detgeo = cell(0, 4);
+list.detgeo(end+1, :) = {'detrefpos', ...
+    'Detector reference point (usually center) position in LAB', 'double', 1};
+list.detgeo(end+1, :) = {'detrefu', ...
+    'Detector reference point U coordinate in pixels', 'double', 1};
+list.detgeo(end+1, :) = {'detrefv', ...
+    'Detector reference point V coordinate in pixels', 'double', 1};
+list.detgeo(end+1, :) = {'detdiru', ...
+    'Detector U direction in LAB (unit row vector)', 'double', 1};
+list.detgeo(end+1, :) = {'detdirv', ...
+    'Detector V direction in LAB (unit row vector)', 'double', 1};
+list.detgeo(end+1, :) = {'pixelsizeu', ...
+    'Detector pixel size in direction U (lab unit/pixel)', 'double', 1};
+list.detgeo(end+1, :) = {'pixelsizev', ...
+    'Detector pixel size in direction V (lab unit/pixel)', 'double', 1};
+list.detgeo(end+1, :) = {'detanglemin', ...
+    '[Computed] Detector minimum 2Theta angle to consider', 'double', 0};
+list.detgeo(end+1, :) = {'detanglemax', ...
+    '[Computed] Detector maximum 2Theta angle to consider', 'double', 0};
+list.detgeo(end+1, :) = {'detsizeu', ...
     'Number of pixels along the u direction', 'double', 1};
-list.labgeo(end+1, :) = {'detsizev', ...
+list.detgeo(end+1, :) = {'detsizev', ...
     'Number of pixels along the v direction', 'double', 1};
 
 
diff --git a/zUtil_Parameters/gtCheckParameters.m b/zUtil_Parameters/gtCheckParameters.m
index a2e9dd65160c2316a0e2d272ca8da9f4a7f82f12..6d9dfa659db5573a3ef8de2875e82ec318c0bbf9 100644
--- a/zUtil_Parameters/gtCheckParameters.m
+++ b/zUtil_Parameters/gtCheckParameters.m
@@ -392,6 +392,8 @@ function section = get_default_section(section_name, parameters)
     switch(section_name)
         case 'labgeo'
             section = gtGeoLabDefaultParameters(parameters.acq);
+        case 'detgeo'
+            section = gtGeoDetDefaultParameters(parameters.acq);
         case 'samgeo'
             section = gtGeoSamDefaultParameters();
         case 'recgeo'
diff --git a/zUtil_Parameters/gtLoadParameters.m b/zUtil_Parameters/gtLoadParameters.m
index 40b9aa937ca2c1142235f5fae91f920d0eb3702f..c85890e9bbad926a0c8d0f4fd3cf1ef5a1eaca4a 100644
--- a/zUtil_Parameters/gtLoadParameters.m
+++ b/zUtil_Parameters/gtLoadParameters.m
@@ -1,5 +1,9 @@
-function p = gtLoadParameters()
-    p = load('parameters.mat');
+function p = gtLoadParameters(path_to_params)
+    parameters_file_name = 'parameters.mat';
+    if (exist('path_to_params', 'var'))
+        parameters_file_name = fullfile(path_to_params, parameters_file_name);
+    end
+    p = load(parameters_file_name);
     if (isfield(p, 'parameters'))
         p = p.parameters;
     end
diff --git a/zUtil_Parameters/gtSaveParameters.m b/zUtil_Parameters/gtSaveParameters.m
index ed407a812b4d007d5f59dcb6c55e738b88915536..975ca588a97cd5d2bc3fb78437d146011c8a99b7 100644
--- a/zUtil_Parameters/gtSaveParameters.m
+++ b/zUtil_Parameters/gtSaveParameters.m
@@ -1,6 +1,10 @@
-function gtSaveParameters(parameters) %#ok<INUSD>
+function gtSaveParameters(parameters)
     if (~exist('parameters', 'var'))
-        parameters = evalin('base', 'parameters'); %#ok<NASGU>
+        parameters = evalin('base', 'parameters');
     end
-    save('parameters.mat', 'parameters', '-v7.3');
+%     if (~strcmp(pwd(), parameters.acq.dir))
+%         warning('gtSaveParameters:wrong_path', '')
+%     end
+    parameters_file_name = fullfile(parameters.acq.dir, 'parameters.mat');
+    save(parameters_file_name, 'parameters', '-v7.3');
 end