diff --git a/Framework/CurveFitting/src/Algorithms/QENSFitSequential.cpp b/Framework/CurveFitting/src/Algorithms/QENSFitSequential.cpp
index 90165ffd3af82be1294b61294b1f32e7c5caf0af..b9d29624520cb369fc21252d67dd37e27e23be28 100644
--- a/Framework/CurveFitting/src/Algorithms/QENSFitSequential.cpp
+++ b/Framework/CurveFitting/src/Algorithms/QENSFitSequential.cpp
@@ -29,6 +29,16 @@ namespace {
 using namespace Mantid::API;
 using namespace Mantid::Kernel;
 
+WorkspaceGroup_sptr getADSGroupWorkspace(const std::string &workspaceName) {
+  return AnalysisDataService::Instance().retrieveWS<WorkspaceGroup>(
+      workspaceName);
+}
+
+MatrixWorkspace_sptr getADSMatrixWorkspace(const std::string &workspaceName) {
+  return AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(
+      workspaceName);
+}
+
 MatrixWorkspace_sptr convertSpectrumAxis(MatrixWorkspace_sptr inputWorkspace,
                                          const std::string &outputName) {
   auto convSpec = AlgorithmManager::Instance().create("ConvertSpectrumAxis");
@@ -40,8 +50,7 @@ MatrixWorkspace_sptr convertSpectrumAxis(MatrixWorkspace_sptr inputWorkspace,
   convSpec->execute();
   // Attempting to use getProperty("OutputWorkspace") on algorithm results in a
   // nullptr being returned
-  return AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(
-      outputName);
+  return getADSMatrixWorkspace(outputName);
 }
 
 MatrixWorkspace_sptr cloneWorkspace(MatrixWorkspace_sptr inputWorkspace,
@@ -150,8 +159,7 @@ std::vector<MatrixWorkspace_sptr> extractWorkspaces(const std::string &input) {
   std::vector<MatrixWorkspace_sptr> workspaces;
 
   auto extractWorkspace = [&](const std::string &name) {
-    workspaces.emplace_back(
-        AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(name));
+    workspaces.emplace_back(getADSMatrixWorkspace(name));
   };
 
   boost::regex reg("([^,;]+),");
@@ -302,6 +310,7 @@ runParameterProcessingWithGrouping(IAlgorithm &processingAlgorithm,
   }
   return createGroup(results);
 }
+
 } // namespace
 
 namespace Mantid {
@@ -511,9 +520,7 @@ void QENSFitSequential::exec() {
       processParameterTable(performFit(inputString, outputBaseName));
   const auto resultWs =
       processIndirectFitParameters(parameterWs, getDatasetGrouping(workspaces));
-  const auto groupWs =
-      AnalysisDataService::Instance().retrieveWS<WorkspaceGroup>(
-          outputBaseName + "_Workspaces");
+  const auto groupWs = getADSGroupWorkspace(outputBaseName + "_Workspaces");
   AnalysisDataService::Instance().addOrReplace(
       getPropertyValue("OutputWorkspace"), resultWs);
 
@@ -522,6 +529,7 @@ void QENSFitSequential::exec() {
                      inputWorkspaces);
   else
     renameWorkspaces(groupWs, spectra, outputBaseName, "_Workspace");
+
   copyLogs(resultWs, workspaces);
 
   const bool doExtractMembers = getProperty("ExtractMembers");
@@ -690,9 +698,9 @@ void QENSFitSequential::renameGroupWorkspace(
     std::string const &currentName, std::vector<std::string> const &spectra,
     std::string const &outputBaseName, std::string const &endOfSuffix) {
   if (AnalysisDataService::Instance().doesExist(currentName)) {
-    auto const pdfGroup =
-        AnalysisDataService::Instance().retrieveWS<WorkspaceGroup>(currentName);
-    renameWorkspaces(pdfGroup, spectra, outputBaseName, endOfSuffix);
+    auto const group = getADSGroupWorkspace(currentName);
+    if (group)
+      renameWorkspaces(group, spectra, outputBaseName, endOfSuffix);
   }
 }
 
diff --git a/docs/source/release/v3.14.0/indirect_inelastic.rst b/docs/source/release/v3.14.0/indirect_inelastic.rst
index 2e5d446617d09ccf9f5aa9c0785f87a105e308ec..72a68fe8f09b924a86f6851497507204a64ef64d 100644
--- a/docs/source/release/v3.14.0/indirect_inelastic.rst
+++ b/docs/source/release/v3.14.0/indirect_inelastic.rst
@@ -70,6 +70,7 @@ Bugfixes
 - The x-axis labels in the output plots for MSDFit are now correct.
 - An unexpected error is now prevented when clicking Plot Guess from the Display combo box in ConvFit without first loading
   a reduced file.
+- The output workspace ending with _Results now contains workspaces with corrected names which detail the fit functions used.
 
 
 Data Corrections Interface
diff --git a/qt/scientific_interfaces/Indirect/ConvFit.cpp b/qt/scientific_interfaces/Indirect/ConvFit.cpp
index 6050d8c58d90035ea920163aa209bbd0a23efec0..fc8875159bf16670c3037c412ffe81df4418b84b 100644
--- a/qt/scientific_interfaces/Indirect/ConvFit.cpp
+++ b/qt/scientific_interfaces/Indirect/ConvFit.cpp
@@ -66,7 +66,7 @@ void ConvFit::setupFitTab() {
   m_fitStrings["ElasticDiffSphere"] = "EDS";
   m_fitStrings["ElasticDiffRotDiscreteCircle"] = "EDC";
   m_fitStrings["StretchedExpFT"] = "SFT";
-  m_fitStrings["TeixeiraWaterSQE"] = "Teixeria1L";
+  m_fitStrings["Teixeira Water"] = "TxWater";
 
   auto &functionFactory = FunctionFactory::Instance();
   auto lorentzian = functionFactory.createFunction("Lorentzian");
diff --git a/qt/scientific_interfaces/Indirect/ConvFitModel.cpp b/qt/scientific_interfaces/Indirect/ConvFitModel.cpp
index 0b73a54635633b0efb74c652aadde16dd3415281..932e2a5c8fb6c61cc4e94d8a0aa58dffef736f66 100644
--- a/qt/scientific_interfaces/Indirect/ConvFitModel.cpp
+++ b/qt/scientific_interfaces/Indirect/ConvFitModel.cpp
@@ -450,7 +450,7 @@ IAlgorithm_sptr ConvFitModel::simultaneousFitAlgorithm() const {
 
 std::string ConvFitModel::sequentialFitOutputName() const {
   if (isMultiFit())
-    return "MultiConvFit_" + m_fitType + m_backgroundString + "_Result";
+    return "MultiConvFit_" + m_fitType + m_backgroundString + "_Results";
   return createOutputName(
       "%1%_conv_" + m_fitType + m_backgroundString + "_s%2%", "_to_", 0);
 }
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitData.cpp b/qt/scientific_interfaces/Indirect/IndirectFitData.cpp
index 5ccd35e13aa97cfe33e367bf806aa4d7ba5fa87b..9073caa3a6a63ff0fc1df83117e5e7016d26715c 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitData.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectFitData.cpp
@@ -276,7 +276,7 @@ IndirectFitData::IndirectFitData(MatrixWorkspace_sptr workspace,
 std::string
 IndirectFitData::displayName(const std::string &formatString,
                              const std::string &rangeDelimiter) const {
-  const auto workspaceName = cutLastOf(workspace()->getName(), "_red");
+  const auto workspaceName = getBasename();
   const auto spectraString =
       boost::apply_visitor(SpectraToString(rangeDelimiter), m_spectra);
 
@@ -291,7 +291,7 @@ IndirectFitData::displayName(const std::string &formatString,
 
 std::string IndirectFitData::displayName(const std::string &formatString,
                                          std::size_t spectrum) const {
-  const auto workspaceName = cutLastOf(workspace()->getName(), "_red");
+  const auto workspaceName = getBasename();
 
   auto formatted = boost::format(formatString);
   formatted = tryPassFormatArgument(formatted, workspaceName);
@@ -299,6 +299,10 @@ std::string IndirectFitData::displayName(const std::string &formatString,
   return formatted.str();
 }
 
+std::string IndirectFitData::getBasename() const {
+  return cutLastOf(workspace()->getName(), "_red");
+}
+
 Mantid::API::MatrixWorkspace_sptr IndirectFitData::workspace() const {
   return m_workspace;
 }
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitData.h b/qt/scientific_interfaces/Indirect/IndirectFitData.h
index 2366846ecb950f6a8a8212a0bcf0e093d08caedc..ff178f150defa2b989c14c6a9a5908b316160cc6 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitData.h
+++ b/qt/scientific_interfaces/Indirect/IndirectFitData.h
@@ -150,6 +150,7 @@ public:
                           const std::string &rangeDelimiter) const;
   std::string displayName(const std::string &formatString,
                           std::size_t spectrum) const;
+  std::string getBasename() const;
 
   Mantid::API::MatrixWorkspace_sptr workspace() const;
   const Spectra &spectra() const;
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitOutput.cpp b/qt/scientific_interfaces/Indirect/IndirectFitOutput.cpp
index b951e21d383883748b16ec59805aa6fda0301adf..cafbeaff4834b00e8fc0134825ca7bc349ea0a69 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitOutput.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectFitOutput.cpp
@@ -136,6 +136,26 @@ std::vector<std::string> getAxisLabels(MatrixWorkspace_sptr workspace,
   return std::vector<std::string>();
 }
 
+std::string cutLastOf(const std::string &str, const std::string &delimiter) {
+  const auto cutIndex = str.rfind(delimiter);
+  if (cutIndex != std::string::npos)
+    return str.substr(0, cutIndex);
+  return str;
+}
+
+bool containsMultipleData(const std::string &name) {
+  return name.substr(0, 5) == "Multi";
+}
+
+std::string constructResultName(const std::string &name,
+                                IndirectFitData const *fitData) {
+  if (containsMultipleData(name)) {
+    const auto formatString = cutLastOf(name, "_Results") + "_%1%_s%2%_Result";
+    return fitData->displayName(formatString, "_to_");
+  } else
+    return cutLastOf(name, "s_1");
+}
+
 void renameWorkspace(std::string const &name, std::string const &newName) {
   auto renamer = AlgorithmManager::Instance().create("RenameWorkspace");
   renamer->setProperty("InputWorkspace", name);
@@ -151,8 +171,9 @@ void renameResult(Workspace_sptr resultWorkspace,
 void renameResult(Workspace_sptr resultWorkspace,
                   IndirectFitData const *fitData) {
   const auto name = resultWorkspace->getName();
-  const auto newName = fitData->displayName("%1%_s%2%_Result", "_to_");
-  renameWorkspace(name, newName);
+  const auto newName = constructResultName(name, fitData);
+  if (newName != name)
+    renameWorkspace(name, newName);
 }
 
 void renameResultWithoutSpectra(WorkspaceGroup_sptr resultWorkspace,
diff --git a/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp b/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp
index 5cffc10d062ec3ab11c967b49c6752a59cce7f77..f31e89d8de8d419e6d2b8c3dd00e299ec902d3df 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp
@@ -384,7 +384,8 @@ std::string
 IndirectFittingModel::createOutputName(const std::string &formatString,
                                        const std::string &rangeDelimiter,
                                        std::size_t dataIndex) const {
-  return createDisplayName(formatString, rangeDelimiter, dataIndex) + "_Result";
+  return createDisplayName(formatString, rangeDelimiter, dataIndex) +
+         "_Results";
 }
 
 bool IndirectFittingModel::isMultiFit() const {
diff --git a/qt/scientific_interfaces/Indirect/IqtFitModel.cpp b/qt/scientific_interfaces/Indirect/IqtFitModel.cpp
index 6e48558c75a6c88d74fac1f00eded182a2c865ae..cbec7f9084ce24cdd5b57824925f63db8890ba1c 100644
--- a/qt/scientific_interfaces/Indirect/IqtFitModel.cpp
+++ b/qt/scientific_interfaces/Indirect/IqtFitModel.cpp
@@ -217,7 +217,7 @@ IAlgorithm_sptr IqtFitModel::simultaneousFitAlgorithm() const {
 
 std::string IqtFitModel::sequentialFitOutputName() const {
   if (isMultiFit())
-    return "MultiIqtFit_" + m_fitType + "_Result";
+    return "MultiIqtFit_" + m_fitType + "_Results";
   auto const fitString = getFitString(getWorkspace(0));
   return createOutputName("%1%" + fitString + "_" + m_fitType + "_s%2%", "_to_",
                           0);
@@ -225,7 +225,7 @@ std::string IqtFitModel::sequentialFitOutputName() const {
 
 std::string IqtFitModel::simultaneousFitOutputName() const {
   if (isMultiFit())
-    return "MultiSimultaneousIqtFit_" + m_fitType + "_Result";
+    return "MultiSimultaneousIqtFit_" + m_fitType + "_Results";
   auto const fitString = getFitString(getWorkspace(0));
   return createOutputName("%1%" + fitString + "_mult" + m_fitType + "_s%2%",
                           "_to_", 0);
diff --git a/qt/scientific_interfaces/Indirect/JumpFitModel.cpp b/qt/scientific_interfaces/Indirect/JumpFitModel.cpp
index be4af632db31df389a7632270cb435b90b63cda0..06b74852fe0049d047b3fc9f55313ea2c33b214b 100644
--- a/qt/scientific_interfaces/Indirect/JumpFitModel.cpp
+++ b/qt/scientific_interfaces/Indirect/JumpFitModel.cpp
@@ -340,7 +340,7 @@ JumpFitModel::getEISFSpectrum(std::size_t eisfIndex,
 
 std::string JumpFitModel::sequentialFitOutputName() const {
   if (isMultiFit())
-    return "MultiFofQFit_" + m_fitType + "_Result";
+    return "MultiFofQFit_" + m_fitType + "_Results";
   return constructOutputName();
 }
 
@@ -356,7 +356,7 @@ std::string JumpFitModel::getResultXAxisUnit() const { return ""; }
 
 std::string JumpFitModel::constructOutputName() const {
   auto const name = createOutputName("%1%_FofQFit_" + m_fitType, "", 0);
-  auto const position = name.find("_Result");
+  auto const position = name.find("_Results");
   if (position != std::string::npos)
     return name.substr(0, position) + name.substr(position + 7, name.size());
   return name;
diff --git a/qt/scientific_interfaces/Indirect/MSDFitModel.cpp b/qt/scientific_interfaces/Indirect/MSDFitModel.cpp
index ad095e6ad31edf064f183e80a2c1563726d730ed..484ad8f7ffac85adf7638672e45dd00e51adfc3d 100644
--- a/qt/scientific_interfaces/Indirect/MSDFitModel.cpp
+++ b/qt/scientific_interfaces/Indirect/MSDFitModel.cpp
@@ -18,7 +18,7 @@ void MSDFitModel::setFitType(const std::string &fitType) {
 
 std::string MSDFitModel::sequentialFitOutputName() const {
   if (isMultiFit())
-    return "MultiMSDFit_" + m_fitType + "_Result";
+    return "MultiMSDFit_" + m_fitType + "_Results";
   return createOutputName("%1%_MSDFit_" + m_fitType + "_s%2%", "_to_", 0);
 }
 
diff --git a/qt/scientific_interfaces/Indirect/test/IndirectFitOutputTest.h b/qt/scientific_interfaces/Indirect/test/IndirectFitOutputTest.h
index 6cb93ee3c83e5d07119bf73ba41fc57e1a50ebd1..8f610241d1ad54e153f7919a0d3079706435299c 100644
--- a/qt/scientific_interfaces/Indirect/test/IndirectFitOutputTest.h
+++ b/qt/scientific_interfaces/Indirect/test/IndirectFitOutputTest.h
@@ -35,7 +35,7 @@ createPopulatedworkspace(std::vector<double> const &xValues,
   createWorkspaceAlgorithm->setProperty("VerticalAxisUnit", "Text");
   createWorkspaceAlgorithm->setProperty("VerticalAxisValues",
                                         verticalAxisNames);
-  createWorkspaceAlgorithm->setProperty("OutputWorkspace", "workspace");
+  createWorkspaceAlgorithm->setProperty("OutputWorkspace", "OutputResults");
   createWorkspaceAlgorithm->execute();
   return createWorkspaceAlgorithm->getProperty("OutputWorkspace");
 }
@@ -81,14 +81,6 @@ WorkspaceGroup_sptr getPopulatedGroup(std::size_t const &size) {
   return group;
 }
 
-/// Store workspaces in ADS and won't destruct the ADS when leaving scope
-void storeWorkspacesInADS(WorkspaceGroup_sptr group,
-                          ITableWorkspace_sptr table) {
-  SetUpADSWithWorkspace ads("ResultGroup", group);
-  ads.addOrReplace("ResultWorkspaces", group);
-  ads.addOrReplace("ParameterTable", table);
-}
-
 std::unique_ptr<IndirectFitOutput>
 createFitOutput(WorkspaceGroup_sptr resultGroup,
                 ITableWorkspace_sptr parameterTable,
@@ -98,17 +90,6 @@ createFitOutput(WorkspaceGroup_sptr resultGroup,
       resultGroup, parameterTable, resultWorkspace, fitData, spectrum);
 }
 
-/// This will return fit output with workspaces still stored in the ADS
-std::unique_ptr<IndirectFitOutput> getFitOutputData() {
-  auto const group = getPopulatedGroup(2);
-  auto const table = getPopulatedTable(2);
-  IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
-
-  storeWorkspacesInADS(group, table);
-
-  return createFitOutput(group, table, group, data, 0);
-}
-
 std::unordered_map<std::string, std::string>
 getNewParameterNames(std::vector<std::string> const &currentNames) {
   std::unordered_map<std::string, std::string> newParameterNames;
@@ -147,10 +128,10 @@ public:
   test_that_the_group_workspaces_stored_are_equal_to_the_workspaces_inputed() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data, 0);
+    auto const output = createFitOutput(group, table, group, data.get(), 0);
 
     TS_ASSERT_EQUALS(output->getLastResultGroup(), group);
     TS_ASSERT_EQUALS(output->getLastResultWorkspace(), group);
@@ -160,48 +141,48 @@ public:
   test_that_isSpectrumFit_returns_false_if_the_spectrum_has_not_been_previously_fit() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data, 0);
+    auto const output = createFitOutput(group, table, group, data.get(), 0);
 
-    TS_ASSERT(!output->isSpectrumFit(data, 7));
+    TS_ASSERT(!output->isSpectrumFit(data.get(), 7));
   }
 
   void
   test_that_isSpectrumFit_returns_true_if_the_spectrum_has_been_previously_fit() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data, 0);
+    auto const output = createFitOutput(group, table, group, data.get(), 0);
 
-    TS_ASSERT(output->isSpectrumFit(data, 0));
+    TS_ASSERT(output->isSpectrumFit(data.get(), 0));
   }
 
   void
   test_that_getParameters_returns_an_empty_map_when_the_spectrum_number_provided_is_out_of_range() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data, 0);
+    auto const output = createFitOutput(group, table, group, data.get(), 0);
 
-    TS_ASSERT(output->getParameters(data, 7).empty());
+    TS_ASSERT(output->getParameters(data.get(), 7).empty());
   }
 
   void
   test_that_getParameters_returns_the_correct_parameter_values_when_the_spectrum_number_and_IndirectFitData_provided_is_valid() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data, 0);
+    auto const output = createFitOutput(group, table, group, data.get(), 0);
 
-    auto const parameters = output->getParameters(data, 0);
+    auto const parameters = output->getParameters(data.get(), 0);
     TS_ASSERT_EQUALS(parameters.size(), 2);
     TS_ASSERT_EQUALS(parameters.at("Height_Err").value, 0.047);
     TS_ASSERT_EQUALS(parameters.at("Msd_Err").value, 0.514);
@@ -211,24 +192,24 @@ public:
   test_that_getResultLocation_returns_none_when_the_spectrum_number_provided_is_out_of_range() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data, 0);
+    auto const output = createFitOutput(group, table, group, data.get(), 0);
 
-    TS_ASSERT(!output->getResultLocation(data, 7));
+    TS_ASSERT(!output->getResultLocation(data.get(), 7));
   }
 
   void
   test_that_getResultLocation_returns_the_ResultLocation_when_the_spectrum_number_and_IndirectFitData_provided_is_valid() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data, 0);
+    auto const output = createFitOutput(group, table, group, data.get(), 0);
 
-    auto const resultLocation = output->getResultLocation(data, 0);
+    auto const resultLocation = output->getResultLocation(data.get(), 0);
     TS_ASSERT(resultLocation);
     TS_ASSERT_EQUALS(resultLocation->result.lock(), group);
   }
@@ -237,10 +218,10 @@ public:
   test_that_getResultParameterNames_gets_the_parameter_names_which_were_provided_as_input_data() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data, 0);
+    auto const output = createFitOutput(group, table, group, data.get(), 0);
     std::vector<std::string> const expectedParameters{
         "Height", "Height_Err", "Msd", "Msd_Err", "Chi_squared"};
     auto const parameters = output->getResultParameterNames();
@@ -265,15 +246,15 @@ public:
   test_that_mapParameterNames_will_remap_the_parameters_to_correspond_to_the_provided_parameter_names() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data, 0);
+    auto const output = createFitOutput(group, table, group, data.get(), 0);
     auto const newParameterNames =
         getNewParameterNames({"Height_Err", "Msd_Err"});
-    output->mapParameterNames(newParameterNames, data);
+    output->mapParameterNames(newParameterNames, data.get());
 
-    auto const parameters = output->getParameters(data, 0);
+    auto const parameters = output->getParameters(data.get(), 0);
     TS_ASSERT_EQUALS(parameters.size(), 2);
     TS_ASSERT_EQUALS(parameters.at("Width_Err").value, 0.047);
     TS_ASSERT_EQUALS(parameters.at("MSD_Err").value, 0.514);
@@ -283,14 +264,14 @@ public:
   test_that_mapParameterNames_will_not_remap_the_parameters_when_the_provided_old_parameter_names_do_not_exist() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data, 0);
+    auto const output = createFitOutput(group, table, group, data.get(), 0);
     auto const newParameterNames = getNewParameterNames({"None1", "None2"});
-    output->mapParameterNames(newParameterNames, data);
+    output->mapParameterNames(newParameterNames, data.get());
 
-    auto const parameters = output->getParameters(data, 0);
+    auto const parameters = output->getParameters(data.get(), 0);
     TS_ASSERT(parameters.at("Height_Err").value);
     TS_ASSERT(parameters.at("Msd_Err").value);
   }
@@ -299,57 +280,99 @@ public:
   test_that_addOutput_will_add_new_fitData_without_overwriting_existing_data() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data1 = new IndirectFitData(getIndirectFitData(5));
+    auto const data1 = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data1, 0);
-    IndirectFitData const *data2 = new IndirectFitData(getIndirectFitData(2));
-    output->addOutput(group, table, group, data2, 0);
+    auto const output = createFitOutput(group, table, group, data1.get(), 0);
+    auto const data2 = std::make_unique<IndirectFitData>(getIndirectFitData(2));
+    output->addOutput(group, table, group, data2.get(), 0);
 
-    TS_ASSERT(!output->getParameters(data1, 0).empty());
-    TS_ASSERT(!output->getParameters(data2, 0).empty());
+    TS_ASSERT(!output->getParameters(data1.get(), 0).empty());
+    TS_ASSERT(!output->getParameters(data2.get(), 0).empty());
   }
 
   void test_that_removeOutput_will_erase_the_provided_fitData() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data = new IndirectFitData(getIndirectFitData(5));
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data, 0);
-    output->removeOutput(data);
+    auto const output = createFitOutput(group, table, group, data.get(), 0);
+    output->removeOutput(data.get());
 
-    TS_ASSERT(output->getParameters(data, 0).empty());
-    TS_ASSERT(!output->getResultLocation(data, 0));
+    TS_ASSERT(output->getParameters(data.get(), 0).empty());
+    TS_ASSERT(!output->getResultLocation(data.get(), 0));
   }
 
   void test_that_removeOutput_will_not_delete_fitData_which_is_not_specified() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data1 = new IndirectFitData(getIndirectFitData(5));
+    auto const data1 = std::make_unique<IndirectFitData>(getIndirectFitData(5));
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data1, 0);
-    IndirectFitData const *data2 = new IndirectFitData(getIndirectFitData(2));
-    output->addOutput(group, table, group, data2, 0);
-    output->removeOutput(data2);
+    auto const output = createFitOutput(group, table, group, data1.get(), 0);
+    auto const data2 = std::make_unique<IndirectFitData>(getIndirectFitData(2));
+    output->addOutput(group, table, group, data2.get(), 0);
+    output->removeOutput(data2.get());
 
