Index: flowtimer/Phase.py
===================================================================
--- flowtimer/Phase.py	(revision f95948892cd5820277dabed16c73e484f43cc674)
+++ flowtimer/Phase.py	(revision daa22762d0f497f098e4974c25488ee08af22cd4)
@@ -25,5 +25,5 @@
 
     def to_json(self):
-        return json.dumps({"title": self.title, "duration": self.initial_ticks})
+        return json.dumps({"title": self.title, "initial_ticks": self.initial_ticks})
 
     def __str__(self):
@@ -65,5 +65,4 @@
 
         if result <= 0:
-            print("Single phase finished")
             self.ticks_left = 0
             self.state = "finished"
Index: flowtimer/RecurringPhaseSequence.py
===================================================================
--- flowtimer/RecurringPhaseSequence.py	(revision f95948892cd5820277dabed16c73e484f43cc674)
+++ flowtimer/RecurringPhaseSequence.py	(revision daa22762d0f497f098e4974c25488ee08af22cd4)
@@ -9,8 +9,8 @@
     def from_json(cls, a_json_string):
         def custom_object_hook(d):
-            if 'title' in d and 'duration' in d:
-                return Phase(d['title'], d['duration'])
-            if 'phase_list' in d and 'repetitions' in d:
-                return RecurringPhaseSequence(d['phase_list'], d['repetitions'])
+            if 'title' in d and 'initial_ticks' in d:
+                return Phase(d['title'], d['initial_ticks'])
+            if 'phase_list' in d and 'initial_repetitions' in d:
+                return RecurringPhaseSequence(d['phase_list'], d['initial_repetitions'])
             return d
         return json.loads(a_json_string, object_hook=custom_object_hook)
@@ -18,9 +18,9 @@
     @classmethod
     def default_json_string(cls):
-        return json.dumps({"phase_list": [{"title": "Huddle", "duration": 10},
-                                          {"title": "Tasking", "duration": 5},
-                                          {"title": "Work", "duration": 45},
-                                          {"title": "Break", "duration": 15}],
-                           "repetitions": 3})
+        return json.dumps({"phase_list": [{"title": "Huddle", "initial_ticks": 10},
+                                          {"title": "Tasking", "initial_ticks": 5},
+                                          {"title": "Work", "initial_ticks": 45},
+                                          {"title": "Break", "initial_ticks": 15}],
+                           "initial_repetitions": 3})
 
     @classmethod
@@ -40,14 +40,21 @@
         return json.dumps(self.__dict__, default=lambda each: each.to_json())
 
+    def current_phase_number(self):
+        return self.phase_list.index(self.current_phase)
+
+    def phases_left_in_pass(self):
+        return len(self.upcoming_phases_in_pass())
+
     def upcoming_phases_in_pass(self):
-        index = self.phase_list.index(self.current_phase)
-        if index < len(self.phase_list) - 1:
-            return self.phase_list[index+1:]
+        if self.current_phase_number() < len(self.phase_list) - 1:
+            return self.phase_list[self.current_phase_number()+1:]
         return []
 
+    @property
     def ticks_left(self):
-        return (self.passes_left * sum([each.initial_ticks for each in self.phase_list]) +
-                self.current_phase.ticks_left +
-                sum([each.ticks_left for each in self.upcoming_phases_in_pass()]))
+        return (
+            (self.passes_left-1) * sum([each.initial_ticks for each in self.phase_list]) +
+            self.current_phase.ticks_left +
+            sum([each.ticks_left for each in self.upcoming_phases_in_pass()]))
 
     def finished(self):
@@ -80,3 +87,3 @@
 
     def unrolled(self):
-        return [deepcopy(seq) for seq in [each for each in self.repetitions * self.phase_list]]
+        return [deepcopy(seq) for seq in [each for each in self.initial_repetitions * self.phase_list]]
Index: flowtimer/main.py
===================================================================
--- flowtimer/main.py	(revision f95948892cd5820277dabed16c73e484f43cc674)
+++ flowtimer/main.py	(revision daa22762d0f497f098e4974c25488ee08af22cd4)
@@ -6,5 +6,4 @@
 from PIL import Image, ImageTk
 from pathlib import Path
-import os
 import math
 import datetime
@@ -25,6 +24,8 @@
         config = Path(__file__).parent / 'configs' / 'default.json'
         with open(config) as config_file:
