diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4db3e0c05c1d6c3cb5981168dddd7e820cc112af..f91d1eecf7a2a6d80d96b076cdea8fbeed9ea971 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -28,11 +28,11 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Xml_EXECUTABLE_COMPILE_FLAGS} ${Qt5
 
 #sudo apt-get install libpappsomspp-dev
 FIND_PACKAGE( Pappsomspp REQUIRED )
-#SET (PAPPSOMSPP_DIR  "/home/olivier/eclipse/git/pappsomspp")
+SET (PAPPSOMSPP_DIR  "/home/olivier/eclipse/git/pappsomspp")
 # SET (PAPPSOMSPP_DIR  "/home/langella/developpement/git/pappsomspp")
-# SET (PAPPSOMSPP_INCLUDE_DIR "${PAPPSOMSPP_DIR}/src")
-# SET (PAPPSOMSPP_QT5_LIBRARY "${PAPPSOMSPP_DIR}/cbuild/src/libpappsomspp-qt5.so")
-# SET (PAPPSOMSPP_QT4_LIBRARY "${PAPPSOMSPP_DIR}/cbuild/src/libpappsomspp-qt4.so")
+ SET (PAPPSOMSPP_INCLUDE_DIR "${PAPPSOMSPP_DIR}/src")
+ SET (PAPPSOMSPP_QT5_LIBRARY "${PAPPSOMSPP_DIR}/cbuild/src/libpappsomspp-qt5.so")
+ SET (PAPPSOMSPP_QT4_LIBRARY "${PAPPSOMSPP_DIR}/cbuild/src/libpappsomspp-qt4.so")
 
 
 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake_modules)
diff --git a/src/core/identificationgroup.cpp b/src/core/identificationgroup.cpp
index a8f9efebc7f54f5434d3d67a54e25b3465719994..2403b432b69c08e6250936f8dc2f3b0455db40ea 100644
--- a/src/core/identificationgroup.cpp
+++ b/src/core/identificationgroup.cpp
@@ -205,12 +205,12 @@ void IdentificationGroup::collectMhDelta(std::vector< pappso::pappso_double> & d
         }
     }
 }
