diff --git a/src/core/tandem_run/tandembatchprocess.cpp b/src/core/tandem_run/tandembatchprocess.cpp
index e8965d0dcfb77afafa4f32f3ed74f1586581d4f5..5179c93ab454a432150a669e5c474840dc19f935 100644
--- a/src/core/tandem_run/tandembatchprocess.cpp
+++ b/src/core/tandem_run/tandembatchprocess.cpp
@@ -124,6 +124,8 @@ void TandemBatchProcess::run() {
         runOne(mz_file);
         i++;
     }
+    
+    _p_monitor->finished(QObject::tr("%1 X!Tandem job(s) finished").arg(_tandem_run_batch._mz_file_list.size())); 
     qDebug() << "TandemBatchProcess::run end" ;
 }
 
diff --git a/src/core/tandem_run/tandemcondorprocess.cpp b/src/core/tandem_run/tandemcondorprocess.cpp
index 3a45526ef79dd436f58fd0001ec5830d2067bd49..9ce6f7aa58a9b64d400ddf3daacb3430ae25d26a 100644
--- a/src/core/tandem_run/tandemcondorprocess.cpp
+++ b/src/core/tandem_run/tandemcondorprocess.cpp
@@ -253,6 +253,7 @@ void TandemCondorProcess::run() {
 
     surveyCondorJob();
 
+    _p_monitor->finished(QObject::tr("%1 HTCondor X!Tandem job(s) finished").arg(_tandem_run_batch._mz_file_list.size())); 
     qDebug() << "TandemCondorProcess::run end" ;
 }
 
diff --git a/src/files/tandemparametersfile.cpp b/src/files/tandemparametersfile.cpp
index fdcb10163272b2ca8c2ea789b09f17eace867ea9..b00dd2c08c687daca85f81e23eb6b4d62883e770 100644
--- a/src/files/tandemparametersfile.cpp
+++ b/src/files/tandemparametersfile.cpp
@@ -36,9 +36,16 @@
 TandemParametersFile::TandemParametersFile(const QString & fasta_source) : _param_source(fasta_source)
 {
     qDebug() << "TandemParametersFile::TandemParametersFile "<< fasta_source;
+    if (!_param_source.exists()) {
+        throw pappso::PappsoException(QObject::tr("XML X!Tandem parameter file %1 does not exists").arg(_param_source.absoluteFilePath()));
+    }
 }
 TandemParametersFile::TandemParametersFile(const QFileInfo & fasta_source): _param_source(fasta_source)
 {
+    if (!_param_source.exists()) {
+        throw pappso::PappsoException(QObject::tr("XML X!Tandem parameter file %1 does not exists").arg(_param_source.absoluteFilePath()));
+    }
+
 }
 TandemParametersFile::TandemParametersFile(const TandemParametersFile & other) : _param_source(other._param_source)
 {
diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp
index 44520a82edd1d4209ae2b5ac183d4a4889aae84b..24b029bacffa1f9bf8719bc5e0111168bafb2240 100644
--- a/src/gui/mainwindow.cpp
+++ b/src/gui/mainwindow.cpp
@@ -128,6 +128,15 @@ void MainWindow::viewError(QString error) {
                          tr("Oops! an error occurred in XTPCPP. Dont Panic :"), error);
 }
 
