diff --git a/src/input/identificationpwizreader.cpp b/src/input/identificationpwizreader.cpp
index ba02347f684bb57fbec4a417c4a5d3364d8d9971..638d279ff880347e146e1234d11b7088cb9e8a61 100644
--- a/src/input/identificationpwizreader.cpp
+++ b/src/input/identificationpwizreader.cpp
@@ -44,6 +44,7 @@
 #include <locale>
 #include "../core/proteinxtp.h"
 #include "../core/peptidextp.h"
+#include "../utils/utils.h"
 
 
 pwiz::identdata::IdentDataFile * getPwizIdentDataFile(const QString & filename);
@@ -102,7 +103,7 @@ IdentificationEngine IdentificationPwizReader::getIdentificationEngine() const {
     */
     IdentificationEngine identification_engine = IdentificationEngine::peptider;
     for (pwiz::identdata::AnalysisSoftwarePtr software_ptr :_pwiz_ident_data_file->analysisSoftwareList) {
-       // qDebug() << "IdentificationPwizReader::getIdentificationEngine " << QString::fromStdString(software_ptr.get()->cvParam(param).name);
+        // qDebug() << "IdentificationPwizReader::getIdentificationEngine " << QString::fromStdString(software_ptr.get()->cvParam(param).name);
         if (software_ptr.get()->softwareName.hasCVParam(pwiz::cv::MS_X_Tandem))
         {
             identification_engine = IdentificationEngine::XTandem;
@@ -162,13 +163,16 @@ void IdentificationPwizReader::read(
         for (pwiz::identdata::PeptidePtr seq_ptr :_pwiz_ident_data_file->sequenceCollection.peptides) {
             pwiz::identdata::Peptide * peptide_pwiz = seq_ptr.get();
             PeptideXtp peptide(QString::fromStdString( peptide_pwiz->peptideSequence));
-            
-            
+
+
             //<Modification monoisotopicMassDelta="42.01056468" location="1">
             //    <cvParam accession="MOD:00394" cvRef="PSI-MOD" name="acetylated residue"/>
             //</Modification>
             for (pwiz::identdata::ModificationPtr mod_ptr :peptide_pwiz->modification) {
                 unsigned int location = mod_ptr.get()->location;
+                pappso::pappso_double mass_delta = mod_ptr.get()->monoisotopicMassDelta;
+                
+                peptide.addAaModification(Utils::guessAaModificationPbyMonoisotopicMassDelta(mass_delta), location-1);
                 //std::vector<CVParam> cvParams;
                 for (const pwiz::data::CVParam & param: mod_ptr.get()->cvParams) {
                     qDebug() << "IdentificationPwizReader::read param "  << QString::fromStdString(param.name());
@@ -180,12 +184,12 @@ void IdentificationPwizReader::read(
                     }
                     */
                 }
-                
+
                 for (const pwiz::data::UserParam & param: mod_ptr.get()->userParams) {
-                     qDebug() << "IdentificationPwizReader::read UserParams "  << QString::fromStdString(param.name);
+                    qDebug() << "IdentificationPwizReader::read UserParams "  << QString::fromStdString(param.name);
                 }
             }
-            
+
             PeptideXtpSp peptide_sp(peptide.makePeptideXtpSp());
             peptide_sp = peptide_store.getInstance(peptide_sp);
             map_id2peptide.insert(std::pair<QString, PeptideXtpSp>(QString::fromStdString( peptide_pwiz->id), peptide_sp));
diff --git a/src/input/xtandemsaxhandler.cpp b/src/input/xtandemsaxhandler.cpp
index ee79ad8482612160fb2308008cdad66d08bd2a9b..2226d76e4e1b3616969b87ef17a2d9b42386e71c 100644
--- a/src/input/xtandemsaxhandler.cpp
+++ b/src/input/xtandemsaxhandler.cpp
@@ -35,6 +35,8 @@
 #include "../utils/peptidestore.h"
 #include "../utils/proteinstore.h"
 #include "../files/fastafile.h"
+#include "../utils/utils.h"
+
 
 XtandemSaxHandler::XtandemSaxHandler(Project * p_project, IdentificationGroup * p_identification_group,
                                      IdentificationDataSource * p_identification_data_source):_p_project(p_project)
@@ -314,7 +316,7 @@ bool XtandemSaxHandler::startElement_aa(QXmlAttributes attributes) {
 //<aa type="M" at="624" modified="15.99491" />
     bool is_ok = true;
     //qDebug() << "startElement_aa ";
-    pappso::AaModificationP modif = getAaModificationP(attributes.value("modified").simplified().toDouble());
+    pappso::AaModificationP modif = Utils::guessAaModificationPbyMonoisotopicMassDelta(attributes.value("modified").simplified().toDouble());
     unsigned int position_in_prot = attributes.value("at").simplified().toUInt()-1;
     _current_peptide_sp.get()->addAaModification(modif, position_in_prot-_p_peptide_match->getStart());
     //qDebug() << "startElement_aa end" ;
@@ -540,56 +542,3 @@ bool XtandemSaxHandler::characters(const QString &str) {
     return true;
 }
 
-
-pappso::AaModificationP XtandemSaxHandler::getAaModificationP(pappso::mz mass) const {
-    pappso::PrecisionP precision = pappso::Precision::getDaltonInstance(0.01);
-
-    pappso::AaModificationP oxidation = pappso::AaModification::getInstance("MOD:00719");
-    if (pappso::MassRange(oxidation->getMass(),precision).contains(mass)) {
-        return oxidation;
-    }
-    pappso::AaModificationP iodoacetamide = pappso::AaModification::getInstance("MOD:00397");
-    if (pappso::MassRange(iodoacetamide->getMass(),precision).contains(mass)) {
-        return iodoacetamide;
-    }
-    pappso::AaModificationP acetylated = pappso::AaModification::getInstance("MOD:00408");
-    if (pappso::MassRange(acetylated->getMass(),precision).contains(mass)) {
-        return acetylated;
-    }
-    pappso::AaModificationP phosphorylated = pappso::AaModification::getInstance("MOD:00696");
-    if (pappso::MassRange(phosphorylated->getMass(),precision).contains(mass)) {
-        return phosphorylated;
-    }
-    pappso::AaModificationP ammonia = pappso::AaModification::getInstance("MOD:01160");
-    if (pappso::MassRange(ammonia->getMass(),precision).contains(mass)) {
-        return ammonia;
-    }
-    pappso::AaModificationP dehydrated = pappso::AaModification::getInstance("MOD:00704");
-    if (pappso::MassRange(dehydrated->getMass(),precision).contains(mass)) {
-        return dehydrated;
-    }
-    pappso::AaModificationP dimethylated = pappso::AaModification::getInstance("MOD:00429");
-    if (pappso::MassRange(dimethylated->getMass(),precision).contains(mass)) {
-        return dimethylated;
-    }
-
-    pappso::AaModificationP dimethylated_medium = pappso::AaModification::getInstance("MOD:00552");
-    if (pappso::MassRange(dimethylated_medium->getMass(),precision).contains(mass)) {
-        return dimethylated_medium;
-    }
-
-    pappso::AaModificationP dimethylated_heavy = pappso::AaModification::getInstance("MOD:00638");
-    if (pappso::MassRange(dimethylated_heavy->getMass(),precision).contains(mass)) {
-        return dimethylated_heavy;
-    }
-    pappso::AaModificationP DimethylpyrroleAdduct = pappso::AaModification::getInstance("MOD:00628");
-    if (pappso::MassRange(DimethylpyrroleAdduct->getMass(),precision).contains(mass)) {
-        return DimethylpyrroleAdduct;
-    }
-
-    // modification not found, creating customized mod :
-    return pappso::AaModification::getInstanceCustomizedMod(mass);
-
-    throw pappso::ExceptionNotFound(QObject::tr("XpipSaxHandler::getAaModificationP => modification not found for mass %1").arg(mass));
-}
-
diff --git a/src/input/xtandemsaxhandler.h b/src/input/xtandemsaxhandler.h
index be0448349bc08e80aceea0393fb5f58f75c1573e..0e0a27ce6c8809db769605857cc4b449c99eda6f 100644
--- a/src/input/xtandemsaxhandler.h
+++ b/src/input/xtandemsaxhandler.h
@@ -75,8 +75,6 @@ private:
     bool endElement_domain();
     bool endElement_note();
 
-    pappso::AaModificationP getAaModificationP(pappso::mz mass) const;
-
 private:
     std::vector<QString> _tag_stack;
     QString _errorStr;
diff --git a/src/utils/utils.cpp b/src/utils/utils.cpp
index d3c583be7e22953b682eab6c71639b3fc57e4565..e75b6836a49bb797d005c4676358f9365db342a0 100644
--- a/src/utils/utils.cpp
+++ b/src/utils/utils.cpp
@@ -1,4 +1,6 @@
 #include "utils.h"
+#include <pappsomspp/exception/exceptionnotfound.h>
+#include <pappsomspp/mass_range.h>
 
 const QUrl Utils::getOlsUrl(QString psimod_accession) {
 
@@ -33,3 +35,56 @@ const QString Utils::getDatabaseName(ExternalDatabase database) {
     }
     return database_name;
 }
+
+
+pappso::AaModificationP Utils::guessAaModificationPbyMonoisotopicMassDelta(pappso::mz mass) {
+    pappso::PrecisionP precision = pappso::Precision::getDaltonInstance(0.01);
+
+    pappso::AaModificationP oxidation = pappso::AaModification::getInstance("MOD:00719");
+    if (pappso::MassRange(oxidation->getMass(),precision).contains(mass)) {
+        return oxidation;
+    }
+    pappso::AaModificationP iodoacetamide = pappso::AaModification::getInstance("MOD:00397");
+    if (pappso::MassRange(iodoacetamide->getMass(),precision).contains(mass)) {
+        return iodoacetamide;
+    }
+    pappso::AaModificationP acetylated = pappso::AaModification::getInstance("MOD:00408");
+    if (pappso::MassRange(acetylated->getMass(),precision).contains(mass)) {
+        return acetylated;
+    }
+    pappso::AaModificationP phosphorylated = pappso::AaModification::getInstance("MOD:00696");
+    if (pappso::MassRange(phosphorylated->getMass(),precision).contains(mass)) {
+        return phosphorylated;
+    }
+    pappso::AaModificationP ammonia = pappso::AaModification::getInstance("MOD:01160");
+    if (pappso::MassRange(ammonia->getMass(),precision).contains(mass)) {
+        return ammonia;
+    }
+    pappso::AaModificationP dehydrated = pappso::AaModification::getInstance("MOD:00704");
+    if (pappso::MassRange(dehydrated->getMass(),precision).contains(mass)) {
+        return dehydrated;
+    }
+    pappso::AaModificationP dimethylated = pappso::AaModification::getInstance("MOD:00429");
+    if (pappso::MassRange(dimethylated->getMass(),precision).contains(mass)) {
+        return dimethylated;
+    }
+
+    pappso::AaModificationP dimethylated_medium = pappso::AaModification::getInstance("MOD:00552");
+    if (pappso::MassRange(dimethylated_medium->getMass(),precision).contains(mass)) {
+        return dimethylated_medium;
+    }
+
+    pappso::AaModificationP dimethylated_heavy = pappso::AaModification::getInstance("MOD:00638");
+    if (pappso::MassRange(dimethylated_heavy->getMass(),precision).contains(mass)) {
+        return dimethylated_heavy;
+    }
+    pappso::AaModificationP DimethylpyrroleAdduct = pappso::AaModification::getInstance("MOD:00628");
+    if (pappso::MassRange(DimethylpyrroleAdduct->getMass(),precision).contains(mass)) {
+        return DimethylpyrroleAdduct;
+    }
+
+    // modification not found, creating customized mod :
+    return pappso::AaModification::getInstanceCustomizedMod(mass);
+
+    throw pappso::ExceptionNotFound(QObject::tr("Utils::guessAaModificationPbyMonoisotopicMassDelta => modification not found for mass %1").arg(mass));
+}
diff --git a/src/utils/utils.h b/src/utils/utils.h
index 5b5581f0f00a80c12223f29e355e2b714447b215..7f5c1ae5557ccab6ad8f4a44eed69c53400e324a 100644
--- a/src/utils/utils.h
+++ b/src/utils/utils.h
@@ -24,6 +24,7 @@
 #include <QString>
 #include "types.h"
 #include <pappsomspp/types.h>
+#include <pappsomspp/amino_acid/aamodification.h>
 
 #ifndef XTPUTILS_H
 #define XTPUTILS_H
@@ -33,6 +34,8 @@ public:
     static const QUrl getOlsUrl(QString modification);
     static const QString getDatabaseName(ExternalDatabase database);
     static const QString getXmlDouble(pappso::pappso_double number);
+    static pappso::AaModificationP guessAaModificationPbyMonoisotopicMassDelta(pappso::mz mass);
+
 };
 
 #endif // XTPUTILS_H