diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py
index 5eb68ec21e8c1c1a9e614e0652cc0c2b9e7a21ea..09d276ebdcc315ff456f6b2e21246e2169b25f15 100644
--- a/b_asic/signal_flow_graph.py
+++ b/b_asic/signal_flow_graph.py
@@ -525,7 +525,17 @@ class SFG(AbstractOperation):
         curr_iter_ports = [op.output(i) for op in (
             no_input_ops + reg_ops) for i in range(op.output_count)]
 
-        remaining_inputs = {op: op.input_count for op in self.operations}
+        outports_per_inport = defaultdict(list)
+        remaining_inports_per_outport = dict()
+
+        for op in self.operations:
+            op_inputs = op.inputs
+            for out_i, outport in enumerate(op.outputs):
+                dependendent_indexes = op.inputs_required_for_output(out_i)
+                remaining_inports_per_outport[outport] = len(
+                    dependendent_indexes)
+                for in_i in dependendent_indexes:
+                    outports_per_inport[op_inputs[in_i]].append(outport)
 
         # Traverse output ports for precedence
         while curr_iter_ports:
@@ -536,12 +546,12 @@ class SFG(AbstractOperation):
 
             for outport in curr_iter_ports:
                 for signal in outport.signals:
-                    new_op = signal.destination.operation
+                    new_inport = signal.destination
                     # Don't traverse over Registers
-                    if new_op is not None and not isinstance(new_op, Register):
-                        remaining_inputs[new_op] -= 1
-                        if remaining_inputs[new_op] == 0:
-                            for new_outport in new_op.outputs:
+                    if new_inport is not None and not isinstance(new_inport.operation, Register):
+                        for new_outport in outports_per_inport[new_inport]:
+                            remaining_inports_per_outport[new_outport] -= 1
+                            if remaining_inports_per_outport[new_outport] == 0:
                                 next_iter_ports.append(new_outport)
 
             curr_iter_ports = next_iter_ports