+void MainWindow::doDisplayJobFinished(QString message) {
+    qDebug() << "MainWindow::doDisplayJobFinished " <<  message;
+    hideWaitingMessage();
+    QMessageBox::information(this,
+                         tr("job finished"), message);
+    
+    
+}
+
 void MainWindow::doDisplayLoadingMessage(QString message) {
     qDebug() << "MainWindow::doDisplayLoadingMessage " <<  message;
     _p_waiting_message_dialog->message(message);
diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h
index 0c8adc9d473702406cad8bb796a189e35ade1ce4..d0ab7b21ca5c6a7bc86824653d9bf76f44b4861e 100644
--- a/src/gui/mainwindow.h
+++ b/src/gui/mainwindow.h
@@ -76,6 +76,7 @@ public slots:
     void doActionModifications();
     void doDisplayLoadingMessage(QString message);
     void doDisplayLoadingMessagePercent(QString message, int value);
+    void doDisplayJobFinished(QString message);
     void doWorkerAppendText(char *);
     void doWorkerSetText(QString);
     void doProjectReady(ProjectSp project_sp);
diff --git a/src/gui/tandem_run_dialog/tandemrundialog.cpp b/src/gui/tandem_run_dialog/tandemrundialog.cpp
index 854ef8be107f64ae52fb8a90cb5893da373129fa..5d4f0aa6608aa478ebaadad232d3b28ff1f0bbda 100644
--- a/src/gui/tandem_run_dialog/tandemrundialog.cpp
+++ b/src/gui/tandem_run_dialog/tandemrundialog.cpp
@@ -120,7 +120,7 @@ void TandemRunDialog::selectPresetDirectory() {
 
         QString directory = QFileDialog::getExistingDirectory(this,tr("Choose preset directory"),default_preset_location );
 
-        if (!directory.isEmpty()) {
+        if (!directory.isEmpty() && ! directory.isNull()) {
             settings.setValue("path/tandemrun_preset_directory", directory);
             fillPresetComboBox();
         }
diff --git a/src/gui/workerthread.cpp b/src/gui/workerthread.cpp
index 4588035be4ba0ef7979ee404de57d1dc9aac73d8..ff9cb5c7b749f1459e5a25db540dac0c9f5e2006 100644
--- a/src/gui/workerthread.cpp
+++ b/src/gui/workerthread.cpp
@@ -55,6 +55,7 @@ WorkerThread::WorkerThread(MainWindow * p_main_window)
     connect(_p_work_monitor, &WorkMonitor::workerMessagePercent, p_main_window,&MainWindow::doDisplayLoadingMessagePercent);
     connect(_p_work_monitor, &WorkMonitor::workerAppendText, p_main_window,&MainWindow::doWorkerAppendText);
     connect(_p_work_monitor, &WorkMonitor::workerSetText, p_main_window,&MainWindow::doWorkerSetText);
+    connect(_p_work_monitor, &WorkMonitor::workerJobFinished, p_main_window,&MainWindow::doDisplayJobFinished);
 
     connect(p_main_window, &MainWindow::operateXpipFile, this,&WorkerThread::doXpipFileLoad);
     connect(this, &WorkerThread::projectReady, p_main_window,&MainWindow::doProjectReady);
diff --git a/src/utils/workmonitor.cpp b/src/utils/workmonitor.cpp
index 76ac1899141c34e0f64927e6cacef8e3ccada73d..e1294423fc6874952f7669b2d6c003234d9829ef 100644
--- a/src/utils/workmonitor.cpp
+++ b/src/utils/workmonitor.cpp
@@ -36,6 +36,10 @@ WorkMonitor::WorkMonitor() {
     _timer_duration = 200;
     _time.restart();
 }
+
+void WorkMonitor::finished(const QString & message) {
+    emit workerJobFinished(message);
+}
 void WorkMonitor::message(const QString & message) {
     if (_time.elapsed() > _timer_duration) {
         _time.currentTime();
@@ -52,12 +56,12 @@ void WorkMonitor::message(const QString & message, int value) {
     }
 }
 void WorkMonitor::setProgressMaximumValue(int max_value) {
-     //qDebug() << "WorkMonitor::setProgressMaximumValue " << max_value;
+    //qDebug() << "WorkMonitor::setProgressMaximumValue " << max_value;
     _max_value = max_value;
 }
 
 void WorkMonitor::appendText(char * p_char) {
-     //qDebug() << "WorkMonitor::setProgressMaximumValue " << max_value;
+    //qDebug() << "WorkMonitor::setProgressMaximumValue " << max_value;
     emit workerAppendText(p_char);
 }
 
diff --git a/src/utils/workmonitor.h b/src/utils/workmonitor.h
index bf53e37f4eb3bfccda6d1eddace1937be660e050..4c45540e5a384dbd156b7134927becf011587573 100644
--- a/src/utils/workmonitor.h
+++ b/src/utils/workmonitor.h
@@ -37,6 +37,7 @@
 class WorkMonitorInterface
 {
 public:
+    virtual void finished(const QString & message) = 0;
     virtual void message(const QString & message) = 0;
     virtual void message(const QString & message, int value) = 0;
     virtual void setProgressMaximumValue(int max_value) = 0;
@@ -49,13 +50,15 @@ class WorkMonitor: public QObject, public WorkMonitorInterface
     Q_OBJECT
 public:
     WorkMonitor();
+    void finished(const QString & message) override;
     void message(const QString & message) override;
     void message(const QString & message, int value) override;
     void setProgressMaximumValue(int max_value) override;
     void appendText(char * p_char) override;
     void setText(const QString text) override;
-    
-    signals:
+
+signals:
+    void workerJobFinished(QString message);
     void workerMessage(QString message);
     void workerMessagePercent(QString message, int value);
     void workerAppendText(char * p_char);