diff --git a/src/core/tandem_run/tandemcondorprocess.cpp b/src/core/tandem_run/tandemcondorprocess.cpp
index 6bb30821a9e6a76d165e30b68069f00b34ccc205..adb6bebc101ef17ae9d01b106fc97f2a678d9989 100644
--- a/src/core/tandem_run/tandemcondorprocess.cpp
+++ b/src/core/tandem_run/tandemcondorprocess.cpp
@@ -73,6 +73,9 @@ TandemCondorProcess::TandemCondorProcess(MainWindow * p_main_window, WorkMonitor
 TandemCondorProcess::~TandemCondorProcess () {
     delete _p_tmp_dir;
 }
+unsigned int TandemCondorProcess::getCondorJobSize() const {
+    return _condor_job_size;
+}
 
 void TandemCondorProcess::prepareXmlDatabaseFile() {
 
@@ -386,3 +389,11 @@ void TandemCondorProcess::parseCondorJobNumber(QString condor_job) {
     }
 }
 
+
+void TandemCondorProcess::setCondorJobStatus(std::int8_t count_status[10]) {
+
+    QString status_message = QString("%1 unexpanded jobs\n%2 idle jobs\n%3 running jobs\n%4 removed jobs\n%5 completed jobs\n%6 held jobs\n%7 submission errors").arg(count_status[0]).arg(count_status[1]).arg(count_status[2]).arg(count_status[3]).arg(count_status[4]).arg(count_status[5]).arg(count_status[6]);
+    
+    _p_monitor->setText(status_message);
+
+}
diff --git a/src/core/tandem_run/tandemcondorprocess.h b/src/core/tandem_run/tandemcondorprocess.h
index 499548c38fcb805ecf25728d3d2383f88c14608f..666282010f8b37c6ef5a290efca71a77a5ab91e0 100644
--- a/src/core/tandem_run/tandemcondorprocess.h
+++ b/src/core/tandem_run/tandemcondorprocess.h
@@ -41,6 +41,10 @@ public:
 
     virtual void prepareXmlDatabaseFile();
     virtual void run();
+    
+    unsigned int getCondorJobSize() const;
+    void setCondorJobStatus(std::int8_t count_status[10]);
+    
 private :
     void parseCondorJobNumber(QString condor_job);
     void surveyCondorJob();
diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp
index 4ca131035d1fb5dd092fed968101be1d15f25e41..224713ac3ebd694468ae8df53a4def31c14a0885 100644
--- a/src/gui/mainwindow.cpp
+++ b/src/gui/mainwindow.cpp
@@ -138,6 +138,9 @@ void MainWindow::doDisplayLoadingMessagePercent(QString message, int value) {
     ui->statusbar->showMessage(message);
 }
 
+void MainWindow::doWorkerSetText(QString text) {
+    _p_waiting_message_dialog->setText(text);
+}
 void MainWindow::doWorkerAppendText(char * text) {
     _p_waiting_message_dialog->appendText(text);
 }
diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h
index 345901cea5b518f89d05f3b1092aac46c1018321..b1e56cefc345f039e579cd296945052393f00df6 100644
--- a/src/gui/mainwindow.h
+++ b/src/gui/mainwindow.h
@@ -76,6 +76,7 @@ public slots:
     void doDisplayLoadingMessage(QString message);
     void doDisplayLoadingMessagePercent(QString message, int value);
     void doWorkerAppendText(char *);
+    void doWorkerSetText(QString);
     void doProjectReady(ProjectSp project_sp);
     void doProjectNotReady(QString error);
     void doAcceptedLoadResultDialog();
diff --git a/src/gui/waiting_message_dialog/waitingmessagedialog.cpp b/src/gui/waiting_message_dialog/waitingmessagedialog.cpp
index 298f9e0bba20c6a2d55833f4d2943248758f77a7..881b8547fd8409421839cdc4a719bdcce398c569 100644
--- a/src/gui/waiting_message_dialog/waitingmessagedialog.cpp
+++ b/src/gui/waiting_message_dialog/waitingmessagedialog.cpp
@@ -100,6 +100,12 @@ void WaitingMessageDialog::appendText(char * text) {
     ui->console_plaintextedit->insertPlainText (text);
 }
 
+void WaitingMessageDialog::setText(const QString text) {
+    ui->console_plaintextedit->setHidden(false);
+    //ui->console_plaintextedit->appendText(text);
+    ui->console_plaintextedit->setPlainText(text);
+}
+
 void WaitingMessageDialog::hideEvent( QHideEvent* event ) {
     QWidget::hideEvent( event );
     qDebug() << "WaitingMessageDialog::hideEvent";
diff --git a/src/gui/waiting_message_dialog/waitingmessagedialog.h b/src/gui/waiting_message_dialog/waitingmessagedialog.h
index 4713f06015d6860205e5b5c82387b7ffb1370f02..9c9fc3e56bfcba2b262fac3cd5031af17ebb322a 100644
--- a/src/gui/waiting_message_dialog/waitingmessagedialog.h
+++ b/src/gui/waiting_message_dialog/waitingmessagedialog.h
@@ -47,6 +47,7 @@ public:
     void message(const QString & message);
     void message(const QString & message, int progress_value);
     void appendText(char * text);
+    void setText(const QString text);
     void showEvent( QShowEvent* event );
     void hideEvent( QHideEvent* event );
     
diff --git a/src/gui/workerthread.cpp b/src/gui/workerthread.cpp
index f1a5e822996979ad31b82f6266984bc315830124..4588035be4ba0ef7979ee404de57d1dc9aac73d8 100644
--- a/src/gui/workerthread.cpp
+++ b/src/gui/workerthread.cpp
@@ -54,6 +54,7 @@ WorkerThread::WorkerThread(MainWindow * p_main_window)
     connect(_p_work_monitor, &WorkMonitor::workerMessage, p_main_window,&MainWindow::doDisplayLoadingMessage);
     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_main_window, &MainWindow::operateXpipFile, this,&WorkerThread::doXpipFileLoad);
     connect(this, &WorkerThread::projectReady, p_main_window,&MainWindow::doProjectReady);
diff --git a/src/input/condorqxmlsaxhandler.cpp b/src/input/condorqxmlsaxhandler.cpp
index 7b8a557b4065b8dcb432399500101987c4b1b174..645239f85792a7a819304d573139200e4a49303a 100644
--- a/src/input/condorqxmlsaxhandler.cpp
+++ b/src/input/condorqxmlsaxhandler.cpp
@@ -33,6 +33,8 @@
 #include <pappsomspp/pappsoexception.h>
 
 CondorQxmlSaxHandler::CondorQxmlSaxHandler(TandemCondorProcess * tandem_condor_process) {
+    _is_empty = true;
+    _tandem_condor_process = tandem_condor_process;
 }
 CondorQxmlSaxHandler::~CondorQxmlSaxHandler() {
 }
@@ -40,20 +42,20 @@ CondorQxmlSaxHandler::~CondorQxmlSaxHandler() {
 
 
 bool CondorQxmlSaxHandler::startElement(const QString & namespaceURI, const QString & localName,
-                                  const QString & qName, const QXmlAttributes & attributes) {
+                                        const QString & qName, const QXmlAttributes & attributes) {
     qDebug()<< "CondorQxmlSaxHandler::startElement begin" << namespaceURI << " " << localName << " " << qName ;
     _tag_stack.push_back(qName);
     bool is_ok = true;
 
     try {
         //startElement_group
-        /*
-        if (qName == "match") {
-            is_ok = startElement_match(attributes);
-        } else if (qName == "protein") {
-            is_ok = startElement_protein(attributes);
+
+        if (qName == "c") {
+            is_ok = startElement_c(attributes);
+        } else if (qName == "a") {
+            is_ok = startElement_a(attributes);
         }
-*/
+
         _current_text.clear();
     }
     catch (pappso::PappsoException exception_pappso) {
@@ -68,20 +70,26 @@ bool CondorQxmlSaxHandler::startElement(const QString & namespaceURI, const QStr
 }
 
 bool CondorQxmlSaxHandler::endElement(const QString & namespaceURI, const QString & localName,
-                                const QString & qName) {
+                                      const QString & qName) {
 
     bool is_ok = true;
     // endElement_peptide_list
     try {
-        /*
-        if (qName == "protein")
+
+        if (qName == "a")
         {
-            is_ok = endElement_protein();
+            is_ok = endElement_a();
+        }
+        else if (qName == "c") {
+            is_ok = endElement_c();
         }
-        else if (qName == "identification") {
-            is_ok = endElement_identification();
+        else if (qName == "i") {
+            is_ok = endElement_i();
         }
-        */
+        else if (qName == "s") {
+            is_ok = endElement_s();
+        }
+
     }
     catch (pappso::PappsoException exception_pappso) {
         _errorStr = QObject::tr("ERROR in CondorQxmlSaxHandler::endElement tag %1, PAPPSO exception:\n%2").arg(qName).arg(exception_pappso.qwhat());
@@ -121,11 +129,37 @@ QString CondorQxmlSaxHandler::errorString() const {
 
 
 bool CondorQxmlSaxHandler::endDocument() {
-    //_p_project->getProteinStore().setRegexpDecoyPattern(_p_project->getProteinStore().getRegexpDecoy().pattern());
+
+    unsigned int really_completed_jobs = 0;
+    if (_is_empty) {
+        really_completed_jobs = _tandem_condor_process->getCondorJobSize();
+    } else {
+        int total_jobs = 0;
+        for (std::int8_t i=0; i < 10; i++) {
+            total_jobs += _count_status[i];
+        }
+
+        int diff_jobs = _tandem_condor_process->getCondorJobSize()
+                        - total_jobs;
+        really_completed_jobs = _count_status[(std::int8_t) CondorJobStatus::Completed] + diff_jobs;
+    }
+    _count_status[(std::int8_t) CondorJobStatus::Completed] = really_completed_jobs;
+
+     _tandem_condor_process->setCondorJobStatus(_count_status);
+    /*
+    xtandemCondorAnalysis.setJobCompleted(junexpanded, jidle, jrunning,
+    		jremoved, reallyCompletedJobs, jheld, jsubmission_error);
+
+    */
+
     return true;
 }
 
 bool CondorQxmlSaxHandler::startDocument() {
+    for (std::int8_t i=0; i < 10; i++) {
+        _count_status[i] = 0;
+    }
+    _is_empty = true;
     return true;
 }
 
@@ -134,6 +168,67 @@ bool CondorQxmlSaxHandler::characters(const QString &str) {
     return true;
 }
 
+bool CondorQxmlSaxHandler::startElement_c(QXmlAttributes attributes) {
+
+// <c>
+// <a n="ProcId"><i>0</i></a>
+    _condor_job_status = CondorJobStatus::Unexpanded;
+    _current_proc_id = 0;
+    _is_empty = false;
+    _current_remote_host = "";
+    _current_last_remote_host = "";
+    return true;
+
+}
+
+bool CondorQxmlSaxHandler::startElement_a(QXmlAttributes attributes) {
+    // logger.debug("startElementgroup begin");
+    // <group label="performance parameters" type="parameters">
+    _in_name = attributes.value("n");
+    return true;
+
+}
+
+bool CondorQxmlSaxHandler::endElement_a() {
+    _in_name = "";
+    return true;
+}
+
+bool CondorQxmlSaxHandler::endElement_i() {
+    if (_in_name == "ProcId") {
+        _current_proc_id = _current_text.toInt();
+    } else if (_in_name == "JobStatus") {
+        // <a n="JobStatus"><i>2</i></a>
+        _condor_job_status = static_cast<CondorJobStatus>(_current_text.toInt());
+        // logger.debug(currentProcId);
+    }
+    return true;
+}
+
+bool CondorQxmlSaxHandler::endElement_s() {
+    if (_in_name == "RemoteHost") {
+        // <a n="RemoteHost"><s>slot1@proteus3</s></a>
+        _current_remote_host = _current_text;
+    } else if ( _in_name == "LastRemoteHost") {
+        // <a n="LastRemoteHost"><s>slot1@proteus4</s></a>
+        _current_last_remote_host = _current_text;
+    }
+    return true;
+
+}
+
+bool CondorQxmlSaxHandler::endElement_c() {
+    /*
+     * 0 Unexpanded U 1 Idle I 2 Running R 3 Removed X 4 Completed C 5 Held
+     * H 6 Submission_err E
+     */
+    _count_status[(std::int8_t) _condor_job_status] += 1;
+
+    qDebug() << "currentRemoteHost:" << _current_remote_host <<
+             " currentLastRemoteHost" << _current_last_remote_host << " "
+             << (std::int8_t)_condor_job_status;
+}
+
 /*
 package fr.inra.pappso.xtandempipeline.sax_parse;
 
@@ -174,110 +269,6 @@ public void startDocument() throws SAXException {
 	this.empty = true;
 }
 
-@Override
-public void endDocument() throws SAXException {
-	int reallyCompletedJobs = 0;
-	if (this.empty) {
-		reallyCompletedJobs = xtandemCondorAnalysis.getCondorJobNumber();
-	} else {
-		int totalJobs = junexpanded + jidle + jrunning + jremoved
-				+ jcompleted + jheld + jsubmission_error;
-		int diffJobs = xtandemCondorAnalysis.getCondorJobNumber()
-				- totalJobs;
-		reallyCompletedJobs = jcompleted + diffJobs;
-	}
-
-	xtandemCondorAnalysis.setJobCompleted(junexpanded, jidle, jrunning,
-			jremoved, reallyCompletedJobs, jheld, jsubmission_error);
-
-	String statusMessage = "" + junexpanded + " unexpanded jobs\n";
-	statusMessage += jidle + " idle jobs\n";
-	statusMessage += jrunning + " running jobs\n";
-	statusMessage += jremoved + " removed jobs\n";
-	statusMessage += reallyCompletedJobs + " completed jobs\n";
-	statusMessage += jheld + " held jobs\n";
-	statusMessage += jsubmission_error + " submission_errors\n";
-
-	logger.debug(statusMessage);
-	xtandemCondorAnalysis.setStatusMessage(statusMessage);
-
-}
-
-// <c>
-// <a n="ProcId"><i>0</i></a>
-public void startElementc(String nameSpaceUri, Attributes attrs) {
-	this.empty = false;
-	currentProcId = null;
-	currentJobStatus = null;
-	currentRemoteHost = null;
-	currentLastRemoteHost = null;
-
-}
-
-public void startElementa(String nameSpaceUri, Attributes attrs) {
-	// logger.debug("startElementgroup begin");
-	// <group label="performance parameters" type="parameters">
-	this.inName = attrs.getValue("n");
-
-}
-
-public void endElementi(String nameSpaceUri, String data)
-		throws MSMSException {
-	if (inName.equals("ProcId")) {
-		this.currentProcId = new Integer(data);
-		// logger.debug(currentProcId);
-	} else if (inName.equals("JobStatus")) {
-		// <a n="JobStatus"><i>2</i></a>
-		this.currentJobStatus = new Integer(data);
-		// logger.debug(currentProcId);
-	}
-
-}
-
-public void endElements(String nameSpaceUri, String data)
-		throws MSMSException {
-	if (inName.equals("RemoteHost")) {
-		// <a n="RemoteHost"><s>slot1@proteus3</s></a>
-		this.currentRemoteHost = data;
-		// logger.debug(currentProcId);
-	} else if (inName.equals("LastRemoteHost")) {
-		// <a n="LastRemoteHost"><s>slot1@proteus4</s></a>
-		this.currentLastRemoteHost = data;
-		// logger.debug(currentProcId);
-	}
-
-}
-
-public void endElementa(String nameSpaceUri, String data) {
-	this.inName = "";
-}
-
-public void endElementc(String nameSpaceUri, String data)
-		throws MSMSException {
-	/*
-	 * 0 Unexpanded U 1 Idle I 2 Running R 3 Removed X 4 Completed C 5 Held
-	 * H 6 Submission_err E
-	 *
-	if (currentJobStatus == 0) {
-		this.junexpanded += 1;
-	} else if (currentJobStatus == 1) {
-		this.jidle += 1;
-	} else if (currentJobStatus == 2) {
-		this.jrunning += 1;
-	} else if (currentJobStatus == 3) {
-		this.jremoved += 1;
-	} else if (currentJobStatus == 4) {
-		this.jcompleted += 1;
-	} else if (currentJobStatus == 5) {
-		this.jheld += 1;
-	} else if (currentJobStatus == 6) {
-		this.jsubmission_error += 1;
-	}
-
-	logger.debug("currentRemoteHost:" + this.currentRemoteHost
-			+ " currentLastRemoteHost" + this.currentLastRemoteHost + " "
-			+ currentJobStatus);
-}
 
 }
 */
diff --git a/src/input/condorqxmlsaxhandler.h b/src/input/condorqxmlsaxhandler.h
index a0c7fcab6cd044f7e151c7cc76db0340f19b6676..dd946473b291d18a697f382681ff8dea937ca294 100644
--- a/src/input/condorqxmlsaxhandler.h
+++ b/src/input/condorqxmlsaxhandler.h
@@ -35,13 +35,24 @@
 
 class TandemCondorProcess;
 
+/** \def CondorJobStatus
+ * */
+enum class CondorJobStatus: std::int8_t {
+    Unexpanded =0, ///< 0 Unexpanded U
+    Idle =1, ///< 1 Idle I
+    Running=2, ///< 2 Running R
+    Removed=3, ///< 3 Removed X
+    Completed=4, ///< 4 Completed C
+    Held=5, ///< 5 Held H
+    Submission_err=6 ///< 6 Submission_err E
+};
+
 class CondorQxmlSaxHandler: public QXmlDefaultHandler
 {
 public:
     CondorQxmlSaxHandler(TandemCondorProcess * tandem_condor_process);
     ~CondorQxmlSaxHandler();
     
-    
     bool startElement(const QString & namespaceURI, const QString & localName,
                       const QString & qName, const QXmlAttributes & attributes);
 
@@ -58,6 +69,14 @@ public:
     bool error(const QXmlParseException &exception);
 
     QString errorString() const;
+    
+private:
+    bool startElement_c(QXmlAttributes attributes);
+    bool startElement_a(QXmlAttributes attributes);
+    bool endElement_c();
+    bool endElement_a();
+    bool endElement_i();
+    bool endElement_s();
 
 private:
     TandemCondorProcess * _tandem_condor_process;
@@ -65,6 +84,15 @@ private:
     std::vector<QString> _tag_stack;
     QString _errorStr;
     QString _current_text;
+    
+    QString _in_name;
+    CondorJobStatus _condor_job_status;
+    unsigned int _current_proc_id;
+    QString _current_remote_host;
+    QString _current_last_remote_host;
+    
+    std::int8_t _count_status[10];
+    bool _is_empty;
 
 };
 
diff --git a/src/utils/workmonitor.cpp b/src/utils/workmonitor.cpp
index a67d70c484c9a7175b70d01ada8449585e67037a..76ac1899141c34e0f64927e6cacef8e3ccada73d 100644
--- a/src/utils/workmonitor.cpp
+++ b/src/utils/workmonitor.cpp
@@ -60,3 +60,7 @@ void WorkMonitor::appendText(char * p_char) {
      //qDebug() << "WorkMonitor::setProgressMaximumValue " << max_value;
     emit workerAppendText(p_char);
 }
+
+void WorkMonitor::setText(const QString text) {
+    emit workerSetText(text);
+}
diff --git a/src/utils/workmonitor.h b/src/utils/workmonitor.h
index d347155190aedb1767ef6e63d449d52091bc458a..bf53e37f4eb3bfccda6d1eddace1937be660e050 100644
--- a/src/utils/workmonitor.h
+++ b/src/utils/workmonitor.h
@@ -41,6 +41,7 @@ public:
     virtual void message(const QString & message, int value) = 0;
     virtual void setProgressMaximumValue(int max_value) = 0;
     virtual void appendText(char * p_char) =0;
+    virtual void setText(const QString text)=0;
 };
 
 class WorkMonitor: public QObject, public WorkMonitorInterface
@@ -52,11 +53,13 @@ public:
     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:
     void workerMessage(QString message);
     void workerMessagePercent(QString message, int value);
     void workerAppendText(char * p_char);
+    void workerSetText(QString text);
 
 private :
     QTime _time;