diff --git a/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h b/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h
index 81aa57eed08f579aeb7a38dffd7f0e7a80f270fd..e2ec61adec7ce6c1d3581be2086deb13ca1229c1 100644
--- a/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h
+++ b/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h
@@ -44,7 +44,9 @@ public:
   virtual void setResolutionWSSuffices(QStringList const &suffices) = 0;
   virtual void setResolutionFBSuffices(QStringList const &suffices) = 0;
 
-  virtual void setWorkspaceSelectorIndex(QString const &workspaceName) = 0;
+  virtual bool isSampleWorkspaceSelectorVisible() const = 0;
+  virtual void
+  setSampleWorkspaceSelectorIndex(QString const &workspaceName) = 0;
 
   virtual void readSettings(QSettings const &settings) = 0;
   virtual UserInputValidator &validate(UserInputValidator &validator) = 0;
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp
index 10e02007a8a7fda4f818be45771e914fc0d68fcd..c7bee8fe2d1fadc05225e5dbac71499e07f360ca 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp
@@ -65,6 +65,8 @@ IndirectFitDataPresenter::IndirectFitDataPresenter(
                                       std::size_t)));
 }
 
+IndirectFitDataPresenter::~IndirectFitDataPresenter() { observeReplace(false); }
+
 IIndirectFitDataView const *IndirectFitDataPresenter::getView() const {
   return m_view;
 }
