diff --git a/b_asic/schedule.py b/b_asic/schedule.py
index 61b5bd847f0605c2921c063bb137a5fd3c537a1e..ce5f96e915b4feabcd7083bf7bf88c55c9a1ddcf 100644
--- a/b_asic/schedule.py
+++ b/b_asic/schedule.py
@@ -35,6 +35,7 @@ from b_asic.process import MemoryVariable, OperatorProcess
 from b_asic.resources import ProcessCollection
 from b_asic.signal_flow_graph import SFG
 from b_asic.special_operations import Delay, Input, Output
+from b_asic.types import TypeName
 
 # Need RGB from 0 to 1
 _EXECUTION_TIME_COLOR = tuple(c / 255 for c in EXECUTION_TIME_COLOR)
@@ -557,7 +558,6 @@ class Schedule:
         time : int
             The time to move. If positive move forward, if negative move backward.
         """
-        print(f"schedule.move_operation({graph_id!r}, {time})")
         if graph_id not in self._start_times:
             raise ValueError(f"No operation with graph_id {graph_id} in schedule")
 
@@ -782,6 +782,10 @@ class Schedule:
             self.cyclic,
         )
 
+    def get_used_type_names(self) -> List[TypeName]:
+        """Get a list of all TypeNames used in the Schedule."""
+        return self._sfg.get_used_type_names()
+
     def _get_y_position(
         self, graph_id, operation_height=1.0, operation_gap=None
     ) -> float:
diff --git a/b_asic/scheduler_gui/scheduler_event.py b/b_asic/scheduler_gui/scheduler_event.py
index b7fce2575050268b12ca444fbf00eec0121e9879..7610d510a65358367c4d261849ff333cafd6dfef 100644
--- a/b_asic/scheduler_gui/scheduler_event.py
+++ b/b_asic/scheduler_gui/scheduler_event.py
@@ -223,6 +223,10 @@ class SchedulerEvent:  # PyQt5
                 math.ceil(pos_y),
                 (pos_y % 1) != 0,
             )
+            print(
+                f"schedule.move_y_location({item.operation.graph_id!r},"
+                f" {math.ceil(pos_y)}, {(pos_y % 1) != 0})"
+            )
             self._signals.redraw_all.emit()
         # Operation has been moved in x-direction
         if redraw:
diff --git a/b_asic/scheduler_gui/scheduler_item.py b/b_asic/scheduler_gui/scheduler_item.py
index 74051251c82df1ecdbc8d37e53f9a895a868975b..2f5f6eca176f60a19b876e4d0b7f40889515458d 100644
--- a/b_asic/scheduler_gui/scheduler_item.py
+++ b/b_asic/scheduler_gui/scheduler_item.py
@@ -227,6 +227,7 @@ class SchedulerItem(SchedulerEvent, QGraphicsItemGroup):  # PySide2 / PyQt5
         move_time = new_start_time - op_start_time
         if move_time:
             self.schedule.move_operation(item.graph_id, move_time)
+            print(f"schedule.move_operation({item.graph_id!r}, {move_time})")
 
     def is_valid_delta_time(self, delta_time: int) -> bool:
         """
diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py
index 5869e38a41da772917866c43d23a44e2e6f7ea36..43c6d085a6ebf05ea6c12061319693442dc1f40e 100644
--- a/b_asic/signal_flow_graph.py
+++ b/b_asic/signal_flow_graph.py
@@ -1716,3 +1716,9 @@ class SFG(AbstractOperation):
     @property
     def is_constant(self) -> bool:
         return all(output.is_constant for output in self._output_operations)
