diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index dfd9382e9756d96307bca79b13f5b47487a69bdd..b03a8310d93dbf801fff6b80de9e6d8eb55d3ee9 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -3,6 +3,11 @@ Unreleased changes
 
 Version 0
 ---------
+0.15.2 / 2020-09-23
+~~~~~~~~~~~~~~~~~~~
+* Fixed a bug where the last bit of HRV or FIFO were incorrectly
+  masked when using ``km3io.online.get_channel_flags``
+
 0.15.1 / 2020-07-15
 ~~~~~~~~~~~~~~~~~~~
 * Added wheel packages for faster installation
diff --git a/km3io/definitions/fitparameters.py b/km3io/definitions/fitparameters.py
index f7acfda708b5a9005bcb6d987f942f88c9940fd4..a92ba8f36220816978d62b18313b297f67b68d1b 100644
--- a/km3io/definitions/fitparameters.py
+++ b/km3io/definitions/fitparameters.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 """
-KM3NeT Data Definitions v1.2.2
+KM3NeT Data Definitions v1.2.3
 https://git.km3net.de/common/km3net-dataformat
 """
 
diff --git a/km3io/definitions/reconstruction.py b/km3io/definitions/reconstruction.py
index 0f05eb0a919143a87a170fbf203d9887da1fa8df..42c1c99a833f2af661e706c8966caf004e1a6dbc 100644
--- a/km3io/definitions/reconstruction.py
+++ b/km3io/definitions/reconstruction.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 """
-KM3NeT Data Definitions v1.2.2
+KM3NeT Data Definitions v1.2.3
 https://git.km3net.de/common/km3net-dataformat
 """
 
diff --git a/km3io/definitions/trigger.py b/km3io/definitions/trigger.py
index 1a460afc0f96f2081ae7118af31781564d359118..9dd75921e8aeccd7420a15ff901beddd7a1a6455 100644
--- a/km3io/definitions/trigger.py
+++ b/km3io/definitions/trigger.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 """
-KM3NeT Data Definitions v1.2.2
+KM3NeT Data Definitions v1.2.3
 https://git.km3net.de/common/km3net-dataformat
 """
 
diff --git a/km3io/definitions/w2list_genhen.py b/km3io/definitions/w2list_genhen.py
index e30d37cef4f785ca36a3ea0cdc1a757549285a69..8ff43a691ab3af6b1a2992bf4603c3a02397bec5 100644
--- a/km3io/definitions/w2list_genhen.py
+++ b/km3io/definitions/w2list_genhen.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 """
-KM3NeT Data Definitions v1.2.2
+KM3NeT Data Definitions v1.2.3
 https://git.km3net.de/common/km3net-dataformat
 """
 
diff --git a/km3io/definitions/w2list_gseagen.py b/km3io/definitions/w2list_gseagen.py
index 6e815591b243de6d2ba1a1f88e5a2a86f0f9a992..fe60876c0208653f08e3e694e1c60669da0dad54 100644
--- a/km3io/definitions/w2list_gseagen.py
+++ b/km3io/definitions/w2list_gseagen.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 """
-KM3NeT Data Definitions v1.2.2
+KM3NeT Data Definitions v1.2.3
 https://git.km3net.de/common/km3net-dataformat
 """
 
diff --git a/km3io/online.py b/km3io/online.py
index 5884821c8fe74c913e7015e936a1e73a4632ccb7..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, 0x3FFFFFFF)
+    channel_bits = np.bitwise_and(value, 0x7FFFFFFF)
     flags = unpack_bits(channel_bits, CHANNEL_BITS_TEMPLATE)
     return np.flip(flags, axis=-1)
 
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 98cc552d93304d79e0d8e1698d0cad786dc68d94..a5d3da63defc479bf4539631380637361f580029 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,4 +1,4 @@
-km3net-testdata>=0.2.5
+km3net-testdata>=0.2.9
 matplotlib
 memory_profiler
 numpydoc==0.9.2
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)