diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py
index fb7849134d1a34c60295de7e797c02cd56801404..6ef88bc45f47ca0f5bafb127777eaba413378853 100644
--- a/b_asic/signal_flow_graph.py
+++ b/b_asic/signal_flow_graph.py
@@ -660,27 +660,28 @@ class SFG(AbstractOperation):
 
         # Preserve the original SFG by creating a copy.
         sfg_copy = self()
+        comp = sfg_copy._add_component_unconnected_copy(component)
         output_comp = cast(Operation, sfg_copy.find_by_id(output_comp_id))
         if output_comp is None:
             return None
 
         if isinstance(output_comp, Output):
             raise TypeError("Source operation cannot be an output operation.")
-        if len(output_comp.output_signals) != component.input_count:
+        if len(output_comp.output_signals) != comp.input_count:
             raise TypeError(
                 "Source operation output count"
                 f" ({len(output_comp.output_signals)}) does not match input"
-                f" count for component ({component.input_count})."
+                f" count for component ({comp.input_count})."
             )
-        if len(output_comp.output_signals) != component.output_count:
+        if len(output_comp.output_signals) != comp.output_count:
             raise TypeError(
                 "Destination operation input count does not match output for component."
             )
 
         for index, signal_in in enumerate(output_comp.output_signals):
             destination = cast(InputPort, signal_in.destination)
-            signal_in.set_destination(component.input(index))
-            destination.connect(component.output(index))
+            signal_in.set_destination(comp.input(index))
+            destination.connect(comp.output(index))
 
         # Recreate the newly coupled SFG so that all attributes are correct.
         return sfg_copy()
@@ -725,15 +726,16 @@ class SFG(AbstractOperation):
         if output_comp is None:
             raise ValueError(f"Unknown component: {output_comp_id!r}")
         if isinstance(output_comp, Operation):
+            comp = sfg_copy._add_component_unconnected_copy(new_operation)
+
             if port_id is None:
-                sfg_copy._insert_operation_after_operation(output_comp, new_operation)
+                sfg_copy._insert_operation_after_operation(output_comp, comp)
             else:
                 sfg_copy._insert_operation_after_outputport(
-                    output_comp.output(port_id), new_operation
+                    output_comp.output(port_id), comp
                 )
         elif isinstance(output_comp, Signal):
-            sfg_copy._insert_operation_before_signal(output_comp, new_operation)
-
+            sfg_copy._insert_operation_before_signal(output_comp, comp)
         # Recreate the newly coupled SFG so that all attributes are correct.
         return sfg_copy()
 
@@ -776,14 +778,15 @@ class SFG(AbstractOperation):
         if input_comp is None:
             raise ValueError(f"Unknown component: {input_comp_id!r}")
         if isinstance(input_comp, Operation):
+            comp = sfg_copy._add_component_unconnected_copy(new_operation)
             if port is None:
-                sfg_copy._insert_operation_before_operation(input_comp, new_operation)
+                sfg_copy._insert_operation_before_operation(input_comp, comp)
             else:
                 sfg_copy._insert_operation_before_inputport(
-                    input_comp.input(port), new_operation
+                    input_comp.input(port), comp
                 )
         elif isinstance(input_comp, Signal):
-            sfg_copy._insert_operation_after_signal(input_comp, new_operation)
+            sfg_copy._insert_operation_after_signal(input_comp, comp)
 
         # Recreate the newly coupled SFG so that all attributes are correct.
         return sfg_copy()