Index: flowtimer/RecurringPhaseSequence.py
===================================================================
--- flowtimer/RecurringPhaseSequence.py	(revision 729b23de2f39b2f328a0eb233b6a76e9963c687b)
+++ flowtimer/RecurringPhaseSequence.py	(revision 37ae3b7a7d6a55d792756e3a2d9dae3efbd2083c)
@@ -1,6 +1,26 @@
 import json
+from copy import deepcopy
+from Phase import Phase
 
 
 class RecurringPhaseSequence:
+
+    @classmethod
+    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'])
+            return d
+        return json.loads(a_json_string, object_hook=custom_object_hook)
+
+    @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})
 
     def __init__(self, phase_list, repetitions):
@@ -12,4 +32,4 @@
 
     def unrolled(self):
-        return [[deepcopy(seq) for seq in [each for each in se1f.repetitions * se1f.phase_list]]]
+        return [deepcopy(seq) for seq in [each for each in self.repetitions * self.phase_list]]
         # return self.repetitions * self.phase_list
Index: flowtimer/Schedule.py
===================================================================
--- flowtimer/Schedule.py	(revision 729b23de2f39b2f328a0eb233b6a76e9963c687b)
+++ flowtimer/Schedule.py	(revision 37ae3b7a7d6a55d792756e3a2d9dae3efbd2083c)
@@ -5,5 +5,4 @@
 
     def __init__(self, phase_list):
-        self.currentValue = 0
         self.phase_list = phase_list
         self.current_phase = phase_list[0]
@@ -11,5 +10,5 @@
 
     def to_json(self):
-        json.dumps(self.__dict__)
+        return json.dumps(self.__dict__)
 
     def start(self):
@@ -44,4 +43,11 @@
             self.current_phase = self.phase_list[index+1]
 
+    def time_left(self):
+        return self.current_phase.time_left + sum([phase.time_left for phase in self.upcoming_phases])
+
+    def upcoming_phases(self):
+        index = self.phase_list.index(self.current_phase)
+        return self.phase_list[index:]
+
     def current_phase_is_final(self):
         index = self.phase_list.index(self.current_phase)
Index: flowtimer/main.py
===================================================================
--- flowtimer/main.py	(revision 729b23de2f39b2f328a0eb233b6a76e9963c687b)
+++ flowtimer/main.py	(revision 37ae3b7a7d6a55d792756e3a2d9dae3efbd2083c)
@@ -3,8 +3,7 @@
 from tkinter import filedialog
 from Schedule import Schedule
-from Phase import Phase
+from RecurringPhaseSequence import RecurringPhaseSequence
 from PIL import Image, ImageTk
-from copy import copy
-import pandas as pd
+from pathlib import Path
 import os
 import math
@@ -24,10 +23,12 @@
         self.count = 0
         self.currentValue = 0
-        self.default_config = pd.read_csv("default_config.csv", sep=',', header=0,
-                                          names=('Titel', 'Values'), index_col=False,
-                                          keep_default_na=False)
-        self.photo = ImageTk.PhotoImage(file='flowtimer_startbg_new.png')
-        self.show_config = pd.read_csv("default_config.csv", usecols=[0, 1])
+        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')
+        print(self.schedule.current_phase)
+        self.show_config = self.schedule.current_phase.title
         self.config_state = 'default'
+        print(self.schedule)
 
         self.build_gui()
@@ -95,34 +96,4 @@
                                      font="courier 14", width=20, command=self.quit_app)
         self.quit_button.pack(side='left', fill='both', ipady=20, expand=True)
