diff --git a/edosl0util/pkted.py b/edosl0util/pkted.py
index e6615d89805cd5d5471502b4aeaa8e33ccb068d4..478c8a643dbb0769702b696fffe69953c6eb6a7f 100644
--- a/edosl0util/pkted.py
+++ b/edosl0util/pkted.py
@@ -27,9 +27,14 @@ def edit_packets(file_path, specs):
                     ini = spec.start_bit
                     sz = spec.num_bits
                     fin = ini + sz
-                    new_arr = np.asarray(spec.new_value)
-                    new_arr = new_arr.astype(new_arr.dtype.newbyteorder('>'))
-                    bits[ini:fin] = np.unpackbits(new_arr[None].view(np.uint8))[-sz:]
+                    if callable(spec.new_value):
+                        old_value = bits[ini:fin].copy()
+                        new_value = spec.new_value(old_value)
+                    else:
+                        new_value = np.asarray(spec.new_value)
+                        new_value = new_value.astype(new_value.dtype.newbyteorder('>'))
+                        new_value = np.unpackbits(new_value[None].view(np.uint8))[-sz:]
+                    bits[ini:fin] = new_value
                 pkt.write(np.packbits(bits).tobytes())