diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py
index 3b1d530b866a35a198ea374400e8ac8c7f1257cb..8823929f84656a23f011866cb4e0364a50d6347a 100644
--- a/b_asic/signal_flow_graph.py
+++ b/b_asic/signal_flow_graph.py
@@ -31,10 +31,14 @@ class GraphIDGenerator:
         """Construct a GraphIDGenerator."""
         self._next_id_number = defaultdict(lambda: id_number_offset)
 
-    def next_id(self, type_name: TypeName) -> GraphID:
+    def next_id(self, type_name: TypeName, used_ids: MutableSet = set()) -> GraphID:
         """Get the next graph id for a certain graph id type."""
         self._next_id_number[type_name] += 1
-        return type_name + str(self._next_id_number[type_name])
+        new_id = type_name + str(self._next_id_number[type_name])
+        while (new_id in used_ids):
+            self._next_id_number[type_name] += 1
+            new_id = type_name + str(self._next_id_number[type_name])
+        return new_id
 
     @property
     def id_number_offset(self) -> GraphIDNumber:
@@ -89,6 +93,7 @@ class SFG(AbstractOperation):
                          name=name, input_sources=input_sources)
 
         self._components_by_id = dict()
+        self._used_ids = set()
         self._components_by_name = defaultdict(list)
         self._components_dfs_order = []
         self._operations_dfs_order = []
@@ -101,6 +106,7 @@ class SFG(AbstractOperation):
         self._original_output_signals_to_indices = {}
         self._precedence_list = None
 
+
         # Setup input signals.
         if input_signals is not None:
             for input_index, signal in enumerate(input_signals):
@@ -688,9 +694,10 @@ class SFG(AbstractOperation):
         assert original_component not in self._original_components_to_new, "Tried to add duplicate SFG component"
         new_component = original_component.copy_component()
         self._original_components_to_new[original_component] = new_component
-        if not new_component.graph_id or new_component.graph_id in self._components_by_id:
-            new_id = self._graph_id_generator.next_id(new_component.type_name())
+        if not new_component.graph_id or new_component.graph_id in self._used_ids:
+            new_id = self._graph_id_generator.next_id(new_component.type_name(), self._used_ids)
             new_component.graph_id = new_id
+        self._used_ids.add(new_component.graph_id)
         self._components_by_id[new_component.graph_id] = new_component
         self._components_by_name[new_component.name].append(new_component)
         return new_component