-
-        df = self.default_config
-        repeat_of_phases = df['Values'][3]
-
-        phase_1 = Phase(title=df['Titel'][0], duration=df['Values'][0])
-        phase_2 = Phase(title=df['Titel'][1], duration=df['Values'][1])
-        phase_3 = Phase(title=df['Titel'][2], duration=df['Values'][2])
-
-        if repeat_of_phases == 1:
-            phase_list = [phase_1, phase_2, phase_3]
-
-        if repeat_of_phases == 2:
-            phase_list = [phase_1, phase_2, phase_3, copy(phase_2), copy(phase_3)]
-
-        if repeat_of_phases == 3:
-            phase_list = [phase_1, phase_2, phase_3, copy(phase_2), copy(phase_3),
-                          copy(phase_2), copy(phase_3)]
-
-        if repeat_of_phases == 4:
-            phase_list = [phase_1, phase_2, phase_3, copy(phase_2), copy(phase_3),
-                          copy(phase_2), copy(phase_3), copy(phase_2), copy(phase_3)]
-
-        if repeat_of_phases == 5:
-            phase_list = [phase_1, phase_2, phase_3, copy(phase_2), copy(phase_3),
-                          copy(phase_2), copy(phase_3), copy(phase_2), copy(phase_3),
-                          copy(phase_2), copy(phase_3)]
-
-        self.repeats = repeat_of_phases
-
-        self.schedule = Schedule(phase_list)
 
     def tick(self):
@@ -254,45 +225,11 @@
     def change_config(self):
         self.config_state = 'user'
-        self.config_files = [("all files", "*.csv")]
+        self.config_files = [("all files", "*.json")]
         self.answer = filedialog.askopenfilename(parent=root,
-                                                 initialdir=os.chdir("./configs"),
+                                                 initialdir=Path(__file__).parent / 'configs',
                                                  title="Please choose a config file:",
                                                  filetypes=self.config_files)
-        self.user_config = pd.read_csv(self.answer, sep=',', header=0,
-                                       names=('Titel', 'Values'),
-                                       index_col=False, keep_default_na=False)
-        self.choosed_config = pd.read_csv(self.answer, usecols=[0, 1])
-        self.df = self.user_config
-        self.label_config_text.config(text=self.choosed_config)
-        df = self.user_config
-        repeat_of_phases = df['Values'][3]
-
-        phase_1 = Phase(title=df['Titel'][0], duration=df['Values'][0])
-        phase_2 = Phase(title=df['Titel'][1], duration=df['Values'][1])
-        phase_3 = Phase(title=df['Titel'][2], duration=df['Values'][2])
-
-        if repeat_of_phases == 1:
-            phase_list = [phase_1, phase_2, phase_3]
-
-        if repeat_of_phases == 2:
-            phase_list = [phase_1, phase_2, phase_3, copy(phase_2), copy(phase_3)]
-
-        if repeat_of_phases == 3:
-            phase_list = [phase_1, phase_2, phase_3, copy(phase_2), copy(phase_3),
-                          copy(phase_2), copy(phase_3)]
-
-        if repeat_of_phases == 4:
-            phase_list = [phase_1, phase_2, phase_3, copy(phase_2), copy(phase_3),
-                          copy(phase_2), copy(phase_3),
-                          copy(phase_2), copy(phase_3)]
-
-        if repeat_of_phases == 5:
-            phase_list = [phase_1, phase_2, phase_3, copy(phase_2), copy(phase_3),
-                          copy(phase_2), copy(phase_3), copy(phase_2), copy(phase_3),
-                          copy(phase_2), copy(phase_3)]
-
-        self.repeats = repeat_of_phases
-
-        self.schedule = Schedule(phase_list)
+        with open(self.answer) as config_file:
+            self.schedule = Schedule(RecurringPhaseSequence.from_json(config_file.read()).unrolled())
 
 
@@ -301,5 +238,5 @@
 root.geometry("1280x860")
 root.config(bg='black')
-root.iconphoto(False, ImageTk.PhotoImage(Image.open('icon_bombtimer.png')))
+root.iconphoto(False, ImageTk.PhotoImage(Image.open(Path(__file__).parent / 'resources' / 'icon_bombtimer.png')))
 
 app = TimerApp(root)
Index: tests/test_schedule.py
===================================================================
--- tests/test_schedule.py	(revision 729b23de2f39b2f328a0eb233b6a76e9963c687b)
+++ tests/test_schedule.py	(revision 37ae3b7a7d6a55d792756e3a2d9dae3efbd2083c)
@@ -13,5 +13,4 @@
         assert schedule.current_phase == phase1
         assert schedule.state == "initial"
-        assert schedule.currentValue == 0
 
     def test_schedule_start(self):
