diff --git a/src/gui/xic_view/xic_box/xicbox.cpp b/src/gui/xic_view/xic_box/xicbox.cpp
index 42ff2d1ee9d89258fcd2f5ba5af021823c691200..2dbb525125c085525333ad79ff456d863dde29bb 100644
--- a/src/gui/xic_view/xic_box/xicbox.cpp
+++ b/src/gui/xic_view/xic_box/xicbox.cpp
@@ -36,6 +36,14 @@
 #include <pappsomspp/exception/exceptionnotpossible.h>
 
 
+bool XicBoxNaturalIsotope::contains(const pappso::XicPeakSp & peak) const {
+    for (const pappso::XicPeakSp & peak_i:detected_peak_list) {
+        if (peak_i.get() == peak.get()) {
+            return true;
+        }
+    }
+    return false;
+}
 
 class XicDetectionList: public pappso::XicDetectionSinkInterface {
 public:
@@ -146,10 +154,19 @@ XicBox::~XicBox()
 void XicBox::onXicWidgetClick(double rt, double intensity) {
     qDebug() << __FILE__ << " " <<__FUNCTION__ << " " << __LINE__;
     ui->xic_widget->clearXicPeakBorders();
-    for (pappso::XicPeakSp xic_peak_sp:_xic_peak_current_list) {
+    std::vector <pappso::XicPeakSp> draw_peak_borders;
+    for (XicBoxNaturalIsotope peak:_natural_isotope_list) {
         qDebug() << __FILE__ << " " <<__FUNCTION__ << " " << __LINE__;
-        ui->xic_widget->drawXicPeakBorders(xic_peak_sp);
+        draw_peak_borders.push_back(peak.one_peak_sp);
+        if (peak.one_peak_sp.get() != nullptr) {
+            ui->xic_widget->drawXicPeakBorders(peak.one_peak_sp);
+        }
+    }
+
+    if (_peptide_evidence_list.size() == 0) {
+        drawObservedAreaBars(draw_peak_borders);
     }
+
 }
 
 void XicBox::remove() {
@@ -216,26 +233,29 @@ void XicBox::setPeptideEvidenceInMsRun(const PeptideEvidence * p_peptide_evidenc
 void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) {
     qDebug() << "XicBox::setXic begin " << xic_sp_list.size();
     ui->xic_widget->clear();
+    for (int i=0; i < xic_sp_list.size(); i++) {
+        _natural_isotope_list[i].xic_sp = xic_sp_list[i];
+    }
     //pappso::XicWidget * xic_widget = new pappso::XicWidget(this);
     //ui->xic_list_widget->layout()->addWidget(xic_widget);
-    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");
+    for (XicBoxNaturalIsotope & xic_isotope :_natural_isotope_list) {
+        //qDebug() << "XicBox::setXic xic " << xic_isotope.xic_sp.get();
+        if (xic_isotope.xic_sp.get() == nullptr) {
+            throw new pappso::PappsoException("Error in XicBox::setXic:\n xic_isotope.xic_sp.get() == nullptr");
         }
-        qDebug() << "XicBox::setXic xic_sp_list[i].size() " << xic_sp_list[i].get()->size();
-        ui->xic_widget->addXicSp(xic_sp_list[i]);
-        QString isotope_name = QString("+%1").arg(_isotope_mass_list[i].get()->getIsotopeNumber());
-        if (_isotope_mass_list[i].get()->getIsotopeRank() > 1) {
-            isotope_name = QString("+%1 [%2]").arg(_isotope_mass_list[i].get()->getIsotopeNumber()).arg(_isotope_mass_list[i].get()->getIsotopeRank());
+        qDebug() << "XicBox::setXic xic_isotope.xic_sp.size() " << xic_isotope.xic_sp.get()->size();
+        ui->xic_widget->addXicSp(xic_isotope.xic_sp);
+        QString isotope_name = QString("+%1").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber());
+        if (xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank() > 1) {
+            isotope_name = QString("+%1 [%2]").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber()).arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank());
         }
-        isotope_name.append(QString(" (%1%)").arg((int) (_isotope_mass_list[i].get()->getIntensityRatio()*100)));
-        ui->xic_widget->setName(xic_sp_list[i].get(), isotope_name);
+        isotope_name.append(QString(" (%1%)").arg((int) (xic_isotope.peptide_natural_isotope_sp.get()->getIntensityRatio()*100)));
+        ui->xic_widget->setName(xic_isotope.xic_sp.get(), isotope_name);
 
-        if (_isotope_mass_list[i].get()->getIsotopeNumber() == 0) {
+        if (xic_isotope.peptide_natural_isotope_sp.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());
+                ui->xic_widget->addMsMsEvent(xic_isotope.xic_sp.get(), peptide_evidence->getRetentionTime());
             }
         }
     }
@@ -247,17 +267,19 @@ void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) {
         emit loadXic(_p_peptide_evidence->getMsRunP(), _isotope_mass_list[_xic_widget_list.size()].get()->getMz(), _p_xic_window->getXicExtractPrecision(), XicExtractMethod::max);
     }
     */
