diff --git a/scripts/Diffraction/isis_powder/abstract_inst.py b/scripts/Diffraction/isis_powder/abstract_inst.py
index cba0d532faeb0bec3fc3b312c54a4e80524f297f..0edcefd62a9e6a4a4662dc41b1604a55ec275e40 100644
--- a/scripts/Diffraction/isis_powder/abstract_inst.py
+++ b/scripts/Diffraction/isis_powder/abstract_inst.py
@@ -15,7 +15,7 @@ from isis_powder import calibrate
 @add_metaclass(ABCMeta)
 class AbstractInst(object):
     def __init__(self, user_name=None, calibration_dir=None, raw_data_dir=None, output_dir=None,
-                 default_input_ext=".raw", tt_mode=""):
+                 default_input_ext=".raw"):
         # ----- Properties common to ALL instruments -------- #
         if user_name is None:
             raise ValueError("A user name must be specified")
@@ -24,7 +24,6 @@ class AbstractInst(object):
         self._raw_data_dir = raw_data_dir
         self._output_dir = output_dir
         self._default_input_ext = _append_dot_to_ext(default_input_ext)
-        self._tt_mode = tt_mode
         self._focus_mode = None
 
     @property
@@ -47,10 +46,6 @@ class AbstractInst(object):
     def default_input_ext(self, new_ext):
         self._default_input_ext = _append_dot_to_ext(new_ext)
 
-    @property
-    def tt_mode(self):
-        return self._tt_mode
-
     @property
     def focus_mode(self):
         return self._focus_mode
@@ -145,15 +140,6 @@ class AbstractInst(object):
         """
         pass
 
-    @abstractmethod
-    def _get_focus_tof_binning(self):
-        """
-        Returns the TOF binning values
-        @param self: The instrument to get TOF binning values for
-        @return: TOF binning Values
-        """
-        pass
-
     @abstractmethod
     def _get_create_van_tof_binning(self):
         """
@@ -273,16 +259,13 @@ class AbstractInst(object):
     def _do_tof_rebinning_focus(self, input_workspace):
         return input_workspace
 
-    def _focus_processing(self, run_number, input_workspace, perform_vanadium_norm):
-        return _empty_hook_return_none()
-
     def _process_focus_output(self, processed_spectra, run_number, attenuate=False):
         return _empty_hook_return_none()
 
     def _subtract_sample_empty(self, input_sample):
         return input_sample
 
-    def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number):
+    def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number=None, vanadium_path=None):
         return ws_to_correct
 
     def _load_monitor(self, number, cycle):
@@ -297,9 +280,14 @@ class AbstractInst(object):
     def _calibration_rebin_to_workspace(self, ws_to_rebin, ws_to_match):
         return ws_to_rebin
 
+    def correct_sample_vanadium(self, focused_ws, index, vanadium_ws=None):
+        raise NotImplementedError("Cannot process the sample with a vanadium run for this instrument")
+
+
 # ----- Private Implementation ----- #
 # These should only be called by the abstract instrument class
 
+
 def _append_dot_to_ext(ext):
     if not ext.startswith('.'):
         return '.' + ext
