diff --git a/Control/GaudiSequencer/python/PyCompsExt.py b/Control/GaudiSequencer/python/PyCompsExt.py
new file mode 100644
index 0000000000000000000000000000000000000000..4b5025c4cb10bb7c0c746656dfd7b529610024fc
--- /dev/null
+++ b/Control/GaudiSequencer/python/PyCompsExt.py
@@ -0,0 +1,55 @@
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+
+# @file:    GaudiSequencer/python/PyCompsExt.py
+# @purpose: Library defines a class for filtering events. Allows to provide run/event numbers from a file.
+# @author:  Oldrich Kepka <oldrich.kepka@cern.ch>
+
+
+__doc__     = 'Library defines a class for filtering events. Allows to provide run/event numbers from a file.'
+__author__  = 'Oldrich Kepka <oldrich.kepka@cern.ch'
+
+from GaudiSequencer.PyComps import PyEvtFilter
+from AthenaPython.PyAthena import StatusCode
+
+class PyEvtFilterFromFile (PyEvtFilter):
+    """ Algorithm which loads list of runnunber/eventnumbers from file for filtering and pass it to PyEvtFilter
+    """
+
+    def __init__(self, name='filterFromFile', **kw):
+        super(PyEvtFilterFromFile, self).__init__(name,**kw)
+
+        self.input_file = kw.get('selectorInputFile', None)
+
+    def initialize(self):
+
+        _info  = self.msg.info
+        _error = self.msg.error
+
+        _info('==> PyEvtFilterFromFile initialize')
+        if not self.input_file:
+            _error('Input_file is required.')
+            return StatusCode.Failure
+        try: 
+            f = open(self.input_file, 'r')
+        except IOError:
+            _error = self.msg.error('File {} cannot be opened.'.format(self.input_file))
+            return StatusCode.Failure
+        else:
+            _info('==> File {} opened. Loading Runnumber/Eventnumber list'.format(self.input_file))
+            with f: 
+                self.evt_list = []
+                for line in f: 
+                    if '#' in line:
+                        continue
+
+                    numbers = line.split() 
+
+                    if not numbers:
+                        continue
+                    if len(numbers) != 2:
+                        self.msg.warning('Following line cannot be parsed: {}'.format(line))
+
+                    self.evt_list.append((int(numbers[0]), int(numbers[1])))
+
+        super(PyEvtFilterFromFile,self).initialize()
+        return StatusCode.Success
diff --git a/Control/GaudiSequencer/share/evtFilterFromFile.py b/Control/GaudiSequencer/share/evtFilterFromFile.py
new file mode 100644
index 0000000000000000000000000000000000000000..65e1b33bca83e5a8c08e86140a5485a0df819ddd
--- /dev/null
+++ b/Control/GaudiSequencer/share/evtFilterFromFile.py
@@ -0,0 +1,9 @@
+from GaudiSequencer.PyCompsExt import PyEvtFilterFromFile
+
+evtSelector = PyEvtFilterFromFile('eventSelector')
+if 'selectorInputFile' in locals():  
+  evtSelector.input_file = selectorInputFile
+
+from AthenaCommon.AlgSequence import AthSequencer
+filtseq =  AthSequencer ("AthFilterSeq")
+filtseq += evtSelector