diff --git a/main.js b/main.js
index f7bbee1281365b6c161fdf629c9ff08dfa8ac202..5dc65f26e050753514c91693e1c08a4ce6c4d2dd 100644
--- a/main.js
+++ b/main.js
@@ -18,6 +18,10 @@ var tail = require('tail').Tail;
 
 var client; /* Sub process for the express server */
 
+/* Timers functions, needs to be clear on app quit */
+var loopIntervals = [];
+var loopTimeouts = [];
+
 class Lektor {
     constructor() {
         this.closed = true;
@@ -283,65 +287,75 @@ ipcMain.on('add-kara-queue-pos', (event, addparams) => {
 ipcMain.on('verify-lektord', (event, arg) => {
     lkt.ping().then(sta => {
         logger.debug('main', `Status from ping is ${sta}`);
+
+        /* Install the clear function before registering all timers */
+        win.on('close', () => {
+            logger.info('main', 'Close instance window, ');
+            loopIntervals.forEach(timer => clearInterval(timer));
+            loopTimeouts.forEach(timer => clearTimeout(timer));
+        });
+
         lkt.reloadState();
-        setTimeout(() => lkt.idleActualisation(), 1000);
-        setTimeout(() => lkt.statusActualisation(), 1500);
-
-        setTimeout(() => db.queueAll().then(karas => win.webContents.send('reload-queue-responce', karas)), 1000);
-        setInterval(() => {
-            if (lkt.isQueueUpdated()) {
-                lkt.setQueueUpdated(false);
-                db.queueAll().then(karas => win.webContents.send('reload-queue-responce', karas));
-            }
-        }, 50);
-
-        setInterval(() => {
-            var newSongTimeData = lkt.getSongTimeData();
-            if (newSongTimeData.elapsed != songTimeData.elapsed || newSongTimeData.song != songTimeData.song) {
-                songTimeData = newSongTimeData;
-                win.webContents.send('send-song-time-data', {
-                    elapsed: songTimeData.elapsed,
-                    total: songTimeData.total,
-                    song: songTimeData.song,
-                    state: songTimeData.state,
-                });
-                counterTime = 0;
-            } else if (newSongTimeData.state == 'play') {
-                counterTime++;
-                win.webContents.send('send-song-time-data', {
-                    elapsed: songTimeData.elapsed + counterTime / 20.0,
-                    total: songTimeData.total,
-                    song: songTimeData.song,
-                    state: songTimeData.state,
-                });
-            } else {
-                win.webContents.send('send-song-time-data', {
-                    elapsed: songTimeData.elapsed + counterTime / 20.0,
-                    total: songTimeData.total,
-                    song: songTimeData.song,
-                    state: songTimeData.state,
-                });
-            }
-        }, 50);
-
-        setInterval(
-            () =>
-                isRunning({ win: 'klkt.exe', mac: 'klkt', linux: 'klkt' }).then(vklkt =>
-                    isRunning({ win: 'lektord.exe', mac: 'lektord', linux: 'lektord' }).then(vlektord =>
-                        win.webContents.send('send-runnings', {
-                            klkt: vklkt,
-                            lektord: vlektord,
-                        })
-                    )
-                ),
-            1000
-        );
-
-        setInterval(() => {
-            if (lkt.isStatusUpdated()) {
-                win.webContents.send('send-state', lkt.getStatus().state);
-            }
-        }, 50);
+
+        loopTimeouts.concat([
+            setTimeout(() => lkt.idleActualisation(), 1000),
+            setTimeout(() => lkt.statusActualisation(), 1500),
+            setTimeout(() => db.queueAll().then(karas => win.webContents.send('reload-queue-responce', karas)), 1000),
+        ]);
+
+        loopIntervals.concat([
+            setInterval(() => {
+                if (lkt.isQueueUpdated()) {
+                    lkt.setQueueUpdated(false);
+                    db.queueAll().then(karas => win.webContents.send('reload-queue-responce', karas));
+                }
+            }, 50),
+            setInterval(() => {
+                var newSongTimeData = lkt.getSongTimeData();
+                if (newSongTimeData.elapsed != songTimeData.elapsed || newSongTimeData.song != songTimeData.song) {
+                    songTimeData = newSongTimeData;
+                    win.webContents.send('send-song-time-data', {
+                        elapsed: songTimeData.elapsed,
+                        total: songTimeData.total,
+                        song: songTimeData.song,
+                        state: songTimeData.state,
+                    });
+                    counterTime = 0;
+                } else if (newSongTimeData.state == 'play') {
+                    counterTime++;
+                    win.webContents.send('send-song-time-data', {
+                        elapsed: songTimeData.elapsed + counterTime / 20.0,
+                        total: songTimeData.total,
+                        song: songTimeData.song,
+                        state: songTimeData.state,
+                    });
+                } else {
+                    win.webContents.send('send-song-time-data', {
+                        elapsed: songTimeData.elapsed + counterTime / 20.0,
+                        total: songTimeData.total,
+                        song: songTimeData.song,
+                        state: songTimeData.state,
+                    });
+                }
+            }, 50),
+            setInterval(
+                () =>
+                    isRunning({ win: 'klkt.exe', mac: 'klkt', linux: 'klkt' }).then(vklkt =>
+                        isRunning({ win: 'lektord.exe', mac: 'lektord', linux: 'lektord' }).then(vlektord =>
+                            win.webContents.send('send-runnings', {
+                                klkt: vklkt,
+                                lektord: vlektord,
+                            })
+                        )
+                    ),
+                1000
+            ),
+            setInterval(() => {
+                if (lkt.isStatusUpdated()) {
+                    win.webContents.send('send-state', lkt.getStatus().state);
+                }
+            }, 50),
+        ]);
     });
 });