diff --git a/scripts/online_reco.py b/scripts/online_reco.py
index 4dc271fb3bba631de82e296966065e3085bb4c2e..7e5d8ca165498bb4962e34478337fac06b20aa8a 100644
--- a/scripts/online_reco.py
+++ b/scripts/online_reco.py
@@ -38,8 +38,48 @@ class IO_OLINEDistributions(kp.Module):
 
         self.plots_path = self.require('plots_path')
         self.max_events = self.get('max_events', default=5000)
-        self.zeniths = deque(maxlen=self.max_events)
-        self.qualities = deque(maxlen=self.max_events)
+        self.plots = {
+            'reco_zenith': {
+                'title': 'Zenith distribution of online track reconstructions',
+                'xlabel': 'cos(zenith)',
+                'ylabel': 'normed count',
+                'function': 'hist',
+                'options': {
+                    'bins': 180,
+                    'histtype': "step",
+                    'normed': True,
+                    'lw': 3
+                },
+                'subplots': {
+                    'gandalf': {
+                        'data': deque(maxlen=self.max_events),
+                        'subplot_options': {
+                            'label': "JGandalf",
+                        }
+                    }
+                }
+            },
+            'reco_quality': {
+                'title': 'Quality of online track reconstructions',
+                'xlabel': 'Quality',
+                'ylabel': 'normed count',
+                'function': 'hist',
+                'options': {
+                    'bins': 100,
+                    'histtype': "step",
+                    'normed': True,
+                    'lw': 3
+                },
+                'subplots': {
+                    'gandalf': {
+                        'data': deque(maxlen=self.max_events),
+                        'subplot_options': {
+                            'label': "JGandalf",
+                        }
+                    }
+                }
+            },
+        }
         self.plot_interval = 60  # [s]
         threading.Thread(target=self.plot).start()
 
@@ -50,63 +90,42 @@ class IO_OLINEDistributions(kp.Module):
             zenith = np.cos(
                 kp.math.angle_between([0, 0, -1],
                                       [track.dx, track.dy, track.dz]))
-            self.zeniths.append(zenith)
+            reco_name = track.reco
 
-            self.qualities.append(track.Q)
+            self._add_reco_parameter('reco_zenith', reco_name, zenith)
+            self._add_reco_parameter('reco_quality', reco_name, track.Q)
 
         return blob
 
+    def _add_reco_parameter(self, parameter, reco_name, value):
+        """Add the value to the parameter cache"""
+        for reco, subplot in self.plots[parameter]['subplots']:
+            if reco == reco_name:
+                subplot['data'].append(value)
+
     def plot(self):
         while True:
             time.sleep(self.plot_interval)
-            self.create_zenith_plot()
-            self.create_quality_plot()
-
-    def create_quality_plot(self):
-        n = len(self.qualities)
-
-        plt.clf()
-        fig, ax = plt.subplots(figsize=(16, 8))
-        ax.hist(self.qualities,
-                bins=100,
-                label="JGandalf (last %d events)" % n,
-                histtype="step",
-                normed=True,
-                lw=3)
-        ax.set_title(
-            "Quality distribution of online track reconstructions\n%s UTC" %
-            datetime.utcnow().strftime("%c"))
-        ax.set_xlabel(r"Quality", fontsize=self.fontsize)
-        ax.set_ylabel("normed count", fontsize=self.fontsize)
-        ax.tick_params(labelsize=self.fontsize)
-        ax.set_yscale("log")
-        plt.legend(fontsize=self.fontsize, loc=2)
-        filename = os.path.join(self.plots_path, 'gandalf_quality.png')
-        plt.savefig(filename, dpi=120, bbox_inches="tight")
-        plt.close('all')
-
-    def create_zenith_plot(self):
-        n = len(self.zeniths)
-
-        plt.clf()
-        fig, ax = plt.subplots(figsize=(16, 8))
-        ax.hist(self.zeniths,
-                bins=180,
-                label="JGandalf (last %d events)" % n,
-                histtype="step",
-                normed=True,
-                lw=3)
-        ax.set_title(
-            "Zenith distribution of online track reconstructions\n%s UTC" %
-            datetime.utcnow().strftime("%c"))
-        ax.set_xlabel(r"cos(zenith)", fontsize=self.fontsize)
-        ax.set_ylabel("normed count", fontsize=self.fontsize)
-        ax.tick_params(labelsize=self.fontsize)
-        ax.set_yscale("log")
-        plt.legend(fontsize=self.fontsize, loc=2)
-        filename = os.path.join(self.plots_path, 'gandalf_zenith.png')
-        plt.savefig(filename, dpi=120, bbox_inches="tight")
-        plt.close('all')
+            self.create_plots()
+
+    def create_plots(self):
+        for name, plot in self.plots.items():
+            plt.clf()
+            fig, ax = plt.subplots(figsize=(16, 8))
+            for subplot in self.plots['subplots'].values():
+                getattr(ax, plot['function'])(subplot['data'],
+                                              **self.plots['options'],
+                                              **subplot['options'])
+            ax.set_title(plot['title'] +
+                         "\n%s UTC" % datetime.utcnow().strftime("%c"))
+            ax.set_xlabel(plot['xlabel'], fontsize=self.fontsize)
+            ax.set_ylabel(plot['ylabel'], fontsize=self.fontsize)
+            ax.tick_params(labelsize=self.fontsize)
+            ax.set_yscale("log")
+            plt.legend(fontsize=self.fontsize, loc=2)
+            filename = os.path.join(self.plots_path, '%s.png' % name)
+            plt.savefig(filename, dpi=120, bbox_inches="tight")
+            plt.close('all')
 
 
 def main():