-    TS_ASSERT(!output->getParameters(data1, 0).empty());
-    TS_ASSERT(output->getParameters(data2, 0).empty());
+    TS_ASSERT(!output->getParameters(data1.get(), 0).empty());
+    TS_ASSERT(output->getParameters(data2.get(), 0).empty());
   }
 
   void
   test_that_removeOutput_does_not_throw_when_provided_fitData_which_does_not_exist() {
     auto const group = getPopulatedGroup(2);
     auto const table = getPopulatedTable(2);
-    IndirectFitData *data1 = new IndirectFitData(getIndirectFitData(5));
+    auto const data1 = std::make_unique<IndirectFitData>(getIndirectFitData(5));
+    storeWorkspacesInADS(group, table);
+
+    auto const output = createFitOutput(group, table, group, data1.get(), 0);
+    auto const data2 = std::make_unique<IndirectFitData>(getIndirectFitData(2));
+
+    TS_ASSERT_THROWS_NOTHING(output->removeOutput(data2.get()));
+  }
+
+  void
+  test_that_the_resultworkspace_is_renamed_to_have_the_correct_name_after_a_fit_is_executed() {
+    auto const group = getPopulatedGroup(1);
+    auto const table = getPopulatedTable(2);
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
+    storeWorkspacesInADS(group, table);
+
+    (void)createFitOutput(group, table, group, data.get(), 0);
+
+    TS_ASSERT(m_ads->doesExist("ConvFit_1L_Result"));
+  }
+
+  void
+  test_that_the_resultworkspace_is_renamed_to_have_the_correct_name_after_a_fit_is_executed_with_multiple_data() {
+    (void)getFitOutputData();
+    TS_ASSERT(m_ads->doesExist("MultiConvFit_1L__s0_to_4_Result"));
+  }
+
+private:
+  /// This will return fit output with workspaces still stored in the ADS
+  std::unique_ptr<IndirectFitOutput> getFitOutputData() {
+    auto const group = getPopulatedGroup(2);
+    auto const table = getPopulatedTable(2);
+    auto const data = std::make_unique<IndirectFitData>(getIndirectFitData(5));
+
     storeWorkspacesInADS(group, table);
 
-    auto const output = createFitOutput(group, table, group, data1, 0);
-    IndirectFitData const *data2 = new IndirectFitData(getIndirectFitData(2));
+    return createFitOutput(group, table, group, data.get(), 0);
+  }
 