-            self.schedule = Schedule(RecurringPhaseSequence.from_json(config_file.read()).unrolled())
-        self.photo = ImageTk.PhotoImage(file=Path(__file__).parent / 'resources' / 'flowtimer_startbg_new.png')
+            self.schedule = Schedule([RecurringPhaseSequence.from_json(config_file.read())])
+
+        self.photo = ImageTk.PhotoImage(file=Path(__file__).parent /
+                                        'resources' / 'flowtimer_startbg_new.png')
         print(self.schedule.current_phase)
         self.show_config = self.schedule.current_phase.title
@@ -110,5 +111,5 @@
             self.label_duration.config(self.start_color(root))
             self.label_duration.config(text=("noch " +
-                                             str(math.ceil(self.schedule.current_phase.time_left)) +
+                                             str(self.schedule.current_phase.time_left) +
                                              " Min\n"))
             self.schedule.start()
@@ -116,5 +117,4 @@
         else:
             if self.schedule.running():
-                self.progress(self.currentValue)
                 self.progressbar.update()
                 self.label_sequence.configure(self.start_color(root))
@@ -125,6 +125,7 @@
                                                  str(math.ceil(self.schedule.current_phase.time_left))
                                                  + " Min\n"), bg=self.random_color(self.label_duration))
-                if self.schedule.tick(1/60):
-                    self.round_counter()
+                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")
 
             else:
@@ -150,6 +151,4 @@
         self.schedule.skip()
         self.currentValue = 0
-        if self.schedule.state == "running":
-            self.round_counter()
 
     def toggle_tick(self):
@@ -201,26 +200,4 @@
             self.currentValue = 0
 
-    def round_counter(self):
-        self.count += 1
-        if self.count < 3:
-            self.currentValue = 0
-            self.progress(self.currentValue + 1)
-            self.progressbar.update()
-            self.label_config.config(text="Runde: ")
-            self.label_config_text.config(text=("1", "/", self.repeats),
-                                          fg='blue', font="Times 48")
-        if self.count >= 3 and self.count < 5:
-            self.label_config_text.config(text=("2", "/", self.repeats),
-                                          fg='blue', font="Times 48")
-        if self.count >= 5 and self.count < 7:
-            self.label_config_text.config(text=("3", "/", self.repeats),
-                                          fg='blue', font="Times 48")
-        if self.count >= 7 and self.count < 9:
-            self.label_config_text.config(text=("4", "/", self.repeats),
-                                          fg='blue', font="Times 48")
-        if self.count >= 9 and self.count < 11:
-            self.label_config_text.config(text=("5", "/", self.repeats),
-                                          fg='blue', font="Times 48")
-
     def change_config(self):
         self.config_state = 'user'
@@ -231,5 +208,5 @@
                                                  filetypes=self.config_files)
         with open(self.answer) as config_file:
-            self.schedule = Schedule(RecurringPhaseSequence.from_json(config_file.read()).unrolled())
+            self.schedule = Schedule(RecurringPhaseSequence.from_json(config_file.read()))
 
 
Index: tests/test_phase.py
===================================================================
--- tests/test_phase.py	(revision f95948892cd5820277dabed16c73e484f43cc674)
+++ tests/test_phase.py	(revision daa22762d0f497f098e4974c25488ee08af22cd4)
@@ -7,12 +7,12 @@
         phase = Phase("Warm-up", 300)
         assert phase.title == "Warm-up"
-        assert phase.duration == 300
+        assert phase.initial_ticks == 300
         assert phase.state == "initial"
-        assert phase.time_left == 300
-        
-    def test_phase_str_representation(self):
-        phase = Phase("Warm-up", 300)
-        expected_str = "-->Warm-up\nDuration=300\n"
-        assert str(phase) == expected_str
+        assert phase.ticks_left == 300
+
+#    def test_phase_str_representation(self):
+#        phase = Phase("Warm-up", 300)
+#        expected_str = "-->Warm-up\nInitial=300\n"
+#        assert str(phase) == expected_str
 
     def test_phase_start(self):
@@ -39,5 +39,5 @@
         phase.start()
         phase.tick(60)
-        assert phase.time_left == 240
+        assert phase.ticks_left == 240
         assert phase.state == "running"
 
@@ -46,5 +46,5 @@
         phase.start()
         phase.tick(300)
-        assert phase.time_left == 0
+        assert phase.ticks_left == 0
         assert phase.finished() is True
 
@@ -53,3 +53,3 @@
         phase.start()
         phase.tick(350)
