diff --git a/b_asic/basic_operation.py b/b_asic/basic_operation.py
index 42689a74b0b173725f58e438c2fb6ed89598a9ba..14eb1acee3c93ce28bd6c75512284297ac7575f9 100644
--- a/b_asic/basic_operation.py
+++ b/b_asic/basic_operation.py
@@ -5,7 +5,7 @@ TODO: More info.
 
 from b_asic.port import InputPort, OutputPort
 from b_asic.signal import SignalSource, SignalDestination
-from b_asic.operation import OperationId, Operation
+from b_asic.operation import Operation
 from b_asic.simulation import SimulationState, OperationState
 from abc import ABC, abstractmethod
 from typing import List, Dict, Optional, Any
@@ -18,7 +18,6 @@ class BasicOperation(Operation):
 	TODO: More info.
 	"""
 
-	_identifier: OperationId
 	_input_ports: List[InputPort]
 	_output_ports: List[OutputPort]
 	_parameters: Dict[str, Optional[Any]]
@@ -27,7 +26,6 @@ class BasicOperation(Operation):
 		"""
 		Construct a BasicOperation.
 		"""
-		self._identifier = identifier
 		self._input_ports = []
 		self._output_ports = []
 		self._parameters = {}
@@ -39,9 +37,6 @@ class BasicOperation(Operation):
 		"""
 		pass
 
-	def id(self) -> OperationId:
-		return self._identifier
-
 	def inputs(self) -> List[InputPort]:
 		return self._input_ports.copy()
 
diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py
index d4c7b689f0dc9de79bfa816db85ecdfb20427b1c..0f7bffa95814471312b49ad03a0cdb24943f76a3 100644
--- a/b_asic/signal_flow_graph.py
+++ b/b_asic/signal_flow_graph.py
@@ -39,12 +39,22 @@ class SFG(BasicOperation):
 	def add_operation(self, operation: Operation) -> GraphID:
 		"""
 		Adds the entered operation to the SFG's dictionary of graph objects and
-		generates and returns a GraphID for it.
+	 	returns a generated GraphID for it.
 		"""
-		graph_id = self._graph_id_generator.get_next_id("op")
-		self._graph_objects[graph_id] = operation
-		return graph_id
+		return self._add_graph_obj(operation, 'op')
 
-	def _generate_id(self)
+
+	def add_signal(self, signal: Signal) -> GraphID:
+		"""
+		Adds the entered signal to the SFG's dictionary of graph objects and returns
+		a generated GraphID for it.
+		"""
+		return self._add_graph_obj(signal, 's')
+
+
+	def _add_graph_obj(self, obj: Union[Operation, Signal], operation_id_type: str):
+		graph_id = self._graph_id_generator.get_next_id(operation_id_type)
+		self._graph_objects[graph_id] = obj
+		return graph_id 
 
 
diff --git a/b_asic/simulation.py b/b_asic/simulation.py
index 5f9dffb6fe9e5d8b8850cd7a35ace9b450360520..a51bf470b01cbaf07be307bdd8472416a95d908f 100644
--- a/b_asic/simulation.py
+++ b/b_asic/simulation.py
@@ -3,6 +3,7 @@ B-ASIC Simulation Module.
 TODO: More info.
 """
 
+from signal_flow_graph import OperationId
 from numbers import Number
 from typing import List, Dict