diff --git a/b_asic/logger.py b/b_asic/logger.py
index 606ac6f975a2084f779ebc5e23cef4c454453136..5e18464d1361030ca2f02b96eb1c12587ecc597f 100644
--- a/b_asic/logger.py
+++ b/b_asic/logger.py
@@ -55,15 +55,17 @@ from types import TracebackType
 from typing import Type, Union
 
 
-def getLogger(filename: str = "scheduler-gui.log", loglevel: str = "INFO") -> Logger:
+def getLogger(source: str, filename: str, loglevel: str = "INFO") -> Logger:
     """
     This function creates console- and filehandler and from those, creates a logger
     object.
 
     Parameters
     ----------
-    filename : str optional
-        Output filename. Defaults to 'scheduler-gui.log'.
+    source : str
+        Source filename.
+    filename : str
+        Output filename.
     loglevel : str, optional
         The minimum level that the logger will log. Defaults to 'INFO'.
 
@@ -74,7 +76,7 @@ def getLogger(filename: str = "scheduler-gui.log", loglevel: str = "INFO") -> Lo
 
     # logger = logging.getLogger(name)
     # logger = logging.getLogger('root')
-    logger = logging.getLogger()
+    logger = logging.getLogger(source)
 
     # if logger 'name' already exists, return it to avoid logging duplicate
     # messages by attaching multiple handlers of the same type
diff --git a/b_asic/scheduler.py b/b_asic/scheduler.py
index 6ae328f1132c435a86d9e626ae6fa587a3034fcb..e6b8dfd7daaec5791aabaf9e801fe6a8d94cc13c 100644
--- a/b_asic/scheduler.py
+++ b/b_asic/scheduler.py
@@ -4,6 +4,7 @@ from abc import ABC, abstractmethod
 from math import ceil
 from typing import TYPE_CHECKING, Optional, cast
 
+import b_asic.logger as logger
 from b_asic.core_operations import DontCare
 from b_asic.port import OutputPort
 from b_asic.special_operations import Delay, Input, Output
@@ -172,6 +173,7 @@ class ListScheduler(Scheduler, ABC):
         cyclic: Optional[bool] = False,
     ) -> None:
         super()
+        self._logger = logger.getLogger(__name__, "list_scheduler.log", "DEBUG")
 
         if max_resources is not None:
             if not isinstance(max_resources, dict):
@@ -209,6 +211,8 @@ class ListScheduler(Scheduler, ABC):
         schedule : Schedule
             Schedule to apply the scheduling algorithm on.
         """
+        self._logger.debug("--- Scheduler initializing ---")
+
         self._schedule = schedule
         self._sfg = schedule.sfg
 
@@ -267,15 +271,6 @@ class ListScheduler(Scheduler, ABC):
         self._time_out_counter = 0
         self._op_laps = {}
 
-        # initial input placement
-        if self._input_times:
-            for input_id in self._input_times:
-                self._schedule.start_times[input_id] = self._input_times[input_id]
-                self._op_laps[input_id] = 0
-            self._remaining_ops = [
-                elem for elem in self._remaining_ops if not elem.startswith("in")
-            ]
-
         self._remaining_ops = [
             op for op in self._remaining_ops if not op.startswith("dontcare")
         ]
@@ -288,6 +283,20 @@ class ListScheduler(Scheduler, ABC):
             if not (op.startswith("out") and op in self._output_delta_times)
         ]
 
+        if self._input_times:
+            self._logger.debug("--- Input placement starting ---")
+            for input_id in self._input_times:
+                self._schedule.start_times[input_id] = self._input_times[input_id]
+                self._op_laps[input_id] = 0
+                self._logger.debug(
+                    f"   {input_id} time: {self._schedule.start_times[input_id]}"
+                )
+            self._remaining_ops = [
+                elem for elem in self._remaining_ops if not elem.startswith("in")
+            ]
+            self._logger.debug("--- Input placement completed ---")
+
+        self._logger.debug("--- Operation scheduling starting ---")
         while self._remaining_ops:
             ready_ops_priority_table = self._get_ready_ops_priority_table()
             while ready_ops_priority_table:
@@ -309,14 +318,26 @@ class ListScheduler(Scheduler, ABC):
                     else 0
                 )
 
+                if self._schedule.schedule_time is not None:
+                    self._logger.debug(
+                        f"  Op: {next_op.graph_id}, time: {self._current_time % self._schedule.schedule_time}"
+                    )
+                else:
+                    self._logger.debug(
+                        f"  Op: {next_op.graph_id}, time: {self._current_time}"
+                    )
+
                 ready_ops_priority_table = self._get_ready_ops_priority_table()
 
             self._go_to_next_time_step()
             self.remaining_reads = self._max_concurrent_reads
 
+        self._logger.debug("--- Operation scheduling completed ---")
+
         self._current_time -= 1
 
-        self._handle_outputs()
+        if self._output_delta_times:
+            self._handle_outputs()
 
         if self._schedule.schedule_time is None:
             self._schedule.set_schedule_time(self._schedule.get_max_end_time())
@@ -330,6 +351,7 @@ class ListScheduler(Scheduler, ABC):
             self._schedule.move_operation_alap(dc_op.graph_id)
 
         self._schedule.sort_y_locations_on_start_times()
+        self._logger.debug("--- Scheduling completed ---")
 
     def _go_to_next_time_step(self):
         self._time_out_counter += 1
@@ -469,6 +491,7 @@ class ListScheduler(Scheduler, ABC):
         return earliest_start_time <= self._current_time
 
     def _handle_outputs(self) -> None:
+        self._logger.debug("--- Output placement starting ---")
         if self._schedule.cyclic:
             end = self._schedule.schedule_time
         else:
@@ -501,3 +524,12 @@ class ListScheduler(Scheduler, ABC):
                         f"at time: { self._schedule.start_times[output.graph_id]}, "
                         "try relaxing the constraints."
                     )
+
+                modulo_time = (
+                    new_time % self._schedule.schedule_time
+                    if self._schedule.schedule_time
+                    else new_time
+                )
+                self._logger.debug(f"   {output.graph_id} time: {modulo_time}")
+
+        self._logger.debug("--- Output placement completed ---")
diff --git a/b_asic/scheduler_gui/compile.py b/b_asic/scheduler_gui/compile.py
index fe97bf54fe2c71d50266a8bee4e6d06610122556..5a7fcff4d7253d3c859c6a51dfbd90be7b464485 100644
--- a/b_asic/scheduler_gui/compile.py
+++ b/b_asic/scheduler_gui/compile.py
@@ -20,7 +20,7 @@ from setuptools_scm import get_version
 try:
     import b_asic.logger as logger
 
-    log = logger.getLogger()
+    log = logger.getLogger(__name__, "scheduler-gui.log")
     sys.excepthook = logger.handle_exceptions
 except ModuleNotFoundError:
     log = None
diff --git a/b_asic/scheduler_gui/main_window.py b/b_asic/scheduler_gui/main_window.py
index 217afa8a55dda4d3c96f0cf1fbfeb499332958fd..9d0355874e83f0ed27d9addfdee62059a33bd01b 100644
--- a/b_asic/scheduler_gui/main_window.py
+++ b/b_asic/scheduler_gui/main_window.py
@@ -81,7 +81,7 @@ from b_asic.scheduler_gui.ui_main_window import Ui_MainWindow
 if TYPE_CHECKING:
     from logging import Logger
 
-log: "Logger" = logger.getLogger()
+log: "Logger" = logger.getLogger(__name__, "scheduler-gui.log")
 sys.excepthook = logger.handle_exceptions