diff --git a/b_asic/schedule.py b/b_asic/schedule.py
index 628117c462b6c01136e00d00104512dc018976d2..e61ab864949d97e0026029e652e05e9e7c81c54f 100644
--- a/b_asic/schedule.py
+++ b/b_asic/schedule.py
@@ -314,11 +314,21 @@ class Schedule:
         """If the current schedule is cyclic."""
         return self._cyclic
 
-    def edit(self) -> None:
-        """Edit schedule in GUI."""
+    def edit(self, inplace=False) -> "Schedule":
+        """
+        Edit schedule in GUI and return new schedule.
+
+        Parameters
+        ----------
+        inplace : bool, default: False
+            If True, replace the current schedule.
+        """
         from b_asic.scheduler_gui.main_window import start_scheduler
 
-        start_scheduler(self)
+        new_schedule = start_scheduler(self)
+        if inplace:
+            self = new_schedule
+        return new_schedule
 
     def increase_time_resolution(self, factor: int) -> "Schedule":
         """
diff --git a/b_asic/scheduler_gui/main_window.py b/b_asic/scheduler_gui/main_window.py
index 2e6e90c7caf1babf7146f7d9bc5da77f68e69a74..4b379c7549e6406c9ed7417159a3438c3f559ab6 100644
--- a/b_asic/scheduler_gui/main_window.py
+++ b/b_asic/scheduler_gui/main_window.py
@@ -705,13 +705,14 @@ class ScheduleMainWindow(QMainWindow, Ui_MainWindow):
         self._update_recent_file_list()
 
 
-def start_scheduler(schedule: Optional[Schedule] = None) -> None:
+def start_scheduler(schedule: Optional[Schedule] = None) -> Schedule:
     app = QApplication(sys.argv)
     window = ScheduleMainWindow()
     if schedule:
         window.open(schedule)
     window.show()
-    sys.exit(app.exec_())
+    app.exec_()
+    return window.schedule
 
 
 if __name__ == "__main__":