diff --git a/km3io/tools.py b/km3io/tools.py
index c4b6c0dd95e5e0f43c80da1516ebf160481928db..300da0e105b47c469e9d775aac68baca226fcb65 100644
--- a/km3io/tools.py
+++ b/km3io/tools.py
@@ -763,3 +763,34 @@ def _find_in_set_single(rec_stages, stages, builder):
         else:
             builder.append(0)
     builder.end_list()
+
+
+def is_CC(fobj):
+    """Determin if an event (or events) are a result of a Charged Curent interaction (CC)
+    or a Neutral Curent interaction (NC).
+
+    Parameters
+    ----------
+    fobj : km3io.offline.OfflineReader
+        offline neutrino file object.
+    """
+    program = fobj.header.simul.program
+    w2list = fobj.events.w2list
+    len_w2lists = ak1.num(w2list, axis=1)
+
+    if all(len_w2lists <= 7):  # old nu file have w2list of len 7.
+        usr = fobj.events.mc_tracks.usr_names
+        cc_flag = usr[:, 0][:, 3]
+        out = (cc_flag == b'cc')  # not very reliable, found NC files with cc flag!
+
+    else:
+        if "gseagen" in program.lower():
+            cc_flag = w2list[:, kw2gsg.W2LIST_GSEAGEN_CC]
+            out = (cc_flag > 0)
+        if "genhen" in program.lower():
+            cc_flag = w2list[:, kw2gen.W2LIST_GENHEN_CC]
+            out = (cc_flag > 0)
+        else:
+            raise ValueError(f"simulation program {fobj.header.simul.program} is not implemented.")
+
+    return out
\ No newline at end of file