diff --git a/Testing/SystemTests/tests/analysis/reference/POLARIS_PowderFocus79514.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/POLARIS_PowderFocus79514.nxs.md5
new file mode 100644
index 0000000000000000000000000000000000000000..02d58c5e136f2887dc407a98a695860a0a094f76
--- /dev/null
+++ b/Testing/SystemTests/tests/analysis/reference/POLARIS_PowderFocus79514.nxs.md5
@@ -0,0 +1 @@
+a21f83421257de6da7fb7c2dd66d3eef
diff --git a/scripts/Diffraction/isis_powder/abstract_inst.py b/scripts/Diffraction/isis_powder/abstract_inst.py
index 022571dc4f385a4f6ae9564a47957c8c4124635d..759fda4b9a13345010b2f12e7a472f093d8bc6d4 100644
--- a/scripts/Diffraction/isis_powder/abstract_inst.py
+++ b/scripts/Diffraction/isis_powder/abstract_inst.py
@@ -24,7 +24,7 @@ class AbstractInst(object):
         self._calibration_dir = calibration_dir
         self._raw_data_dir = raw_data_dir
         self._output_dir = output_dir
-        self._default_input_ext = _append_dot_to_ext(default_input_ext)
+        self._default_input_ext = _prefix_dot_to_ext(default_input_ext)
         self._focus_mode = None
 
     @property
@@ -45,7 +45,7 @@ class AbstractInst(object):
 
     @default_input_ext.setter
     def default_input_ext(self, new_ext):
-        self._default_input_ext = _append_dot_to_ext(new_ext)
+        self._default_input_ext = _prefix_dot_to_ext(new_ext)
 
     @property
     def focus_mode(self):
@@ -162,13 +162,7 @@ class AbstractInst(object):
     # Instrument specific methods
 
     @abstractmethod
-    def _get_calibration_full_paths(self, cycle):
-        """
-        Gets the current calibration file names for this cycle
-        @param cycle: The cycle string to lookup for this run
-        @return: A dictionary the containing the full paths as values for the following keys:
-        "calibration", "grouping", "vanadium_absorption", "vanadium"
-        """
+    def _get_calibration_full_paths(self, run_number):
         pass
 
     @staticmethod
