diff --git a/Framework/DataHandling/test/LoadNexusProcessedTest.h b/Framework/DataHandling/test/LoadNexusProcessedTest.h
index e2cbabd8b1fa7f0acb46f268ccf8fe2514d3178b..caca993959646c576738507b002872f6a05280b9 100644
--- a/Framework/DataHandling/test/LoadNexusProcessedTest.h
+++ b/Framework/DataHandling/test/LoadNexusProcessedTest.h
@@ -1010,163 +1010,16 @@ public:
     }
   }
 
-  void test_SaveAndLoadOnHistogramWS() {
-    // Test SaveNexusProcessed/LoadNexusProcessed on a histogram workspace
-
-    // Create histogram workspace with two spectra and 4 points
-    std::vector<double> x1 = boost::assign::list_of(1)(2)(3);
-    std::vector<double> y1 = boost::assign::list_of(1)(2);
-    std::vector<double> x2 = boost::assign::list_of(1)(2)(3);
-    std::vector<double> y2 = boost::assign::list_of(1)(2);
-    MatrixWorkspace_sptr inputWs = WorkspaceFactory::Instance().create(
-        "Workspace2D", 2, x1.size(), y1.size());
-    inputWs->dataX(0) = x1;
-    inputWs->dataX(1) = x2;
-    inputWs->dataY(0) = y1;
-    inputWs->dataY(1) = y2;
-
-    // Save workspace
-    IAlgorithm_sptr save =
-        AlgorithmManager::Instance().create("SaveNexusProcessed");
-    save->initialize();
-    TS_ASSERT(save->isInitialized());
-    TS_ASSERT_THROWS_NOTHING(save->setProperty("InputWorkspace", inputWs));
-    TS_ASSERT_THROWS_NOTHING(save->setPropertyValue(
-        "Filename", "TestSaveAndLoadNexusProcessed.nxs"));
-    TS_ASSERT_THROWS_NOTHING(save->execute());
-
-    // Load workspace
-    IAlgorithm_sptr load =
-        AlgorithmManager::Instance().create("LoadNexusProcessed");
-    load->initialize();
-    TS_ASSERT(load->isInitialized());
-    TS_ASSERT_THROWS_NOTHING(load->setPropertyValue(
-        "Filename", "TestSaveAndLoadNexusProcessed.nxs"));
-    TS_ASSERT_THROWS_NOTHING(
-        load->setPropertyValue("OutputWorkspace", "output"));
-    TS_ASSERT_THROWS_NOTHING(load->execute());
-
-    // Check spectra in loaded workspace
-    MatrixWorkspace_sptr outputWs =
-        AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("output");
-    TS_ASSERT_EQUALS(inputWs->readX(0), outputWs->readX(0));
-    TS_ASSERT_EQUALS(inputWs->readX(1), outputWs->readX(1));
-    TS_ASSERT_EQUALS(inputWs->readY(0), outputWs->readY(0));
-    TS_ASSERT_EQUALS(inputWs->readY(1), outputWs->readY(1));
-    TS_ASSERT_EQUALS(inputWs->readE(0), outputWs->readE(0));
-    TS_ASSERT_EQUALS(inputWs->readE(1), outputWs->readE(1));
-
-    // Remove workspace and saved nexus file
-    AnalysisDataService::Instance().remove("output");
-    Poco::File("TestSaveAndLoadNexusProcessed.nxs").remove();
-  }
+  void test_SaveAndLoadOnHistogramWS() { doTestLoadAndSaveHistogramWS(false); }
 
   void test_SaveAndLoadOnHistogramWSwithXErrors() {
-    // Test SaveNexusProcessed/LoadNexusProcessed on a histogram workspace with x errors
-
-    // Create histogram workspace with two spectra and 4 points
-    std::vector<double> x1 = boost::assign::list_of(1)(2)(3);
-    std::vector<double> dx1 = boost::assign::list_of(3)(2)(1);
-    std::vector<double> y1 = boost::assign::list_of(1)(2);
-    std::vector<double> x2 = boost::assign::list_of(1)(2)(3);
-    std::vector<double> dx2 = boost::assign::list_of(3)(2)(1);
-    std::vector<double> y2 = boost::assign::list_of(1)(2);
-    MatrixWorkspace_sptr inputWs = WorkspaceFactory::Instance().create(
-        "Workspace2D", 2, x1.size(), y1.size());
-    inputWs->dataX(0) = x1;
-    inputWs->dataX(1) = x2;
-    inputWs->dataY(0) = y1;
-    inputWs->dataY(1) = y2;
-    inputWs->dataDx(0) = dx1;
-    inputWs->dataDx(1) = dx2;
-
-    // Save workspace
-    IAlgorithm_sptr save =
-        AlgorithmManager::Instance().create("SaveNexusProcessed");
-    save->initialize();
-    TS_ASSERT(save->isInitialized());
-    TS_ASSERT_THROWS_NOTHING(save->setProperty("InputWorkspace", inputWs));
-    TS_ASSERT_THROWS_NOTHING(save->setPropertyValue(
-        "Filename", "TestSaveAndLoadNexusProcessed.nxs"));
-    TS_ASSERT_THROWS_NOTHING(save->execute());
-
-    // Load workspace
-    IAlgorithm_sptr load =
-        AlgorithmManager::Instance().create("LoadNexusProcessed");
-    load->initialize();
-    TS_ASSERT(load->isInitialized());
-    TS_ASSERT_THROWS_NOTHING(load->setPropertyValue(
-        "Filename", "TestSaveAndLoadNexusProcessed.nxs"));
-    TS_ASSERT_THROWS_NOTHING(
-        load->setPropertyValue("OutputWorkspace", "output"));
-    TS_ASSERT_THROWS_NOTHING(load->execute());
-
-    // Check spectra in loaded workspace
-    MatrixWorkspace_sptr outputWs =
-        AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("output");
-    TS_ASSERT_EQUALS(inputWs->readX(0), outputWs->readX(0));
-    TS_ASSERT_EQUALS(inputWs->readX(1), outputWs->readX(1));
-    TS_ASSERT_EQUALS(inputWs->readY(0), outputWs->readY(0));
-    TS_ASSERT_EQUALS(inputWs->readY(1), outputWs->readY(1));
-    TS_ASSERT_EQUALS(inputWs->readE(0), outputWs->readE(0));
-    TS_ASSERT_EQUALS(inputWs->readE(1), outputWs->readE(1));
-    TS_ASSERT_EQUALS(inputWs->readDx(0), outputWs->readDx(0));
-    TS_ASSERT_EQUALS(inputWs->readDx(1), outputWs->readDx(1));
-
-    // Remove workspace and saved nexus file
-    AnalysisDataService::Instance().remove("output");
-    Poco::File("TestSaveAndLoadNexusProcessed.nxs").remove();
+    doTestLoadAndSaveHistogramWS(true);
   }
 
