diff --git a/b_asic/schedule.py b/b_asic/schedule.py
index df492ac973446797320bce42f6ff9d458070d5a8..287d82434e5ed3b26d254b9a1ca345ec73732d6d 100644
--- a/b_asic/schedule.py
+++ b/b_asic/schedule.py
@@ -19,6 +19,7 @@ import numpy as np
 
 from b_asic import OutputPort, Signal
 from b_asic.graph_component import GraphID
+from b_asic.process import MemoryVariable
 from b_asic.signal_flow_graph import SFG
 from b_asic.special_operations import Delay, Output
 
@@ -243,7 +244,7 @@ class Schedule:
         self._start_times = {
             k: v // factor for k, v in self._start_times.items()
         }
-        for op_id, _ in self._start_times.items():
+        for op_id in self._start_times:
             self._sfg.find_by_id(op_id)._decrease_time_resolution(factor)
         self._schedule_time = self._schedule_time // factor
         return self
@@ -407,6 +408,22 @@ class Schedule:
                 )
         self._remove_delays()
 
+    def _get_memory_variables_list(self) -> List['Process']:
+        ret = []
+        for op_id, start_time in self._start_times.items():
+            slacks = self._forward_slacks(op_id)
+            for outport, signals in slacks.items():
+                reads = {
+                    signal.destination: slack
+                    for signal, slack in signals.items()
+                }
+                ret.append(
+                    MemoryVariable(
+                        start_time + outport.latency_offset, outport, reads
+                    )
+                )
+        return ret
+
     def _plot_schedule(self, ax):
         def _draw_arrow(start, end, name="", laps=0):
             if end[0] < start[0] or laps > 0:  # Wrap around