Index: flowtimer/RecurringPhaseSequence.py
===================================================================
--- flowtimer/RecurringPhaseSequence.py	(revision 5741f6dc70cda3b4350efdeeb782632cc1558641)
+++ flowtimer/RecurringPhaseSequence.py	(revision 36c9ef567b2e4c1468dc994f32911a75ea8ae804)
@@ -45,5 +45,5 @@
     @property
     def title(self):
-        return self.current_phase.title
+        return self._title
 
     def is_sequence(self):
@@ -82,4 +82,18 @@
         self.state = "running"
 
+    def skip(self):
+        if self.upcoming_phases_in_pass():
+            self.current_phase.reset()
+            self.current_phase = self.upcoming_phases_in_pass()[0]
+            return
+        else:
+            if self.passes_left == 0:
+                self.abort()
+                return
+            else:
+                self.passes_left -= 1
+                self.current_phase.reset()
+                self.current_phase = self.phase_list[0]
+
     def tick(self, ticks):
         if not self.finished():
Index: flowtimer/Schedule.py
===================================================================
--- flowtimer/Schedule.py	(revision 5741f6dc70cda3b4350efdeeb782632cc1558641)
+++ flowtimer/Schedule.py	(revision 36c9ef567b2e4c1468dc994f32911a75ea8ae804)
@@ -1,10 +1,16 @@
 import json
+
+"""
+I represent a Schedule consisting of blocks. Blocks can be a single phase or
+a sequence of phases. 
+"""
 
 
 class Schedule:
 
-    def __init__(self, phase_list):
-        self.phase_list = phase_list
-        self.current_phase = phase_list[0]
+    def __init__(self, block_list):
+        assert block_list is not []
+        self.block_list = block_list
+        self.current_block = block_list[0]
         self.state = "initial"
 
@@ -14,5 +20,5 @@
     def start(self):
         self.state = "running"
-        self.current_phase.start()
+        self.current_block.start()
 
     def pause(self):
@@ -26,11 +32,10 @@
 
     def abort(self):
-        self.current_phase.abort()
+        self.current_block.abort()
         self.state = "finished"
 
     def finished(self):
-        if (self.current_phase.finished()) and (self.phase_list[-1] == self.current_phase):
+        if (self.current_block.finished()) and (self.block_list[-1] == self.current_block):
             self.state = "finished"
-            print("Finished")
             return True
         else:
@@ -38,29 +43,32 @@
 
     def skip(self):
-        if self.current_phase_is_final():
-            self.abort()
+        if self.current_block.is_sequence:
+            self.current_block.skip()
         else:
-            index = self.phase_list.index(self.current_phase)
-            self.current_phase = self.phase_list[index+1]
+            if self.current_block_is_final():
+                self.abort()
+            else:
+                index = self.block_list.index(self.current_block)
+                self.current_block = self.block_list[index+1]
 
-    def ticks_left(self):
-        return (self.current_phase.ticks_left +
-                sum([phase.ticks_left for phase in self.upcoming_phases()]))
+    def total_ticks_left(self):
+        return (self.current_block.ticks_left +
+                sum([block.ticks_left for block in self.upcoming_blocks()]))
 
-    def upcoming_phases(self):
-        index = self.phase_list.index(self.current_phase)
-        if index < len(self.phase_list):
-            return self.phase_list[index+1:]
+    def upcoming_blocks(self):
+        index = self.block_list.index(self.current_block)
+        if index < len(self.block_list):
+            return self.block_list[index+1:]
         return []
 
-    def current_phase_is_final(self):
-        index = self.phase_list.index(self.current_phase)
-        return index == (len(self.phase_list) - 1)
+    def current_block_is_final(self):
+        index = self.block_list.index(self.current_block)
+        return index == (len(self.block_list) - 1)
 
     def tick(self, duration):
         if not self.finished():
