diff --git a/src/core/tandem_run/tandembatchprocess.cpp b/src/core/tandem_run/tandembatchprocess.cpp
index 6a07083ecf9315ec9406d220015e8edab74dff4d..33440c51ab6be473ea14bc6315bfb9b72c9acbb2 100644
--- a/src/core/tandem_run/tandembatchprocess.cpp
+++ b/src/core/tandem_run/tandembatchprocess.cpp
@@ -33,7 +33,8 @@
 #include <QFileInfo>
 #include <QDebug>
 
-TandemBatchProcess::TandemBatchProcess(WorkMonitorInterface * p_monitor, const TandemRunBatch & tandem_run_batch) {
+TandemBatchProcess::TandemBatchProcess(MainWindow * p_main_window, WorkMonitorInterface * p_monitor, const TandemRunBatch & tandem_run_batch) {
+    _p_main_window = p_main_window;
     _tandem_run_batch = tandem_run_batch;
     _p_monitor = p_monitor;
     _tmp_database_file.setAutoRemove(true);
@@ -43,6 +44,9 @@ TandemBatchProcess::~TandemBatchProcess() {
 }
 
 bool TandemBatchProcess::shouldIstop() {
+    if (_p_main_window->stopWorkerThread()) {
+        return true;
+    }
     return false;
 }
 void TandemBatchProcess::writeXmlDatabaseFile (QXmlStreamWriter * p_out) {
diff --git a/src/core/tandem_run/tandembatchprocess.h b/src/core/tandem_run/tandembatchprocess.h
index 0aed96910583b9774c41bd32db266922fa2f2411..7502c4b64c094ea752b872625f9db9982e1548b8 100644
--- a/src/core/tandem_run/tandembatchprocess.h
+++ b/src/core/tandem_run/tandembatchprocess.h
@@ -33,11 +33,12 @@
 #include "../../utils/workmonitor.h"
 #include <QTemporaryFile>
 #include <QXmlStreamWriter>
+#include "../../gui/mainwindow.h"
 
 class TandemBatchProcess
 {
 public:
-    TandemBatchProcess(WorkMonitorInterface * p_monitor, const TandemRunBatch & tandem_run_batch);
+    TandemBatchProcess(MainWindow * p_main_window, WorkMonitorInterface * p_monitor, const TandemRunBatch & tandem_run_batch);
      virtual ~TandemBatchProcess();
 
     virtual void run();
@@ -45,9 +46,9 @@ protected:
     void writeXmlDatabaseFile (QXmlStreamWriter * p_out);
     void writeXmlInputFile (QXmlStreamWriter * p_out, const QString & mz_file);
     virtual void prepareXmlDatabaseFile();
+    bool shouldIstop();
 private:
     void runOne(const QString & mz_file);
-    bool shouldIstop();
 
 protected:
     QString _preset_file;
@@ -60,6 +61,7 @@ private:
     
     
     QTemporaryFile _tmp_database_file;
+    MainWindow * _p_main_window=nullptr;
 };
 
 #endif // TANDEMBATCHPROCESS_H
diff --git a/src/core/tandem_run/tandemcondorprocess.cpp b/src/core/tandem_run/tandemcondorprocess.cpp
index 3bdaba62954c72204795f2177102bf6c5eedb366..dbb094a403c2c127668ed6a6aaf817fd3e236ffa 100644
--- a/src/core/tandem_run/tandemcondorprocess.cpp
+++ b/src/core/tandem_run/tandemcondorprocess.cpp
@@ -36,7 +36,7 @@
 #include <QThread>
 #include "../../input/condorqxmlsaxhandler.h"
 
-TandemCondorProcess::TandemCondorProcess(WorkMonitorInterface * p_monitor, const TandemRunBatch & tandem_run_batch) : TandemBatchProcess(p_monitor, tandem_run_batch) {
+TandemCondorProcess::TandemCondorProcess(MainWindow * p_main_window, WorkMonitorInterface * p_monitor, const TandemRunBatch & tandem_run_batch) : TandemBatchProcess(p_main_window,p_monitor, tandem_run_batch) {
     /*
     Universe   = vanilla
     notification   = Error
diff --git a/src/core/tandem_run/tandemcondorprocess.h b/src/core/tandem_run/tandemcondorprocess.h
index 38176c5d0532acb98516000dd1bb58fbc9381357..0792e44dcb96d05221d323bed03d4b77422ad863 100644
--- a/src/core/tandem_run/tandemcondorprocess.h
+++ b/src/core/tandem_run/tandemcondorprocess.h
@@ -36,7 +36,7 @@
 class TandemCondorProcess: public TandemBatchProcess
 {
 public:
-    TandemCondorProcess(WorkMonitorInterface * p_monitor, const TandemRunBatch & tandem_run_batch);
+    TandemCondorProcess(MainWindow * p_main_window, WorkMonitorInterface * p_monitor, const TandemRunBatch & tandem_run_batch);
     virtual ~TandemCondorProcess();
 
     virtual void prepareXmlDatabaseFile();
diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp
index df2ad7d40c8cdb5632be187650db383cb61f0caf..4ca131035d1fb5dd092fed968101be1d15f25e41 100644
--- a/src/gui/mainwindow.cpp
+++ b/src/gui/mainwindow.cpp
@@ -108,6 +108,10 @@ MainWindow::~MainWindow()
 
 }
 
+bool MainWindow::stopWorkerThread() {
+    return _p_waiting_message_dialog->stopWorkerThread();
+}
+
 void MainWindow::closeEvent(QCloseEvent * event) {
     if (true) {
         event->accept();
diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h
index f55e70742f48c9f333f42bec184f00b02e17ed0d..345901cea5b518f89d05f3b1092aac46c1018321 100644
--- a/src/gui/mainwindow.h
+++ b/src/gui/mainwindow.h
@@ -55,6 +55,11 @@ public:
 
     explicit MainWindow(QWidget * parent = 0);
     ~MainWindow();
+    
+    /** @brief tells if the worker should stop running his job
+     * @param bool true asks to stop
+     */
+    bool stopWorkerThread();
 
 public slots:
     void loadResults();
diff --git a/src/gui/waiting_message_dialog/waiting_message_dialog.ui b/src/gui/waiting_message_dialog/waiting_message_dialog.ui
index 5553964b837440a15d515aea04da7b1d73dd5fbb..d0ac9f0831a5528629f8f1e6b37f402a31be32eb 100644
--- a/src/gui/waiting_message_dialog/waiting_message_dialog.ui
+++ b/src/gui/waiting_message_dialog/waiting_message_dialog.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>746</width>
-    <height>86</height>
+    <height>150</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -46,14 +46,59 @@
    <item>
     <widget class="QPlainTextEdit" name="console_plaintextedit"/>
    </item>
+   <item>
+    <layout class="QHBoxLayout" name="stop_horizontal_layout">
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="stop_push_button">
+       <property name="text">
+        <string>Stop</string>
+       </property>
+       <property name="checkable">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
   </layout>
  </widget>
  <resources/>
- <connections/>
+ <connections>
+  <connection>
+   <sender>stop_push_button</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>WaitingMessageDialog</receiver>
+   <slot>toggledStopButton(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>704</x>
+     <y>130</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>806</x>
+     <y>197</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
  <slots>
   <slot>chooseFiles()</slot>
   <slot>reject()</slot>
   <slot>accept()</slot>
   <slot>clearFileList()</slot>
+  <slot>toggledStopButton(bool)</slot>
  </slots>
 </ui>
diff --git a/src/gui/waiting_message_dialog/waitingmessagedialog.cpp b/src/gui/waiting_message_dialog/waitingmessagedialog.cpp
index aea9e475fc764c4e32e6aa449510be0ec6c8b274..89a3107271c5df406c05797210fbb2efcaa40cde 100644
--- a/src/gui/waiting_message_dialog/waitingmessagedialog.cpp
+++ b/src/gui/waiting_message_dialog/waitingmessagedialog.cpp
@@ -25,6 +25,7 @@
 #include "waitingmessagedialog.h"
 #include <QDebug>
 #include <QLabel>
+#include <QMutexLocker>
 
 WaitingMessageDialog::WaitingMessageDialog(QWidget * parent):
     QDialog(parent),
@@ -44,10 +45,11 @@ WaitingMessageDialog::WaitingMessageDialog(QWidget * parent):
     }
     ui->movie_label->setMovie(_p_movie);
     ui->progress_bar->setVisible(false);
-    
+
     ui->progress_bar->setMaximum(100);
     ui->progress_bar->setMinimum(0);
     ui->console_plaintextedit->setHidden(true);
+    ui->stop_push_button->setVisible(false);
     //movie->start();
     qDebug() << "WaitingMessageDialog::WaitingMessageDialog end";
 }
@@ -59,8 +61,25 @@ WaitingMessageDialog::~WaitingMessageDialog()
     qDebug() << "WaitingMessageDialog::~WaitingMessageDialog end";
 }
 
+void WaitingMessageDialog::toggledStopButton(bool pushed) {
+    QMutexLocker mutex_locker(&_mutex);
+    _asked_to_stop = true;
+}
+
+bool WaitingMessageDialog::stopWorkerThread() {
+    QMutexLocker mutex_locker(&_mutex);
+    if (!ui->stop_push_button->isVisible()) {
+        ui->stop_push_button->setChecked(false);
+        ui->stop_push_button->setVisible(true);
+        _asked_to_stop = false;
+        return false;
+    }
+    return _asked_to_stop;
+
+}
+
 void WaitingMessageDialog::message(const QString & message) {
-    
+
     ui->progress_bar->setVisible(false);
     ui->message_label->setText(message);
 }
@@ -75,7 +94,7 @@ void WaitingMessageDialog::message(const QString & message, int progress_value)
 void WaitingMessageDialog::appendText(char * text) {
     ui->console_plaintextedit->setHidden(false);
     //ui->console_plaintextedit->appendText(text);
-    
+
     ui->console_plaintextedit->moveCursor (QTextCursor::End);
     ui->console_plaintextedit->insertPlainText (text);
 }
@@ -85,8 +104,8 @@ void WaitingMessageDialog::hideEvent( QHideEvent* event ) {
     qDebug() << "WaitingMessageDialog::hideEvent";
     _p_movie->stop();
     ui->console_plaintextedit->setHidden(true);
-} 
+}
 void WaitingMessageDialog::showEvent( QShowEvent* event ) {
     QWidget::showEvent( event );
     _p_movie->start();
-} 
+}
diff --git a/src/gui/waiting_message_dialog/waitingmessagedialog.h b/src/gui/waiting_message_dialog/waitingmessagedialog.h
index 64f66309f190ee1c35eb1ace90a39c67d92b4509..4713f06015d6860205e5b5c82387b7ffb1370f02 100644
--- a/src/gui/waiting_message_dialog/waitingmessagedialog.h
+++ b/src/gui/waiting_message_dialog/waitingmessagedialog.h
@@ -27,6 +27,7 @@
 #include <QDialog>
 #include <QStringListModel>
 #include <QMovie>
+#include <QMutex>
 #include "../project_view/automatic_filter_widget/automaticfilterwidget.h"
 
 
@@ -48,10 +49,20 @@ public:
     void appendText(char * text);
     void showEvent( QShowEvent* event );
     void hideEvent( QHideEvent* event );
+    
+    bool stopWorkerThread();
+    
+private slots:
+    void toggledStopButton(bool pushed);
 
 private:
     Ui::WaitingMessageDialog *ui;
     QMovie * _p_movie;
+    
+    bool _asked_to_stop = false;
+    
+    
+    QMutex _mutex;
 
 };
 
diff --git a/src/gui/workerthread.cpp b/src/gui/workerthread.cpp
index 4919ad087c3b091ddb1f4c30cf3d0c0bc24d6bac..f1a5e822996979ad31b82f6266984bc315830124 100644
--- a/src/gui/workerthread.cpp
+++ b/src/gui/workerthread.cpp
@@ -340,11 +340,11 @@ void WorkerThread::doRunningXtandem(TandemRunBatch tandem_run_batch) {
         QString default_location = settings.value("condor/tmp_dir", "").toString();
 
         if (default_location.isEmpty()) {
-            TandemBatchProcess xt_process (_p_work_monitor, tandem_run_batch);
+            TandemBatchProcess xt_process (_p_main_window ,_p_work_monitor, tandem_run_batch);
             xt_process.run();
         }
         else {
-            TandemCondorProcess xt_process (_p_work_monitor, tandem_run_batch);
+            TandemCondorProcess xt_process (_p_main_window ,_p_work_monitor, tandem_run_batch);
             xt_process.run();
         }