-  void test_SaveAndLoadOnPointLikeWS() {
-    // Test SaveNexusProcessed/LoadNexusProcessed on a point-like workspace
-
-    // Create histogram workspace with two spectra and 4 points
-    std::vector<double> x1 = boost::assign::list_of(1)(2)(3);
-    std::vector<double> y1 = boost::assign::list_of(1)(2)(3);
-    std::vector<double> x2 = boost::assign::list_of(10)(20)(30);
-    std::vector<double> y2 = boost::assign::list_of(10)(20)(30);
-    MatrixWorkspace_sptr inputWs = WorkspaceFactory::Instance().create(
-        "Workspace2D", 2, x1.size(), y1.size());
-    inputWs->dataX(0) = x1;
-    inputWs->dataX(1) = x2;
-    inputWs->dataY(0) = y1;
-    inputWs->dataY(1) = y2;
-
-    // Save workspace
-    IAlgorithm_sptr save =
-        AlgorithmManager::Instance().create("SaveNexusProcessed");
-    save->initialize();
-    TS_ASSERT(save->isInitialized());
-    TS_ASSERT_THROWS_NOTHING(save->setProperty("InputWorkspace", inputWs));
-    TS_ASSERT_THROWS_NOTHING(save->setPropertyValue(
-        "Filename", "TestSaveAndLoadNexusProcessed.nxs"));
-    TS_ASSERT_THROWS_NOTHING(save->execute());
-
-    // Load workspace
-    IAlgorithm_sptr load =
-        AlgorithmManager::Instance().create("LoadNexusProcessed");
-    load->initialize();
-    TS_ASSERT(load->isInitialized());
-    TS_ASSERT_THROWS_NOTHING(load->setPropertyValue(
-        "Filename", "TestSaveAndLoadNexusProcessed.nxs"));
-    TS_ASSERT_THROWS_NOTHING(
-        load->setPropertyValue("OutputWorkspace", "output"));
-    TS_ASSERT_THROWS_NOTHING(load->execute());
-
-    // Check spectra in loaded workspace
-    MatrixWorkspace_sptr outputWs =
-        AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("output");
-    TS_ASSERT_EQUALS(inputWs->readX(0), outputWs->readX(0));
-    TS_ASSERT_EQUALS(inputWs->readX(1), outputWs->readX(1));
-    TS_ASSERT_EQUALS(inputWs->readY(0), outputWs->readY(0));
-    TS_ASSERT_EQUALS(inputWs->readY(1), outputWs->readY(1));
-    TS_ASSERT_EQUALS(inputWs->readE(0), outputWs->readE(0));
-    TS_ASSERT_EQUALS(inputWs->readE(1), outputWs->readE(1));
+  void test_SaveAndLoadOnPointLikeWS() { doTestLoadAndSavePointWS(false); }
 
-    // Remove workspace and saved nexus file
-    AnalysisDataService::Instance().remove("output");
-    Poco::File("TestSaveAndLoadNexusProcessed.nxs").remove();
+  void test_SaveAndLoadOnPointLikeWSWithXErrors() {
+    doTestLoadAndSavePointWS(true);
   }
 
   void do_load_multiperiod_workspace(bool fast) {
@@ -1317,6 +1170,131 @@ private:
       Poco::File(m_savedTmpEventFile).remove();
   }
 
+  void doTestLoadAndSaveHistogramWS(bool useXErrors = false) {
+    // Test SaveNexusProcessed/LoadNexusProcessed on a histogram workspace with
+    // x errors
+
+    // Create histogram workspace with two spectra and 4 points
+    std::vector<double> x1 = boost::assign::list_of(1)(2)(3);
+    std::vector<double> dx1 = boost::assign::list_of(3)(2)(1);
+    std::vector<double> y1 = boost::assign::list_of(1)(2);
+    std::vector<double> x2 = boost::assign::list_of(1)(2)(3);
+    std::vector<double> dx2 = boost::assign::list_of(3)(2)(1);
+    std::vector<double> y2 = boost::assign::list_of(1)(2);
+    MatrixWorkspace_sptr inputWs = WorkspaceFactory::Instance().create(
+        "Workspace2D", 2, x1.size(), y1.size());
+    inputWs->dataX(0) = x1;
+    inputWs->dataX(1) = x2;
+    inputWs->dataY(0) = y1;
+    inputWs->dataY(1) = y2;
+    if (useXErrors) {
+      inputWs->dataDx(0) = dx1;
+      inputWs->dataDx(1) = dx2;
+    }
+
+    // Save workspace
+    IAlgorithm_sptr save =
+        AlgorithmManager::Instance().create("SaveNexusProcessed");
+    save->initialize();
+    TS_ASSERT(save->isInitialized());
+    TS_ASSERT_THROWS_NOTHING(save->setProperty("InputWorkspace", inputWs));
+    TS_ASSERT_THROWS_NOTHING(save->setPropertyValue(
+        "Filename", "TestSaveAndLoadNexusProcessed.nxs"));
+    TS_ASSERT_THROWS_NOTHING(save->execute());
+
+    // Load workspace
+    IAlgorithm_sptr load =
+        AlgorithmManager::Instance().create("LoadNexusProcessed");
+    load->initialize();
+    TS_ASSERT(load->isInitialized());
+    TS_ASSERT_THROWS_NOTHING(load->setPropertyValue(
+        "Filename", "TestSaveAndLoadNexusProcessed.nxs"));
+    TS_ASSERT_THROWS_NOTHING(
+        load->setPropertyValue("OutputWorkspace", "output"));
+    TS_ASSERT_THROWS_NOTHING(load->execute());
+
+    // Check spectra in loaded workspace
+    MatrixWorkspace_sptr outputWs =
+        AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("output");
+    TS_ASSERT_EQUALS(inputWs->readX(0), outputWs->readX(0));
+    TS_ASSERT_EQUALS(inputWs->readX(1), outputWs->readX(1));
+    TS_ASSERT_EQUALS(inputWs->readY(0), outputWs->readY(0));
+    TS_ASSERT_EQUALS(inputWs->readY(1), outputWs->readY(1));
+    TS_ASSERT_EQUALS(inputWs->readE(0), outputWs->readE(0));
+    TS_ASSERT_EQUALS(inputWs->readE(1), outputWs->readE(1));
+    if (useXErrors) {
+      TSM_ASSERT("Should have an x error", outputWs->hasDx(0));
+      TS_ASSERT_EQUALS(inputWs->readDx(0), outputWs->readDx(0));
+      TS_ASSERT_EQUALS(inputWs->readDx(1), outputWs->readDx(1));
+    }
+
+    // Remove workspace and saved nexus file
+    AnalysisDataService::Instance().remove("output");
+    Poco::File("TestSaveAndLoadNexusProcessed.nxs").remove();
+  }
+
+  void doTestLoadAndSavePointWS(bool useXErrors = false) {
+    // Test SaveNexusProcessed/LoadNexusProcessed on a point-like workspace
+
+    // Create histogram workspace with two spectra and 4 points
+    std::vector<double> x1 = boost::assign::list_of(1)(2)(3);
+    std::vector<double> dx1 = boost::assign::list_of(3)(2)(1);
+    std::vector<double> y1 = boost::assign::list_of(1)(2)(3);
+    std::vector<double> x2 = boost::assign::list_of(10)(20)(30);
+    std::vector<double> dx2 = boost::assign::list_of(30)(22)(10);
+    std::vector<double> y2 = boost::assign::list_of(10)(20)(30);
+    MatrixWorkspace_sptr inputWs = WorkspaceFactory::Instance().create(
+        "Workspace2D", 2, x1.size(), y1.size());
+    inputWs->dataX(0) = x1;
+    inputWs->dataX(1) = x2;
+    inputWs->dataY(0) = y1;
+    inputWs->dataY(1) = y2;
+    if (useXErrors) {
+      inputWs->dataDx(0) = dx1;
+      inputWs->dataDx(1) = dx2;
+    }
+
+    // Save workspace
+    IAlgorithm_sptr save =
+        AlgorithmManager::Instance().create("SaveNexusProcessed");
+    save->initialize();
+    TS_ASSERT(save->isInitialized());
+    TS_ASSERT_THROWS_NOTHING(save->setProperty("InputWorkspace", inputWs));
+    TS_ASSERT_THROWS_NOTHING(save->setPropertyValue(
+        "Filename", "TestSaveAndLoadNexusProcessed.nxs"));
+    TS_ASSERT_THROWS_NOTHING(save->execute());
+
+    // Load workspace
+    IAlgorithm_sptr load =
+        AlgorithmManager::Instance().create("LoadNexusProcessed");
+    load->initialize();
+    TS_ASSERT(load->isInitialized());
+    TS_ASSERT_THROWS_NOTHING(load->setPropertyValue(
+        "Filename", "TestSaveAndLoadNexusProcessed.nxs"));
+    TS_ASSERT_THROWS_NOTHING(
+        load->setPropertyValue("OutputWorkspace", "output"));
+    TS_ASSERT_THROWS_NOTHING(load->execute());
+
+    // Check spectra in loaded workspace
+    MatrixWorkspace_sptr outputWs =
+        AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("output");
+    TS_ASSERT_EQUALS(inputWs->readX(0), outputWs->readX(0));
+    TS_ASSERT_EQUALS(inputWs->readX(1), outputWs->readX(1));
+    TS_ASSERT_EQUALS(inputWs->readY(0), outputWs->readY(0));
+    TS_ASSERT_EQUALS(inputWs->readY(1), outputWs->readY(1));
+    TS_ASSERT_EQUALS(inputWs->readE(0), outputWs->readE(0));
+    TS_ASSERT_EQUALS(inputWs->readE(1), outputWs->readE(1));
+    if (useXErrors) {
+      TSM_ASSERT("Should have an x error", outputWs->hasDx(0));
+      TS_ASSERT_EQUALS(inputWs->readDx(0), outputWs->readDx(0));
+      TS_ASSERT_EQUALS(inputWs->readDx(1), outputWs->readDx(1));
+    }
+
+    // Remove workspace and saved nexus file
+    AnalysisDataService::Instance().remove("output");
+    Poco::File("TestSaveAndLoadNexusProcessed.nxs").remove();
+  }
+
   std::string testFile, output_ws;
   /// Saved using SaveNexusProcessed and re-used in several load event tests
   std::string m_savedTmpEventFile;