diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py
index 6aedd296ead4aa4e369548a2b61d1473ef9ac186..2ce7472572e28295d4f3c2f73abba8d438755250 100644
--- a/b_asic/signal_flow_graph.py
+++ b/b_asic/signal_flow_graph.py
@@ -67,44 +67,56 @@ class SFG(AbstractOperation):
         self._original_input_signals_indexes = {}
         self._original_output_signals_indexes = {}
 
-        # Setup input operations and signals.
-        for i, s in enumerate(input_signals):
+        # Setup input signals.
+        for sig_ind, sig in enumerate(input_signals):
             self._input_operations.append(
                 self._add_component_copy_unconnected(Input()))
-            self._original_input_signals_indexes[s] = i
-        for i, op in enumerate(inputs, len(input_signals)):
+            self._original_input_signals_indexes[sig] = sig_ind
+        # Setup input operations, starting from indexes ater input signals.
+        for sig_ind, op in enumerate(inputs, len(input_signals)):
             self._input_operations.append(
                 self._add_component_copy_unconnected(op))
-            for s in op.output(0).signals:
-                self._original_input_signals_indexes[s] = i
+            for sig in op.output(0).signals:
+                self._original_input_signals_indexes[sig] = sig_ind
 
-        # Setup output operations and signals.
-        for i, s in enumerate(output_signals):
+        # Setup output signals.
+        for sig_ind, sig in enumerate(output_signals):
             self._output_operations.append(
                 self._add_component_copy_unconnected(Output()))
-            self._original_output_signals_indexes[s] = i
-        for i, op in enumerate(outputs, len(output_signals)):
+            self._original_output_signals_indexes[sig] = sig_ind
+        # Setup output operations, starting from indexes after output signals.
+        for sig_ind, op in enumerate(outputs, len(output_signals)):
             self._output_operations.append(
                 self._add_component_copy_unconnected(op))
-            for s in op.input(0).signals:
-                self._original_output_signals_indexes[s] = i
+            for sig in op.input(0).signals:
+                self._original_output_signals_indexes[sig] = sig_ind
+
+        output_operations_set = set(outputs)
 
         # Search the graph inwards from each input signal.
-        for s, i in self._original_input_signals_indexes.items():
-            if s.destination is None:
+        for sig, sig_ind in self._original_input_signals_indexes.items():
+            if sig.destination is None:
                 raise ValueError(
-                    f"Input signal #{i} is missing destination in SFG")
-            if s.destination.operation not in self._added_components_mapping:
+                    f"Input signal #{sig_ind} is missing destination in SFG")
+            if sig.destination.operation not in self._added_components_mapping:
                 self._copy_structure_from_operation_bfs(
-                    s.destination.operation)
+                    sig.destination.operation)
+            elif sig.destination.operation in output_operations_set:
+                # Add direct signal between the input and output.
+                new_signal = self._add_component_copy_unconnected(sig)
+                new_signal.set_source(
+                    self._input_operations[sig_ind].output(0))
+                new_signal.set_destination(
+                    self._output_operations[
+                        self._original_output_signals_indexes[sig]].input(0))
 
         # Search the graph inwards from each output signal.
-        for s, i in self._original_output_signals_indexes.items():
-            if s.source is None:
+        for sig, sig_ind in self._original_output_signals_indexes.items():
+            if sig.source is None:
                 raise ValueError(
-                    f"Output signal #{i} is missing source in SFG")
-            if s.source.operation not in self._added_components_mapping:
-                self._copy_structure_from_operation_bfs(s.source.operation)
+                    f"Output signal #{sig_ind} is missing source in SFG")
+            if sig.source.operation not in self._added_components_mapping:
+                self._copy_structure_from_operation_bfs(sig.source.operation)
 
     @property
     def type_name(self) -> TypeName:
@@ -176,7 +188,6 @@ class SFG(AbstractOperation):
 
         while op_queue:
             original_op = op_queue.popleft()
-            print("CURRENT:", original_op.name, "-------------------")
             # Add a copy of the operation without any connections.
             new_op = None
             if original_op not in self._added_components_mapping:
@@ -271,11 +282,6 @@ class SFG(AbstractOperation):
                             new_signal.set_destination(new_connected_op.input(
                                 original_signal.destination.index))
 
-                            print("Adding signal:", new_signal.name,
-                                  "to op:", new_connected_op.name)
-                            print(
-                                [inport.signals for inport in new_connected_op.inputs])
-
                             # Add connected operation to the queue of operations to visist
                             op_queue.append(original_connected_op)