diff --git a/km3io/offline.py b/km3io/offline.py
index 0722cc69b7a946b97d562f2d7306935ce4437484..3dfb4299e2ea8d66b3713dd7f435ae57efd02484 100644
--- a/km3io/offline.py
+++ b/km3io/offline.py
@@ -34,15 +34,6 @@ class OfflineKeys:
             The main ROOT tree.
         """
         self._tree = tree
-        self._mc_tracks_keys = None
-        self._valid_keys = None
-        self._fit_keys = None
-        self._cut_hits_keys = None
-        self._cut_tracks_keys = None
-        self._cut_events_keys = None
-        self._trigger = None
-        self._fitparameters = None
-        self._reconstruction = None
 
     def __str__(self):
         return '\n'.join([
@@ -56,6 +47,29 @@ class OfflineKeys:
     def __repr__(self):
         return "<{}>".format(self.__class__.__name__)
 
+    def _get_keys(self, tree, fake_branches=None):
+        """Get tree keys except those in fake_branches
+
+        Parameters
+        ----------
+        tree : uproot.Tree
+            The tree to look for keys
+        fake_branches : list of str or None
+            The fake branches to ignore
+
+        Returns
+        -------
+        list of str
+            The keys of the tree.
+        """
+        keys = []
+        for key in tree.keys():
+            key = key.decode('utf-8')
+            if fake_branches is not None and key in fake_branches:
+                continue
+            keys.append(key)
+        return keys
+
     @cached_property
     def events_keys(self):
         """reads events keys from an offline file.
@@ -69,10 +83,7 @@ class OfflineKeys:
         fake_branches = ['Evt', 'AAObject', 'TObject', 't']
         t_baskets = ['t.fSec', 't.fNanoSec']
         tree = self._tree['Evt']
-        return [
-            key.decode('utf-8')
-            for key in tree.keys() if key.decode('utf-8') not in fake_branches
-        ] + t_baskets
+        return self._get_keys(self._tree['Evt'], fake_branches) + t_baskets
 
     @cached_property
     def hits_keys(self):
@@ -84,13 +95,8 @@ class OfflineKeys:
             list of all hits keys found in an offline file,
             except those found in fake branches.
         """
-        fake_branches = ['hits.usr', 'hits.usr_names'
-                         ]  # to be treated like trks.usr and trks.usr_names
-        tree = self._tree['hits']
-        return [
-            key.decode('utf8') for key in tree.keys()
-            if key.decode('utf8') not in fake_branches
-        ]
+        fake_branches = ['hits.usr', 'hits.usr_names']
+        return self._get_keys(self._tree['hits'], fake_branches)
 
     @cached_property
     def tracks_keys(self):
@@ -104,14 +110,8 @@ class OfflineKeys:
         """
         # a solution can be tree['trks.usr_data'].array(
         # uproot.asdtype(">i4"))
-        fake_branches = [
-            'trks.usr_data', 'trks.usr', 'trks.usr_names'
-        ]  # can be accessed using tree['trks.usr_names'].array()
-        tree = self._tree['Evt']['trks']
-        return [
-            key.decode('utf8') for key in tree.keys()
-            if key.decode('utf8') not in fake_branches
-        ]
+        fake_branches = ['trks.usr_data', 'trks.usr', 'trks.usr_names']
+        return self._get_keys(self._tree['Evt']['trks'], fake_branches)
 
     @cached_property
     def mc_hits_keys(self):
@@ -124,11 +124,7 @@ class OfflineKeys:
             except those found in fake branches.
         """
         fake_branches = ['mc_hits.usr', 'mc_hits.usr_names']
-        tree = self._tree['Evt']['mc_hits']
-        return [
-            key.decode('utf8') for key in tree.keys()
-            if key.decode('utf8') not in fake_branches
-        ]
+        return self._get_keys(self._tree['Evt']['mc_hits'], fake_branches)
 
     @cached_property
     def mc_tracks_keys(self):
@@ -140,14 +136,8 @@ class OfflineKeys:
             list of all mc tracks keys found in an offline file,
             except those found in fake branches.
         """
-        fake_branches = [
-            'mc_trks.usr_data', 'mc_trks.usr', 'mc_trks.usr_names'
-        ]  # same solution as above can be used
-        tree = self._tree['Evt']['mc_trks']
-        return [
-            key.decode('utf8') for key in tree.keys()
-            if key.decode('utf8') not in fake_branches
-        ]
+        fake_branches = ['mc_trks.usr_data', 'mc_trks.usr', 'mc_trks.usr_names']
+        return self._get_keys(self._tree['Evt']['mc_trks'], fake_branches)
 
     @cached_property
     def valid_keys(self):