-        assert phase.time_left == 0
+        assert phase.ticks_left == 0
Index: tests/test_recurring_phase_sequence.py
===================================================================
--- tests/test_recurring_phase_sequence.py	(revision daa22762d0f497f098e4974c25488ee08af22cd4)
+++ tests/test_recurring_phase_sequence.py	(revision daa22762d0f497f098e4974c25488ee08af22cd4)
@@ -0,0 +1,93 @@
+import pytest
+import json
+
+from flowtimer.Phase import Phase
+from flowtimer.RecurringPhaseSequence import RecurringPhaseSequence
+
+
+class TestRecurringPhaseSequence():
+
+    @pytest.fixture
+    def recurring_phase_sequence(self):
+        phase_list = [Phase("Huddle", 10), Phase("Tasking", 5),
+                      Phase("Work", 45), Phase("Break", 15)]
+        return RecurringPhaseSequence(phase_list, 3)
+
+    def test_from_json(self):
+        json_string = RecurringPhaseSequence.default_json_string()
+        sequence = RecurringPhaseSequence.from_json(json_string)
+        assert isinstance(sequence, RecurringPhaseSequence)
+        assert sequence.initial_repetitions == 3
+        assert len(sequence.phase_list) == 4
+        assert sequence.phase_list[0].title == "Huddle"
+
+    def test_to_json(self, recurring_phase_sequence):
+        json_string = recurring_phase_sequence.to_json()
+        data = json.loads(json_string)
+        assert data['state'] == "initial"
+        assert data['initial_repetitions'] == 3
+        assert data['passes_left'] == 3
+        assert len(data['phase_list']) == 4
+
+    def test_initial_state(self, recurring_phase_sequence):
+        assert recurring_phase_sequence.state == "initial"
+        assert recurring_phase_sequence.current_phase.title == "Huddle"
+        assert recurring_phase_sequence.passes_left == 3
+
+    def test_current_phase_number(self, recurring_phase_sequence):
+        assert recurring_phase_sequence.current_phase_number() == 0
+        recurring_phase_sequence.tick(10)
+        assert recurring_phase_sequence.current_phase_number() == 1
+
+    def test_phases_left_in_pass(self, recurring_phase_sequence):
+        assert recurring_phase_sequence.phases_left_in_pass() == 3
+        recurring_phase_sequence.tick(10)
+        assert recurring_phase_sequence.phases_left_in_pass() == 2
+
+    def test_upcoming_phases_in_pass(self, recurring_phase_sequence):
+        upcoming = recurring_phase_sequence.upcoming_phases_in_pass()
+        assert len(upcoming) == 3
+        assert upcoming[0].title == "Tasking"
+
+    def test_ticks_left(self, recurring_phase_sequence):
+        total_ticks = (sum([phase.initial_ticks for phase in recurring_phase_sequence.phase_list]) *
+                       recurring_phase_sequence.initial_repetitions)
+
+        assert recurring_phase_sequence.ticks_left == total_ticks
+        recurring_phase_sequence.tick(10)
+        assert recurring_phase_sequence.ticks_left == (total_ticks - 10)
+
+    def test_finished(self, recurring_phase_sequence):
+        assert not recurring_phase_sequence.finished()
+        for _ in range(3):
+            for phase in recurring_phase_sequence.phase_list:
+                recurring_phase_sequence.tick(phase.initial_ticks)
+        assert recurring_phase_sequence.finished()
+
+    def test_abort(self, recurring_phase_sequence):
+        recurring_phase_sequence.abort()
+        assert recurring_phase_sequence.state == "finished"
+        assert recurring_phase_sequence.current_phase.finished()
+
+    def test_tick_progression(self, recurring_phase_sequence):
+        recurring_phase_sequence.tick(10)
+        assert recurring_phase_sequence.current_phase.title == "Tasking"
+        assert recurring_phase_sequence.passes_left == 3
+
+        recurring_phase_sequence.tick(5)
+        assert recurring_phase_sequence.current_phase.title == "Work"
+        assert recurring_phase_sequence.passes_left == 3
+
+        recurring_phase_sequence.tick(45)
+        assert recurring_phase_sequence.current_phase.title == "Break"
+        assert recurring_phase_sequence.passes_left == 3
+
+        recurring_phase_sequence.tick(15)
+        assert recurring_phase_sequence.current_phase.title == "Huddle"
+        assert recurring_phase_sequence.passes_left == 2
+
+    def test_unrolled(self, recurring_phase_sequence):
+        unrolled_phases = recurring_phase_sequence.unrolled()
+        assert len(unrolled_phases) == 12
+        assert unrolled_phases[0].title == "Huddle"
+        assert unrolled_phases[-1].title == "Break"