@@ -179,7 +173,7 @@ class AbstractInst(object):
         @param run_number: The run number to turn into a filename
         @return: The filename of the file - Without the path or extension
         """
-        pass
+
 
     @staticmethod
     @abstractmethod
@@ -293,7 +287,7 @@ class AbstractInst(object):
 # These should only be called by the abstract instrument class
 
 
-def _append_dot_to_ext(ext):
+def _prefix_dot_to_ext(ext):
     if not ext.startswith('.'):
         return '.' + ext
     else:
diff --git a/scripts/Diffraction/isis_powder/calibrate.py b/scripts/Diffraction/isis_powder/calibrate.py
index 4bd6a41a1198023aaf4b62b408b64ec33efae7ef..01f5482f145b2366b88f4033529fdea2239c8f55 100644
--- a/scripts/Diffraction/isis_powder/calibrate.py
+++ b/scripts/Diffraction/isis_powder/calibrate.py
@@ -7,8 +7,6 @@ import isis_powder.common as common
 
 
 def create_van(instrument, van, empty, output_van_file_name, num_of_splines, absorb, gen_absorb):
-    cycle_information = instrument._get_cycle_information(van)
-
     input_van_ws = common._load_current_normalised_ws(number=van, instrument=instrument)
     input_empty_ws = common._load_current_normalised_ws(number=empty, instrument=instrument)
 
@@ -17,7 +15,7 @@ def create_van(instrument, van, empty, output_van_file_name, num_of_splines, abs
     common.remove_intermediate_workspace(input_empty_ws)
     common.remove_intermediate_workspace(input_van_ws)
 
-    calibration_full_paths = instrument._get_calibration_full_paths(cycle=cycle_information["cycle"])
+    calibration_full_paths = instrument._get_calibration_full_paths(run_number=van)
 
     # Absorb was here
 
@@ -43,6 +41,7 @@ def create_van(instrument, van, empty, output_van_file_name, num_of_splines, abs
 
     common.remove_intermediate_workspace(corrected_van_ws)
 
+    cycle_information = instrument._get_cycle_information(run_number=van)
     splined_ws_list = instrument._spline_background(focused_van_file, num_of_splines,
                                                     cycle_information["instrument_version"])
 
diff --git a/scripts/Diffraction/isis_powder/focus.py b/scripts/Diffraction/isis_powder/focus.py
index 86e4ad2b97f553690dcfb3ddfd61d88969a3e0fa..a22598b898a13b322b938a6efb37837ee4605714 100644
--- a/scripts/Diffraction/isis_powder/focus.py
+++ b/scripts/Diffraction/isis_powder/focus.py
@@ -14,8 +14,7 @@ def _run_focus(instrument, run_number, perform_attenuation, perform_vanadium_nor
     read_ws = common._load_current_normalised_ws(number=run_number, instrument=instrument)
     input_workspace = instrument._do_tof_rebinning_focus(read_ws)  # Rebins for PEARL
 
-    cycle_information = instrument._get_cycle_information(run_number=run_number)
-    calibration_file_paths = instrument._get_calibration_full_paths(cycle=cycle_information["cycle"])
+    calibration_file_paths = instrument._get_calibration_full_paths(run_number=run_number)
 
     # Compensate for empty sample if specified
     input_workspace = instrument._subtract_sample_empty(input_workspace)
@@ -57,9 +56,9 @@ def _run_focus(instrument, run_number, perform_attenuation, perform_vanadium_nor
 def _divide_sample_by_vanadium(instrument, run_number, input_workspace, perform_vanadium_norm):
     processed_spectra = []
 
-    cycle_information = instrument._get_cycle_information(run_number=run_number)
-    input_file_paths = instrument._get_calibration_full_paths(cycle=cycle_information["cycle"])
+    input_file_paths = instrument._get_calibration_full_paths(run_number=run_number)
 
+    cycle_information = instrument._get_cycle_information(run_number=run_number)
     alg_range, save_range = instrument._get_instrument_alg_save_ranges(cycle_information["instrument_version"])
 
     for index in range(0, alg_range):
diff --git a/scripts/Diffraction/isis_powder/mock_instrument.py b/scripts/Diffraction/isis_powder/mock_instrument.py
index 0e62d7b59cc2fbae0f28466732ec33979014086b..b7deba6bb45b7b0e125cd409b6397c411f2d6967 100644
--- a/scripts/Diffraction/isis_powder/mock_instrument.py
+++ b/scripts/Diffraction/isis_powder/mock_instrument.py
@@ -21,7 +21,7 @@ class MockInstrument(AbstractInst):
     def _get_default_group_names(self):
         return None
 
-    def _get_calibration_full_paths(self, cycle):
+    def _get_calibration_full_paths(self, run_number):
         # This is here to help remind people of the dict that is expected
         calibration_details = {"calibration": "cal",
                                "grouping": "group",
diff --git a/scripts/Diffraction/isis_powder/pearl.py b/scripts/Diffraction/isis_powder/pearl.py
index e09e8d0a47575ff17b30991dfb947acd751b11c2..567264f93a491bb26015650a9563d8c9393cbd98 100644
--- a/scripts/Diffraction/isis_powder/pearl.py
+++ b/scripts/Diffraction/isis_powder/pearl.py
@@ -63,10 +63,11 @@ class Pearl(AbstractInst):
 
     # Methods #
 
-    def _get_calibration_full_paths(self, cycle):
+    def _get_calibration_full_paths(self, run_number):
+        cycle_dict = self._get_cycle_information(run_number=run_number)
 
         calibration_file, grouping_file, van_absorb, van_file =\
-            pearl_calib_factory.get_calibration_filename(cycle=cycle, tt_mode=self._tt_mode)
+            pearl_calib_factory.get_calibration_filename(cycle=cycle_dict["cycle"], tt_mode=self._tt_mode)
 
         calibration_dir = self.calibration_dir
 
@@ -86,7 +87,18 @@ class Pearl(AbstractInst):
 
     @staticmethod
     def _get_cycle_information(run_number):
-        cycle, instrument_version = pearl_cycle_factory.get_cycle_dir(run_number)
+        run_input = ""
+        if not run_number.isdigit():
+            # Only take first valid number as it is probably of the form 12345_12350
+            for character in run_number:
+                if character.isdigit():
+                    run_input += character
+                else:
+                    break
+        else:
+            run_input = run_number
+
+        cycle, instrument_version = pearl_cycle_factory.get_cycle_dir(run_input)
 
         cycle_information = {'cycle': cycle,
                              'instrument_version': instrument_version}
diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py
index 3c9a570b2b2a7eed1ee608e85b9cd81ff2268849..1d450e47c2854e0d8ef33b3f7bebd2ac1588dee0 100644
--- a/scripts/Diffraction/isis_powder/polaris.py
+++ b/scripts/Diffraction/isis_powder/polaris.py
@@ -14,7 +14,7 @@ import isis_powder.common as common
 class Polaris(AbstractInst):
 
     _lower_lambda_range = 0.25
-    _upper_lambda_range = 2.50  # TODO populate this
+    _upper_lambda_range = 2.50
 
     _focus_crop_start = 2  # These are used when calculating binning range
     _focus_crop_end = 0.95
@@ -43,10 +43,10 @@ class Polaris(AbstractInst):
     def _get_default_group_names(self):
         return self._calibration_grouping_names
 
-    def _get_calibration_full_paths(self, cycle):
+    def _get_calibration_full_paths(self, run_number):
         # offset_file_name, grouping_file_name, vanadium_file_name = polaris_calib_factory.get_calibration_file(cycle)
-
-        configuration = polaris_calib_parser.get_calibration_dict(cycle)
+        cycle_dict = self._get_cycle_information(run_number=run_number)
+        configuration = polaris_calib_parser.get_calibration_dict(cycle_dict["cycle"])
         calibration_dir = self.calibration_dir
 
         # Assume the raw vanadium is with other raw files
@@ -112,7 +112,6 @@ class Polaris(AbstractInst):
         return corrections_ws
 
     def _subtract_sample_empty(self, input_sample):
-        # TODO move this to be generated by calibration factory so we don't have to use the full fname
         if self._sample_empty is not None:
             empty_sample_path = os.path.join(self.calibration_dir, self._sample_empty)
             empty_sample = mantid.Load(Filename=empty_sample_path)
@@ -350,4 +349,3 @@ def _create_d_spacing_tof_output(processed_spectra):
     tof_group = mantid.GroupWorkspaces(InputWorkspaces=tof_output, OutputWorkspace=tof_group_name)
 
     return d_spacing_group, tof_group
-