diff --git a/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.cpp b/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.cpp
index ea77ccb123090e56ca287311fcac8ab0075c9642..c3816e247a0b2c6caf311845c9bdd9983ec3e5e2 100644
--- a/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.cpp
@@ -255,8 +255,9 @@ void IndirectDataTablePresenter::addNewData(std::size_t index) {
   MantidQt::API::SignalBlocker<QObject> blocker(m_dataTable);
   const auto start = m_dataTable->rowCount();
 
-  const auto addRow =
-      [&](std::size_t spectrum) { addTableEntry(index, spectrum); };
+  const auto addRow = [&](std::size_t spectrum) {
+    addTableEntry(index, spectrum);
+  };
   m_model->applySpectra(index, addRow);
 
   if (m_model->numberOfWorkspaces() > m_dataPositions.size())
@@ -264,6 +265,13 @@ void IndirectDataTablePresenter::addNewData(std::size_t index) {
 }
 
 void IndirectDataTablePresenter::updateData(std::size_t index) {
+  if (m_dataPositions.size() > index)
+    updateExistingData(index);
+  else
+    addNewData(index);
+}
+
+void IndirectDataTablePresenter::updateExistingData(std::size_t index) {
   MantidQt::API::SignalBlocker<QObject> blocker(m_dataTable);
   auto position = m_dataPositions[index];
   const auto nextPosition = getNextPosition(index);
diff --git a/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.h b/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.h
index 95014716d6407fc917c8da019182cbb63d935685..6bb7c05cb7fd24f5ea2cc1667e31088c2848ca67 100644
--- a/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.h
+++ b/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.h
@@ -109,6 +109,7 @@ private:
   void enableGlobalFittingRange();
   void disableGlobalFittingRange();
 
+  void updateExistingData(std::size_t index);
   void addNewData(std::size_t index);
   void addTableEntry(std::size_t dataIndex, std::size_t spectrum);
   std::size_t removeTableEntry(int row);
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitData.cpp b/qt/scientific_interfaces/Indirect/IndirectFitData.cpp
index 4c4a59c71f536f5b5601c42e42f68d67f6db9e0a..c59d39433736b3ea3ebf7342109ed4f8c9dea33d 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitData.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectFitData.cpp
@@ -201,7 +201,7 @@ std::string IndirectFitData::displayName(const std::string &formatString,
 }
 
 Mantid::API::MatrixWorkspace_sptr IndirectFitData::workspace() const {
-  return m_workspace.lock();
+  return m_workspace;
 }
 
 const Spectra &IndirectFitData::spectra() const { return m_spectra; }
@@ -223,7 +223,7 @@ IndirectFitData::getRange(std::size_t spectrum) const {
   const auto range = m_ranges.find(spectrum);
   if (range != m_ranges.end())
     return range->second;
-  return getBinRange(m_workspace.lock());
+  return getBinRange(m_workspace);
 }
 
 std::string IndirectFitData::getExcludeRegion(std::size_t spectrum) const {
@@ -268,8 +268,8 @@ void IndirectFitData::setStartX(double startX, std::size_t spectrum) {
   const auto range = m_ranges.find(spectrum);
   if (range != m_ranges.end())
     range->second.first = startX;
-  else if (const auto workspace = m_workspace.lock())
-    m_ranges[spectrum] = std::make_pair(startX, workspace->x(0).back());
+  else if (m_workspace)
+    m_ranges[spectrum] = std::make_pair(startX, m_workspace->x(0).back());
   else
     throw std::runtime_error(
         "Unable to set StartX: Workspace no longer exists.");
@@ -279,8 +279,8 @@ void IndirectFitData::setEndX(double endX, std::size_t spectrum) {
   const auto range = m_ranges.find(spectrum);
   if (range != m_ranges.end())
     range->second.second = endX;
-  else if (const auto workspace = m_workspace.lock())
-    m_ranges[spectrum] = std::make_pair(workspace->x(0).front(), endX);
+  else if (m_workspace)
+    m_ranges[spectrum] = std::make_pair(m_workspace->x(0).front(), endX);
   else
     throw std::runtime_error("Unable to set EndX: Workspace no longer exists.");
 }
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitData.h b/qt/scientific_interfaces/Indirect/IndirectFitData.h
index 09369e811f271308ebc3c4913fedbeeb26fc0192..0fe9ae537c9a762faf2ebca29a164863a1872ef5 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitData.h
+++ b/qt/scientific_interfaces/Indirect/IndirectFitData.h
@@ -188,7 +188,7 @@ public:
 private:
   void validateSpectra(const Spectra &spectra);
 
-  boost::weak_ptr<Mantid::API::MatrixWorkspace> m_workspace;
+  Mantid::API::MatrixWorkspace_sptr m_workspace;
   Spectra m_spectra;
   std::unordered_map<std::size_t, std::string> m_excludeRegions;
   std::unordered_map<std::size_t, std::pair<double, double>> m_ranges;
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp
index 651b15ab451f5ab259d5bcd86190c4958f260920..e3b1dbbd35f8ff623e24c811bf229da73d33e1ee 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp
@@ -10,8 +10,9 @@ namespace IDA {
 IndirectFitDataPresenter::IndirectFitDataPresenter(IndirectFittingModel *model,
                                                    IndirectFitDataView *view)
     : IndirectFitDataPresenter(
-          model, view, Mantid::Kernel::make_unique<IndirectDataTablePresenter>(
-                           model, view->getDataTable())) {}
+          model, view,
+          Mantid::Kernel::make_unique<IndirectDataTablePresenter>(
+              model, view->getDataTable())) {}
 
 IndirectFitDataPresenter::IndirectFitDataPresenter(
     IndirectFittingModel *model, IndirectFitDataView *view,
@@ -53,8 +54,9 @@ IndirectFitDataPresenter::IndirectFitDataPresenter(
   connect(m_tablePresenter.get(),
           SIGNAL(excludeRegionChanged(const std::string &, std::size_t,
                                       std::size_t)),
-          this, SIGNAL(excludeRegionChanged(const std::string &, std::size_t,
-                                            std::size_t)));
+          this,
+          SIGNAL(excludeRegionChanged(const std::string &, std::size_t,
+                                      std::size_t)));
 }
 
 IndirectFitDataView const *IndirectFitDataPresenter::getView() const {
@@ -114,6 +116,13 @@ void IndirectFitDataPresenter::updateSpectraInTable(std::size_t dataIndex) {
     m_tablePresenter->updateData(dataIndex);
 }
 
+void IndirectFitDataPresenter::updateDataInTable(std::size_t dataIndex) {
+  if (m_tablePresenter->isTableEmpty())
+    m_tablePresenter->addData(dataIndex);
+  else
+    m_tablePresenter->updateData(dataIndex);
+}
+
 void IndirectFitDataPresenter::setResolutionHidden(bool hide) {
   m_view->setResolutionHidden(hide);
 }
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h
index 2f2e2fbd9984a726f298458dd4e680cbb7e518d9..dcd98df89c5714e584039118e8901b0501a2f58a 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h
+++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h
@@ -91,6 +91,7 @@ protected:
 private:
   virtual std::unique_ptr<IAddWorkspaceDialog>
   getAddWorkspaceDialog(QWidget *parent) const;
+  void updateDataInTable(std::size_t dataIndex);
 
   IndirectFittingModel *m_model;
   PrivateFittingData m_singleData;