-    TS_ASSERT_THROWS_NOTHING(output->removeOutput(data2));
+  /// Store workspaces in ADS and won't destruct the ADS when leaving scope
+  void storeWorkspacesInADS(WorkspaceGroup_sptr group,
+                            ITableWorkspace_sptr table) {
+    std::string const nameStart = group->size() > 1 ? "Multi" : "";
+    m_ads = std::make_unique<SetUpADSWithWorkspace>(
+        nameStart + "ConvFit_1L_Workspaces", group);
+    m_ads->addOrReplace(nameStart + "ConvFit_1L_Results_1", group);
+    m_ads->addOrReplace(nameStart + "ConvFit_1L_Parameters", table);
   }
+
+  std::unique_ptr<SetUpADSWithWorkspace> m_ads;
 };
 
 #endif // MANTID_INDIRECTFITOUTPUTTEST_H
diff --git a/qt/scientific_interfaces/Indirect/test/IndirectFitPlotModelTest.h b/qt/scientific_interfaces/Indirect/test/IndirectFitPlotModelTest.h
index 886cc92c512b948d82994148728620b7e3df431a..d9471b0fc71d3edfc853f4272d3551e14d89741d 100644
--- a/qt/scientific_interfaces/Indirect/test/IndirectFitPlotModelTest.h
+++ b/qt/scientific_interfaces/Indirect/test/IndirectFitPlotModelTest.h
@@ -129,7 +129,7 @@ IAlgorithm_sptr setupFitAlgorithm(MatrixWorkspace_sptr workspace,
   alg->setProperty("ConvolveMembers", true);
   alg->setProperty("Minimizer", "Levenberg-Marquardt");
   alg->setProperty("MaxIterations", 500);
-  alg->setProperty("OutputWorkspace", "output");
+  alg->setProperty("OutputWorkspace", "OutputResults");
   alg->setLogging(false);
   return alg;
 }