-void IdentificationGroup::startGrouping (const GroupingType & grouping_type) {
+void IdentificationGroup::startGrouping (const GroupingType & grouping_type, WorkMonitorInterface * p_work_monitor) {
     qDebug() << "IdentificationGroup::startGrouping begin ";
     if (_p_grp_experiment != nullptr) {
         delete _p_grp_experiment;
     }
-    _p_grp_experiment = GroupingExperiment::newInstance(grouping_type);
+    _p_grp_experiment = GroupingExperiment::newInstance(grouping_type, p_work_monitor);
     for (ProteinMatch * p_protein_match : _protein_match_list) {
         p_protein_match->setGroupingExperiment(_p_grp_experiment);
     }
diff --git a/src/core/identificationgroup.h b/src/core/identificationgroup.h
index 055785bbe85309ffa4d6a9b1f4f5fd1001b719af..01dbafba4159aa9d22ce0fc55ffb07deb85a827e 100644
--- a/src/core/identificationgroup.h
+++ b/src/core/identificationgroup.h
@@ -28,6 +28,7 @@
 #include "grouping/groupingexperiment.h"
 #include "grouping/ptm/ptmgroupingexperiment.h"
 #include "../utils/types.h"
+#include "../utils/workmonitor.h"
 
 #ifndef IDENTIFICATIONGROUP_H
 #define IDENTIFICATIONGROUP_H
@@ -102,7 +103,7 @@ public:
      * */
     void updateAutomaticFilters(const AutomaticFilterParameters & automatic_filter_parameters);
 
-    void startGrouping (const GroupingType & grouping_type);
+    void startGrouping (const GroupingType & grouping_type, WorkMonitorInterface * p_work_monitor);
     /** @brief creates a new PTM grouping experiment
      * */
     void startPtmGrouping ();
diff --git a/src/core/project.cpp b/src/core/project.cpp
index d5c84e7bbb3270b23bf102f27e5f5d4f6f182011..743a3ceb576aca19f4b0e1a75afcb7b5a034ba80 100644
--- a/src/core/project.cpp
+++ b/src/core/project.cpp
@@ -143,9 +143,9 @@ void Project::readXpipFile(WorkMonitorInterface * p_monitor, QFileInfo xpip_file
 }
 
 
-void Project::startGrouping() {
+void Project::startGrouping(WorkMonitorInterface * p_work_monitor) {
     for (IdentificationGroup * p_id_group : _identification_goup_list) {
-        p_id_group->startGrouping(_grouping_type);
+        p_id_group->startGrouping(_grouping_type, p_work_monitor);
     }
 }
 void Project::setLabelingMethodSp(LabelingMethodSp labeling_method_sp) {
diff --git a/src/core/project.h b/src/core/project.h
index a591edc7c4a648bc993f9ba05a1aee70ac5e84fd..52c8077bee15737ad16aabd2a904d274bd2ca714 100644
--- a/src/core/project.h
+++ b/src/core/project.h
@@ -61,7 +61,7 @@ public:
      * */
     void updateAutomaticFilters(const AutomaticFilterParameters & automatic_filter_parameters);
     const AutomaticFilterParameters & getAutomaticFilterParameters() const;
-    void startGrouping();
+    void startGrouping(WorkMonitorInterface * p_work_monitor);
 
     const GroupingType getGroupingType() const;
 
diff --git a/src/grouping/groupingexperiment.cpp b/src/grouping/groupingexperiment.cpp
index 8183207f7880891cf7a4ee78edfa9f81919cd919..25509c7ea4dc53a3bcf0ee074aa01c0bfa8d3996 100644
--- a/src/grouping/groupingexperiment.cpp
+++ b/src/grouping/groupingexperiment.cpp
@@ -25,9 +25,9 @@
 #include <pappsomspp/exception/exceptionnotimplemented.h>
 #include "groupingpeptidemass.h"
 
-GroupingExperiment::GroupingExperiment()
+GroupingExperiment::GroupingExperiment(WorkMonitorInterface * p_work_monitor)
 {
-
+    _p_work_monitor = p_work_monitor;
 }
 
 GroupingExperiment::~GroupingExperiment()
@@ -35,9 +35,9 @@ GroupingExperiment::~GroupingExperiment()
 
 }
 
-GroupingExperiment * GroupingExperiment::newInstance(const GroupingType & grouping_type) {
+GroupingExperiment * GroupingExperiment::newInstance(const GroupingType & grouping_type, WorkMonitorInterface * p_work_monitor) {
     if (grouping_type == GroupingType::PeptideMass) {
-        return new GroupingPeptideMass();
+        return new GroupingPeptideMass(p_work_monitor);
     }
     else {
         throw pappso::ExceptionNotImplemented(QObject::tr("Grouping algorithm not yet implemented"));
diff --git a/src/grouping/groupingexperiment.h b/src/grouping/groupingexperiment.h
index af56449df7b6e11b8b2d1e62063d771f6c4521bb..bd974b4a7f3aed15296d849d2d401feea33af763 100644
--- a/src/grouping/groupingexperiment.h
+++ b/src/grouping/groupingexperiment.h
@@ -23,6 +23,7 @@
 
 
 #include "../utils/types.h"
+#include "../utils/workmonitor.h"
 #include <pappsomspp/grouping/grpexperiment.h>
 
 #ifndef GROUPINGEXPERIMENT_H
@@ -34,15 +35,18 @@ class PeptideMatch;
 class GroupingExperiment
 {
 public:
-    GroupingExperiment();
+    GroupingExperiment(WorkMonitorInterface * p_work_monitor);
     ~GroupingExperiment();
 
-    static GroupingExperiment * newInstance(const GroupingType & grouping_type);
+    static GroupingExperiment * newInstance(const GroupingType & grouping_type, WorkMonitorInterface * p_work_monitor);
 
     virtual pappso::GrpProteinSp & getGrpProteinSp(ProteinMatch* p_protein_match) = 0;
     virtual pappso::GrpPeptideSp & setGrpPeptide(pappso::GrpProteinSp proteinSp, PeptideMatch* p_peptide_match) = 0;
     virtual void addPostGroupingGrpProteinSpRemoval(pappso::GrpProteinSp sp_protein) = 0;
     virtual void startGrouping()= 0;
+    
+protected:
+    WorkMonitorInterface * _p_work_monitor;
 
 };
 
diff --git a/src/grouping/groupingpeptidemass.cpp b/src/grouping/groupingpeptidemass.cpp
index 0e2d0078b1492c6b8423c5b506fbf2b1bf663293..a1b47b2ffd6679f9a6756a0eeaebf4d6dadc0ff2 100644
--- a/src/grouping/groupingpeptidemass.cpp
+++ b/src/grouping/groupingpeptidemass.cpp
@@ -25,11 +25,46 @@
 #include "../core/proteinmatch.h"
 #include "../core/peptidematch.h"
 #include <QDebug>
+#include <pappsomspp/grouping/grpgroupingmonitor.h>
 
-GroupingPeptideMass::GroupingPeptideMass()
+
+class GrpGroupingMonitor: public pappso::GrpGroupingMonitorInterface
+{
+public:
+    GrpGroupingMonitor(WorkMonitorInterface * p_work_monitor) {
+        _p_work_monitor = p_work_monitor;
+    };
+    ~GrpGroupingMonitor() {
+    };
+    virtual void startGrouping(std::size_t total_number_protein) override {
+        _p_work_monitor->message(QObject::tr("grouping %1 proteins").arg(total_number_protein));
+        _total_number_proteins = total_number_protein;
+    };
+    virtual void groupingProtein() override {};
+    virtual void startRemovingNonInformativeSubGroupsInAllGroups(std::size_t total_number_group)override{
+        _total_number_group = total_number_group;
+    };
+    virtual void stopRemovingNonInformativeSubGroupsInAllGroups(std::size_t total_number_group)override{
+        _total_number_group = total_number_group;
+    };
+    virtual void removingNonInformativeSubGroupsInGroup()override{
+        _p_work_monitor->message(QObject::tr("removing non informative subgroups in %1 groups representing %2 proteins").arg(_total_number_group).arg(_total_number_proteins));
+    };
+    virtual void startNumberingAllGroups(std::size_t total_number_group)override{
+        _p_work_monitor->message(QObject::tr("numbering in %1 groups representing %2 proteins").arg(_total_number_group).arg(_total_number_proteins));
+    };
+    virtual void stopGrouping()override{};
+private:
+    WorkMonitorInterface * _p_work_monitor;
+    std::size_t _total_number_proteins;
+    std::size_t _total_number_group;
+};
+
+GroupingPeptideMass::GroupingPeptideMass(WorkMonitorInterface * p_work_monitor): GroupingExperiment(p_work_monitor)
 {
 
     //_p_monitor = new pappso::GrpGroupingMonitor();
+    _p_monitor = new GrpGroupingMonitor(_p_work_monitor);
     _p_grp_experiment = new pappso::GrpExperiment(_p_monitor);
 
 }
diff --git a/src/grouping/groupingpeptidemass.h b/src/grouping/groupingpeptidemass.h
index 2391bba35f91c1b37a2f14e45d2926a3b9489fe1..5f64a54c9548dbbd4e67fca04f87a624f07f7008 100644
--- a/src/grouping/groupingpeptidemass.h
+++ b/src/grouping/groupingpeptidemass.h
@@ -25,6 +25,8 @@
 #ifndef GROUPINGPEPTIDEMASS_H
 #define GROUPINGPEPTIDEMASS_H
 
+class GrpGroupingMonitor;
+
 class GroupingPeptideMass: public GroupingExperiment
 {
     friend class GroupingExperiment;
@@ -39,10 +41,10 @@ public:
     virtual void startGrouping() override;
 
 protected :
-    GroupingPeptideMass();
+    GroupingPeptideMass(WorkMonitorInterface * p_work_monitor);
 
 private :
-    pappso::GrpGroupingMonitor * _p_monitor = nullptr;
+    GrpGroupingMonitor * _p_monitor = nullptr;
     pappso::GrpExperiment * _p_grp_experiment;
 };
 
diff --git a/src/gui/waiting_message_dialog/waiting_message_dialog.ui b/src/gui/waiting_message_dialog/waiting_message_dialog.ui
index d0ac9f0831a5528629f8f1e6b37f402a31be32eb..7f643a6055c21652eab7ece373771537e41f9ff7 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>150</height>
+    <height>186</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -22,6 +22,12 @@
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
       <widget class="QLabel" name="movie_label">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
        <property name="text">
         <string>movie</string>
        </property>
@@ -32,6 +38,9 @@
        <property name="text">
         <string>TextLabel</string>
        </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
       </widget>
      </item>
     </layout>
diff --git a/src/gui/workerthread.cpp b/src/gui/workerthread.cpp
index ff9cb5c7b749f1459e5a25db540dac0c9f5e2006..d5ada7b4c68a7e120bdea5ddec4140f67caf7a56 100644
--- a/src/gui/workerthread.cpp
+++ b/src/gui/workerthread.cpp
@@ -219,7 +219,7 @@ void WorkerThread::doGroupingOnIdentification(IdentificationGroup * p_identifica
     try {
         emit loadingMessage(tr("grouping proteins"));
         try {
-            p_identification_group->startGrouping(grouping_type);
+            p_identification_group->startGrouping(grouping_type, _p_work_monitor);
 
         }
         catch (pappso::PappsoException exception_pappso) {
@@ -241,7 +241,7 @@ void WorkerThread::doGrouping(ProjectSp project_sp) {
     try {
         emit loadingMessage(tr("grouping proteins"));
         try {
-            project_sp.get()->startGrouping();
+            project_sp.get()->startGrouping(_p_work_monitor);
 
         }
         catch (pappso::PappsoException exception_pappso) {