diff --git a/tests/test_tools.py b/tests/test_tools.py
index dcc22aba9de766b357a16a5475a7d45493d94532..7064f6b5fb582475ce840c0a9585dd98a6dc41ab 100644
--- a/tests/test_tools.py
+++ b/tests/test_tools.py
@@ -10,10 +10,9 @@ from km3net_testdata import data_path
 from km3io import OfflineReader
 from km3io.tools import (to_num, cached_property, unfold_indices, unique,
                          uniquecount, fitinf, fitparams, count_nested, _find,
-                         mask, best_track, rec_types, get_w2list_param,
-                         get_multiplicity, best_jmuon, best_jshower,
-                         best_aashower, best_dusjshower, w2list_genhen_keys,
-                         w2list_gseagen_keys)
+                         mask, best_track, get_w2list_param, get_multiplicity,
+                         best_jmuon, best_jshower, best_aashower,
+                         best_dusjshower)
 
 OFFLINE_FILE = OfflineReader(data_path("offline/km3net_offline.root"))
 
@@ -43,13 +42,6 @@ class TestFitinf(unittest.TestCase):
         assert "JGANDALF_BETA0_RAD" in keys
 
 
-class TestRecoTypes(unittest.TestCase):
-    def test_reco_types(self):
-        keys = set(rec_types())
-
-        assert "JPP_RECONSTRUCTION_TYPE" in keys
-
-
 class TestBestTrackSelection(unittest.TestCase):
     def setUp(self):
         self.events = OFFLINE_FILE.events
@@ -118,7 +110,7 @@ class TestBestTrackSelection(unittest.TestCase):
         assert best3.rec_stages[3] == [1, 3]
 
     def test_best_track_selection_from_multiple_events_with_start_end(self):
-        best = best_track(self.events.tracks, start=1, end=4)
+        best = best_track(self.events.tracks, start_stages=1, end_stages=4)
 
         assert len(best) == 10
 
@@ -128,7 +120,7 @@ class TestBestTrackSelection(unittest.TestCase):
         assert best.rec_stages[3] == [1, 3, 5, 4]
 
         # test with shorter stages
-        best2 = best_track(self.events.tracks, start=1, end=3)
+        best2 = best_track(self.events.tracks, start_stages=1, end_stages=3)
 
         assert len(best2) == 10
 
@@ -138,7 +130,7 @@ class TestBestTrackSelection(unittest.TestCase):
         assert best2.rec_stages[3] == [1, 3]
 
         # test the importance of start as a real start of rec_stages
-        best3 = best_track(self.events.tracks, start=0, end=3)
+        best3 = best_track(self.events.tracks, start_stages=0, end_stages=3)
 
         assert len(best3) == 10
 
@@ -148,7 +140,7 @@ class TestBestTrackSelection(unittest.TestCase):
         assert best3.rec_stages[3] is None
 
         # test the importance of end as a real end of rec_stages
-        best4 = best_track(self.events.tracks, start=1, end=10)
+        best4 = best_track(self.events.tracks, start_stages=1, end_stages=10)
 
         assert len(best4) == 10
 
@@ -173,7 +165,7 @@ class TestBestTrackSelection(unittest.TestCase):
         assert best2.rec_stages[0] == [1, 3, 5, 4]
 
         # stages with start and end
-        best3 = best_track(self.one_event.tracks, start=1, end=4)
+        best3 = best_track(self.one_event.tracks, start_stages=1, end_stages=4)
 
         assert len(best3) == 1
         assert best3.lik == ak.max(self.one_event.tracks.lik)
@@ -201,7 +193,7 @@ class TestBestTrackSelection(unittest.TestCase):
 
     def test_best_track_on_slices_with_start_end_one_event(self):
         tracks_slice = self.one_event.tracks[0:5]
-        best = best_track(tracks_slice, start=1, end=4)
+        best = best_track(tracks_slice, start_stages=1, end_stages=4)
 
         assert len(best) == 1
         assert best.lik == ak.max(tracks_slice.lik)
@@ -236,7 +228,7 @@ class TestBestTrackSelection(unittest.TestCase):
         assert best.rec_stages[0] == [1, 3, 5, 4]
 
         # using start and end
