diff --git a/src/pappsomspp/widget/massspectrumwidget/massspectrumwidget.cpp b/src/pappsomspp/widget/massspectrumwidget/massspectrumwidget.cpp
index c2a79237dc9df6ea6a480211b7a613b3fed82467..521621d7d79b31fba3b890bfb3f78c55bd996920 100644
--- a/src/pappsomspp/widget/massspectrumwidget/massspectrumwidget.cpp
+++ b/src/pappsomspp/widget/massspectrumwidget/massspectrumwidget.cpp
@@ -456,10 +456,20 @@ MassSpectrumWidget::computeIsotopeMassList()
 }
 
 void
-pappso::MassSpectrumWidget::highlightPrecursorPeaks(double precursor_mz)
+pappso::MassSpectrumWidget::highlightPrecursorPeaks(bool highlight_status)
 {
-  if(_ms_level > 1)
+  if(highlight_status == true)
     {
-      _custom_plot->highlightPrecursorPeaks(precursor_mz, _p_ms2_precision);
+      if(_ms_level > 1)
+        {
+          pappso_double precursor_mz_1 = _peptide_sp->getMz(1);
+          _custom_plot->highlightPrecursorPeaks(precursor_mz_1,
+                                                _p_ms2_precision);
+          pappso_double precursor_mz_charge =
+            _peptide_sp->getMz(_peptide_charge);
+          _custom_plot->highlightPrecursorPeaks(precursor_mz_charge,
+                                                _p_ms2_precision);
+        }
     }
+  _custom_plot->setPrecursorHighlightVisibility(highlight_status);
 }
diff --git a/src/pappsomspp/widget/massspectrumwidget/massspectrumwidget.h b/src/pappsomspp/widget/massspectrumwidget/massspectrumwidget.h
index ca240734b2e47ea2eb735b40d942303d064c4e29..5704f114165a5e55b9d5ebd44d202a742c297799 100644
--- a/src/pappsomspp/widget/massspectrumwidget/massspectrumwidget.h
+++ b/src/pappsomspp/widget/massspectrumwidget/massspectrumwidget.h
@@ -68,7 +68,7 @@ class PMSPP_LIB_DECL MassSpectrumWidget : public GraphicDeviceWidget
 
   bool savePdf(const QString &fileName, int width = 0, int height = 0);
   void toQPaintDevice(QPaintDevice *device, const QSize &size) override;
-  void highlightPrecursorPeaks(double precursor_mz);
+  void highlightPrecursorPeaks(bool highlight_status);
   // void setIsotopeMassList(std::vector<pappso::PeptideNaturalIsotopeAverageSp>
   // & isotope_mass_list);
 
diff --git a/src/pappsomspp/widget/massspectrumwidget/qcpspectrum.cpp b/src/pappsomspp/widget/massspectrumwidget/qcpspectrum.cpp
index 117c801607d3e90d3ceea37aebccfc09425bb09f..ff768164cc14d9d764c02df2346e57d24328a242 100644
--- a/src/pappsomspp/widget/massspectrumwidget/qcpspectrum.cpp
+++ b/src/pappsomspp/widget/massspectrumwidget/qcpspectrum.cpp
@@ -469,23 +469,39 @@ void
 pappso::QCPSpectrum::highlightPrecursorPeaks(double precursor_mz,
                                              PrecisionPtr ms2_precision)
 {
-  MzRange range(precursor_mz, ms2_precision);
-
-  for(const DataPoint &peak : *_p_spectrum)
+  if(mp_precursorLabels.size() == 0)
     {
-      if((peak.x > range.lower()) && (peak.x < range.upper()))
+      MzRange range(precursor_mz, ms2_precision);
+
+      for(const DataPoint &peak : *_p_spectrum)
         {
-          mp_peak_bars_precursor->addData(peak.x, peak.y);
-          QCPItemText *text_label = new QCPItemText(this);
-          text_label->setVisible(true);
-          text_label->setPositionAlignment(Qt::AlignBottom | Qt::AlignHCenter);
-          text_label->position->setType(QCPItemPosition::ptPlotCoords);
-          text_label->position->setCoords(
-            peak.x,
-            peak.y); // place position at center/top of axis rect
-          text_label->setFont(QFont(font().family(), 8));
-          text_label->setText("precursor");
-          text_label->setColor(Qt::cyan);
+          if((peak.x > range.lower()) && (peak.x < range.upper()))
+            {
+              mp_peak_bars_precursor->addData(peak.x, peak.y);
+              QCPItemText *text_label = new QCPItemText(this);
+              text_label->setVisible(true);
+              text_label->setPositionAlignment(Qt::AlignBottom |
+                                               Qt::AlignHCenter);
+              text_label->position->setType(QCPItemPosition::ptPlotCoords);
+              text_label->position->setCoords(
+                peak.x,
+                peak.y); // place position at center/top of axis rect
+              text_label->setFont(QFont(font().family(), 8));
+              text_label->setText("precursor");
+              text_label->setColor(Qt::cyan);
+              mp_precursorLabels.push_back(text_label);
+            }
         }
     }
 }
+
+void
+pappso::QCPSpectrum::setPrecursorHighlightVisibility(bool highlight_status)
+{
+  mp_peak_bars_precursor->setVisible(highlight_status);
+  for(QCPItemText *text_label : mp_precursorLabels)
+    {
+      text_label->setVisible(highlight_status);
+    }
+  replot();
+}
diff --git a/src/pappsomspp/widget/massspectrumwidget/qcpspectrum.h b/src/pappsomspp/widget/massspectrumwidget/qcpspectrum.h
index 199886df76708fb5876c4a56312d8554723bfe29..12fe237cf81d36ae035b8d25268f0797eaa04580 100644
--- a/src/pappsomspp/widget/massspectrumwidget/qcpspectrum.h
+++ b/src/pappsomspp/widget/massspectrumwidget/qcpspectrum.h
@@ -61,6 +61,7 @@ class QCPSpectrum : public QCustomPlot
                        pappso_double intensity);
   void addPeakIonIsotopeMatch(const PeakIonIsotopeMatch &peak_ion_match);
   void highlightPrecursorPeaks(double precursor_mz, PrecisionPtr ms2_precision);
+  void setPrecursorHighlightVisibility(bool highlight_status);
   virtual void mouseMoveEvent(QMouseEvent *event) override;
   virtual void mousePressEvent(QMouseEvent *event) override;
   virtual void mouseReleaseEvent(QMouseEvent *event) override;
@@ -85,6 +86,7 @@ class QCPSpectrum : public QCustomPlot
   QCPBars *_p_peak_bars;
   QCPBars *_p_peak_bars_isotope;
   QCPBars *mp_peak_bars_precursor;
+  std::vector<QCPItemText *> mp_precursorLabels;
   std::map<PeptideIon, QCPBars *> _map_ion_type_bars;
   QCPAxisRect *_p_delta_axis_rect;
   QCPGraph *_p_delta_graph;