diff --git a/b_asic/schedule.py b/b_asic/schedule.py
index e76fcccdc35f157fc75d48d3952d1c53391b37e1..f7b3f498c566c3df50c351a4b47300938dd12384 100644
--- a/b_asic/schedule.py
+++ b/b_asic/schedule.py
@@ -309,7 +309,7 @@ class Schedule:
         # Update output laps
         output_slacks = self._forward_slacks(op_id)
         for out_port, signal_slacks in output_slacks.items():
-            tmp_available = tmp_start + out_port.latency_offset
+            tmp_available = tmp_start + cast(int, out_port.latency_offset)
             new_available = tmp_available % self._schedule_time
             for signal, signal_slack in signal_slacks.items():
                 new_slack = signal_slack - time
@@ -329,12 +329,14 @@ class Schedule:
     def _remove_delays(self) -> None:
         delay_list = self._sfg.find_by_type_name(Delay.type_name())
         while delay_list:
-            delay_op = delay_list[0]
+            delay_op = cast(Delay, delay_list[0])
             delay_input_id = delay_op.input(0).signals[0].graph_id
             delay_output_ids = [
                 sig.graph_id for sig in delay_op.output(0).signals
             ]
-            self._sfg = self._sfg.remove_operation(delay_op.graph_id)
+            self._sfg = cast(
+                SFG, self._sfg.remove_operation(delay_op.graph_id)
+            )
             for output_id in delay_output_ids:
                 self._laps[output_id] += 1 + self._laps[delay_input_id]
             del self._laps[delay_input_id]
@@ -396,17 +398,17 @@ class Schedule:
                                 f"   {source_port.operation.graph_id} has no"
                                 " latency-offset."
                             )
-                            assert inport.latency_offset is not None, (
-                                f"Input port: {inport.index} of operation:    "
-                                "                                "
-                                f" {inport.operation.graph_id} has no"
-                                " latency-offset."
-                            )
 
                             source_end_time = (
                                 source_op_time + source_port.latency_offset
                             )
 
+                        assert inport.latency_offset is not None, (
+                            f"Input port: {inport.index} of operation:    "
+                            "                                "
+                            f" {inport.operation.graph_id} has no"
+                            " latency-offset."
+                        )
                         op_start_time_from_in = (
                             source_end_time - inport.latency_offset
                         )
@@ -416,28 +418,30 @@ class Schedule:
 
                     self._start_times[op.graph_id] = op_start_time
         for output in self._sfg.find_by_type_name(Output.type_name()):
-            source_port = output.inputs[0].signals[0].source
+            output = cast(Output, output)
+            source_port = cast(OutputPort, output.inputs[0].signals[0].source)
             if source_port.operation.graph_id in non_schedulable_ops:
                 self._start_times[output.graph_id] = 0
             else:
-                self._start_times[output.graph_id] = (
-                    self._start_times[source_port.operation.graph_id]
-                    + source_port.latency_offset
-                )
+                self._start_times[output.graph_id] = self._start_times[
+                    source_port.operation.graph_id
+                ] + cast(int, source_port.latency_offset)
         self._remove_delays()
 
     def _get_memory_variables_list(self) -> List['Process']:
-        ret = []
+        ret: List['Process'] = []
         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
+                    cast(InputPort, signal.destination): slack
                     for signal, slack in signals.items()
                 }
                 ret.append(
                     MemoryVariable(
-                        start_time + outport.latency_offset, outport, reads
+                        start_time + cast(int, outport.latency_offset),
+                        outport,
+                        reads,
                     )
                 )
         return ret