diff --git a/scripts/Diffraction/isis_powder/abstract_inst.py b/scripts/Diffraction/isis_powder/abstract_inst.py
index 759fda4b9a13345010b2f12e7a472f093d8bc6d4..954b17fd9e0cfa11bf2fa946d7aec0fbc4e70df9 100644
--- a/scripts/Diffraction/isis_powder/abstract_inst.py
+++ b/scripts/Diffraction/isis_powder/abstract_inst.py
@@ -262,7 +262,7 @@ class AbstractInst(object):
     def _subtract_sample_empty(self, input_sample):
         return input_sample
 
-    def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number=None, vanadium_path=None):
+    def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number=None, calibration_dict=None):
         return ws_to_correct
 
     def _load_monitor(self, number, cycle):
diff --git a/scripts/Diffraction/isis_powder/focus.py b/scripts/Diffraction/isis_powder/focus.py
index a22598b898a13b322b938a6efb37837ee4605714..da980a745a0f0332df31adea334fb40428d5fca2 100644
--- a/scripts/Diffraction/isis_powder/focus.py
+++ b/scripts/Diffraction/isis_powder/focus.py
@@ -25,7 +25,7 @@ def _run_focus(instrument, run_number, perform_attenuation, perform_vanadium_nor
 
     # 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_path=calibration_file_paths["vanadium"])
+                                                                    calibration_dict=calibration_file_paths)
 
     focused_ws = mantid.DiffractionFocussing(InputWorkspace=input_workspace,
                                              GroupingFileName=calibration_file_paths["grouping"])
diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py
index 1d450e47c2854e0d8ef33b3f7bebd2ac1588dee0..f7149f37e26d562922e70be213da4b609d475e13 100644
--- a/scripts/Diffraction/isis_powder/polaris.py
+++ b/scripts/Diffraction/isis_powder/polaris.py
@@ -120,24 +120,34 @@ class Polaris(AbstractInst):
             common.remove_intermediate_workspace(empty_sample)
         return input_sample
 
-    def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number=None, vanadium_path=None):
-        assert(vanadium_number or vanadium_path)
+    def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number=None, calibration_dict=None):
+        assert(vanadium_number or calibration_dict)
 
+        if not calibration_dict or not os.path.isfile(calibration_dict["solid_angle_corr"]):
+            corrections = self.generate_solid_angle_corrections(calibration_dict, vanadium_number)
+        else:
+            corrections = mantid.Load(Filename=calibration_dict["solid_angle_corr"])
+
+        corrected_ws = mantid.Divide(LHSWorkspace=ws_to_correct, RHSWorkspace=corrections)
+        common.remove_intermediate_workspace(corrections)
+        common.remove_intermediate_workspace(ws_to_correct)
+        ws_to_correct = corrected_ws
+        return ws_to_correct
+
+    def generate_solid_angle_corrections(self, calibration_dict, vanadium_number):
         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 = mantid.Load(Filename=calibration_dict["vanadium"])
         normalised_vanadium_ws = self._normalise_ws(solid_angle_vanadium_ws)
         corrections = self._calculate_solid_angle_efficiency_corrections(normalised_vanadium_ws)
 
-        corrected_ws = mantid.Divide(LHSWorkspace=ws_to_correct, RHSWorkspace=corrections)
+        if calibration_dict:
+            mantid.SaveNexusProcessed(InputWorkspace=corrections, Filename=calibration_dict["solid_angle_corr"])
+
         common.remove_intermediate_workspace(solid_angle_vanadium_ws)
         common.remove_intermediate_workspace(normalised_vanadium_ws)
-        common.remove_intermediate_workspace(corrections)
-        common.remove_intermediate_workspace(ws_to_correct)
-        ws_to_correct = corrected_ws
-        return ws_to_correct
+        return corrections
 
     def correct_sample_vanadium(self, focused_ws, index, vanadium_ws=None):
         spectra_name = "sample_ws-" + str(index + 1)