-            self.current_phase.tick(duration)
-            if self.current_phase.finished():
-                if self.current_phase_is_final():
+            self.current_block.tick(duration)
+            if self.current_block.finished():
+                if self.current_block_is_final():
                     self.abort()
                 else:
Index: flowtimer/main.py
===================================================================
--- flowtimer/main.py	(revision 5741f6dc70cda3b4350efdeeb782632cc1558641)
+++ flowtimer/main.py	(revision 36c9ef567b2e4c1468dc994f32911a75ea8ae804)
@@ -8,25 +8,16 @@
 import datetime
 
-now = datetime.datetime.now()
-date = now.strftime("%m/%d/%Y")
-time = now.strftime("%H:%M:%S")
-
 
 class TimerApp(tk.Frame):
 
-    def __init__(self, parent):
+    def __init__(self, parent, tickspeed):
 
         super().__init__(parent)
         self.parent = parent
+        self.tick_speed = tickspeed
         self.count = 0
-        self.currentValue = 0
-        config = Path(__file__).parent / 'configs' / 'default.json'
-        with open(config) as config_file:
-            self.schedule = Schedule([RecurringPhaseSequence.from_json(config_file.read())])
-
+        self.load_config()
         self.photo = ImageTk.PhotoImage(file=Path(__file__).parent /
                                         'resources' / 'flowtimer_startbg_new.png')
-        print(self.schedule.current_phase.title)
-        self.show_config = self.schedule.current_phase.title
         self.config_state = 'default'
 
@@ -59,8 +50,8 @@
 
         self.config_button = tk.Button(self.headline_frame, text="change config",
-                                       font="courier 14", width=20, command=self.change_config)
+                                       font="courier 14", width=20, command=self.select_config)
         self.config_button.pack(side='right', padx=10, pady=10, expand=False)
 
-        self.label_config_text = tk.Label(self.label_config, text=self.show_config,
+        self.label_config_text = tk.Label(self.label_config, text=self.current_config(),
                                           bg='white', font="serif 10", justify='right')
         self.label_config_text.pack()
@@ -96,4 +87,32 @@
                                      font="courier 14", width=20, command=self.quit_app)
         self.quit_button.pack(side='left', fill='both', ipady=20, expand=True)
+
+    def ticks_left_in_phase(self):
+        if self.schedule.current_block.is_sequence():
+            return self.schedule.current_block.current_phase.ticks_left
+        else:
+            return self.schedule.current_block.ticks_left
+
+    def ticks_left_in_block(self):
+        if self.schedule.current_block.is_sequence():
+            return self.schedule.current_block.ticks_left
+        else:
+            return self.schedule.current_block.ticks_left
+
+    def current_title(self):
+        if self.schedule.current_block.is_sequence():
+            return self.schedule.current_block.current_phase.title
+        else:
+            return self.schedule.current_block.title
+
+    def current_config(self):
+        if self.schedule.current_block.is_sequence():
+            return f"{self.schedule.current_block.title} / {self.schedule.current_block.current_phase.title} / {self.schedule.current_block.current_phase_number()+1} of {len(self.schedule.current_block.phase_list)} ({self.schedule.current_block.passes_left})"
+
+    def current_time_status(self):
+        if self.ticks_left_in_phase() < 60:
+            return f"{self.ticks_left_in_phase()} seconds left in phase {self.current_title()}"
+        else:
+            return f"{(self.ticks_left_in_phase() // 60)} min left in phase {self.current_title()}"
 
     def tick(self):
@@ -105,16 +124,14 @@
         if self.schedule.state == 'initial':
             self.label_sequence.config(self.start_color(root))
-            self.label_sequence.config(text=("\n" + str(self.schedule.current_phase.title) + "..."))
+            self.label_sequence.config(text=("\n" + str(self.schedule.current_block.title) + "..."))
             self.label_duration.config(self.start_color(root))