diff --git a/scripts/Diffraction/isis_powder/calibrate.py b/scripts/Diffraction/isis_powder/calibrate.py
index 22c5bef99999c24e2c844e60c87cd816a8b992f7..23f5e4b4527449485e9d72cae8adc85d2b261b28 100644
--- a/scripts/Diffraction/isis_powder/calibrate.py
+++ b/scripts/Diffraction/isis_powder/calibrate.py
@@ -68,7 +68,7 @@ def _apply_absorb_corrections(instrument, calibration_full_paths, corrected_van_
     else:
         absorb_ws = mantid.LoadNexus(Filename=calibration_full_paths["vanadium_absorption"])
 
-    # PEARL rebins whilst POLARIS does not
+    # PEARL rebins whilst POLARIS does not as some of the older absorption files have different number of bins
     corrected_van_ws = instrument._calibration_rebin_to_workspace(ws_to_rebin=corrected_van_ws, ws_to_match=absorb_ws)
     corrected_van_ws = mantid.Divide(LHSWorkspace=corrected_van_ws, RHSWorkspace=absorb_ws)
     corrected_van_ws = mantid.ConvertUnits(InputWorkspace=corrected_van_ws, Target="dSpacing")
diff --git a/scripts/Diffraction/isis_powder/focus.py b/scripts/Diffraction/isis_powder/focus.py
index 87958b0bdcead96c155cfe1701774b805e88c4d5..a950fd8ea114af291ec4eeb420b6f1d7c76e21e1 100644
--- a/scripts/Diffraction/isis_powder/focus.py
+++ b/scripts/Diffraction/isis_powder/focus.py
@@ -14,26 +14,27 @@ 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
 
-    # Align / Focus
     cycle_information = instrument._get_cycle_information(run_number=run_number)
     calibration_file_paths = instrument._get_calibration_full_paths(cycle=cycle_information["cycle"])
 
     # Compensate for empty sample if specified
     input_workspace = instrument._subtract_sample_empty(input_workspace)
 
-    # TODO this prints a warnings about detectors being incorrect on POLARIS
+    # Align / Focus
     input_workspace = mantid.AlignDetectors(InputWorkspace=input_workspace,
                                             CalibrationFile=calibration_file_paths["calibration"])
 
     # TODO fix this - maybe have it save solid angle corrections and just load/apply
     input_workspace = instrument._apply_solid_angle_efficiency_corr(ws_to_correct=input_workspace,
-                                                                    vanadium_number=calibration_file_paths["vanadium"])
+                                                                    vanadium_path=calibration_file_paths["vanadium"])
 
     input_workspace = mantid.DiffractionFocussing(InputWorkspace=input_workspace,
                                                   GroupingFileName=calibration_file_paths["grouping"])
 
     # Process
-    calibrated_spectra = instrument._focus_processing(run_number, input_workspace, perform_vanadium_norm)
+    calibrated_spectra = _divide_sample_by_vanadium(instrument=instrument, run_number=run_number,
+                                                    input_workspace=input_workspace,
+                                                    perform_vanadium_norm=perform_vanadium_norm)
 
     common.remove_intermediate_workspace(read_ws)
     common.remove_intermediate_workspace(input_workspace)
@@ -45,3 +46,26 @@ def _run_focus(instrument, run_number, perform_attenuation, perform_vanadium_nor
         common.remove_intermediate_workspace(ws)
 
     return processed_nexus_files
+
+
+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"])
+
+    alg_range, save_range = instrument._get_instrument_alg_save_ranges(cycle_information["instrument_version"])
+
+    for index in range(0, alg_range):
+        if perform_vanadium_norm:
+            vanadium_ws = mantid.LoadNexus(Filename=input_file_paths["vanadium"], EntryNumber=index + 1)
+
+            processed_spectra.append(
+                instrument.correct_sample_vanadium(focused_ws=input_workspace, index=index, vanadium_ws=vanadium_ws))
+
+            common.remove_intermediate_workspace(vanadium_ws)
+        else:
+            processed_spectra.append(
+                instrument.calc_calibration_without_vanadium(focused_ws=input_workspace, index=index))
+
+    return processed_spectra
\ No newline at end of file
diff --git a/scripts/Diffraction/isis_powder/pearl.py b/scripts/Diffraction/isis_powder/pearl.py
index 849f1a346a9ee80d44eca79837653caafd7ffe8e..64350f84a79ff5f13d7849e95b929da232cbfb8a 100644
--- a/scripts/Diffraction/isis_powder/pearl.py
+++ b/scripts/Diffraction/isis_powder/pearl.py
@@ -31,7 +31,9 @@ class Pearl(AbstractInst):
                  input_file_ext=".raw", tt_mode="TT88"):
 
         super(Pearl, self).__init__(user_name=user_name, calibration_dir=calibration_dir, raw_data_dir=raw_data_dir,
-                                    output_dir=output_dir, default_input_ext=input_file_ext, tt_mode=tt_mode)
+                                    output_dir=output_dir, default_input_ext=input_file_ext)
+
+        self._tt_mode = tt_mode
 
         # This advanced option disables appending the current cycle to the
         # path given for raw files.
@@ -56,9 +58,6 @@ class Pearl(AbstractInst):
     def _get_lambda_range(self):
         return self._lambda_lower, self._lambda_upper
 
