diff --git a/b_asic/schedule.py b/b_asic/schedule.py
index 2603afcb96c96328abfa37c39854761c3be2a5af..e5d5f96aba727e77d309cd25f47d2473da1b364a 100644
--- a/b_asic/schedule.py
+++ b/b_asic/schedule.py
@@ -760,6 +760,13 @@ class Schedule:
             del self._laps[delay_input_id]
             delay_list = self._sfg.find_by_type_name(Delay.type_name())
 
+    def _reintroduce_delays(self) -> SFG:
+        reconstructed_sfg = self._sfg()
+        for signal_id,lap in self._laps.items():
+            for delays in range(lap):
+                reconstructed_sfg = reconstructed_sfg.insert_operation_after(signal_id, Delay())
+        return reconstructed_sfg()
+
     def _schedule_alap(self) -> None:
         """Schedule the operations using as-late-as-possible scheduling."""
         precedence_list = self._sfg.get_precedence_list()
diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py
index 405681ea00be50e3614b3093b11b7ad817618ca4..19ef0a6028f60b84834b0de4f45b77137bd13e34 100644
--- a/b_asic/signal_flow_graph.py
+++ b/b_asic/signal_flow_graph.py
@@ -736,6 +736,27 @@ class SFG(AbstractOperation):
         # Recreate the newly coupled SFG so that all attributes are correct.
         return sfg_copy()
 
+    def simplify_delay_element_placement(self) -> "SFG":
+        sfg_copy = self()
+        for delay_element in sfg_copy.find_by_type_name(Delay.type_name()):
+            neighboring_delays = []
+            if len(delay_element.inputs[0].signals) > 0:
+                for signal in delay_element.inputs[0].signals[0].source.signals:
+                    if isinstance(signal.destination.operation, Delay):
+                        neighboring_delays.append(signal.destination.operation)
+
+            if delay_element in neighboring_delays:
+                neighboring_delays.remove(delay_element)
+
+            for delay in neighboring_delays:
+                for output in delay.outputs[0].signals:
+                    output.set_source(delay_element.outputs[0])
+                in_sig = delay.input(0).signals[0]
+                delay.input(0).remove_signal(in_sig)
+                in_sig.source.remove_signal(in_sig)
+
+        return sfg_copy()
+
     def _insert_operation_after_operation(
         self, output_operation: Operation, new_operation: Operation
     ):