-    _xic_peak_match_list.clear();
     XicDetectionList xic_list;
     xic_list.setPeptideEvidenceList(_peptide_evidence_list);
 
+    std::vector <pappso::XicPeakSp> draw_peak_borders;
 
-    for (int i=0; i < xic_sp_list.size(); i++) {
+    for (XicBoxNaturalIsotope & xic_isotope :_natural_isotope_list) {
         try {
             xic_list.clear();
-            _p_xic_window->xicDetect(*(xic_sp_list[i].get()), &xic_list);
-            _xic_peak_match_list.push_back(xic_list.getMatchedPeak());
-            ui->xic_widget->addXicPeakList(xic_sp_list[i].get(), xic_list.getXicPeakList());
+            _p_xic_window->xicDetect(*(xic_isotope.xic_sp.get()), &xic_list);
+            xic_isotope.matched_peak_sp = xic_list.getMatchedPeak();
+            xic_isotope.detected_peak_list =  xic_list.getXicPeakList();
+            ui->xic_widget->addXicPeakList(xic_isotope.xic_sp.get(), xic_list.getXicPeakList());
+            draw_peak_borders.push_back(xic_isotope.matched_peak_sp);
         }
         catch (const pappso::ExceptionNotPossible & e) {
             qDebug() << e.qwhat();
@@ -266,7 +288,11 @@ void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) {
 
     qDebug() << "XicBox::setXic plot" ;
     ui->xic_widget->plot();
+    drawObservedAreaBars(draw_peak_borders);
+}
+
 
+void XicBox::drawObservedAreaBars(const std::vector<pappso::XicPeakSp> & observed_peak_to_draw_list) {
     if (_isotope_ratio_graph_observed_intensity == nullptr) {
         qDebug() << "XicBox::setXic plot new QCPBars" ;
         _isotope_ratio_graph_observed_intensity = new QCPBars(ui->histo_widget->xAxis, ui->histo_widget->yAxis2);
@@ -287,17 +313,23 @@ void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) {
     int i = 0;
 
     qDebug() << "XicBox::setXic plot _isotope_mass_list" ;
-    for (pappso::PeptideNaturalIsotopeAverageSp & natural_isotope_average: _isotope_mass_list) {
-        if (_xic_peak_match_list[i].get() == nullptr) {
+    for (const XicBoxNaturalIsotope & xic_isotope : _natural_isotope_list) {
+        pappso::XicPeakSp peak_to_draw;
+        for (pappso::XicPeakSp observed_peak : observed_peak_to_draw_list) {
+            if (xic_isotope.contains(observed_peak)) {
+                peak_to_draw = observed_peak;
+            }
+        }
+        if (peak_to_draw.get() == nullptr) {
         }
         else {
-            sum += _xic_peak_match_list[i].get()->getArea();
-            observed_intensity_data << _xic_peak_match_list[i].get()->getArea();
-            QString isotope_name = QString("+%1").arg(_isotope_mass_list[i].get()->getIsotopeNumber());
-            if (_isotope_mass_list[i].get()->getIsotopeRank() > 1) {
-                isotope_name = QString("+%1 [%2]").arg(_isotope_mass_list[i].get()->getIsotopeNumber()).arg(_isotope_mass_list[i].get()->getIsotopeRank());
+            sum += peak_to_draw.get()->getArea();
+            observed_intensity_data << peak_to_draw.get()->getArea();
+            QString isotope_name = QString("+%1").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber());
+            if (xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank() > 1) {
+                isotope_name = QString("+%1 [%2]").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber()).arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank());
             }
-            isotope_name.append(QString(" (%1%)").arg((int) (_isotope_mass_list[i].get()->getIntensityRatio()*100)));
+            isotope_name.append(QString(" (%1%)").arg((int) (xic_isotope.peptide_natural_isotope_sp.get()->getIntensityRatio()*100)));
             labels << isotope_name;
             ticks << i;
         }
@@ -321,11 +353,12 @@ void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) {
 
 
 void XicBox::setIsotopeMassList(std::vector<pappso::PeptideNaturalIsotopeAverageSp> isotope_mass_list) {
-    _isotope_mass_list = isotope_mass_list;
 
+    _natural_isotope_list.clear();
     std::vector<pappso::mz> mass_list;
-    for (pappso::PeptideNaturalIsotopeAverageSp & natural_isotope_average: _isotope_mass_list) {
+    for (pappso::PeptideNaturalIsotopeAverageSp & natural_isotope_average: isotope_mass_list) {
         mass_list.push_back(natural_isotope_average.get()->getMz());
+        _natural_isotope_list.push_back({nullptr, natural_isotope_average, nullptr, nullptr});
     }
 
     emit loadXic(_msrun_sp, mass_list, _p_xic_window->getXicExtractPrecision(), XicExtractMethod::max);
@@ -342,14 +375,14 @@ void XicBox::setIsotopeMassList(std::vector<pappso::PeptideNaturalIsotopeAverage
     QVector<QString> labels;
     int i = 0;
     double sum = 0;
-    for (pappso::PeptideNaturalIsotopeAverageSp & natural_isotope_average: _isotope_mass_list) {
-        sum += natural_isotope_average.get()->getIntensityRatio();
-        theoretical_ratio_data << natural_isotope_average.get()->getIntensityRatio();
-        QString isotope_name = QString("+%1").arg(_isotope_mass_list[i].get()->getIsotopeNumber());
-        if (_isotope_mass_list[i].get()->getIsotopeRank() > 1) {
-            isotope_name = QString("+%1 [%2]").arg(_isotope_mass_list[i].get()->getIsotopeNumber()).arg(_isotope_mass_list[i].get()->getIsotopeRank());
+    for (const XicBoxNaturalIsotope & xic_isotope: _natural_isotope_list) {
+        sum += xic_isotope.peptide_natural_isotope_sp.get()->getIntensityRatio();
+        theoretical_ratio_data << xic_isotope.peptide_natural_isotope_sp.get()->getIntensityRatio();
+        QString isotope_name = QString("+%1").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber());
+        if (xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank() > 1) {
+            isotope_name = QString("+%1 [%2]").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber()).arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank());
         }
-        isotope_name.append(QString(" (%1%)").arg((int) (_isotope_mass_list[i].get()->getIntensityRatio()*100)));
+        isotope_name.append(QString(" (%1%)").arg((int) (xic_isotope.peptide_natural_isotope_sp.get()->getIntensityRatio()*100)));
         labels << isotope_name;
         ticks << i;
         i++;
@@ -371,7 +404,7 @@ void XicBox::setIsotopeMassList(std::vector<pappso::PeptideNaturalIsotopeAverage
 
 
     ui->histo_widget->yAxis->setRange(0, sum);
-    ui->histo_widget->xAxis->setRange(-0.8, _isotope_mass_list.size());
+    ui->histo_widget->xAxis->setRange(-0.8, _natural_isotope_list.size());
     ui->histo_widget->replot();
 }
 
@@ -381,8 +414,8 @@ void XicBox::reExtractXic() {
     ui->xic_widget->clear();
 
     std::vector<pappso::mz> mass_list;
-    for (pappso::PeptideNaturalIsotopeAverageSp & natural_isotope_average: _isotope_mass_list) {
-        mass_list.push_back(natural_isotope_average.get()->getMz());
+    for (const XicBoxNaturalIsotope & xic_isotope: _natural_isotope_list) {
+        mass_list.push_back(xic_isotope.peptide_natural_isotope_sp.get()->getMz());
     }
     emit loadXic(_msrun_sp, mass_list, _p_xic_window->getXicExtractPrecision(), XicExtractMethod::max);
     qDebug() << "XicBox::reExtractXic end";
@@ -394,15 +427,21 @@ void XicBox::setRetentionTime(double rt) {
 }
 void XicBox::setXicPeakList(std::vector<std::pair<pappso::XicSp, pappso::XicPeakSp>> xic_peak_list) {
     qDebug() << "XicBox::setXicPeakList begin";
-    _xic_peak_current_list.clear();
     QString html ;
+    for (XicBoxNaturalIsotope & xic_isotope: _natural_isotope_list) {
+        xic_isotope.one_peak_sp = nullptr;
+    }
 
     for (std::pair<pappso::XicSp, pappso::XicPeakSp> & pair_xic_peak: xic_peak_list) {
+        for (XicBoxNaturalIsotope & xic_isotope: _natural_isotope_list) {
+            if (xic_isotope.xic_sp.get() == pair_xic_peak.first.get()) {
+                xic_isotope.one_peak_sp = pair_xic_peak.second;
+            }
+        }
         html.append(tr("<p>%1<br/>area: %2<br/>rt begin: %3<br/>rt max: %4<br/>rt end: %5<br/></p>").arg(ui->xic_widget->getName(pair_xic_peak.first.get())).arg(pair_xic_peak.second.get()->getArea()).arg(pair_xic_peak.second.get()->getLeftBoundary().rt)
                     .arg(pair_xic_peak.second.get()->getMaxXicElement().rt)
                     .arg(pair_xic_peak.second.get()->getRightBoundary().rt)
                    );
-        _xic_peak_current_list.push_back(pair_xic_peak.second);
     }
 
     ui->xic_widget->setToolTip(html);
diff --git a/src/gui/xic_view/xic_box/xicbox.h b/src/gui/xic_view/xic_box/xicbox.h
index 9efeb140fc5bdb02eb4bee727c9942c87421e451..91eac5074d1624a045ad8997c792f620cf7cfa27 100644
--- a/src/gui/xic_view/xic_box/xicbox.h
+++ b/src/gui/xic_view/xic_box/xicbox.h
@@ -43,6 +43,18 @@ namespace Ui {
 class XicBox;
 }
 
+
+struct XicBoxNaturalIsotope {
+    
+    bool contains(const pappso::XicPeakSp & peak) const;
+    
+    pappso::XicSp xic_sp;
+    pappso::PeptideNaturalIsotopeAverageSp peptide_natural_isotope_sp;
+    pappso::XicPeakSp matched_peak_sp;
+    pappso::XicPeakSp one_peak_sp;
+    std::vector <pappso::XicPeakSp> detected_peak_list;
+};
+
 class XicBox: public QWidget 
 {
     Q_OBJECT
@@ -67,6 +79,9 @@ private slots:
     void setXicPeakList(std::vector<std::pair<pappso::XicSp, pappso::XicPeakSp>> xic_peak_list);
     void onRtUnitChanged();
     void onXicWidgetClick(double rt, double intensity);
+    
+private:
+    void drawObservedAreaBars(const std::vector<pappso::XicPeakSp> & observed_peak_to_draw);
 
 private:
     Ui::XicBox *ui;
@@ -75,11 +90,8 @@ private:
     const PeptideEvidence * _p_peptide_evidence;
     MsRunSp _msrun_sp;
     std::vector<const PeptideEvidence *> _peptide_evidence_list;
-    std::vector<pappso::PeptideNaturalIsotopeAverageSp> _isotope_mass_list;
-    pappso::XicSp _xic_sp;
+    std::vector<XicBoxNaturalIsotope> _natural_isotope_list;
     std::vector<pappso::XicWidget *> _xic_widget_list;
-    std::vector<pappso::XicPeakSp> _xic_peak_match_list;
-    std::vector<pappso::XicPeakSp> _xic_peak_current_list;
     
     QCPBars * _isotope_ratio_graph_observed_intensity= nullptr;