-        best = best_track(tracks_slice, start=1, end=4)
+        best = best_track(tracks_slice, start_stages=1, end_stages=4)
 
         assert len(best) == 5
 
@@ -249,7 +241,10 @@ class TestBestTrackSelection(unittest.TestCase):
 
     def test_best_track_raises_when_too_many_inputs(self):
         with self.assertRaises(ValueError):
-            best_track(self.events.tracks, start=1, end=4, stages=[1, 3, 5, 4])
+            best_track(self.events.tracks,
+                       start_stages=1,
+                       end_stages=4,
+                       stages=[1, 3, 5, 4])
 
 
 class TestBestJmuon(unittest.TestCase):
@@ -321,11 +316,24 @@ class TestBestDusjshower(unittest.TestCase):
 
 class TestGetMultiplicity(unittest.TestCase):
     def test_get_multiplicity(self):
-        rec_stages_tracks = get_multiplicity(OFFLINE_FILE.events.tracks,
-                                             [1, 3, 5, 4])
+        multiplicity = get_multiplicity(OFFLINE_FILE.events.tracks,
+                                        [1, 3, 5, 4])
+
+        assert len(multiplicity) == 10
+        assert multiplicity[0] == 1
+        assert multiplicity[1] == 1
+        assert multiplicity[2] == 1
+        assert multiplicity[3] == 1
+
+        # test with no nexisting rec_stages
+        multiplicity2 = get_multiplicity(OFFLINE_FILE.events.tracks,
+                                         [1, 2, 3, 4, 5])
 
-        assert rec_stages_tracks.rec_stages[0] == [1, 3, 5, 4]
-        assert rec_stages_tracks.rec_stages[1] == [1, 3, 5, 4]
+        assert len(multiplicity2) == 10
+        assert multiplicity2[0] == 0
+        assert multiplicity2[1] == 0
+        assert multiplicity2[2] == 0
+        assert multiplicity2[3] == 0
 
 
 class TestCountNested(unittest.TestCase):
@@ -376,7 +384,7 @@ class TestRecStagesMasks(unittest.TestCase):
     def test_mask_with_start_and_end_of_rec_stages_with_multiple_events(self):
         rec_stages = self.tracks.rec_stages
         stages = [1, 3, 5, 4]
-        masks = mask(self.tracks, start=1, end=4)
+        masks = mask(self.tracks, start_stages=1, end_stages=4)
 
         assert masks[0][0] == all(rec_stages[0][0] == ak.Array(stages))
         assert masks[1][0] == all(rec_stages[1][0] == ak.Array(stages))
@@ -386,7 +394,7 @@ class TestRecStagesMasks(unittest.TestCase):
         rec_stages = self.tracks.rec_stages[0][0]
         stages = [1, 3, 5, 4]
         track = self.tracks[0]
-        masks = mask(track, start=1, end=4)
+        masks = mask(track, start_stages=1, end_stages=4)
 
         assert track[masks].rec_stages[0][0] == 1
         assert track[masks].rec_stages[0][-1] == 4
@@ -402,23 +410,16 @@ class TestRecStagesMasks(unittest.TestCase):
 
     def test_mask_raises_when_too_many_inputs(self):
         with self.assertRaises(ValueError):
-            mask(self.tracks, start=1, end=4, stages=[1, 3, 5, 4])
+            mask(self.tracks,
+                 start_stages=1,
+                 end_stages=4,
+                 stages=[1, 3, 5, 4])
 
     def test_mask_raises_when_no_inputs(self):
         with self.assertRaises(ValueError):
             mask(self.tracks)
 
 
-class TestW2listGenhenKeys(unittest.TestCase):
-    def test_w2list_genhen_keys(self):
-        assert 'W2LIST_GENHEN_REFF' in w2list_genhen_keys()
-
-
-class TestW2listGseangenKeys(unittest.TestCase):
-    def test_w2list_gseagen_keys(self):
-        assert 'W2LIST_GSEAGEN_PS' in w2list_gseagen_keys()
-
-
 class TestUnique(unittest.TestCase):
     def run_random_test_with_dtype(self, dtype):
         max_range = 100