diff --git a/Framework/Algorithms/src/ReflectometryReductionOne2.cpp b/Framework/Algorithms/src/ReflectometryReductionOne2.cpp
index 97a36d3ee336942fdb3b8049b6f3a361b03cc8ed..95faf4066cfdea7db84ad0f69113589a1332a4fe 100644
--- a/Framework/Algorithms/src/ReflectometryReductionOne2.cpp
+++ b/Framework/Algorithms/src/ReflectometryReductionOne2.cpp
@@ -371,8 +371,8 @@ void ReflectometryReductionOne2::exec() {
   }
 
   // Transmission correction
-  Property *transmissionProperty = getProperty("FirstTransmissionRun");
-  if (!transmissionProperty->isDefault()) {
+  MatrixWorkspace_sptr transRun = getProperty("FirstTransmissionRun");
+  if (transRun) {
     IvsLam = transmissionCorrection(IvsLam);
   } else if (getPropertyValue("CorrectionAlgorithm") != "None") {
     IvsLam = algorithmicCorrection(IvsLam);
@@ -448,7 +448,7 @@ MatrixWorkspace_sptr ReflectometryReductionOne2::makeDetectorWS(
   auto groupDirectBeamAlg = this->createChildAlgorithm("GroupDetectors");
   groupDirectBeamAlg->initialize();
   groupDirectBeamAlg->setProperty("GroupingPattern", processingCommands);
-  groupDirectBeamAlg->setProperty("InputWorkspace", detectorWS);
+  groupDirectBeamAlg->setProperty("InputWorkspace", inputWS);
   groupDirectBeamAlg->execute();
   MatrixWorkspace_sptr directBeamWS =
       groupDirectBeamAlg->getProperty("OutputWorkspace");
@@ -527,55 +527,58 @@ ReflectometryReductionOne2::makeMonitorWS(MatrixWorkspace_sptr inputWS) {
 MatrixWorkspace_sptr ReflectometryReductionOne2::transmissionCorrection(
     MatrixWorkspace_sptr detectorWS) {
 
-  auto alg = this->createChildAlgorithm("CreateTransmissionWorkspace");
-  alg->initialize();
-  alg->setPropertyValue("FirstTransmissionRun",
-                        getPropertyValue("FirstTransmissionRun"));
-  alg->setPropertyValue("SecondTransmissionRun",
-                        getPropertyValue("SecondTransmissionRun"));
-  alg->setPropertyValue("Params", getPropertyValue("Params"));
-  alg->setPropertyValue("StartOverlap", getPropertyValue("StartOverlap"));
-  alg->setPropertyValue("EndOverlap", getPropertyValue("EndOverlap"));
-  alg->setPropertyValue("I0MonitorIndex", getPropertyValue("I0MonitorIndex"));
-  alg->setPropertyValue("WavelengthMin", getPropertyValue("WavelengthMin"));
-  alg->setPropertyValue("WavelengthMax", getPropertyValue("WavelengthMax"));
-  alg->setPropertyValue("MonitorBackgroundWavelengthMin",
-                        getPropertyValue("MonitorBackgroundWavelengthMin"));
-  alg->setPropertyValue("MonitorBackgroundWavelengthMax",
-                        getPropertyValue("MonitorBackgroundWavelengthMax"));
-  alg->setPropertyValue("MonitorIntegrationWavelengthMin",
-                        getPropertyValue("MonitorIntegrationWavelengthMin"));
-  alg->setPropertyValue("MonitorIntegrationWavelengthMax",
-                        getPropertyValue("MonitorIntegrationWavelengthMax"));
-
-  // Processing instructions for transmission workspace
-  std::string transmissionCommands = getProperty("ProcessingInstructions");
   const bool strictSpectrumChecking = getProperty("StrictSpectrumChecking");
 
-  if (strictSpectrumChecking) {
-    // If we have strict spectrum checking, the processing commands need to be
-    // made from the
-    // numerator workspace AND the transmission workspace based on matching
-    // spectrum numbers.
-    MatrixWorkspace_sptr firstTransmissonWS =
-        getProperty("FirstTransmissionRun");
-    transmissionCommands =
-        createProcessingCommandsFromDetectorWS(detectorWS, firstTransmissonWS);
-  }
+  MatrixWorkspace_sptr transmissionWS = getProperty("FirstTransmissionRun");
+  Unit_const_sptr xUnit = transmissionWS->getAxis(0)->unit();
+
+  if (xUnit->unitID() == "TOF") {
 
-  alg->setProperty("ProcessingInstructions", transmissionCommands);
-  alg->execute();
-  MatrixWorkspace_sptr transWS = alg->getProperty("OutputWorkspace");
+    // Processing instructions for transmission workspace
+    std::string transmissionCommands = getProperty("ProcessingInstructions");
+    if (strictSpectrumChecking) {
+      // If we have strict spectrum checking, the processing commands need to be
+      // made from the
+      // numerator workspace AND the transmission workspace based on matching
+      // spectrum numbers.
+      transmissionCommands =
+          createProcessingCommandsFromDetectorWS(detectorWS, transmissionWS);
+    }
+
+    MatrixWorkspace_sptr secondTransmissionWS =
+        getProperty("SecondTransmissionRun");
+    auto alg = this->createChildAlgorithm("CreateTransmissionWorkspace");
+    alg->initialize();
+    alg->setProperty("FirstTransmissionRun", transmissionWS);
+    alg->setProperty("SecondTransmissionRun", secondTransmissionWS);
+    alg->setPropertyValue("Params", getPropertyValue("Params"));
+    alg->setPropertyValue("StartOverlap", getPropertyValue("StartOverlap"));
+    alg->setPropertyValue("EndOverlap", getPropertyValue("EndOverlap"));
+    alg->setPropertyValue("I0MonitorIndex", getPropertyValue("I0MonitorIndex"));
+    alg->setPropertyValue("WavelengthMin", getPropertyValue("WavelengthMin"));
+    alg->setPropertyValue("WavelengthMax", getPropertyValue("WavelengthMax"));
+    alg->setPropertyValue("MonitorBackgroundWavelengthMin",
+                          getPropertyValue("MonitorBackgroundWavelengthMin"));
+    alg->setPropertyValue("MonitorBackgroundWavelengthMax",
+                          getPropertyValue("MonitorBackgroundWavelengthMax"));
+    alg->setPropertyValue("MonitorIntegrationWavelengthMin",
+                          getPropertyValue("MonitorIntegrationWavelengthMin"));
+    alg->setPropertyValue("MonitorIntegrationWavelengthMax",
+                          getPropertyValue("MonitorIntegrationWavelengthMax"));
+    alg->setProperty("ProcessingInstructions", transmissionCommands);
+    alg->execute();
+    transmissionWS = alg->getProperty("OutputWorkspace");
+  }
 
   // Rebin the transmission run to be the same as the input.
   auto rebinToWorkspaceAlg = this->createChildAlgorithm("RebinToWorkspace");
   rebinToWorkspaceAlg->initialize();
   rebinToWorkspaceAlg->setProperty("WorkspaceToMatch", detectorWS);
-  rebinToWorkspaceAlg->setProperty("WorkspaceToRebin", transWS);
+  rebinToWorkspaceAlg->setProperty("WorkspaceToRebin", transmissionWS);
   rebinToWorkspaceAlg->execute();
-  transWS = rebinToWorkspaceAlg->getProperty("OutputWorkspace");
+  transmissionWS = rebinToWorkspaceAlg->getProperty("OutputWorkspace");
 
-  const bool match = verifySpectrumMaps(detectorWS, transWS);
+  const bool match = verifySpectrumMaps(detectorWS, transmissionWS);
   if (!match) {
     std::string message = "Spectrum maps between workspaces do NOT match up.";
     if (strictSpectrumChecking) {
@@ -585,7 +588,7 @@ MatrixWorkspace_sptr ReflectometryReductionOne2::transmissionCorrection(
     }
   }
 
-  MatrixWorkspace_sptr normalized = divide(detectorWS, transWS);
+  MatrixWorkspace_sptr normalized = divide(detectorWS, transmissionWS);
   return normalized;
 }
 
diff --git a/Framework/Algorithms/test/ReflectometryReductionOne2Test.h b/Framework/Algorithms/test/ReflectometryReductionOne2Test.h
index 812009165c9acde55039410d680088a3915b1d4c..bec3d0a9c756ea94558fd39c7e882ed75e2e3ba5 100644
--- a/Framework/Algorithms/test/ReflectometryReductionOne2Test.h
+++ b/Framework/Algorithms/test/ReflectometryReductionOne2Test.h
@@ -9,6 +9,7 @@
 #include "MantidAPI/MatrixWorkspace.h"
 #include "MantidHistogramData/HistogramY.h"
 #include "MantidTestHelpers/WorkspaceCreationHelper.h"
+
 #include <algorithm>
 
 using namespace Mantid::API;
@@ -36,10 +37,9 @@ public:
     m_multiDetectorWS =
         create2DWorkspaceWithReflectometryInstrumentMultiDetector();
     // A workspace in wavelength
-    m_wavelengthWS = Create2DWorkspace154(1, 10, true);
-    m_wavelengthWS->setInstrument(m_multiDetectorWS->getInstrument());
+    m_wavelengthWS =
+        create2DWorkspaceWithReflectometryInstrumentMultiDetector();
     m_wavelengthWS->getAxis(0)->setUnit("Wavelength");
-
   }
 
   void test_IvsLam() {
@@ -63,8 +63,8 @@ public:
     TS_ASSERT(outLam);
     TS_ASSERT_EQUALS(outLam->getNumberHistograms(), 1);
     TS_ASSERT_EQUALS(outLam->blocksize(), 8);
-    TS_ASSERT(outLam->readX(0)[0] >= 1.5);
-    TS_ASSERT(outLam->readX(0)[7] <= 15.0);
+    TS_ASSERT(outLam->x(0)[0] >= 1.5);
+    TS_ASSERT(outLam->x(0)[7] <= 15.0);
     TS_ASSERT_DELTA(outLam->y(0)[0], 3.1530, 0.0001);
     TS_ASSERT_DELTA(outLam->y(0)[7], 3.1530, 0.0001);
   }
@@ -90,14 +90,14 @@ public:
 
     TS_ASSERT_EQUALS(outLam->getNumberHistograms(), 1);
     TS_ASSERT_EQUALS(outLam->blocksize(), 8);
-    TS_ASSERT(outLam->readX(0)[0] >= 1.5);
-    TS_ASSERT(outLam->readX(0)[7] <= 15.0);
+    TS_ASSERT(outLam->x(0)[0] >= 1.5);
+    TS_ASSERT(outLam->x(0)[7] <= 15.0);
     // Y counts, should be 3.1530 * 2
     TS_ASSERT_DELTA(outLam->y(0)[0], 6.3060, 0.0001);
     TS_ASSERT_DELTA(outLam->y(0)[7], 6.3060, 0.0001);
   }
 
-  void test_IvsLam_processing_instructions_1to3(){
+  void test_IvsLam_processing_instructions_1to3() {
     // Test IvsLam workspace
     // No monitor normalization
     // No direct beam normalization
@@ -118,14 +118,14 @@ public:
 
     TS_ASSERT_EQUALS(outLam->getNumberHistograms(), 1);
     TS_ASSERT_EQUALS(outLam->blocksize(), 8);
-    TS_ASSERT(outLam->readX(0)[0] >= 1.5);
-    TS_ASSERT(outLam->readX(0)[7] <= 15.0);
+    TS_ASSERT(outLam->x(0)[0] >= 1.5);
+    TS_ASSERT(outLam->x(0)[7] <= 15.0);
     // Y counts, should be 3.1530 * 3
     TS_ASSERT_DELTA(outLam->y(0)[0], 9.4590, 0.0001);
     TS_ASSERT_DELTA(outLam->y(0)[7], 9.4590, 0.0001);
   }
 
-  void xtest_bad_processing_instructions() {
+  void test_bad_processing_instructions() {
     // Processing instructions : 5+6
 
     auto alg = AlgorithmManager::Instance().create("ReflectometryReductionOne");
@@ -136,12 +136,12 @@ public:
     alg->setProperty("WavelengthMax", 15.0);
     alg->setPropertyValue("OutputWorkspace", "IvsQ");
     alg->setPropertyValue("OutputWorkspaceWavelength", "IvsLam");
-    alg->setPropertyValue("ProcessingInstructions", "1+2");
+    alg->setPropertyValue("ProcessingInstructions", "5+6");
     // Must throw as spectrum 2 is not defined
     TS_ASSERT_THROWS_ANYTHING(alg->execute());
   }
 
-  void xtest_IvsLam_direct_beam() {
+  void test_IvsLam_direct_beam() {
     // Test IvsLam workspace
     // No monitor normalization
     // Direct beam normalization: 2-3
@@ -163,14 +163,11 @@ public:
 
     TS_ASSERT_EQUALS(outLam->getNumberHistograms(), 1);
     TS_ASSERT_EQUALS(outLam->blocksize(), 8);
-    TS_ASSERT(outLam->readX(0)[0] >= 1.5);
-    TS_ASSERT(outLam->readX(0)[7] <= 15.0);
     // Y counts, should be 0.5 = 1 (from detector ws) / 2 (from direct beam)
     TS_ASSERT_DELTA(outLam->y(0)[0], 0.5, 0.0001);
-    TS_ASSERT_DELTA(outLam->y(0)[7], 0.5, 0.0001);
   }
 
-  void xtest_bad_direct_beam() {
+  void test_bad_direct_beam() {
     // Direct beam : 4-5
 
     auto alg = AlgorithmManager::Instance().create("ReflectometryReductionOne");
@@ -179,14 +176,10 @@ public:
     alg->setProperty("InputWorkspace", m_multiDetectorWS);
     alg->setProperty("WavelengthMin", 1.5);
     alg->setProperty("WavelengthMax", 15.0);
-    alg->setProperty("MomentumTransferStep", 0.1);
-    alg->setProperty("AnalysisMode", "PointDetectorAnalysis");
-    alg->setProperty("NormalizeByIntegratedMonitors", "0");
     alg->setPropertyValue("ProcessingInstructions", "1");
     alg->setPropertyValue("OutputWorkspace", "IvsQ");
     alg->setPropertyValue("OutputWorkspaceWavelength", "IvsLam");
     alg->setPropertyValue("RegionOfDirectBeam", "4-5");
-    // Must throw region of interest is incompatible with point detector
     TS_ASSERT_THROWS_ANYTHING(alg->execute());
   }
 
@@ -216,8 +209,8 @@ public:
 
     TS_ASSERT_EQUALS(outLam->getNumberHistograms(), 1);
     TS_ASSERT_EQUALS(outLam->blocksize(), 8);
-    TS_ASSERT(outLam->readX(0)[0] >= 1.5);
-    TS_ASSERT(outLam->readX(0)[7] <= 15.0);
+    TS_ASSERT(outLam->x(0)[0] >= 1.5);
+    TS_ASSERT(outLam->x(0)[7] <= 15.0);
     // No monitors considered because MonitorBackgroundWavelengthMin
     // and MonitorBackgroundWavelengthMax were not set
     // Y counts must be 3.1530
@@ -225,7 +218,7 @@ public:
     TS_ASSERT_DELTA(outLam->y(0)[7], 3.1530, 0.0001);
   }
 
-  void xtest_IvsLam_monitor_normalization() {
+  void test_IvsLam_monitor_normalization() {
     // Test IvsLam workspace
     // Monitor normalization
     // No direct beam normalization
@@ -241,14 +234,13 @@ public:
     // Modify counts only for range that will be fitted
     auto inputWS = m_multiDetectorWS;
     auto &Y = inputWS->mutableY(0);
-    Y = 1.0;
-    //std::fill(Y.begin(), Y.begin()+2, 1.0);
+    std::fill(Y.begin(), Y.begin() + 2, 1.0);
 
     ReflectometryReductionOne2 alg;
     alg.setChild(true);
     alg.initialize();
     alg.setProperty("InputWorkspace", inputWS);
-    alg.setProperty("WavelengthMin", 1.5);
+    alg.setProperty("WavelengthMin", 0.0);
     alg.setProperty("WavelengthMax", 15.0);
     alg.setProperty("I0MonitorIndex", "0");
     alg.setProperty("MonitorBackgroundWavelengthMin", 0.5);
@@ -261,15 +253,16 @@ public:
     MatrixWorkspace_sptr outLam = alg.getProperty("OutputWorkspaceWavelength");
 
     TS_ASSERT_EQUALS(outLam->getNumberHistograms(), 1);
-    TS_ASSERT_EQUALS(outLam->blocksize(), 8);
-    TS_ASSERT(outLam->readX(0)[0] >= 1.5);
-    TS_ASSERT(outLam->readX(0)[7] <= 15.0);
+    TS_ASSERT_EQUALS(outLam->blocksize(), 10);
+    TS_ASSERT(outLam->x(0)[0] >= 0.0);
+    TS_ASSERT(outLam->x(0)[7] <= 15.0);
     // Expected values are 2.4996 = 3.15301 (detectors) / 1.26139 (monitors)
-    TS_ASSERT_DELTA(outLam->y(0)[0], 2.4996, 0.0001);
+    TS_ASSERT_DELTA(outLam->y(0)[2], 2.4996, 0.0001);
+    TS_ASSERT_DELTA(outLam->y(0)[4], 2.4996, 0.0001);
     TS_ASSERT_DELTA(outLam->y(0)[7], 2.4996, 0.0001);
   }
 
-  void xtest_IvsLam_integrated_monitors() {
+  void test_IvsLam_integrated_monitors() {
     // Test IvsLam workspace
     // Monitor normalization
     // No direct beam normalization
@@ -285,19 +278,20 @@ public:
     // Modify counts only for range that will be fitted
     auto inputWS = m_multiDetectorWS;
     auto &Y = inputWS->mutableY(0);
-    Y = 1.0;
-    //std::fill(Y.begin(), Y.begin()+2, 1.0);
+    std::fill(Y.begin(), Y.begin() + 2, 1.0);
 
     ReflectometryReductionOne2 alg;
     alg.setChild(true);
     alg.initialize();
     alg.setProperty("InputWorkspace", inputWS);
-    alg.setProperty("WavelengthMin", 1.5);
+    alg.setProperty("WavelengthMin", 0.0);
     alg.setProperty("WavelengthMax", 15.0);
     alg.setProperty("I0MonitorIndex", "0");
     alg.setProperty("MonitorBackgroundWavelengthMin", 0.5);
     alg.setProperty("MonitorBackgroundWavelengthMax", 3.0);
     alg.setProperty("NormalizeByIntegratedMonitors", "1");
+    alg.setProperty("MonitorIntegrationWavelengthMin", 1.5);
+    alg.setProperty("MonitorIntegrationWavelengthMax", 15.0);
     alg.setPropertyValue("ProcessingInstructions", "1");
     alg.setPropertyValue("OutputWorkspace", "IvsQ");
     alg.setPropertyValue("OutputWorkspaceWavelength", "IvsLam");
@@ -305,15 +299,15 @@ public:
     MatrixWorkspace_sptr outLam = alg.getProperty("OutputWorkspaceWavelength");
 
     TS_ASSERT_EQUALS(outLam->getNumberHistograms(), 1);
-    TS_ASSERT_EQUALS(outLam->blocksize(), 8);
-    TS_ASSERT(outLam->readX(0)[0] >= 1.5);
-    TS_ASSERT(outLam->readX(0)[7] <= 15.0);
+    TS_ASSERT_EQUALS(outLam->blocksize(), 10);
+    TS_ASSERT(outLam->x(0)[0] >= 0.0);
+    TS_ASSERT(outLam->x(0)[7] <= 15.0);
     // Expected values are 0.3124 = 3.15301 (detectors) / (1.26139*8) (monitors)
     TS_ASSERT_DELTA(outLam->y(0)[0], 0.3124, 0.0001);
     TS_ASSERT_DELTA(outLam->y(0)[7], 0.3124, 0.0001);
   }
 
-  void xtest_transmission_correction_run() {
+  void test_transmission_correction_run() {
     // Transmission run is the same as input run
 
     ReflectometryReductionOne2 alg;
@@ -329,24 +323,50 @@ public:
     alg.execute();
     MatrixWorkspace_sptr outLam = alg.getProperty("OutputWorkspaceWavelength");
 
+    TS_ASSERT_EQUALS(outLam->getNumberHistograms(), 4);
+    TS_ASSERT_EQUALS(outLam->blocksize(), 20);
+    // Expected values are 1 = m_wavelength / m_wavelength
+    TS_ASSERT_DELTA(outLam->y(0)[0], 1.0000, 0.0001);
+    TS_ASSERT_DELTA(outLam->y(0)[7], 1.0000, 0.0001);
+  }
+
+  void test_transmission_correction_two_runs() {
+    // Transmission run is the same as input run
+
+    ReflectometryReductionOne2 alg;
+    alg.setChild(true);
+    alg.initialize();
+    alg.setProperty("InputWorkspace", m_multiDetectorWS);
+    alg.setProperty("FirstTransmissionRun", m_multiDetectorWS);
+    alg.setProperty("SecondTransmissionRun", m_multiDetectorWS);
+    alg.setProperty("StartOverlap", 2.5);
+    alg.setProperty("EndOverlap", 3.0);
+    alg.setProperty("Params", "0.1");
+    alg.setProperty("WavelengthMin", 1.5);
+    alg.setProperty("WavelengthMax", 15.0);
+    alg.setProperty("ProcessingInstructions", "1");
+    alg.setPropertyValue("OutputWorkspace", "IvsQ");
+    alg.setPropertyValue("OutputWorkspaceWavelength", "IvsLam");
+    alg.execute();
+    MatrixWorkspace_sptr outLam = alg.getProperty("OutputWorkspaceWavelength");
+
     TS_ASSERT_EQUALS(outLam->getNumberHistograms(), 1);
-    TS_ASSERT_EQUALS(outLam->blocksize(), 10);
+    TS_ASSERT_EQUALS(outLam->blocksize(), 8);
     // Expected values are 1 = m_wavelength / m_wavelength
     TS_ASSERT_DELTA(outLam->y(0)[0], 1.0000, 0.0001);
     TS_ASSERT_DELTA(outLam->y(0)[7], 1.0000, 0.0001);
   }
 
-  void xtest_exponential_correction() {
+  void test_exponential_correction() {
     // CorrectionAlgorithm: ExponentialCorrection
-    
+
     ReflectometryReductionOne2 alg;
     alg.setChild(true);
     alg.initialize();
-    alg.setProperty("InputWorkspace", m_wavelengthWS);
+    alg.setProperty("InputWorkspace", m_multiDetectorWS);
     alg.setProperty("WavelengthMin", 1.5);
     alg.setProperty("WavelengthMax", 15.0);
-    alg.setProperty("ProcessingInstructions", "100");
-    alg.setProperty("CorrectDetectorPositions", false);
+    alg.setProperty("ProcessingInstructions", "1");
     alg.setProperty("CorrectionAlgorithm", "ExponentialCorrection");
     alg.setProperty("C0", 0.2);
     alg.setProperty("C1", 0.1);
@@ -356,10 +376,10 @@ public:
     MatrixWorkspace_sptr outLam = alg.getProperty("OutputWorkspaceWavelength");
 
     TS_ASSERT_EQUALS(outLam->getNumberHistograms(), 1);
-    TS_ASSERT_EQUALS(outLam->blocksize(), 10);
+    TS_ASSERT_EQUALS(outLam->blocksize(), 8);
     // Expected values are 29.0459 and 58.4912
-    TS_ASSERT_DELTA(outLam->y(0)[0], 29.0459, 0.0001);
-    TS_ASSERT_DELTA(outLam->y(0)[7], 58.4912, 0.0001);
+    TS_ASSERT_DELTA(outLam->y(0)[0], 22.4437, 0.0001);
+    TS_ASSERT_DELTA(outLam->y(0)[7], 60.3415, 0.0001);
   }
 
   void test_polynomial_correction() {
@@ -368,10 +388,10 @@ public:
     ReflectometryReductionOne2 alg;
     alg.setChild(true);
     alg.initialize();
-    alg.setProperty("InputWorkspace", m_wavelengthWS);
+    alg.setProperty("InputWorkspace", m_multiDetectorWS);
     alg.setProperty("WavelengthMin", 1.5);
     alg.setProperty("WavelengthMax", 15.0);
-    alg.setProperty("ProcessingInstructions", "100");
+    alg.setProperty("ProcessingInstructions", "1");
     alg.setProperty("CorrectionAlgorithm", "PolynomialCorrection");
     alg.setProperty("Polynomial", "0.1,0.3,0.5");
     alg.setPropertyValue("OutputWorkspace", "IvsQ");
@@ -380,59 +400,66 @@ public:
     MatrixWorkspace_sptr outLam = alg.getProperty("OutputWorkspaceWavelength");
 
     TS_ASSERT_EQUALS(outLam->getNumberHistograms(), 1);
-    TS_ASSERT_EQUALS(outLam->blocksize(), 10);
-    // Expected values are 2.9851 and 0.1289
-    TS_ASSERT_DELTA(outLam->y(0)[0], 2.9851, 0.0001);
-    TS_ASSERT_DELTA(outLam->y(0)[7], 0.1289, 0.0001);
+    TS_ASSERT_EQUALS(outLam->blocksize(), 8);
+    TS_ASSERT_DELTA(outLam->y(0)[0], 0.4262, 0.0001);
+    TS_ASSERT_DELTA(outLam->y(0)[7], 0.0334, 0.0001);
   }
 
-  void xtest_IvsQ_no_rebin() {
+  void test_IvsQ_no_rebin() {
 
     ReflectometryReductionOne2 alg;
     alg.setChild(true);
     alg.initialize();
-    alg.setProperty("InputWorkspace", m_wavelengthWS);
+    alg.setProperty("InputWorkspace", m_multiDetectorWS);
     alg.setProperty("WavelengthMin", 1.5);
     alg.setProperty("WavelengthMax", 15.0);
-    alg.setProperty("ProcessingInstructions", "100");
+    alg.setProperty("ProcessingInstructions", "1");
     alg.setPropertyValue("OutputWorkspace", "IvsQ");
     alg.setPropertyValue("OutputWorkspaceWavelength", "IvsLam");
     alg.execute();
     MatrixWorkspace_sptr outQ = alg.getProperty("OutputWorkspace");
 
-    // TODO: test some values
+    TS_ASSERT_EQUALS(outQ->getNumberHistograms(), 1);
+    TS_ASSERT_EQUALS(outQ->blocksize(), 8);
+    // X range in outQ
+    TS_ASSERT_DELTA(outQ->x(0)[0], 0.3403, 0.0001);
+    TS_ASSERT_DELTA(outQ->x(0)[7], 1.1345, 0.0001);
   }
 
-  void xtest_IvsQ_linear_binning() {
+  void test_IvsQ_linear_binning() {
 
     ReflectometryReductionOne2 alg;
     alg.setChild(true);
     alg.initialize();
-    alg.setProperty("InputWorkspace", m_wavelengthWS);
+    alg.setProperty("InputWorkspace", m_multiDetectorWS);
     alg.setProperty("WavelengthMin", 1.5);
     alg.setProperty("WavelengthMax", 15.0);
-    alg.setProperty("ProcessingInstructions", "100");
+    alg.setProperty("ProcessingInstructions", "1");
     alg.setProperty("MomentumTransferMin", 1.0);
     alg.setProperty("MomentumTransferMax", 10.0);
-    alg.setProperty("MomentumTransferStep", 0.04);
+    alg.setProperty("MomentumTransferStep", -0.04);
     alg.setPropertyValue("OutputWorkspace", "IvsQ");
     alg.setPropertyValue("OutputWorkspaceWavelength", "IvsLam");
     alg.execute();
     MatrixWorkspace_sptr outQ = alg.getProperty("OutputWorkspace");
 
-    // TODO: choose appropriate values for MomentumTransferMin, MomentumTransferMax, MomentumTransferStep
-    // TODO: test some values
+    std::cout << m_multiDetectorWS->blocksize() << "\n";
+    TS_ASSERT_EQUALS(outQ->getNumberHistograms(), 1);
+    // blocksize = (10.0 - 1.0) / 0.04
+    TS_ASSERT_EQUALS(outQ->blocksize(), 225);
+    TS_ASSERT_DELTA(outQ->x(0)[1] - outQ->x(0)[0], 0.04, 1e-6);
+    TS_ASSERT_DELTA(outQ->x(0)[2] - outQ->x(0)[1], 0.04, 1e-6);
   }
 
-  void xtest_IvsQ_logarithmic_binning() {
+  void test_IvsQ_logarithmic_binning() {
 
     ReflectometryReductionOne2 alg;
     alg.setChild(true);
     alg.initialize();
-    alg.setProperty("InputWorkspace", m_wavelengthWS);
+    alg.setProperty("InputWorkspace", m_multiDetectorWS);
     alg.setProperty("WavelengthMin", 1.5);
     alg.setProperty("WavelengthMax", 15.0);
-    alg.setProperty("ProcessingInstructions", "100");
+    alg.setProperty("ProcessingInstructions", "1");
     alg.setProperty("MomentumTransferMin", 1.0);
     alg.setProperty("MomentumTransferMax", 10.0);
     alg.setProperty("MomentumTransferStep", 0.04);
@@ -441,48 +468,59 @@ public:
     alg.execute();
     MatrixWorkspace_sptr outQ = alg.getProperty("OutputWorkspace");
 
-    // TODO: choose appropriate values for MomentumTransferMin, MomentumTransferMax, MomentumTransferStep
-    // TODO: test some values
+    TS_ASSERT_EQUALS(outQ->getNumberHistograms(), 1);
+    TS_ASSERT_DIFFERS(outQ->blocksize(), 8);
+    TS_ASSERT_DELTA(outQ->x(0)[1] - outQ->x(0)[0], 0.04, 1e-6);
+    TS_ASSERT(outQ->x(0)[7] - outQ->x(0)[6] > 0.05);
   }
 
-  void xtest_IvsQ_q_range() {
+  void test_IvsQ_q_range() {
 
     ReflectometryReductionOne2 alg;
     alg.setChild(true);
     alg.initialize();
-    alg.setProperty("InputWorkspace", m_wavelengthWS);
+    alg.setProperty("InputWorkspace", m_multiDetectorWS);
     alg.setProperty("WavelengthMin", 1.5);
     alg.setProperty("WavelengthMax", 15.0);
-    alg.setProperty("ProcessingInstructions", "100");
+    alg.setProperty("ProcessingInstructions", "2");
     alg.setPropertyValue("OutputWorkspace", "IvsQ");
     alg.setPropertyValue("OutputWorkspaceWavelength", "IvsLam");
     alg.execute();
     MatrixWorkspace_sptr outLam = alg.getProperty("OutputWorkspaceWavelength");
     MatrixWorkspace_sptr outQ = alg.getProperty("OutputWorkspace");
 
-    // TODO: check that q = 4 * pi / lambda * sin(theta)
+    TS_ASSERT_EQUALS(outQ->getNumberHistograms(), 1);
+    TS_ASSERT_EQUALS(outQ->blocksize(), 8);
+    // X range in outLam
+    TS_ASSERT_DELTA(outLam->x(0)[0], 2.8257, 0.0001);
+    TS_ASSERT_DELTA(outLam->x(0)[7], 12.7158, 0.0001);
+    // X range in outQ
+    TS_ASSERT_DELTA(outQ->x(0)[0], 0.3403, 0.0001);
+    TS_ASSERT_DELTA(outQ->x(0)[7], 1.1345, 0.0001);
   }
 
-  void xtest_IvsQ_scale() {
+  void test_IvsQ_scale() {
 
     ReflectometryReductionOne2 alg;
     alg.setChild(true);
     alg.initialize();
-    alg.setProperty("InputWorkspace", m_wavelengthWS);
+    alg.setProperty("InputWorkspace", m_multiDetectorWS);
     alg.setProperty("WavelengthMin", 1.5);
     alg.setProperty("WavelengthMax", 15.0);
-    alg.setProperty("ProcessingInstructions", "100");
+    alg.setProperty("ProcessingInstructions", "1");
+    alg.setProperty("ScaleFactor", 2.);
     alg.setPropertyValue("OutputWorkspace", "IvsQ");
     alg.setPropertyValue("OutputWorkspaceWavelength", "IvsLam");
     alg.execute();
     MatrixWorkspace_sptr outQ = alg.getProperty("OutputWorkspace");
 
     TS_ASSERT_EQUALS(outQ->getNumberHistograms(), 1);
-    TS_ASSERT_EQUALS(outQ->blocksize(), 10);
+    TS_ASSERT_EQUALS(outQ->blocksize(), 8);
 
-    // TODO: test some values
+    // Output should be 3.1530 / scaleFactor
+    TS_ASSERT_DELTA(outQ->y(0)[0], 1.5765, 1e-4);
+    TS_ASSERT_DELTA(outQ->y(0)[7], 1.5765, 1e-4);
   }
-
 };
 
 #endif /* ALGORITHMS_TEST_REFLECTOMETRYREDUCTIONONE2TEST_H_ */