@@ -169,8 +159,8 @@ class OfflineKeys:
         list of str
             list of all "trks.fitinf" keys.
         """
-        return sorted(self.fitparameters,
-                      key=self.fitparameters.get,
+        return sorted(km3io.definitions.fitparameters.data,
+                      key=km3io.definitions.fitparameters.data.get,
                       reverse=False)
 
     @cached_property
@@ -232,18 +222,6 @@ class OfflineKeys:
         """
         return km3io.definitions.reconstruction.data
 
-    @cached_property
-    def fitparameters(self):
-        """fit parameters parameters and their index from km3net-Dataformat.
-
-        Returns
-        -------
-        dict
-            dictionary of fit parameters and their index in an Offline
-            file.
-        """
-        return km3io.definitions.fitparameters.data
-
 
 class Reader:
     """Reader for one offline ROOT file"""
@@ -400,8 +378,8 @@ class OfflineReader:
         """
         return OfflineTracks(
             self.keys.cut_tracks_keys,
-            [self._data[key] for key in self.keys.tracks_keys],
-            fitparameters=self.keys.fitparameters)
+            [self._data[key] for key in self.keys.tracks_keys]
+            )
 
     @cached_property
     def mc_hits(self):
@@ -426,8 +404,7 @@ class OfflineReader:
         """
         return OfflineTracks(
             self.keys.cut_tracks_keys,
-            [self._data[key] for key in self.keys.mc_tracks_keys],
-            fitparameters=self.keys.fitparameters)
+            [self._data[key] for key in self.keys.mc_tracks_keys])
 
     @cached_property
     def usr(self):
@@ -931,7 +908,7 @@ class OfflineHit:
 
 class OfflineTracks:
     """wrapper for offline tracks"""
-    def __init__(self, keys, values, fitparameters=None):
+    def __init__(self, keys, values):
         """wrapper for offline tracks
 
         Parameters
@@ -940,20 +917,14 @@ class OfflineTracks:
             list of cropped tracks keys.
         values : list of arrays
             list of arrays containting tracks data.
-        fitparameters : None, optional
-            dictionary of tracks fit information (not yet outsourced in offline
-            files).
         """
         self._keys = keys
         self._values = values
-        if fitparameters is not None:
-            self._fitparameters = fitparameters
         for k, v in zip(self._keys, self._values):
             setattr(self, k, v)
 
     def __getitem__(self, item):
-        return OfflineTrack(self._keys, [v[item] for v in self._values],
-                            fitparameters=self._fitparameters)
+        return OfflineTrack(self._keys, [v[item] for v in self._values])
 
     def __len__(self):
         try:
@@ -971,7 +942,7 @@ class OfflineTracks:
 
 class OfflineTrack:
     """wrapper for an offline track"""
-    def __init__(self, keys, values, fitparameters=None):
+    def __init__(self, keys, values):
         """wrapper for one offline track.
 
         Parameters
@@ -980,14 +951,9 @@ class OfflineTrack:
             list of cropped tracks keys.
         values : list of arrays
             list of arrays containting track data.
-        fitparameters : None, optional
-            dictionary of tracks fit information (not yet outsourced in offline
-            files).
         """
         self._keys = keys
         self._values = values
-        if fitparameters is not None:
-            self._fitparameters = fitparameters
         for k, v in zip(self._keys, self._values):
             setattr(self, k, v)
 
@@ -998,7 +964,7 @@ class OfflineTrack:
         ]) + "\n\t" + "\n\t".join([
             "{:30} {:^2} {:>26}".format(k, ':', str(
                 getattr(self, 'fitinf')[v]))
-            for k, v in self._fitparameters.items()
+            for k, v in km3io.definitions.fitparameters.data.items()
             if len(getattr(self, 'fitinf')) > v
         ])  # I don't like 18 being explicit here
 
diff --git a/tests/test_offline.py b/tests/test_offline.py
index 711969c3e32252989912a32f07e0870f39e3d0fa..9af1018d6719d85432db5764443bb4fc780f23e2 100644
--- a/tests/test_offline.py
+++ b/tests/test_offline.py
@@ -66,15 +66,6 @@ class TestOfflineKeys(unittest.TestCase):
         for k, v in zip(keys, values):
             self.assertEqual(v, reco[k])
 
-    def test_fitparameters(self):
-        # there are 18 parameters in v1.1.2 of km3net-Dataformat
-        fit = self.keys.fitparameters
-        values = [i for i in range(18)]
-
-        self.assertEqual(18, len([*fit.keys()]))
-        for k, v in fit.items():
-            self.assertEqual(values[v], fit[k])
-
 
 class TestReader(unittest.TestCase):
     def setUp(self):