+
+    def get_used_type_names(self) -> List[TypeName]:
+        """Get a list of all TypeNames used in the SFG."""
+        ret = list({op.type_name() for op in self.operations})
+        ret.sort()
+        return ret
diff --git a/docs_sphinx/conf.py b/docs_sphinx/conf.py
index dc42428a9d9e8eddd7ce4a1251e3de592fe1c981..f8148bc4a1b069a0368a746ed085dce0147a851f 100644
--- a/docs_sphinx/conf.py
+++ b/docs_sphinx/conf.py
@@ -71,17 +71,17 @@ sphinx_gallery_conf = {
     'doc_module': ('b_asic',),
     'reference_url': {'b_asic': None},
     'image_scrapers': (
-        'matplotlib',
         qtgallery.qtscraper,
+        'matplotlib',
     ),
     'reset_modules': (
-        'matplotlib',
         qtgallery.reset_qapp,
+        'matplotlib',
     ),
 }
 
 qtgallery_conf = {
-    "xvfb_size": (640, 480),
+    "xvfb_size": (800, 600),
     "xvfb_color_depth": 24,
     "xfvb_use_xauth": False,
     "xfvb_extra_args": [],
diff --git a/test/test_schedule.py b/test/test_schedule.py
index 3a7059b3bc33f8c987243550c46d1529e7b3cff0..e5fc64b375ee55da016372bbffc8a4261ee3b09c 100644
--- a/test/test_schedule.py
+++ b/test/test_schedule.py
@@ -499,6 +499,11 @@ class TestProcesses:
         pc = secondorder_iir_schedule.get_memory_variables()
         assert len(pc) == 12
 
+    def test_get_operations(self, secondorder_iir_schedule_with_execution_times):
+        pc = secondorder_iir_schedule_with_execution_times.get_operations()
+        assert len(pc) == 13
+        assert all(isinstance(operand, OperatorProcess) for operand in pc.collection)
+
 
 class TestFigureGeneration:
     @pytest.mark.mpl_image_compare(remove_text=True, style='mpl20')
@@ -564,7 +569,12 @@ class TestErrors:
         ):
             Schedule(sfg_simple_filter, scheduling_algorithm="foo")
 
-    def test_get_operations(self, secondorder_iir_schedule_with_execution_times):
-        pc = secondorder_iir_schedule_with_execution_times.get_operations()
-        assert len(pc) == 13
-        assert all(isinstance(operand, OperatorProcess) for operand in pc.collection)
+
+class TestGetUsedTypeNames:
+    def test_secondorder_iir_schedule(self, secondorder_iir_schedule):
+        assert secondorder_iir_schedule.get_used_type_names() == [
+            'add',
+            'cmul',
+            'in',
+            'out',
+        ]
diff --git a/test/test_sfg.py b/test/test_sfg.py
index d88c62894b5e0a777c6522d25f5b00d43e805b4c..5cc0d4165260852f832d832e8105be74c07aeed9 100644
--- a/test/test_sfg.py
+++ b/test/test_sfg.py
@@ -83,7 +83,8 @@ class TestPrintSfg:
             sfg.__str__()
             == "id: no_id, \tname: SFG1, \tinputs: {0: '-'}, \toutputs: {0: '-'}\n"
             + "Internal Operations:\n"
-            + "----------------------------------------------------------------------------------------------------\n"
+            + "--------------------------------------------------------------------"
+            + "--------------------------------\n"
             + str(sfg.find_by_name("INP1")[0])
             + "\n"
             + str(sfg.find_by_name("INP2")[0])
@@ -92,7 +93,8 @@ class TestPrintSfg:
             + "\n"
             + str(sfg.find_by_name("OUT1")[0])
             + "\n"
-            + "----------------------------------------------------------------------------------------------------\n"
+            + "--------------------------------------------------------------------"
+            + "--------------------------------\n"
         )
 
     def test_add_mul(self):
@@ -108,7 +110,8 @@ class TestPrintSfg:
             sfg.__str__()
             == "id: no_id, \tname: mac_sfg, \tinputs: {0: '-'}, \toutputs: {0: '-'}\n"
             + "Internal Operations:\n"
-            + "----------------------------------------------------------------------------------------------------\n"
+            + "--------------------------------------------------------------------"
+            + "--------------------------------\n"
             + str(sfg.find_by_name("INP1")[0])
             + "\n"
             + str(sfg.find_by_name("INP2")[0])
@@ -121,7 +124,8 @@ class TestPrintSfg:
             + "\n"
             + str(sfg.find_by_name("OUT1")[0])
             + "\n"
-            + "----------------------------------------------------------------------------------------------------\n"
+            + "--------------------------------------------------------------------"
+            + "--------------------------------\n"
         )
 
     def test_constant(self):
