diff --git a/GUI/coregui/Views/FitWidgets/FitSuiteManager.cpp b/GUI/coregui/Views/FitWidgets/FitSuiteManager.cpp
index 9ab591493337366d6267414a1b5ff307301fd689..36794256b17fd1fc49f9ce9aedde90dc74c5e951 100644
--- a/GUI/coregui/Views/FitWidgets/FitSuiteManager.cpp
+++ b/GUI/coregui/Views/FitWidgets/FitSuiteManager.cpp
@@ -24,11 +24,14 @@
 #include "IntensityDataItem.h"
 #include "FitParameterItems.h"
 #include "GUIHelpers.h"
+#include "FitLog.h"
+#include <QTextEdit>
 
 FitSuiteManager::FitSuiteManager(QObject* parent)
     : QObject(parent)
     , m_runFitManager(new RunFitManager(this))
     , m_observer(new GUIFitObserver)
+    , m_fitlog(new FitLog)
     , m_block_progress_update(false)
 {
     connect(m_observer.get(), &GUIFitObserver::plotsUpdate, this, &FitSuiteManager::onPlotsUpdate);
@@ -36,14 +39,21 @@ FitSuiteManager::FitSuiteManager(QObject* parent)
     connect(m_observer.get(), &GUIFitObserver::progressInfoUpdate,
             this, &FitSuiteManager::onProgressInfoUpdate);
 
+    connect(m_observer.get(), &GUIFitObserver::logInfoUpdate,
+            [&](const QString& text) {
+        m_fitlog->append(text.toStdString(), FitLogFlags::DEFAULT);});
+
     connect(m_runFitManager, &RunFitManager::fittingStarted,
             this, &FitSuiteManager::onFittingStarted);
     connect(m_runFitManager, &RunFitManager::fittingFinished,
             this, &FitSuiteManager::onFittingFinished);
     connect(m_runFitManager, &RunFitManager::fittingError,
-            this, &FitSuiteManager::fittingError);
+            this, &FitSuiteManager::onFittingError);
+
 }
 
+FitSuiteManager::~FitSuiteManager() = default;
+
 void FitSuiteManager::setItem(JobItem* item)
 {
     m_jobItem = item;
@@ -78,6 +88,7 @@ void FitSuiteManager::onStartFittingRequest()
     } catch(std::exception& e) {
         m_jobItem->setStatus(Constants::STATUS_FAILED);
         m_jobItem->fitSuiteItem()->mapper()->unsubscribe(this);
+        m_fitlog->append(e.what(), FitLogFlags::ERROR);
         emit fittingError(QString::fromStdString(e.what()));
     }
 
@@ -93,6 +104,11 @@ std::shared_ptr<GUIFitObserver> FitSuiteManager::fitObserver()
     return m_observer;
 }
 
+FitLog* FitSuiteManager::fitLog()
+{
+    return m_fitlog.get();
+}
+
 void FitSuiteManager::onStopFittingRequest()
 {
     m_runFitManager->interruptFitting();
@@ -106,6 +122,8 @@ void FitSuiteManager::onPlotsUpdate()
 
 void FitSuiteManager::onFittingStarted()
 {
+    m_fitlog->clearLog();
+
     m_jobItem->setStatus(Constants::STATUS_FITTING);
     m_jobItem->setProgress(0);
     m_jobItem->setBeginTime(GUIHelpers::currentDateTime());
@@ -124,9 +142,24 @@ void FitSuiteManager::onFittingFinished()
     m_jobItem->setDuration(m_runFitManager->getDuration());
     m_jobItem->fitSuiteItem()->mapper()->unsubscribe(this);
 
+    if(m_jobItem->isCompleted())
+        m_fitlog->append("Done", FitLogFlags::SUCCESS);
+
     emit fittingFinished();
 }
 
+void FitSuiteManager::onFittingError(const QString& text)
+{
+    QString message;
+    message.append("Current settings cause fitting failure.\n\n");
+    message.append(text);
+    m_fitlog->append(message.toStdString(), FitLogFlags::ERROR);
+
+    emit fittingError(message);
+}
+
+//! Propagates fit progress as reported by GUIFitObserver back to JobItem.
+
 void FitSuiteManager::onProgressInfoUpdate(const FitProgressInfo& info)
 {
     if(m_block_progress_update)
@@ -169,5 +202,7 @@ void FitSuiteManager::updateLog(const FitProgressInfo& info)
         message.append(parinfo);
     }
 
-    emit fittingMessage(message);
+    m_fitlog->append(message.toStdString(), FitLogFlags::DEFAULT);
+
+//    emit fittingMessage(message);
 }
diff --git a/GUI/coregui/Views/FitWidgets/FitSuiteManager.h b/GUI/coregui/Views/FitWidgets/FitSuiteManager.h
index 5df7a13ee84925744490d8a3a03f8502ede56d5f..af64eac4339dc88d2accfad3279b04d06b3977b4 100644
--- a/GUI/coregui/Views/FitWidgets/FitSuiteManager.h
+++ b/GUI/coregui/Views/FitWidgets/FitSuiteManager.h
@@ -25,6 +25,7 @@ class JobItem;
 class RunFitManager;
 class GUIFitObserver;
 class FitProgressInfo;
+class FitLog;
 
 //! Handles all activity related to the single fitting task for JobItem.
 //! Provides interaction between FitSuiteWidget and fit observers.
@@ -34,17 +35,19 @@ class BA_CORE_API_ FitSuiteManager : public QObject
     Q_OBJECT
 public:
     FitSuiteManager(QObject* parent = nullptr);
