diff --git a/Framework/CurveFitting/src/Algorithms/QENSFitSequential.cpp b/Framework/CurveFitting/src/Algorithms/QENSFitSequential.cpp
index ca141a21a80ff24e776a4e271f9ebe075f84c709..68f16203dc7ba0e2bc4503e6d504b5462ad706bb 100644
--- a/Framework/CurveFitting/src/Algorithms/QENSFitSequential.cpp
+++ b/Framework/CurveFitting/src/Algorithms/QENSFitSequential.cpp
@@ -10,6 +10,7 @@
 #include "MantidKernel/BoundedValidator.h"
 #include "MantidKernel/ListValidator.h"
 #include "MantidKernel/MandatoryValidator.h"
+#include "MantidKernel/UnitFactory.h"
 
 #include <boost/cast.hpp>
 #include <boost/regex.hpp>
@@ -278,6 +279,36 @@ createGroup(const std::vector<MatrixWorkspace_sptr> &workspaces) {
     group->addWorkspace(workspace);
   return group;
 }
+
+IAlgorithm_sptr createProcessIndirectFitParametersAlgorithm(
+    ITableWorkspace_sptr parameterWorkspace, const std::string &xAxisUnit,
+    const std::vector<std::string> &parameterNames) {
+  auto pifp =
+      AlgorithmManager::Instance().create("ProcessIndirectFitParameters");
+  pifp->setAlwaysStoreInADS(false);
+  pifp->setProperty("InputWorkspace", parameterWorkspace);
+  pifp->setProperty("ColumnX", "axis-1");
+  pifp->setProperty("XAxisUnit", xAxisUnit);
+  pifp->setProperty("ParameterNames", parameterNames);
+  return pifp;
+}
+
+WorkspaceGroup_sptr
+runParameterProcessingWithGrouping(IAlgorithm &processingAlgorithm,
+                                   const std::vector<std::size_t> &grouping) {
+  std::vector<MatrixWorkspace_sptr> results;
+  results.reserve(grouping.size() - 1);
+  for (auto i = 0u; i < grouping.size() - 1; ++i) {
+    processingAlgorithm.setProperty("StartRowIndex",
+                                    static_cast<int>(grouping[i]));
+    processingAlgorithm.setProperty("EndRowIndex",
+                                    static_cast<int>(grouping[i + 1]) - 1);
+    processingAlgorithm.setProperty("OutputWorkspace", "__Result");
+    processingAlgorithm.execute();
+    results.push_back(processingAlgorithm.getProperty("OutputWorkspace"));
+  }
+  return createGroup(results);
+}
 } // namespace
 
 namespace Mantid {
@@ -345,6 +376,13 @@ void QENSFitSequential::init() {
       "or values using the notation described in the description section of "
       "the help page.");
 
+  std::vector<std::string> unitOptions = UnitFactory::Instance().getKeys();
+  unitOptions.emplace_back("");
+  declareProperty("ResultXAxisUnit", "MomentumTransfer",
+	  boost::make_shared<StringListValidator>(unitOptions),
+	  "The unit to assign to the X Axis of the result workspace, "
+	  "defaults to MomentumTransfer");
+
   declareProperty(make_unique<WorkspaceProperty<WorkspaceGroup>>(
                       "OutputWorkspace", "", Direction::Output),
                   "The output result workspace(s)");
@@ -610,23 +648,14 @@ std::vector<std::size_t> QENSFitSequential::getDatasetGrouping(
 WorkspaceGroup_sptr QENSFitSequential::processIndirectFitParameters(
     ITableWorkspace_sptr parameterWorkspace,
     const std::vector<std::size_t> &grouping) {
-  auto pifp =
-      createChildAlgorithm("ProcessIndirectFitParameters", 0.91, 0.95, true);
-  pifp->setProperty("InputWorkspace", parameterWorkspace);
-  pifp->setProperty("ColumnX", "axis-1");
-  pifp->setProperty("XAxisUnit", "MomentumTransfer");
-  pifp->setProperty("ParameterNames", getFitParameterNames());
+  Progress logAdderProg(this, 0.91, 0.95, 1);
 
-  std::vector<MatrixWorkspace_sptr> results;
-  results.reserve(grouping.size() - 1);
-  for (auto i = 0u; i < grouping.size() - 1; ++i) {
-    pifp->setProperty("StartRowIndex", static_cast<int>(grouping[i]));
-    pifp->setProperty("EndRowIndex", static_cast<int>(grouping[i + 1]) - 1);
-    pifp->setProperty("OutputWorkspace", "__Result");
-    pifp->executeAsChildAlg();
-    results.push_back(pifp->getProperty("OutputWorkspace"));
-  }
-  return createGroup(results);
+  std::string const xAxisUnit = getProperty("ResultXAxisUnit");
+  auto pifp = createProcessIndirectFitParametersAlgorithm(
+      parameterWorkspace, xAxisUnit, getFitParameterNames());
+  auto group = runParameterProcessingWithGrouping(*pifp, grouping);
+  logAdderProg.report("Result workspace created.");
+  return group;
 }
 
 ITableWorkspace_sptr
diff --git a/Framework/CurveFitting/src/Algorithms/QENSFitSimultaneous.cpp b/Framework/CurveFitting/src/Algorithms/QENSFitSimultaneous.cpp
index 84a58c0e23b2b921e85e64e1f60f4cfa6eae3a54..d3d640f72fb04a8896f1d2e8f7cf56380df44e58 100644
--- a/Framework/CurveFitting/src/Algorithms/QENSFitSimultaneous.cpp
+++ b/Framework/CurveFitting/src/Algorithms/QENSFitSimultaneous.cpp
@@ -14,6 +14,7 @@
 #include "MantidKernel/BoundedValidator.h"
 #include "MantidKernel/Exception.h"
 #include "MantidKernel/StartsWithValidator.h"
+#include "MantidKernel/UnitFactory.h"
 
 #include <boost/algorithm/string/join.hpp>
 
@@ -374,6 +375,13 @@ void QENSFitSimultaneous::initConcrete() {
                   "Convolution are output convolved\n"
                   "with corresponding resolution");
 
+  std::vector<std::string> unitOptions = UnitFactory::Instance().getKeys();
+  unitOptions.emplace_back("");
+  declareProperty("ResultXAxisUnit", "MomentumTransfer",
+                  boost::make_shared<StringListValidator>(unitOptions),
+                  "The unit to assign to the X Axis of the result workspace, "
+                  "defaults to MomentumTransfer");
+
   declareProperty(make_unique<WorkspaceProperty<WorkspaceGroup>>(
                       "OutputWorkspace", "", Direction::Output),
                   "The output result workspace(s)");
@@ -492,8 +500,7 @@ WorkspaceGroup_sptr QENSFitSimultaneous::processIndirectFitParameters(
     const std::vector<std::size_t> &grouping) {
   Progress logAdderProg(this, 0.91, 0.95, 1);
 
-  auto const xAxisUnit =
-      parameterWorkspace->getColumn(0)->isNumber() ? "MomentumTransfer" : "";
+  std::string const xAxisUnit = getProperty("ResultXAxisUnit");
   auto pifp = createProcessIndirectFitParametersAlgorithm(
       parameterWorkspace, xAxisUnit, getFitParameterNames());
   auto group = runParameterProcessingWithGrouping(*pifp, grouping);
diff --git a/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp b/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp
index 7e47cc6d0a6f1859c88246b7dfe218c5f0930756..7b2761733685a5ac893db1a047176620c15c2a6e 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp
@@ -542,6 +542,12 @@ void IndirectFittingModel::setDefaultParameterValue(const std::string &name,
     m_defaultParameters[dataIndex][name] = ParameterValue(value);
 }
 
+void IndirectFittingModel::addFitProperties(
+    Mantid::API::IAlgorithm &algorithm) const {
+  algorithm.setProperty("Function", getFittingFunction());
+  algorithm.setProperty("ResultXAxisUnit", getResultXAxisUnit());
+}
+
 void IndirectFittingModel::addOutput(IAlgorithm_sptr fitAlgorithm) {
   addOutput(fitAlgorithm, m_fittingData.begin(), m_fittingData.end());
 }
@@ -680,6 +686,10 @@ IndirectFittingModel::createDefaultParameters(std::size_t) const {
   return std::unordered_map<std::string, ParameterValue>();
 }
 
+std::string IndirectFittingModel::getResultXAxisUnit() const {
+  return "MomentumTransfer";
+}
+
 boost::optional<ResultLocation>
 IndirectFittingModel::getResultLocation(std::size_t index,
                                         std::size_t spectrum) const {
@@ -736,7 +746,7 @@ IAlgorithm_sptr IndirectFittingModel::getSingleFit(std::size_t dataIndex,
   const auto exclude = fitData->excludeRegionsVector(spectrum);
 
   auto fitAlgorithm = simultaneousFitAlgorithm();
-  fitAlgorithm->setProperty("Function", getFittingFunction());
+  addFitProperties(*fitAlgorithm);
   addInputDataToSimultaneousFit(fitAlgorithm, workspace, spectrum, range,
                                 exclude, "");
   fitAlgorithm->setProperty("OutputWorkspace",
@@ -764,9 +774,9 @@ IAlgorithm_sptr IndirectFittingModel::createSequentialFit(
     IFunction_sptr function, const std::string &input,
     IndirectFitData *initialFitData) const {
   auto fitAlgorithm = sequentialFitAlgorithm();
+  addFitProperties(*fitAlgorithm);
   fitAlgorithm->setProperty("Input", input);
   fitAlgorithm->setProperty("OutputWorkspace", sequentialFitOutputName());
-  fitAlgorithm->setProperty("Function", function);
   fitAlgorithm->setProperty("PassWSIndexToFunction", true);
 
   const auto range = initialFitData->getRange(0);
@@ -783,7 +793,7 @@ IAlgorithm_sptr IndirectFittingModel::createSequentialFit(
 IAlgorithm_sptr
 IndirectFittingModel::createSimultaneousFit(IFunction_sptr function) const {
   auto fitAlgorithm = simultaneousFitAlgorithm();
-  fitAlgorithm->setProperty("Function", function);
+  addFitProperties(*fitAlgorithm);
   addInputDataToSimultaneousFit(fitAlgorithm, m_fittingData);
   fitAlgorithm->setProperty("OutputWorkspace", simultaneousFitOutputName());
   return fitAlgorithm;
@@ -792,7 +802,7 @@ IndirectFittingModel::createSimultaneousFit(IFunction_sptr function) const {
 IAlgorithm_sptr IndirectFittingModel::createSimultaneousFitWithEqualRange(
     IFunction_sptr function) const {
   auto fitAlgorithm = simultaneousFitAlgorithm();
-  fitAlgorithm->setProperty("Function", function);
+  addFitProperties(*fitAlgorithm);
 
   auto exclude = vectorFromString<double>(getExcludeRegion(0, 0));
   addInputDataToSimultaneousFit(fitAlgorithm, m_fittingData,
diff --git a/qt/scientific_interfaces/Indirect/IndirectFittingModel.h b/qt/scientific_interfaces/Indirect/IndirectFittingModel.h
index 0468c835c9f55cceb5e497a4d6a1aecaeedc5cf5..a4b82195abd21dca7b7f0eeffa1190855edfa174 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFittingModel.h
+++ b/qt/scientific_interfaces/Indirect/IndirectFittingModel.h
@@ -161,8 +161,12 @@ private:
   virtual std::unordered_map<std::string, ParameterValue>
   createDefaultParameters(std::size_t index) const;
 
+  virtual std::string getResultXAxisUnit() const;
+
   bool isPreviousModelSelected() const;
 
+  void addFitProperties(Mantid::API::IAlgorithm &algorithm) const;
+
   virtual IndirectFitOutput
   createFitOutput(Mantid::API::WorkspaceGroup_sptr resultGroup,
                   Mantid::API::ITableWorkspace_sptr parameterTable,
diff --git a/qt/scientific_interfaces/Indirect/JumpFitModel.cpp b/qt/scientific_interfaces/Indirect/JumpFitModel.cpp
index c3e5b8c30aab13b54e0bc2d91b1f24076129eb44..e6a2acdfadffce909d5c9c96b039aab99f02a944 100644
--- a/qt/scientific_interfaces/Indirect/JumpFitModel.cpp
+++ b/qt/scientific_interfaces/Indirect/JumpFitModel.cpp
@@ -326,6 +326,8 @@ std::string JumpFitModel::singleFitOutputName(std::size_t, std::size_t) const {
   return sequentialFitOutputName();
 }
 
+std::string JumpFitModel::getResultXAxisUnit() const { return ""; }
+
 std::string JumpFitModel::constructOutputName() const {
   auto name = createOutputName("%1%_FofQFit_" + m_fitType, "", 0);
   auto position = name.find("_Result");
diff --git a/qt/scientific_interfaces/Indirect/JumpFitModel.h b/qt/scientific_interfaces/Indirect/JumpFitModel.h
index 41b2e7bdbfff064394da5910c871c78ef74d8d20..6d6b89a049b43f27da9403a9a0a327ee590359cf 100644
--- a/qt/scientific_interfaces/Indirect/JumpFitModel.h
+++ b/qt/scientific_interfaces/Indirect/JumpFitModel.h
@@ -42,6 +42,7 @@ public:
   std::string singleFitOutputName(std::size_t index,
                                   std::size_t spectrum) const override;
 
+
 private:
   std::string constructOutputName() const;
   bool allWorkspacesEqual(Mantid::API::MatrixWorkspace_sptr workspace) const;
@@ -50,6 +51,7 @@ private:
                        const std::string &hwhmName);
   std::unordered_map<std::string, JumpFitParameters>::const_iterator
   findJumpFitParameters(std::size_t dataIndex) const;
+  std::string getResultXAxisUnit() const override;
 
   std::string m_fitType;
   std::unordered_map<std::string, JumpFitParameters> m_jumpParameters;
diff --git a/qt/scientific_interfaces/Indirect/MSDFitModel.cpp b/qt/scientific_interfaces/Indirect/MSDFitModel.cpp
index 2c2dcda6807f6cdf3677847abda4106b2f8b9933..2f93d1fb000716ac3828022c4743504082158eb3 100644
--- a/qt/scientific_interfaces/Indirect/MSDFitModel.cpp
+++ b/qt/scientific_interfaces/Indirect/MSDFitModel.cpp
@@ -26,6 +26,8 @@ std::string MSDFitModel::singleFitOutputName(std::size_t index,
                                    spectrum);
 }
 
+std::string MSDFitModel::getResultXAxisUnit() const { return ""; }
+
 } // namespace IDA
 } // namespace CustomInterfaces
 } // namespace MantidQt
diff --git a/qt/scientific_interfaces/Indirect/MSDFitModel.h b/qt/scientific_interfaces/Indirect/MSDFitModel.h
index 56a64679be88933dee8aca41c8dc528b3747b5a2..45244aff4d8082a3c706eb8e0433865605f09784 100644
--- a/qt/scientific_interfaces/Indirect/MSDFitModel.h
+++ b/qt/scientific_interfaces/Indirect/MSDFitModel.h
@@ -17,6 +17,8 @@ public:
                                   std::size_t spectrum) const override;
 
 private:
+  std::string getResultXAxisUnit() const override;
+
   std::string m_fitType;
 };