@@ -136,7 +140,8 @@ class TestPrintSfg:
             sfg.__str__()
             == "id: no_id, \tname: sfg, \tinputs: {0: '-'}, \toutputs: {0: '-'}\n"
             + "Internal Operations:\n"
-            + "----------------------------------------------------------------------------------------------------\n"
+            + "--------------------------------------------------------------------"
+            + "--------------------------------\n"
             + str(sfg.find_by_name("CONST")[0])
             + "\n"
             + str(sfg.find_by_name("INP1")[0])
@@ -145,7 +150,8 @@ class TestPrintSfg:
             + "\n"
             + str(sfg.find_by_name("OUT1")[0])
             + "\n"
-            + "----------------------------------------------------------------------------------------------------\n"
+            + "--------------------------------------------------------------------"
+            + "--------------------------------\n"
         )
 
     def test_simple_filter(self, sfg_simple_filter):
@@ -154,7 +160,8 @@ class TestPrintSfg:
             == "id: no_id, \tname: simple_filter, \tinputs: {0: '-'},"
             " \toutputs: {0: '-'}\n"
             + "Internal Operations:\n"
-            + "----------------------------------------------------------------------------------------------------\n"
+            + "--------------------------------------------------------------------"
+            + "--------------------------------\n"
             + str(sfg_simple_filter.find_by_name("IN1")[0])
             + "\n"
             + str(sfg_simple_filter.find_by_name("ADD1")[0])
@@ -165,7 +172,8 @@ class TestPrintSfg:
             + "\n"
             + str(sfg_simple_filter.find_by_name("OUT1")[0])
             + "\n"
-            + "----------------------------------------------------------------------------------------------------\n"
+            + "--------------------------------------------------------------------"
+            + "--------------------------------\n"
         )
 
 
@@ -818,7 +826,8 @@ class TestConnectExternalSignalsToComponentsSoloComp:
     def test_connect_external_signals_to_components_operation_tree(
         self, operation_tree
     ):
-        """Replaces an SFG with only a operation_tree component with its inner components
+        """
+        Replaces an SFG with only a operation_tree component with its inner components
         """
         sfg1 = SFG(outputs=[Output(operation_tree)])
         out1 = Output(None, "OUT1")
@@ -832,7 +841,9 @@ class TestConnectExternalSignalsToComponentsSoloComp:
     def test_connect_external_signals_to_components_large_operation_tree(
         self, large_operation_tree
     ):
-        """Replaces an SFG with only a large_operation_tree component with its inner components
+        """
+        Replaces an SFG with only a large_operation_tree component with its inner
+        components
         """
         sfg1 = SFG(outputs=[Output(large_operation_tree)])
         out1 = Output(None, "OUT1")
@@ -1474,8 +1485,8 @@ class TestUnfold:
         for k in count1.keys():
             assert count1[k] * multiple == count2[k]
 
-    # This is horrifying, but I can't figure out a way to run the test on multiple fixtures,
-    # so this is an ugly hack until someone that knows pytest comes along
+    # This is horrifying, but I can't figure out a way to run the test on multiple
+    # fixtures, so this is an ugly hack until someone that knows pytest comes along
     def test_two_inputs_two_outputs(self, sfg_two_inputs_two_outputs: SFG):
         self.do_tests(sfg_two_inputs_two_outputs)
 
@@ -1639,3 +1650,15 @@ class TestInsertComponentAfter:
         sfg = SFG(outputs=[Output(large_operation_tree_names)])
         with pytest.raises(ValueError, match="Unknown component:"):
             sfg.insert_operation_after('foo', SquareRoot())
+
+
+class TestGetUsedTypeNames:
+    def test_single_accumulator(self, sfg_simple_accumulator: SFG):
+        assert sfg_simple_accumulator.get_used_type_names() == ['add', 'in', 'out', 't']
+
+    def test_sfg_nested(self, sfg_nested: SFG):
+        assert sfg_nested.get_used_type_names() == ['in', 'out', 'sfg']
+
+    def test_large_operation_tree(self, large_operation_tree):
+        sfg = SFG(outputs=[Output(large_operation_tree)])
+        assert sfg.get_used_type_names() == ['add', 'c', 'out']