diff --git a/src/input/mascot/mascotdatparser.cpp b/src/input/mascot/mascotdatparser.cpp
index 21ed9da843a59f276967ea7f5cb06f2b71576493..1ef92308c4e054d3510afcfa157d2d89e4df6312 100644
--- a/src/input/mascot/mascotdatparser.cpp
+++ b/src/input/mascot/mascotdatparser.cpp
@@ -31,7 +31,8 @@
 #include "mimeparser.h"
 #include <QDebug>
 #include <pappsomspp/pappsoexception.h>
-#include <pappsomspp/peptide/peptide.h>
+#include "../../core/peptidextp.h"
+#include "../../core/proteinmatch.h"
 
 MascotDatParser::MascotDatParser(Project * p_project, IdentificationGroup * p_identification_group,
                                  IdentificationDataSource * p_identification_data_source) {
@@ -120,6 +121,7 @@ void MascotDatParser::parseHeaderLine(const QString & header_line) {
         else if (header_list[1].startsWith("queries")) {
             qDebug() << "queries=" <<  header_list[2];
             _number_of_queries = header_list[2].toUInt();
+            _query_peptide_results.resize(_number_of_queries);
         }
 //min_peaks_for_homology=6
 //max_hits=50
@@ -150,6 +152,8 @@ void MascotDatParser::parseHeaderLine(const QString & header_line) {
 void MascotDatParser::saveAndClearPeptide() {
     qDebug() << "MascotDatParser::saveAndClearPeptide begin";
     if (_current_peptide.query_index > 0) {
+        // save
+        _query_peptide_results[_current_peptide.query_index-1].push_back(_current_peptide);
         //parse and save
 
         QString peptide_str =_current_peptide.peptide_string_list.at(4);
@@ -161,7 +165,9 @@ void MascotDatParser::saveAndClearPeptide() {
                 peptide_str = peptide_str.replace(subst_list.at(0+i).toInt()-1,1,subst_list.at(2+i));
             }
         }
-        pappso::Peptide peptide(peptide_str);
+        PeptideXtpSp peptide_sp;
+        peptide_sp = PeptideXtp(peptide_str).makePeptideXtpSp();
+        peptide_sp = _p_project->getPeptideStore().getInstance(peptide_sp);
 
         if (_current_peptide.protein_string_list.size() != _current_peptide.fasta_file_list.size()) {
             throw pappso::PappsoException(QObject::tr("ERROR (_current_peptide.protein_string_list.size() != _current_peptide.fasta_file_list.size()) %1").arg(_current_peptide.protein_string_list.join(",\"")));
@@ -178,6 +184,24 @@ void MascotDatParser::saveAndClearPeptide() {
             }
             unsigned int start = position_list.at(1).toUInt();
             unsigned int stop = position_list.at(2).toUInt();
+
+            ProteinXtp protein;
+            protein.setAccession(accession);
+
+            ProteinMatch * p_protein_match = _p_identification_group->getProteinMatchInstance(protein.getAccession());
+            if (p_protein_match == nullptr) {
+                throw pappso::PappsoException(QObject::tr("ERROR (p_protein_match == nullptr) %1").arg(str));
+            }
+
+            ProteinXtpSp sp_xtp_protein = protein.makeProteinXtpSp();
+            p_protein_match->setProteinXtpSp(_p_project->getProteinStore().getInstance(sp_xtp_protein));
+            p_protein_match->setChecked(true);
+            
+            PeptideMatch peptide_match;
+            peptide_match.setStart(start);
+            //peptide_match.setPeptideEvidenceSp();
+            
+            p_protein_match->addPeptideMatch(peptide_match);
         }
     }
 
diff --git a/src/input/mascot/mascotdatparser.h b/src/input/mascot/mascotdatparser.h
index c349ff68c94b8fdfd27f7da9065709cc18bc2772..23f387754f333f3104cc0d4249171245f38fea4f 100644
--- a/src/input/mascot/mascotdatparser.h
+++ b/src/input/mascot/mascotdatparser.h
@@ -71,6 +71,8 @@ private:
     
     PeptideLine _current_peptide;
     
+    std::vector<std::vector<PeptideLine>> _query_peptide_results;
+    
     
 };