-    def _get_focus_tof_binning(self):
-        return self._focus_tof_binning
-
     def _get_create_van_tof_binning(self):
         return_dict = {"1": self._create_van_first_tof_binning,
                        "2": self._create_van_second_tof_binning}
@@ -69,7 +68,7 @@ class Pearl(AbstractInst):
     def _get_calibration_full_paths(self, cycle):
 
         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, tt_mode=self._tt_mode)
 
         calibration_dir = self.calibration_dir
 
@@ -234,6 +233,27 @@ class Pearl(AbstractInst):
         ws_to_rebin = rebinned_ws
         return ws_to_rebin
 
+    def correct_sample_vanadium(self, focused_ws, index, vanadium_ws=None):
+        data_ws = mantid.ExtractSingleSpectrum(InputWorkspace=focused_ws, WorkspaceIndex=index)
+        data_ws = mantid.ConvertUnits(InputWorkspace=data_ws, Target="TOF")
+        data_ws = mantid.Rebin(InputWorkspace=data_ws, Params=self._focus_tof_binning)
+
+        if vanadium_ws:
+            data_processed = "van_processed" + str(index)  # Workaround for Mantid overwriting the WS in a loop
+            vanadium_ws = mantid.Rebin(InputWorkspace=vanadium_ws, Params=self._focus_tof_binning)
+            data_ws = mantid.Divide(LHSWorkspace=data_ws, RHSWorkspace=vanadium_ws, OutputWorkspace=data_processed)
+        else:
+            data_processed = "processed-" + str(index)
+
+        mantid.CropWorkspace(InputWorkspace=data_ws, XMin=0.1, OutputWorkspace=data_processed)
+
+        if vanadium_ws:
+            mantid.Scale(InputWorkspace=data_processed, Factor=10, OutputWorkspace=data_processed)
+
+        common.remove_intermediate_workspace(data_ws)
+
+        return data_processed
+
     # Implementation of instrument specific steps
 
     def _run_attenuate_workspace(self, input_workspace):
@@ -334,29 +354,6 @@ class Pearl(AbstractInst):
             mspectra = 1
         return mspectra
 
-    def _perform_focus_loading(self, run_number, input_workspace, perform_vanadium_norm):
-        processed_spectra = []
-
-        cycle_information = self._get_cycle_information(run_number=run_number)
-        input_file_paths = self._get_calibration_full_paths(cycle=cycle_information["cycle"])
-
-        alg_range, save_range = self._get_instrument_alg_save_ranges(cycle_information["instrument_version"])
-
-        for index in range(0, alg_range):
-            if perform_vanadium_norm:
-                vanadium_ws = mantid.LoadNexus(Filename=input_file_paths["vanadium"], EntryNumber=index + 1)
-                van_rebinned = mantid.Rebin(InputWorkspace=vanadium_ws, Params=self._get_focus_tof_binning())
-
-                processed_spectra.append(calc_calibration_with_vanadium(input_workspace, index, van_rebinned,
-                                                                        tof_binning=self._focus_tof_binning))
-
-                common.remove_intermediate_workspace(vanadium_ws)
-                common.remove_intermediate_workspace(van_rebinned)
-            else:
-                processed_spectra.append(calc_calibration_without_vanadium(input_workspace, index))
-
-        return processed_spectra
-
     # Support for old API - This can be removed when PEARL_routines is removed
     def _old_api_constructor_set(self, user_name=None, calibration_dir=None, raw_data_dir=None, output_dir=None,
                                  input_file_ext=None, tt_mode=None):
@@ -399,6 +396,9 @@ class Pearl(AbstractInst):
     def _PEARL_filename_is_full_path(self):
         return self._old_api_uses_full_paths
 
+    def _get_focus_tof_binning(self):
+        return self._focus_tof_binning
+
 
 def _old_api_get_file_name(in_path):
     # Gets the filename from a full path
@@ -519,29 +519,3 @@ def _spline_old_instrument_background(in_workspace):
                                                        WorkspaceIndex=i, NCoeff=coeff))
     common.remove_intermediate_workspace(van_stripped)
     return splined_ws_list
