diff --git a/scripts/python-skywater-pdk/skywater_pdk/liberty.py b/scripts/python-skywater-pdk/skywater_pdk/liberty.py
index b7d61b1..54a5c7f 100755
--- a/scripts/python-skywater-pdk/skywater_pdk/liberty.py
+++ b/scripts/python-skywater-pdk/skywater_pdk/liberty.py
@@ -257,46 +257,52 @@
     return libname0, corners, all_cells
 
 
-def remove_ccsnoise(data, cellname):
-    for k, v in list(data.items()):
-        if "ccsn_" in k:
-            del data[k]
-            continue
+def remove_ccsnoise_from_timing(data, dataname):
+    assert "timing" in data, (dataname, data.keys(), data)
 
+    timing = data["timing"]
+
+    if isinstance(timing, list):
+        for i, t in enumerate(timing):
+            assert isinstance(t, dict), (dataname, i, t)
+            remove_ccsnoise_from_dict(t, "{}.timing[{:3d}]".format(dataname, i))
+    elif isinstance(timing, dict):
+        remove_ccsnoise_from_dict(timing, dataname+".timing")
+    else:
+        assert False, (dataname, type(timing), timing)
+
+
+def remove_ccsnoise_from_dict(data, dataname):
+    if "timing" in data:
+        remove_ccsnoise_from_timing(data, dataname)
+
+    ccsn_keys = set()
+    for k in data:
+        if "ccsn_" in k:
+            ccsn_keys.add(k)
+
+    for k in ccsn_keys:
+        if debug:
+            print("{:s}: Removing {}".format(dataname, k))
+        del data[k]
+
+
+
+def remove_ccsnoise_from_cell(data, cellname):
+    remove_ccsnoise_from_dict(data, cellname)
+
+    for k, v in list(data.items()):
         if not k.startswith("pin "):
             continue
 
         pin_data = data[k]
-
         if "input_voltage" in pin_data:
             del pin_data["input_voltage"]
 
-        ccsn_keys = set()
-        for pk in pin_data:
-            if not pk.startswith("ccsn_"):
-                continue
-            ccsn_keys.add(pk)
+        remove_ccsnoise_from_dict(pin_data, "{}.{}".format(cellname, k))
 
-        for pk in ccsn_keys:
-            if debug:
-                print("{:20s} - {:15s}: Removing {}".format(cellname, k, pk))
-            del pin_data[pk]
 
-        if "timing" not in pin_data:
-            continue
-        pin_timing = pin_data["timing"]
-
-        for i,t in enumerate(pin_timing):
-            ccsn_keys = set()
-            for tk in t:
-                if not tk.startswith("ccsn_"):
-                    continue
-                ccsn_keys.add(tk)
-
-            for tk in ccsn_keys:
-                if debug:
-                    print("{:20s} - {:15s}.timing[{:3d}]: Removing {}".format(cellname, k, i, tk))
-                del t[tk]
+remove_ccsnoise_from_library = remove_ccsnoise_from_dict
 
 
 def generate(library_dir, lib, corner, ocorner_type, icorner_type, cells):
@@ -333,7 +339,7 @@
 
     # Remove the ccsnoise if it exists
     if ocorner_type != TimingType.ccsnoise:
-        remove_ccsnoise(common_data, "library")
+        remove_ccsnoise_from_library(common_data, "library")
 
     output = liberty_dict("library", lib+"__"+corner, common_data)
     assert output[-1] == '}', output
@@ -349,7 +355,7 @@
 
         # Remove the ccsnoise if it exists
         if ocorner_type != TimingType.ccsnoise:
-            remove_ccsnoise(cell_data, cell_with_size)
+            remove_ccsnoise_from_cell(cell_data, cell_with_size)
 
         top_write([''])
         top_write(liberty_dict("cell", "%s__%s" % (lib, cell_with_size), cell_data, [cell_with_size]))