-            self.label_duration.config(text=("noch " +
-                                             str(self.schedule.current_phase.ticks_left // 60) +
-                                             " Min\n"))
+            self.label_duration.config(text=self.current_time_status())
             self.schedule.start()
-            self.schedule.tick(1)
+            self.schedule.tick(1*self.tick_speed)
         else:
             if self.schedule.running():
-                self.schedule.tick(1)
-                self.progressbar["value"] = (self.schedule.current_phase.initial_ticks -
-                                             self.schedule.current_phase.ticks_left) % 60
+                self.schedule.tick(1*self.tick_speed)
+                self.progressbar["value"] = (self.schedule.current_block.initial_ticks -
+                                             self.schedule.current_block.ticks_left) % 60
                 self.progressbar.update()
                 self.label_sequence.configure(self.start_color(root))
@@ -122,11 +139,6 @@
                 self.label_sequence.config(bg=self.random_color(self.label_sequence))
                 self.label_duration.config(self.random_color(root))
-                self.label_duration.config(text=("noch " +
-                                                 str(self.schedule.current_phase.ticks_left // 60)
-                                                 + " Min\n"), bg=self.random_color(self.label_duration))
-                self.label_config_text.config(text=(self.schedule.current_phase.current_phase_number()+1,
-                                                    "/", self.schedule.current_phase.current_phase_number()),
-                                              fg='blue', font="Times 48")
-
+                self.label_duration.config(text=self.current_time_status(), bg=self.random_color(self.label_duration))
+                self.label_config_text.config(text=self.current_config(), fg='blue', font="Times 48")
             else:
                 self.label_sequence.configure(self.time_out_color(root))
@@ -150,5 +162,4 @@
     def skip(self):
         self.schedule.skip()
-        self.currentValue = 0
 
     def toggle_tick(self):
@@ -171,14 +182,13 @@
     def random_color(self, widget):
         # FIXME: Do not hardcode this
-        print(self.schedule.current_phase.title)
-        if self.schedule.current_phase.title == "Huddle":
+        if self.schedule.current_block.title == "Huddle":
             widget.configure(bg="blue")
             self.label_sequence.config(text=("\n" + "Besprechung"))
             self.center_frame.configure(bg="blue")
-        if self.schedule.current_phase.title == "Tasking":
+        if self.schedule.current_block.title == "Tasking":
             widget.configure(bg="green")
             self.label_sequence.config(text=("\n" + "Intensivphase"))
             self.center_frame.configure(bg="green")
-        if self.schedule.current_phase.title == "Work":
+        if self.schedule.current_block.title == "Work":
             widget.configure(bg="gold")
             self.label_sequence.config(text=("\n" + "Synchronisation"))
@@ -196,8 +206,12 @@
         widget.configure(bg="red")
 
-    def progress(self, currentValue):
-        self.progressbar["value"] = self.currentValue
-
-    def change_config(self):
+    def change_config(self, json_string):
+        self.schedule = Schedule([RecurringPhaseSequence.from_json(json_string)])
+
+    def load_config(self, file_name=Path(__file__).parent / 'configs' / 'default.json'):
+        with open(file_name) as config_file:
+            self.change_config(config_file.read())
+
+    def select_config(self):
         self.config_state = 'user'
         self.config_files = [("all files", "*.json")]
@@ -206,7 +220,10 @@
                                                  title="Please choose a config file:",
                                                  filetypes=self.config_files)
-        with open(self.answer) as config_file:
-            self.schedule = Schedule(RecurringPhaseSequence.from_json(config_file.read()))
-
+        self.load_config(Path(self.answer))
+
+
+now = datetime.datetime.now()
+date = now.strftime("%m/%d/%Y")
+time = now.strftime("%H:%M:%S")
 
 root = tk.Tk()
@@ -216,5 +233,5 @@
 root.iconphoto(False, ImageTk.PhotoImage(Image.open(Path(__file__).parent / 'resources' / 'icon_bombtimer.png')))
 
-app = TimerApp(root)
+app = TimerApp(root, tickspeed=1)
 
 app.mainloop()