@@ -144,10 +146,18 @@ void IndirectFitDataPresenter::loadSettings(const QSettings &settings) {
 void IndirectFitDataPresenter::replaceHandle(const std::string &workspaceName,
                                              const Workspace_sptr &workspace) {
   UNUSED_ARG(workspace)
-  const auto names = m_model->getWorkspaceNames();
-  const auto iter = std::find(names.begin(), names.end(), workspaceName);
-  if (iter != names.end() && !m_view->isMultipleDataTabSelected())
-    m_view->setWorkspaceSelectorIndex(QString::fromStdString(workspaceName));
+  if (m_model->hasWorkspace(workspaceName) &&
+      !m_view->isMultipleDataTabSelected())
+    selectReplacedWorkspace(QString::fromStdString(workspaceName));
+}
+
+void IndirectFitDataPresenter::selectReplacedWorkspace(
+    const QString &workspaceName) {
+  if (m_view->isSampleWorkspaceSelectorVisible()) {
+    setModelWorkspace(workspaceName);
+    emit dataChanged();
+  } else
+    m_view->setSampleWorkspaceSelectorIndex(workspaceName);
 }
 
 UserInputValidator &
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h
index 0acb861d958b5f2bca6fbe6dc85a5d5a4180ab90..0614eff9bb6c1dba20005fe7419cdb6d094893a0 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h
+++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h
@@ -32,7 +32,7 @@ public:
   IndirectFitDataPresenter(
       IndirectFittingModel *model, IIndirectFitDataView *view,
       std::unique_ptr<IndirectDataTablePresenter> tablePresenter);
-  ~IndirectFitDataPresenter() { observeReplace(false); }
+  ~IndirectFitDataPresenter();
 
   void setSampleWSSuffices(const QStringList &suffices);
   void setSampleFBSuffices(const QStringList &suffices);
@@ -92,6 +92,8 @@ private:
   getAddWorkspaceDialog(QWidget *parent) const;
   void updateDataInTable(std::size_t dataIndex);
 
+  void selectReplacedWorkspace(const QString &workspaceName);
+
   std::unique_ptr<IAddWorkspaceDialog> m_addWorkspaceDialog;
   IndirectFittingModel *m_model;
   PrivateFittingData m_singleData;
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp b/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp
index a050baed43772ad15f0a19dd5818c6b1c1aa1cc3..9c910a94a46626f4b7f5459730980140a159398b 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp
@@ -97,7 +97,11 @@ void IndirectFitDataView::setResolutionFBSuffices(const QStringList &suffices) {
   m_dataForm->dsResolution->setFBSuffixes(suffices);
 }
 
-void IndirectFitDataView::setWorkspaceSelectorIndex(
+bool IndirectFitDataView::isSampleWorkspaceSelectorVisible() const {
+  return m_dataForm->dsSample->isWorkspaceSelectorVisible();
+}
+
+void IndirectFitDataView::setSampleWorkspaceSelectorIndex(
     const QString &workspaceName) {
   m_dataForm->dsSample->setWorkspaceSelectorIndex(workspaceName);
   m_dataForm->dsSample->setSelectorIndex(1);
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataView.h b/qt/scientific_interfaces/Indirect/IndirectFitDataView.h
index 6bb6df9b48ce708cd4bc743b039d45054d40a9eb..9724485ef2c164d32b80d21f86ca5d1676af147d 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitDataView.h
+++ b/qt/scientific_interfaces/Indirect/IndirectFitDataView.h
@@ -45,7 +45,8 @@ public:
   virtual void setResolutionWSSuffices(const QStringList &suffices) override;
   virtual void setResolutionFBSuffices(const QStringList &suffices) override;
 
-	void setWorkspaceSelectorIndex(const QString &workspaceName);
+  bool isSampleWorkspaceSelectorVisible() const override;
+  void setSampleWorkspaceSelectorIndex(const QString &workspaceName) override;
 
   void readSettings(const QSettings &settings) override;
   UserInputValidator &validate(UserInputValidator &validator) override;
diff --git a/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp b/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp
index 9a2348218f9cd5f6160f23d0f753189d2bb82f9b..0f7652660e79f0fa8faf87ec4415d580252cf222 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp
@@ -339,6 +339,13 @@ PrivateFittingData::operator=(PrivateFittingData &&fittingData) {
 IndirectFittingModel::IndirectFittingModel()
     : m_previousModelSelected(false), m_fittingMode(FittingMode::SEQUENTIAL) {}
 
+bool IndirectFittingModel::hasWorkspace(
+    std::string const &workspaceName) const {
+  auto const names = getWorkspaceNames();
+  auto const iter = std::find(names.begin(), names.end(), workspaceName);
+  return iter != names.end();
+}
+
 MatrixWorkspace_sptr
 IndirectFittingModel::getWorkspace(std::size_t index) const {
   if (index < m_fittingData.size())
diff --git a/qt/scientific_interfaces/Indirect/IndirectFittingModel.h b/qt/scientific_interfaces/Indirect/IndirectFittingModel.h
index 6ed312bab0f4cefb2d2aeb3e20e87a01f3eda726..8c7d5fa665eff64a405b91e7eb8e7a6fc891050e 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFittingModel.h
+++ b/qt/scientific_interfaces/Indirect/IndirectFittingModel.h
@@ -47,6 +47,7 @@ public:
   IndirectFittingModel();
   virtual ~IndirectFittingModel() = default;
 
+  bool hasWorkspace(std::string const &workspaceName) const;
   virtual Mantid::API::MatrixWorkspace_sptr
   getWorkspace(std::size_t index) const;
   Spectra getSpectra(std::size_t index) const;
@@ -117,8 +118,6 @@ public:
                                             std::size_t spectrum) const;
   std::string getOutputBasename() const;
 
-  std::vector<std::string> getWorkspaceNames() const;
-
   void cleanFailedRun(Mantid::API::IAlgorithm_sptr fittingAlgorithm);
   void cleanFailedSingleRun(Mantid::API::IAlgorithm_sptr fittingAlgorithm,
                             std::size_t index);
@@ -142,6 +141,8 @@ protected:
   void removeFittingData(std::size_t index);
 
 private:
+  std::vector<std::string> getWorkspaceNames() const;
+
   void removeWorkspaceFromFittingData(std::size_t const &index);
 
   Mantid::API::IAlgorithm_sptr