-
-
-def calc_calibration_without_vanadium(focused_ws, index, instrument):
-    focus_spectrum = mantid.ExtractSingleSpectrum(InputWorkspace=focused_ws, WorkspaceIndex=index)
-    focus_spectrum = mantid.ConvertUnits(InputWorkspace=focus_spectrum, Target="TOF")
-    focus_spectrum = mantid.Rebin(InputWorkspace=focus_spectrum, Params=instrument.tof_binning)
-    focus_calibrated = mantid.CropWorkspace(InputWorkspace=focus_spectrum, XMin=0.1)
-    return focus_calibrated
-
-
-def calc_calibration_with_vanadium(focused_ws, index, vanadium_ws, tof_binning):
-    data_ws = mantid.ExtractSingleSpectrum(InputWorkspace=focused_ws, WorkspaceIndex=index)
-    data_ws = mantid.ConvertUnits(InputWorkspace=data_ws, Target="TOF")
-    data_ws = mantid.Rebin(InputWorkspace=data_ws, Params=tof_binning)
-
-    data_processed = "van_processed" + str(index)  # Workaround for Mantid overwriting the WS in a loop
-
-    mantid.Divide(LHSWorkspace=data_ws, RHSWorkspace=vanadium_ws, OutputWorkspace=data_processed)
-    mantid.CropWorkspace(InputWorkspace=data_processed, XMin=0.1, OutputWorkspace=data_processed)
-    mantid.Scale(InputWorkspace=data_processed, Factor=10, OutputWorkspace=data_processed)
-
-    common.remove_intermediate_workspace(data_ws)
-
-    return data_processed
-
-
diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py
index 5752a2f32298a854b91185744ed7238abf5bb9d0..be0d90af90cf2632afc7ae84b29661d9c0e226f9 100644
--- a/scripts/Diffraction/isis_powder/polaris.py
+++ b/scripts/Diffraction/isis_powder/polaris.py
@@ -1,7 +1,6 @@
 from __future__ import (absolute_import, division, print_function)
 
 import mantid.simpleapi as mantid
-import os
 
 from isis_powder.abstract_inst import AbstractInst
 from isis_powder.polaris_routines import polaris_calib_factory
@@ -24,7 +23,7 @@ class Polaris(AbstractInst):
                  input_file_ext=".raw", sample_empty_name=None):  # TODO move TT_mode PEARL specific
 
         super(Polaris, self).__init__(user_name=user_name, calibration_dir=calibration_dir, raw_data_dir=raw_data_dir,
-                                      output_dir=output_dir, default_input_ext=input_file_ext, tt_mode=None)
+                                      output_dir=output_dir, default_input_ext=input_file_ext)
 
         self._masking_file_name = "VanaPeaks.dat"
         self._sample_empty = sample_empty_name
@@ -116,8 +115,14 @@ class Polaris(AbstractInst):
             common.remove_intermediate_workspace(empty_sample)
         return input_sample
 
-    def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number):
-        solid_angle_vanadium_ws = common._load_raw_files(run_number=vanadium_number, instrument=self)
+    def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number=None, vanadium_path=None):
+        assert(vanadium_number or vanadium_path)
+
+        if vanadium_number:
+            solid_angle_vanadium_ws = common._load_raw_files(run_number=vanadium_number, instrument=self)
+        else:
+            solid_angle_vanadium_ws = mantid.Load(Filename=vanadium_path)
+
         solid_angle_vanadium_ws = self._normalise_ws(solid_angle_vanadium_ws)
         corrections = self._calculate_solid_angle_efficiency_corrections(solid_angle_vanadium_ws)
 
@@ -129,7 +134,9 @@ class Polaris(AbstractInst):
         return ws_to_correct
 
     def _focus_processing(self, run_number, input_workspace, perform_vanadium_norm):
-        raise NotImplementedError("Need to do focus processing")
+        self._get_cycle_information(run_number=run_number)
+
+
 
     def _spline_background(self, focused_vanadium_ws, spline_number, instrument_version=''):
 
@@ -245,3 +252,6 @@ def _apply_masking(workspaces_to_mask, mask_list):
         index += 1
 
     return output_workspaces
+
+
+def _divide_sample_vanadium_splines(sample_ws, vanadium_splines_ws)
\ No newline at end of file