diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 71bd578d336578a1756d8c72fac5835c376398f5..159b03b3f21dff1f1d98b512f2626b6ff72305fe 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -28,8 +28,8 @@ 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/langella/developpement/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_WIDGET_QT5_LIBRARY "${PAPPSOMSPP_DIR}/cbuild/src/pappsomspp/widget/libpappsomspp-widget-qt5.so")
diff --git a/src/gui/xic_view/xic_box/xicbox.cpp b/src/gui/xic_view/xic_box/xicbox.cpp
index d1ef2b465db3ff4530b3c5f9360532b5730febf1..5a707ac7758454212f71d433c51557bef0f177fd 100644
--- a/src/gui/xic_view/xic_box/xicbox.cpp
+++ b/src/gui/xic_view/xic_box/xicbox.cpp
@@ -97,16 +97,29 @@ void XicBox::setPeptideEvidence(const PeptideEvidence * p_peptide_evidence) {
 }
 
 
-void XicBox::setXic(pappso::XicSp xic_sp) {
+void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) {
     qDebug() << "XicBox::setXic begin";
 
     //pappso::XicWidget * xic_widget = new pappso::XicWidget(this);
     //ui->xic_list_widget->layout()->addWidget(xic_widget);
-    ui->xic_widget->addXicSp(xic_sp);
-    for (const PeptideEvidence * peptide_evidence:_peptide_evidence_list) {
-        ui->xic_widget->addMsMsEvent(xic_sp.get(), peptide_evidence->getRetentionTime());
+    for (int i=0; i < xic_sp_list.size(); i++) {
+        qDebug() << "XicBox::setXic xic " << xic_sp_list[i].get();
+        if (xic_sp_list[i].get() == nullptr) {
+            throw new pappso::PappsoException("Error in XicBox::setXic:\n xic_sp_list[i].get() == nullptr");
+        }
+        qDebug() << "XicBox::setXic xic_sp_list[i].size() " << xic_sp_list[i].get()->size();
+        ui->xic_widget->addXicSp(xic_sp_list[i]);
+
+        if (_isotope_mass_list[i].get()->getIsotopeNumber() == 0) {
+            for (const PeptideEvidence * peptide_evidence:_peptide_evidence_list) {
+                qDebug() << "XicBox::setXic peptide_evidence " << peptide_evidence->getRetentionTime();
+                ui->xic_widget->addMsMsEvent(xic_sp_list[i].get(), peptide_evidence->getRetentionTime());
+            }
+        }
     }
+    qDebug() << "XicBox::setXic rescale" ;
     ui->xic_widget->rescale();
+    qDebug() << "XicBox::setXic plot" ;
     ui->xic_widget->plot();
 
     /*
diff --git a/src/gui/xic_view/xic_box/xicbox.h b/src/gui/xic_view/xic_box/xicbox.h
index f53525412dbeba3dda611caa084be58ab32e5cc1..4d8635e835f8f23401fa31d882dc0d51cefc06a4 100644
--- a/src/gui/xic_view/xic_box/xicbox.h
+++ b/src/gui/xic_view/xic_box/xicbox.h
@@ -56,7 +56,7 @@ signals :
     void computeIsotopeMassList(pappso::PeptideSp peptide_sp, unsigned int charge, pappso::PrecisionP precision, double minimum_isotope_pattern_ratio);
 private slots:
     void remove();
-    void setXic(pappso::XicSp xic_sp);
+    void setXic(std::vector< pappso::XicSp> xic_sp_list);
     void setIsotopeMassList(std::vector<pappso::PeptideNaturalIsotopeAverageSp> isotope_mass_list);
     void error(QString error_message);
 private:
diff --git a/src/gui/xic_view/xicworkerthread.cpp b/src/gui/xic_view/xicworkerthread.cpp
index 41a31f5fc69093f7dddb8d92e08e82a60c257a75..a617a6ca65daada02caa948a995c3b909861b9e7 100644
--- a/src/gui/xic_view/xicworkerthread.cpp
+++ b/src/gui/xic_view/xicworkerthread.cpp
@@ -45,7 +45,7 @@ void XicWorkerThread::doXicLoad(const MsRun * p_msrun, std::vector<pappso::mz> m
 
     }
     catch (pappso::PappsoException & error) {
-        emit operationFailed(tr("Error extracting XIC :\n%1").arg(error.qwhat()));
+        emit operationFailed(tr("Error extracting XIC for MSrun %1:\n%2").arg(p_msrun->getFilename()).arg(error.qwhat()));
     }
 }
 
diff --git a/src/gui/xic_view/xicworkerthread.h b/src/gui/xic_view/xicworkerthread.h
index 2b880137e879fae64a577608315897355ab7e63c..9623da53884691f247c0144cfd93dee09c053609 100644
--- a/src/gui/xic_view/xicworkerthread.h
+++ b/src/gui/xic_view/xicworkerthread.h
@@ -44,7 +44,7 @@ public slots:
     void doComputeIsotopeMassList(pappso::PeptideSp peptide_sp, unsigned int charge, pappso::PrecisionP precision, double minimum_isotope_pattern_ratio);
 
 signals:
-    void xicLoaded(pappso::XicSp xic_sp);
+    void xicLoaded(std::vector<pappso::XicSp> xic_sp_list);
     void isotopeMassListComputed(std::vector<pappso::PeptideNaturalIsotopeAverageSp> isotope_mass_list);
     void operationFailed(QString error);
 
diff --git a/src/main.cpp b/src/main.cpp
index 08a1fdc3983d2b4590fcd0b07c1dfab804bba095..f28726c12d83fca40065e2f015479c6cd577caae 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -37,9 +37,9 @@ int main(int argc, char *argv[])
     QApplication app(argc, argv);
 
     qRegisterMetaType<TandemRunBatch>("TandemRunBatch");
-    qRegisterMetaType<pappso::mz>("pappso::mz");
+    qRegisterMetaType<std::vector<pappso::mz>>("std::vector<pappso::mz>");
     qRegisterMetaType<pappso::PrecisionP>("pappso::PrecisionP");
-    qRegisterMetaType<pappso::XicSp>("pappso::XicSp");
+    qRegisterMetaType<std::vector<pappso::XicSp>>("std::vector<pappso::XicSp>");
     qRegisterMetaType<pappso::PeptideSp>("pappso::PeptideSp");
     qRegisterMetaType<XicExtractMethod>("XicExtractMethod");
     qRegisterMetaType<std::vector<pappso::PeptideNaturalIsotopeAverageSp>>("std::vector<pappso::PeptideNaturalIsotopeAverageSp>");
diff --git a/src/utils/readspectrum.cpp b/src/utils/readspectrum.cpp
index 1a0dd7c1e7c414977f162b11eee3de1ea0922371..c1655055b5d32d667de772909829648d9efe530b 100644
--- a/src/utils/readspectrum.cpp
+++ b/src/utils/readspectrum.cpp
@@ -47,7 +47,7 @@ pwiz::msdata::MSDataFile * getPwizMSDataFile(const QString & filename);
 
 pappso::QualifiedSpectrum getQualifiedSpectrumFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, unsigned int scan_num);
 
-void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_mzdata, pappso::Xic * p_xic, const std::vector<pappso::MassRange> & mass_range_list,  XicExtractMethod method);
+void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_mzdata, std::vector< pappso::Xic> & xic_list, const std::vector<pappso::MassRange> & mass_range_list,  XicExtractMethod method);
 
 
 pwiz::msdata::MSDataFile * getPwizMSDataFile(const QString & filename) {
@@ -78,8 +78,8 @@ pwiz::msdata::MSDataFile * getPwizMSDataFile(const QString & filename) {
     return dataFile;
 }
 
-void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, pappso::Xic * p_xic, const std::vector<pappso::MassRange> & mass_range_list,  XicExtractMethod method) {
-
+void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, std::vector< pappso::Xic> & xic_list, const std::vector<pappso::MassRange> & mass_range_list,  XicExtractMethod method) {
+    qDebug() << "getXicFromPwizMSDataFile begin mass_range_list.size()=" << mass_range_list.size() << " xic_list.size()=" << xic_list.size();
     std::string env;
     env=setlocale(LC_ALL,"");
     setlocale(LC_ALL,"C");
@@ -94,13 +94,17 @@ void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, pappso:
     std::vector<XicElement> peak_for_mass;
     for (const pappso::MassRange & mass_range: mass_range_list) {
         peak_for_mass.push_back(XicElement());
+        qDebug() << "getXicFromPwizMSDataFile begin mass_range=" << mass_range.getMz();
     }
 
+    bool ms1 = false;
+
     for (std::size_t i=0; i < spectrum_list_size; i++) {
         spectrum = p_spectrum_list->spectrum(i, false);
         unsigned int ms_level(QString(spectrum->cvParam(pwiz::msdata::MS_ms_level).value.c_str()).toUInt());
-
+//qDebug() << "getXicFromPwizMSDataFile ms_level" << ms_level;
         if (ms_level == 1) {
+            ms1 = true;
             spectrum = p_spectrum_list->spectrum(i, true);
             for (XicElement & peak: peak_for_mass) {
                 peak.rt = QString(spectrum->scanList.scans[0].cvParam(pwiz::msdata::MS_scan_start_time).value.c_str()).toDouble();
@@ -113,29 +117,40 @@ void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, pappso:
             // iterate through the m/z-intensity pairs
             for (vector<pwiz::msdata::MZIntensityPair>::const_iterator it=pairs.begin(), end=pairs.end(); it!=end; ++it)
             {
-                //qDebug() << "it->mz " << it->mz << " it->intensity" << it->intensity;
+                //qDebug() << "getXicFromPwizMSDataFile it->mz " << it->mz << " it->intensity" << it->intensity;
                 for (int i=0; i < mass_range_list.size(); i++) {
-                if (mass_range_list[i].contains(it->mz)) {
-                    if (method == XicExtractMethod::max) {
-                        if (peak_for_mass[i].intensity < it->intensity) {
-                            peak_for_mass[i].intensity = it->intensity;
+                    if (mass_range_list[i].contains(it->mz)) {
+                        if (method == XicExtractMethod::max) {
+                            if (peak_for_mass[i].intensity < it->intensity) {
+                                peak_for_mass[i].intensity = it->intensity;
+                            }
+                        }
+                        else {
+                            peak_for_mass[i].intensity += it->intensity;
                         }
                     }
-                    else {
-                        peak_for_mass[i].intensity += it->intensity;
-                    }
-                }
                 }
             }
 
-            p_xic->push_back(peak);
+            for (int i=0; i < mass_range_list.size(); i++) {
+                //qDebug() << "getXicFromPwizMSDataFile push_back " << peak_for_mass[i].rt;
+                xic_list[i].push_back(peak_for_mass[i]);
+            }
         }
 
     }
 
 
-    p_xic->sortByRetentionTime();
+    if (ms1 == false) {
+        throw pappso::PappsoException(QObject::tr("error extracting XIC: no MS level 1 in data file"));
+    }
+
+    for (int i=0; i < xic_list.size(); i++) {
+        xic_list[i] .sortByRetentionTime();
 
+        //qDebug() << "getXicFromPwizMSDataFile end " << xic_list[i].size();
+    }
+    qDebug() << "getXicFromPwizMSDataFile end";
 
 
     setlocale(LC_ALL,env.c_str());
@@ -395,9 +410,13 @@ std::vector<pappso::XicSp> SpectrumStore::getXicSpFromMsRunSp(const MsRun * p_ms
     std::vector<pappso::XicSp> xic_sp_list;
     if (p_msdatafile != nullptr) {
         std::vector<Xic> xic_list;
-        getXicFromPwizMSDataFile(p_msdatafile, &xic_list, mass_range_list, method);
-        xic_sp = xic.makeXicSp();
-        qDebug() << "SpectrumStore::getXicSpFromMsRunSp end"  << xic_sp.get()->size();
+        xic_list.resize(mass_range_list.size());
+        getXicFromPwizMSDataFile(p_msdatafile, xic_list, mass_range_list, method);
+
+        for (const Xic & xic:xic_list) {
+            xic_sp_list.push_back( xic.makeXicSp());
+        }
+        //qDebug() << "SpectrumStore::getXicSpFromMsRunSp end"  <<  xic_sp.get()->size();
     }
-    return (xic_sp);
+    return (xic_sp_list);
 }