diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8df429b34b0b6a81bcd5d7ed519b2d0cb3815b9e..74c5329c76141ce293dc33f70880f734a54099c7 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/protein_list_view/protein_view.ui b/src/gui/protein_list_view/protein_view.ui
index 7934ff6a09a14fd36ad304a9b03dced8c58126a1..5541225bbf35adafeb7aef0bb13bcd213f272cbc 100644
--- a/src/gui/protein_list_view/protein_view.ui
+++ b/src/gui/protein_list_view/protein_view.ui
@@ -110,7 +110,11 @@
        <widget class="QLineEdit" name="msrun_auto_completion"/>
       </item>
       <item>
-       <widget class="QSpinBox" name="scan_number_edit"/>
+       <widget class="QSpinBox" name="scan_number_edit">
+        <property name="maximum">
+         <number>9999999</number>
+        </property>
+       </widget>
       </item>
      </layout>
     </item>
@@ -210,6 +214,38 @@
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>msrun_auto_completion</sender>
+   <signal>textChanged(QString)</signal>
+   <receiver>ProteinView</receiver>
+   <slot>doMsrunFileSearch(QString)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>574</x>
+     <y>360</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>860</x>
+     <y>501</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>scan_number_edit</sender>
+   <signal>valueChanged(int)</signal>
+   <receiver>ProteinView</receiver>
+   <slot>doScanNumberSearch(int)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>782</x>
+     <y>346</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>1091</x>
+     <y>324</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
  <slots>
   <slot>doNotValidHide(bool)</slot>
@@ -217,5 +253,7 @@
   <slot>doNotGroupedHide(bool)</slot>
   <slot>onProteinSearchEdit(QString)</slot>
   <slot>doSearchOn(QString)</slot>
+  <slot>doMsrunFileSearch(QString)</slot>
+  <slot>doScanNumberSearch(int)</slot>
  </slots>
 </ui>
diff --git a/src/gui/protein_list_view/proteinlistwindow.cpp b/src/gui/protein_list_view/proteinlistwindow.cpp
index 4acadde0fd8e6fe67460488248ee9876c62f1865..e3e84d72845744559f3de9cfda41591349bd45cb 100644
--- a/src/gui/protein_list_view/proteinlistwindow.cpp
+++ b/src/gui/protein_list_view/proteinlistwindow.cpp
@@ -241,6 +241,14 @@ void ProteinListWindow::doSearchOn(QString search_on) {
     emit proteinDataChanged();
 }
 
+void ProteinListWindow::doMsrunFileSearch(QString msr_run_file_search) {
+    //_p_proxy_model->setMsrunFileSearch(msr_run_file_search);
+    emit proteinDataChanged();
+}
+
+void ProteinListWindow::doScanNumberSearch(int scan_num) {
+    emit proteinDataChanged();
+}
 
 void ProteinListWindow::onProteinSearchEdit(QString protein_search_string) {
     qDebug() << "ProteinTableProxyModel::onProteinSearchEdit begin " << protein_search_string;
diff --git a/src/gui/protein_list_view/proteinlistwindow.h b/src/gui/protein_list_view/proteinlistwindow.h
index 0b30860fc980f2542a5ed29186f514217f8b69c7..a5966bca39e0387b3d606cfb06c77b57cefc8366 100644
--- a/src/gui/protein_list_view/proteinlistwindow.h
+++ b/src/gui/protein_list_view/proteinlistwindow.h
@@ -85,6 +85,8 @@ protected slots:
     void doNotValidHide(bool hide);
     void doNotCheckedHide(bool hide);
     void doNotGroupedHide(bool hide);
+    void doMsrunFileSearch(QString msr_run_file_search);
+    void doScanNumberSearch(int scan_num);
     void doProxyLayoutChanged();
     void showContextMenu(const QPoint &);
     void updateStatusBar();
diff --git a/src/gui/protein_list_view/proteintableproxymodel.cpp b/src/gui/protein_list_view/proteintableproxymodel.cpp
index e133174cd914ddf0406c32f545e98d4a606e596d..55f25919bf9a143064b077e2c449412b412c087b 100644
--- a/src/gui/protein_list_view/proteintableproxymodel.cpp
+++ b/src/gui/protein_list_view/proteintableproxymodel.cpp
@@ -23,6 +23,7 @@
 
 #include <QDebug>
 #include <pappsomspp/pappsoexception.h>
+#include "ui_protein_view.h"
 #include "proteintableproxymodel.h"
 #include "proteintablemodel.h"
 #include "proteinlistwindow.h"
@@ -48,6 +49,32 @@ bool ProteinTableProxyModel::filterAcceptsRow(int source_row,
         ProteinMatch * protein_match = _protein_table_model_p->getIdentificationGroup()->getProteinMatchList().at(source_row);
         //qDebug() << "ProteinTableProxyModel::filterAcceptsRow protein_match " << source_row;
 
+
+        if (_search_on == "msrun/scan") {
+            unsigned int scan_num = this->_p_protein_list_window->ui->scan_number_edit->value();
+            QString file_search_string = this->_p_protein_list_window->ui->msrun_auto_completion->text().toLower();
+            qDebug() << "ProteinTableProxyModel::filterAcceptsRow msrun/scan " << file_search_string << " " << scan_num;
+            for (const PeptideMatch & p_peptide_match: protein_match->getPeptideMatchList()) {
+                bool scan_ok = true;
+                if (scan_num > 0) {
+                    scan_ok = false;
+                    if (p_peptide_match.getPeptideEvidence()->getScan() == scan_num) {
+                        scan_ok = true;
+                    }
+                }
+                bool msrun_ok = true;
+                if (!file_search_string.isEmpty()) {
+                    msrun_ok = false;
+                    if (p_peptide_match.getPeptideEvidence()->getMsRunP()->getFilename().toLower().contains(file_search_string)) {
+                        msrun_ok = true;
+                    }
+                }
+                if (msrun_ok && scan_ok ) {
+                    return true;
+                }
+            }
+            return false;
+        }
         if (!_protein_search_string.isEmpty()) {
             if (_search_on == "accession") {
                 if (!protein_match->getProteinXtpSp().get()->getAccession().contains(_protein_search_string)) {
@@ -204,6 +231,9 @@ void ProteinTableProxyModel::hideNotGrouped(bool hide) {
 void ProteinTableProxyModel::setSearchOn(QString search_on) {
     _search_on = search_on;
 }
+
+void ProteinTableProxyModel::setMsrunFileSearch(QString msrun_file_search) {
+}
 void ProteinTableProxyModel::setProteinSearchString(QString protein_search_string) {
     _protein_search_string = protein_search_string;
 }
diff --git a/src/gui/protein_list_view/proteintableproxymodel.h b/src/gui/protein_list_view/proteintableproxymodel.h
index 082c2d069da1d82af4d1defe303635c1666e89e8..a71cf0a2e8945c2ef7a800116b82194bb286d7e9 100644
--- a/src/gui/protein_list_view/proteintableproxymodel.h
+++ b/src/gui/protein_list_view/proteintableproxymodel.h
@@ -50,6 +50,7 @@ public:
     void hideNotChecked(bool hide);
     void hideNotGrouped(bool hide);
     void setProteinSearchString(QString protein_search_string);
+    void setMsrunFileSearch(QString msrun_file_search);
     void setSearchOn(QString search_on);
     void setProteinListColumnDisplay(ProteinListColumn column, bool toggled);
     bool getProteinListColumnDisplay(ProteinListColumn column) const;