diff --git a/src/input/identificationpwizreader.cpp b/src/input/identificationpwizreader.cpp
index 088b4db089388d95f8e3be8ae03b3ec60ab5c195..c3afa93b421b7c5b154a79a7e122bc1c5a7f7993 100644
--- a/src/input/identificationpwizreader.cpp
+++ b/src/input/identificationpwizreader.cpp
@@ -247,7 +247,8 @@ getQVariantDoubleParam(pwiz::data::ParamContainer *item, pwiz::cv::CVID param)
 
 void
 IdentificationPwizReader::read(
-  IdentificationDataSource *p_identification_data_source, Project *p_project,
+  IdentificationDataSource *p_identification_data_source,
+  Project *p_project,
   IdentificationGroup *p_identification_group)
 {
   qDebug() << "IdentificationPwizReader::read begin";
@@ -314,9 +315,29 @@ IdentificationPwizReader::read(
               pappso::pappso_double mass_delta =
                 mod_ptr.get()->monoisotopicMassDelta;
 
-              peptide.addAaModification(
-                Utils::guessAaModificationPbyMonoisotopicMassDelta(mass_delta),
-                location - 1);
+              if(location > 0)
+                {
+                  location = location - 1;
+                }
+
+              try
+                {
+                  peptide.addAaModification(
+                    Utils::guessAaModificationPbyMonoisotopicMassDelta(
+                      mass_delta),
+                    location);
+                }
+              catch(pappso::PappsoException &error)
+                {
+                  throw pappso::PappsoException(
+                    QObject::tr("ERROR adding modification mass delta %1 to "
+                                "peptide %2 at "
+                                "position %3 :\n %4")
+                      .arg(mass_delta)
+                      .arg(peptide.toAbsoluteString())
+                      .arg(location)
+                      .arg(error.qwhat()));
+                }
               // std::vector<CVParam> cvParams;
               for(const pwiz::data::CVParam &param : mod_ptr.get()->cvParams)
                 {
diff --git a/src/input/mascot/mascotdatparser.cpp b/src/input/mascot/mascotdatparser.cpp
index 5f8140792813abcafd4d1a6166eb147249562d23..2751237a0a751c14299c1022a9896098525761fc 100644
--- a/src/input/mascot/mascotdatparser.cpp
+++ b/src/input/mascot/mascotdatparser.cpp
@@ -911,16 +911,12 @@ MascotDatParser::setVariableModifications(PeptideXtpSp &peptide_sp,
             [variable_modifications_string.mid(i, 1).toUInt() - 1];
           try
             {
-              if(i == 0)
+              if(i > 0)
                 {
-                  peptide_sp.get()->addAaModification(
-                    mascot_modification.modification, 0);
-                }
-              else
-                {
-                  peptide_sp.get()->addAaModification(
-                    mascot_modification.modification, i - 1);
+                  i = i - 1;
                 }
+              peptide_sp.get()->addAaModification(
+                mascot_modification.modification, i);
             }
           catch(pappso::PappsoException &error)
             {
@@ -929,7 +925,7 @@ MascotDatParser::setVariableModifications(PeptideXtpSp &peptide_sp,
                             "position %3 :\n %4")
                   .arg(mascot_modification.modification->getAccession())
                   .arg(peptide_sp.get()->toAbsoluteString())
-                  .arg(i - 1)
+                  .arg(i)
                   .arg(error.qwhat()));
             }
         }