diff --git a/km3io/online.py b/km3io/online.py
index a8eb627bd0aea9a2ab2d4371240949b1a7336514..2a42cf272be15c5f64581fecf3e0793200a150fb 100644
--- a/km3io/online.py
+++ b/km3io/online.py
@@ -69,7 +69,7 @@ def get_channel_flags(value):
     value : int32
         The integer value to be parsed.
     """
-    channel_bits = np.bitwise_and(value, 0x4FFFFFFF)
+    channel_bits = np.bitwise_and(value, 0x7FFFFFFF)
     flags = unpack_bits(channel_bits, CHANNEL_BITS_TEMPLATE)
     return np.flip(flags, axis=-1)
 
diff --git a/tests/test_online.py b/tests/test_online.py
index 5cef172a24cd7fad5b225cb52f5bc489a2ab18f1..c19e2d82b1abf3616f221fd4205e43b3cfe714f0 100644
--- a/tests/test_online.py
+++ b/tests/test_online.py
@@ -1,3 +1,5 @@
+from collections import namedtuple
+import itertools
 import os
 import re
 import unittest
@@ -5,6 +7,7 @@ import unittest
 from km3net_testdata import data_path
 
 from km3io.online import OnlineReader, get_rate, has_udp_trailer, get_udp_max_sequence_number, get_channel_flags, get_number_udp_packets
+from km3io.tools import to_num
 
 ONLINE_FILE = data_path("online/km3net_online.root")
 
@@ -399,6 +402,45 @@ class TestSummaryslices(unittest.TestCase):
         print(str(self.ss))
 
 
+class TestGetChannelFlags_Issue59(unittest.TestCase):
+    def test_sample_summaryslice_dump(self):
+        fieldnames = ["dom_id"]
+
+        for i in range(31):
+            fieldnames.append(f"ch{i}")
+            fieldnames.append(f"hrvfifo{i}")
+
+        Entry = namedtuple("Entry", fieldnames)
+
+        with open(
+            data_path("online/KM3NeT_00000049_00008456.summaryslice-167941.txt")
+        ) as fobj:
+            ref_entries = [Entry(*list(l.strip().split())) for l in fobj.readlines()]
+
+        r = OnlineReader(
+            data_path("online/KM3NeT_00000049_00008456.summaryslice-167941.root")
+        )
+        summaryslice = r.summaryslices.slices[0]
+
+        for ours, ref in zip(summaryslice, ref_entries):
+            assert ours.dom_id == to_num(ref.dom_id)
+            fifos = get_channel_flags(ours.fifo)
+            hrvs = get_channel_flags(ours.hrv)
+            for i in range(31):
+                attr = f"ch{i}"
+                self.assertAlmostEqual(
+                    get_rate(getattr(ours, attr)) / 1000.0,
+                    to_num(getattr(ref, attr)),
+                    places=1,
+                )
+
+                hrvfifo = getattr(ref, f"hrvfifo{i}")
+                ref_hrv = bool(int(hrvfifo[0]))
+                ref_fifo = bool(int(hrvfifo[1]))
+                assert hrvs[i] == ref_hrv
+                assert fifos[i] == ref_fifo
+
+
 class TestGetRate(unittest.TestCase):
     def test_zero(self):
         assert 0 == get_rate(0)