diff --git a/4_grains/gtCalculateGrain.m b/4_grains/gtCalculateGrain.m
index 10d28f6672fe692dad78149d41dfd9659b3275a1..b3a292c2c7e28885f8e81a45953c03b6747249f1 100644
--- a/4_grains/gtCalculateGrain.m
+++ b/4_grains/gtCalculateGrain.m
@@ -191,12 +191,25 @@ for det_ind = app.det_ind
     % Use the Sample -> Lab orientation transformation assuming omega=0;
     % (vector length preserved for free vectors)
     if (is_dct)
-        pl_labd = gtGeoSam2Lab(pl_samd', eye(3), labgeo, samgeo, true)';
+        if (isfield(parameters, 'diffractometer') ...
+                && numel(parameters.diffractometer) >= det_ind ...
+                && ~isempty(acq.sample_tilts))
+            diff = parameters.diffractometer(det_ind);
+            tilts = acq.sample_tilts;
+            t = gtGeoDiffractometerTensor(diff, 'sam2lab', true, 'angles_sam_tilt', tilts);
+        else
+            t = eye(3);
+        end
+        pl_labd = gtGeoSam2Lab(pl_samd', t, labgeo, samgeo, true)';
 
         rotcomp = gtMathsRotationMatrixComp(labgeo.rotdir', 'col');
         rotdir = labgeo.rotdir';
     elseif (is_topotomo)
-        diff = parameters.diffractometer;
+        if (numel(parameters.diffractometer) > 1)
+            diff = parameters.diffractometer(det_ind);
+        else
+            diff = parameters.diffractometer;
+        end
 
         if (isfield(acq, 'sample_tilts') && ~isempty(acq.sample_tilts))
             tilts = acq.sample_tilts;
diff --git a/4_grains/gtCalculateGrain_p.m b/4_grains/gtCalculateGrain_p.m
index e38d47c1c54bf943da8ed3a1e784a7c8ce6d7ab9..a171c40b543601af3d51c368579458d6f105ea6e 100644
--- a/4_grains/gtCalculateGrain_p.m
+++ b/4_grains/gtCalculateGrain_p.m
@@ -144,7 +144,6 @@ for det_ind = app.det_ind
                 'When mode is "topotomo", "pl_ind" should also be pased');
             continue;
         end
-        diff = parameters.diffractometer;
     end
 
     omstep = gtAcqGetOmegaStep(parameters, det_ind);
@@ -222,11 +221,26 @@ for det_ind = app.det_ind
     % Use the Sample -> Lab orientation transformation assuming omega=0;
     % (vector length preserved for free vectors)
     if (is_dct)
-        pl_labd = gtGeoSam2Lab(pl_samd', eye(3), labgeo, samgeo, true)';
+        if (isfield(parameters, 'diffractometer') ...
+                && numel(parameters.diffractometer) >= det_ind ...
+                && ~isempty(acq.sample_tilts))
+            diff = parameters.diffractometer(det_ind);
+            tilts = acq.sample_tilts;
+            t = gtGeoDiffractometerTensor(diff, 'sam2lab', true, 'angles_sam_tilt', tilts);
+        else
+            t = eye(3);
+        end
+        pl_labd = gtGeoSam2Lab(pl_samd', t, labgeo, samgeo, true)';
 
         rotcomp = gtMathsRotationMatrixComp(labgeo.rotdir', 'col');
         rotdir = labgeo.rotdir';
     elseif (is_topotomo)
+        if (numel(parameters.diffractometer) > 1)
+            diff = parameters.diffractometer(det_ind);
+        else
+            diff = parameters.diffractometer;
+        end
+
         if (isfield(acq, 'sample_tilts') && ~isempty(acq.sample_tilts))
             tilts = acq.sample_tilts;
         else