diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/CorelliPowderCalibrationCreate.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/CorelliPowderCalibrationCreate.py
index 1dbe7f1cf8b5b70901043e2c08584d0b2a95e7bf..0bfad64b074bd4d9e8cbf991567a5d809e1c8a51 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/CorelliPowderCalibrationCreate.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/CorelliPowderCalibrationCreate.py
@@ -136,9 +136,10 @@ class CorelliPowderCalibrationCreate(DataProcessorAlgorithm):
         self.setPropertySettings("SourceMaxTranslation",
                                  EnabledWhenProperty("AdjustSource", PropertyCriterion.IsNotDefault))
         property_names = ['FixSource', 'SourceToSampleDistance', 'AdjustSource', 'SourceMaxTranslation']
-        [self.setPropertyGroup(name, 'Source Position') for name in property_names]
+        [self.setPropertyGroup(name, 'Source Calibration') for name in property_names]
 
         # AlignComponents properties
+        self.declareProperty(name='FixY', defaultValue=True, doc="Vertical bank position is left unchanged")
         self.declareProperty(StringArrayProperty('ComponentList', values=self._banks, direction=Direction.Input),
                              doc='Comma separated list on banks to refine')
         self.declareProperty(name='ComponentMaxTranslation', defaultValue=0.02,
@@ -146,7 +147,7 @@ class CorelliPowderCalibrationCreate(DataProcessorAlgorithm):
         self.declareProperty(name='ComponentMaxRotation', defaultValue=3.0,
                              doc='Maximum rotation of each component along either of the X, Y, Z axes (deg)')
         property_names = ['ComponentList', 'ComponentMaxTranslation', 'ComponentMaxRotation']
-        [self.setPropertyGroup(name, 'AlignComponents') for name in property_names]
+        [self.setPropertyGroup(name, 'Banks Calibration') for name in property_names]
 
     def PyExec(self):
         temporary_workspaces = []
@@ -238,6 +239,7 @@ class CorelliPowderCalibrationCreate(DataProcessorAlgorithm):
         # The instrument in `input_workspace` is adjusted in-place
         dt = self.getProperty('ComponentMaxTranslation').value  # maximum translation along either axis
         dr = self.getProperty('ComponentMaxRotation').value  # maximum rotation along either axis
+        move_y = False if self.getProperty('FixY').value is True else True
         kwargs = dict(InputWorkspace=input_workspace,
                       OutputWorkspace=input_workspace,
                       PeakCentersTofTable=peak_centers_in_tof,
@@ -248,7 +250,7 @@ class CorelliPowderCalibrationCreate(DataProcessorAlgorithm):
                       FitSamplePosition=False,
                       ComponentList=self.getProperty('ComponentList').value,
                       Xposition=True, MinXPosition=-dt, MaxXPosition=dt,
-                      Yposition=True, MinYPosition=-dt, MaxYPosition=dt,
+                      Yposition=move_y, MinYPosition=-dt, MaxYPosition=dt,
                       Zposition=True, MinZPosition=-dt, MaxZPosition=dt,
                       AlphaRotation=True, MinAlphaRotation=-dr, MaxAlphaRotation=dr,
                       BetaRotation=True, MinBetaRotation=-dr, MaxBetaRotation=dr,
diff --git a/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/CorelliPowderCalibrationCreateTest.py b/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/CorelliPowderCalibrationCreateTest.py
index c9c642dc1b1e342990edfa6e0a61eb2545dd73da..c1f9e7f57c98d1723b57c6b2f6f8efdacaa5b98e 100644
--- a/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/CorelliPowderCalibrationCreateTest.py
+++ b/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/CorelliPowderCalibrationCreateTest.py
@@ -10,12 +10,14 @@ import unittest
 
 from mantid.api import mtd
 from mantid.simpleapi import (
-    CorelliPowderCalibrationCreate, CreateSampleWorkspace, MoveInstrumentComponent, RotateInstrumentComponent)
+    CorelliPowderCalibrationCreate, CreateSampleWorkspace, DeleteWorkspace, MoveInstrumentComponent,
+    RotateInstrumentComponent)
 
 
 class CorelliPowderCalibrationCreateTest(unittest.TestCase):
 
-    def test_exec(self):
+    def setUp(self) -> None:
+        r"""Fixture runs at the beginning of every test method"""
         # Single 10x10 rectangular detector, located 5m downstream the sample
         CreateSampleWorkspace(WorkspaceType="Event", Function="Powder Diffraction", XMin=300, XMax=16666.7, BinWidth=1,
                               NumBanks=1, NumEvents=100000, PixelSpacing=0.02, OutputWorkspace="test_workspace",
@@ -23,30 +25,41 @@ class CorelliPowderCalibrationCreateTest(unittest.TestCase):
         # The detector ID at the center of the detector panel is detector-ID = 155, corresponding to workspace index 55.
         # When the detector panel is placed perpendicular to the X axis and five meters away from the sample,
         # detector-ID 155 shows nine peaks with the following peak-centers, in d-spacing (Angstroms) units:
-        spacings_reference = [0.304670, 0.610286, 0.915385, 1.220476, 1.525575, 1.830671, 2.135765, 2.44092, 2.74598]
+        self.spacings_reference = [0.304670, 0.610286, 0.915385, 1.220476, 1.525575,
+                                   1.830671, 2.135765, 2.44092, 2.74598]
         # We select these d-spacings as the reference d-spacings
         # Place the detector at a position and orientation close, but not equal to, perpendicular to the X axis
-        # 5 meters from the sample
-        RotateInstrumentComponent(Workspace='test_workspace', ComponentName='bank1', X=0.1, Y=99, z=0.1, Angle=88,
+        # and meters from the sample
+        # First we rotate almost 90 degrees around an axis almost parallel to the vertical direction
+        RotateInstrumentComponent(Workspace='test_workspace', ComponentName='bank1', X=0.1, Y=0.99, z=0.1, Angle=88,
                                   RelativeRotation=True)
+        # Second, we move the bank
         MoveInstrumentComponent(Workspace='test_workspace', ComponentName='bank1', X=4.98, y=-0.12, z=0.08,
                                 RelativePosition=False)
+        self.workspace = 'test_workspace'
+
+    def tearDown(self) -> None:
+        r"""Fixture runs at the end of every test method"""
+        DeleteWorkspace(self.workspace)
 
+    def test_exec(self):
         # Both FixSource=True, AdjustSource=True can't be True
         try:
             CorelliPowderCalibrationCreate(
-                InputWorkspace='test_workspace', OutputWorkspacesPrefix='cal_',
-                TofBinning=[300, 1.0, 16666.7], PeakPositions=spacings_reference, FixSource=True, AdjustSource=True,
-                ComponentList='bank1', ComponentMaxTranslation=0.2, ComponentMaxRotation=10)
+                InputWorkspace=self.workspace, OutputWorkspacesPrefix='cal_',
+                TofBinning=[300, 1.0, 16666.7], PeakPositions=self.spacings_reference, FixSource=True,
+                AdjustSource=True, FixY=False, ComponentList='bank1', ComponentMaxTranslation=0.2,
+                ComponentMaxRotation=10)
         except RuntimeError as error:
             assert 'Some invalid Properties found' in str(error)
 
         # Both FixSource=True, AdjustSource=True can't be False
         try:
             CorelliPowderCalibrationCreate(
-                InputWorkspace='test_workspace', OutputWorkspacesPrefix='cal_',
-                TofBinning=[300, 1.0, 16666.7], PeakPositions=spacings_reference, FixSource=False, AdjustSource=False,
-                ComponentList='bank1', ComponentMaxTranslation=0.2, ComponentMaxRotation=10)
+                InputWorkspace=self.workspace, OutputWorkspacesPrefix='cal_',
+                TofBinning=[300, 1.0, 16666.7], PeakPositions=self.spacings_reference, FixSource=False,
+                AdjustSource=False, FixY=False, ComponentList='bank1', ComponentMaxTranslation=0.2,
+                ComponentMaxRotation=10)
         except RuntimeError as error:
             assert 'Some invalid Properties found' in str(error)
 
@@ -55,9 +68,9 @@ class CorelliPowderCalibrationCreateTest(unittest.TestCase):
         # a result, the final position and orientation is not exactly perpendicular to the X-axis and positioned
         # five meters away from the sample.
         CorelliPowderCalibrationCreate(
-            InputWorkspace='test_workspace', OutputWorkspacesPrefix='cal_',
-            TofBinning=[300, 1.0, 16666.7], PeakPositions=spacings_reference, SourceToSampleDistance=10.0,
-            ComponentList='bank1', ComponentMaxTranslation=0.2, ComponentMaxRotation=10)
+            InputWorkspace=self.workspace, OutputWorkspacesPrefix='cal_',
+            TofBinning=[300, 1.0, 16666.7], PeakPositions=self.spacings_reference, SourceToSampleDistance=10.0,
+            FixY=False, ComponentList='bank1', ComponentMaxTranslation=0.2, ComponentMaxRotation=10)
         # Check source position
         row = mtd['cal_adjustments'].row(0)
         assert_allclose([row[name] for name in ('Xposition', 'Yposition', 'Zposition')], [0., 0., -10.0], atol=0.001)
@@ -70,6 +83,17 @@ class CorelliPowderCalibrationCreateTest(unittest.TestCase):
                         target_orientation, atol=0.05)
         assert_allclose(row['RotationAngle'], target_rotation, atol=2.0)
 
+    def test_fix_y(self) -> None:
+        r"""Pass option FixY=True"""
+        CorelliPowderCalibrationCreate(
+            InputWorkspace=self.workspace, OutputWorkspacesPrefix='cal_',
+            TofBinning=[300, 1.0, 16666.7], PeakPositions=self.spacings_reference, SourceToSampleDistance=10.0,
+            FixY=True, ComponentList='bank1', ComponentMaxTranslation=0.2, ComponentMaxRotation=10)
+        self.assertAlmostEqual()
+        # Check Y-position of first bank hasn't changed
+        row = mtd['cal_adjustments'].row(1)
+        self.assertAlmostEquals(row['Yposition'], -0.12, places=5)
+
 
 if __name__ == '__main__':
     unittest.main()