diff --git a/sched/fillerSched.py b/sched/fillerSched.py
new file mode 100644
index 0000000000000000000000000000000000000000..7b83c482d7b15391220634fd55ed51ed47d9030b
--- /dev/null
+++ b/sched/fillerSched.py
@@ -0,0 +1,63 @@
+from batsim.batsim import BatsimScheduler, Batsim
+
+import sys
+import os
+from procset import ProcSet
+from itertools import islice
+
+
+class FillerSched(BatsimScheduler):
+
+    def onAfterBatsimInit(self):
+        self.nb_completed_jobs = 0
+
+        self.jobs_completed = []
+        self.jobs_waiting = []
+
+        self.sched_delay = 0.005
+
+        self.openJobs = set()
+        self.availableResources = ProcSet((0,self.bs.nb_compute_resources-1))
+
+
+    def scheduleJobs(self):
+        scheduledJobs = []
+
+        print('openJobs = ', self.openJobs)
+        print('available = ', self.availableResources)
+
+        # Iterating over a copy to be able to remove jobs from openJobs at traversal
+        for job in set(self.openJobs):
+            nb_res_req = job.requested_resources
+
+            if nb_res_req <= len(self.availableResources):
+                # Retrieve the *nb_res_req* first availables resources
+                job_alloc = ProcSet(*islice(self.availableResources, nb_res_req))
+                job.allocation = job_alloc
+                scheduledJobs.append(job)
+
+                self.availableResources -= job_alloc
+
+                self.openJobs.remove(job)
+
+        # update time
+        self.bs.consume_time(self.sched_delay)
+
+        # send to uds
+        if len(scheduledJobs) > 0:
+            self.bs.execute_jobs(scheduledJobs)
+
+        print('openJobs = ', self.openJobs)
+        print('available = ', self.availableResources)
+        print('')
+
+    def onJobSubmission(self, job):
+        if job.requested_resources > self.bs.nb_compute_resources:
+            self.bs.reject_jobs([job]) # This job requests more resources than the machine has
+        else:
+            self.openJobs.add(job)
+            self.scheduleJobs()
+
+    def onJobCompletion(self, job):
+        self.availableResources |= job.allocation
+        self.scheduleJobs()
diff --git a/test.nix b/test.nix
new file mode 100644
index 0000000000000000000000000000000000000000..70e1c83eee8dd3c3e98d1d59fa76bff60c3dd076
--- /dev/null
+++ b/test.nix
@@ -0,0 +1,34 @@
+{ 
+ kapack ? import
+    (fetchTarball "https://github.com/oar-team/nur-kapack/archive/901a5b656f695f2c82d17c091a55db2318ed3f39.tar.gz")
+    {}
+,  pkgs ? kapack.pkgs
+, python3 ? pkgs.python3
+, python3Packages ? pkgs.python3Packages
+}:
+
+let
+  jobs = rec {
+    evalys = kapack.evalys.overrideAttrs (attr: rec {
+      name = "evalys";
+      version = "d4d47bd2f4d076730b05f1345b1bf9032cd28753";
+      src = pkgs.fetchgit rec {
+        url = "https://github.com/Mema5/evalys.git";
+        rev = version;
+        sha256 = "sha256-eHGRNj2xWBoEgG2wvAZUoH1Us5d1yu9emu1Zyyms1JU=";
+      };
+    });
+
+    expe = pkgs.mkShell rec {
+      buildInputs = [
+        kapack.batsim-410
+        kapack.pybatsim-320
+        python3Packages.matplotlib
+        evalys
+      ];
+      QT_QPA_PLATFORM_PLUGIN_PATH=  with pkgs.libsForQt5.qt5; "${qtbase.bin}/lib/qt-${qtbase.version}/plugins/platforms";      
+    };
+  };
+
+in
+  jobs
\ No newline at end of file