+    ~FitSuiteManager();
 
     void setItem(JobItem* item);
 
     RunFitManager* runFitManager();
     std::shared_ptr<GUIFitObserver> fitObserver();
+    FitLog* fitLog();
 
 signals:
     void fittingStarted();
     void fittingFinished();
     void fittingError(const QString& message);
-    void fittingMessage(const QString& message);
+//    void fittingMessage(const QString& message);
 
 public slots:
     void onStartFittingRequest();
@@ -54,6 +57,7 @@ private slots:
     void onPlotsUpdate();
     void onFittingStarted();
     void onFittingFinished();
+    void onFittingError(const QString& text);
     void onProgressInfoUpdate(const FitProgressInfo &info);
     void updateIterationCount(const FitProgressInfo &info);
     void updateFitParameterValues(const FitProgressInfo &info);
@@ -63,6 +67,7 @@ private:
     JobItem* m_jobItem;
     RunFitManager *m_runFitManager;
     std::shared_ptr<GUIFitObserver> m_observer;
+    std::unique_ptr<FitLog> m_fitlog;
     bool m_block_progress_update;
 };
 
diff --git a/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp b/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp
index 36be95ce0f83722796740c27ad9a58d022c6b4e3..8504fa5f80f761a736fdc96f7fb9ea9480192512 100644
--- a/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp
+++ b/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp
@@ -35,6 +35,7 @@
 #include "FitSuiteManager.h"
 #include "RunFitControlWidget.h"
 #include "JobMessagePanel.h"
+#include "FitLog.h"
 #include <QMessageBox>
 #include <QTabWidget>
 #include <QVBoxLayout>
@@ -96,6 +97,7 @@ void FitSuiteWidget::setModelTuningWidget(ParameterTuningWidget *tuningWidget)
 void FitSuiteWidget::setJobMessagePanel(JobMessagePanel* jobMessagePanel)
 {
     m_jobMessagePanel = jobMessagePanel;
+    m_fitSuiteManager->fitLog()->setMessagePanel(m_jobMessagePanel);
 }
 
 QSize FitSuiteWidget::sizeHint() const
@@ -108,52 +110,10 @@ QSize FitSuiteWidget::minimumSizeHint() const
     return QSize(25, 25);
 }
 
-//! Propagates fit progress as reported by GUIFitObserver back to JobItem.
-
-//void FitSuiteWidget::onProgressInfoUpdate(const FitProgressInfo &info)
-//{
-//    if(m_block_progress_update) return;
-
-//    m_block_progress_update = true;
-
-//    updateIterationCount(info);
-//    updateTuningWidgetParameterValues(info);
-//    updateLog(info);
-
-//    m_block_progress_update = false;
-//}
-
-
-void FitSuiteWidget::onFittingStarted()
-{
-    m_jobMessagePanel->onClearLog();
-}
-
-void FitSuiteWidget::onFittingFinished()
-{
-
-    if(m_currentItem->isCompleted())
-        m_jobMessagePanel->onMessage(QStringLiteral("Done"), QColor(Qt::darkBlue));
-}
-
-void FitSuiteWidget::onFittingLogUpdate(const QString& text)
-{
-    m_jobMessagePanel->onMessage(text);
-}
 
 void FitSuiteWidget::onFittingError(const QString& text)
 {
-    QString message;
-    message.append("Current settings cause fitting failure.\n\n");
-    message.append(text);
-    m_jobMessagePanel->onMessage(message, QColor(Qt::darkRed));
-
-    m_controlWidget->onFittingError(message);
-}
-
-void FitSuiteWidget::onFittingMessage(const QString& text)
-{
-    m_jobMessagePanel->onMessage(text);
+    m_controlWidget->onFittingError(text);
 }
 
 void FitSuiteWidget::connectSignals()
@@ -161,17 +121,7 @@ void FitSuiteWidget::connectSignals()
     connect(m_controlWidget, SIGNAL(startFittingPushed()), m_fitSuiteManager, SLOT(onStartFittingRequest()));
     connect(m_controlWidget, SIGNAL(stopFittingPushed()), m_fitSuiteManager, SLOT(onStopFittingRequest()));
 
-    connect(m_fitSuiteManager, SIGNAL(fittingStarted()), this, SLOT(onFittingStarted()));
-    connect(m_fitSuiteManager, SIGNAL(fittingFinished()), this, SLOT(onFittingFinished()));
-
-    connect(m_fitSuiteManager, SIGNAL(fittingMessage(QString)),
-            this, SLOT(onFittingMessage(QString)));
-
     connect(m_fitSuiteManager, SIGNAL(fittingError(QString)),
             this, SLOT(onFittingError(QString)));
-
-    connect(m_fitSuiteManager->fitObserver().get(), SIGNAL(logInfoUpdate(QString)),
-            this, SLOT(onFittingLogUpdate(QString)));
-
 }
 
diff --git a/GUI/coregui/Views/FitWidgets/FitSuiteWidget.h b/GUI/coregui/Views/FitWidgets/FitSuiteWidget.h
index ed9674476a1e7f6df7caa1393697c31d16d75376..5f70f32176c9c516b45eba822ecdad3107afde12 100644
--- a/GUI/coregui/Views/FitWidgets/FitSuiteWidget.h
+++ b/GUI/coregui/Views/FitWidgets/FitSuiteWidget.h
@@ -57,11 +57,7 @@ public:
     QSize minimumSizeHint() const;
 
 private slots:
-    void onFittingStarted();
-    void onFittingFinished();
-    void onFittingLogUpdate(const QString &text);
     void onFittingError(const QString &text);
-    void onFittingMessage(const QString &text);
 
 private:
     void connectSignals();