diff --git a/qt/scientific_interfaces/Indirect/test/IndirectFittingModelTest.h b/qt/scientific_interfaces/Indirect/test/IndirectFittingModelTest.h
index 2d9cb283002548950ae439e5a4687b232f17c614..810e972216af872bd9a15ca0dfaa204cc846ba1d 100644
--- a/qt/scientific_interfaces/Indirect/test/IndirectFittingModelTest.h
+++ b/qt/scientific_interfaces/Indirect/test/IndirectFittingModelTest.h
@@ -335,7 +335,7 @@ public:
     std::string const rangeDelimiter = "_to_";
 
     TS_ASSERT_EQUALS(model->createOutputName(formatString, rangeDelimiter, 0),
-                     "WorkspaceName_s0_Gaussian_Result");
+                     "WorkspaceName_s0_Gaussian_Results");
   }
 
   void
@@ -346,7 +346,7 @@ public:
     std::string const rangeDelimiter = "_to_";
 
     TS_ASSERT_EQUALS(model->createOutputName(formatString, rangeDelimiter, 0),
-                     "Workspace_3456_s0_Gaussian_Result");
+                     "Workspace_3456_s0_Gaussian_Results");
   }
 
   void
@@ -359,13 +359,13 @@ public:
 
     TS_ASSERT_EQUALS(
         model->createOutputName(formatStrings[0], rangeDelimiter, 0),
-        "Workspace_3456_s0_Gaussian_Result");
+        "Workspace_3456_s0_Gaussian_Results");
     TS_ASSERT_EQUALS(
         model->createOutputName(formatStrings[1], rangeDelimiter, 0),
-        "Workspace_3456_f0+s0_MSD_Result");
+        "Workspace_3456_f0+s0_MSD_Results");
     TS_ASSERT_EQUALS(
         model->createOutputName(formatStrings[2], rangeDelimiter, 0),
-        "Workspace_3456_s0_TeixeiraWater_Result");
+        "Workspace_3456_s0_TeixeiraWater_Results");
   }
 
   void