diff --git a/saqc/funcs/generic.py b/saqc/funcs/generic.py
index 6beef3c53091b5f270002fc2898bb54d3c155203..8dd387788f51a993eb051e7f3596366f9abce34b 100644
--- a/saqc/funcs/generic.py
+++ b/saqc/funcs/generic.py
@@ -12,7 +12,7 @@ from dios import DictOfSeries
 
 from saqc.constants import GOOD, BAD, UNFLAGGED
 from saqc.core.flags import initFlagsLike, Flags
-from saqc.core.register import flagging, processing, _maskData
+from saqc.core.register import flagging, processing, _maskData, _isflagged
 from saqc.core.visitor import ENVIRONMENT
 
 import operator as op
@@ -255,6 +255,7 @@ def flag(
     if not np.issubdtype(mask.dtype, np.bool_):
         raise TypeError(f"generic expression does not return a boolean array")
 
-    flags[field] = mask.replace({False: UNFLAGGED, True: flag})
+    m = ~_isflagged(flags[field], to_mask) & mask
+    flags[m, field] = flag
 
     return data, flags