diff --git a/client/main.js b/client/main.js
index 24048160922e65d0abe138e35f6394383dd4f208..2d1d9db1973ba58428dff9bcb281f47c9d1ad94a 100644
--- a/client/main.js
+++ b/client/main.js
@@ -4,7 +4,7 @@ const port = 3000;
 
 function launcher() {
     const app = express();
-    logger.debug(`Express started on localhost:${port}`);
+    logger.debug('express', `Express started on localhost:${port}`);
 
     var publicRouter = require('./routes/public.js');
 
@@ -14,7 +14,7 @@ function launcher() {
     app.use('/', publicRouter);
 
     app.listen(port, () => {
-        logger.info(`Express listening on port ${port}`);
+        logger.info('express', `Express listening on port ${port}`);
     });
 }
 
diff --git a/common/db.js b/common/db.js
index c0a666547df546f283f3b9c2ff03f47862836c2d..03a4026bb23837127037ed63a2b362046e862d03 100644
--- a/common/db.js
+++ b/common/db.js
@@ -46,13 +46,13 @@ class KaraDatabase {
     constructor(karaPath) {
         this.m_karaPath = karaPath;
         this.m_db = new sqlite3.Database(this.m_karaPath);
-        logger.log('info', 'Create database from file ' + karaPath);
+        logger.info('db', 'Create database from file ' + karaPath);
     }
 
     /* Call this as a destructor */
     close() {
         this.m_db.close();
-        logger.log('info', `Close database ${this.m_karaPath}`);
+        logger.info('db', `Close database ${this.m_karaPath}`);
     }
 
     /* Search from the kara table, a string. Can be anything (query, name,
@@ -76,7 +76,7 @@ class KaraDatabase {
                     [`%${queryString}%`, queryString],
                     (err, rows) => {
                         if (err) {
-                            logger.error(err);
+                            logger.error('db', err);
                             throw err;
                         }
                         rows.forEach(row => {
@@ -107,7 +107,7 @@ class KaraDatabase {
             return new Promise(resolv => {
                 db.all(__sqlQuery, [], (err, rows) => {
                     if (err) {
-                        logger.error(err);
+                        logger.error('db', err);
                         throw err;
                     }
                     rows.forEach(row => {
@@ -147,7 +147,7 @@ class KaraDatabase {
             return new Promise(resolv => {
                 db.all(__sqlQuery, [], (err, rows) => {
                     if (err) {
-                        logger.error(err);
+                        logger.error('db', err);
                         throw err;
                     }
                     rows.forEach(row => {
diff --git a/common/lkt.js b/common/lkt.js
index c62ac0d55d97b5f5f7a101c0aa2eba4c9c2701a4..9b3dd4e99af48d86ecab37e77313383c2fa024a9 100644
--- a/common/lkt.js
+++ b/common/lkt.js
@@ -27,28 +27,35 @@ class LktClient {
             writable: true,
         };
 
-        logger.debug('Creating the lektor client');
+        logger.debug('lkt', 'Creating the lektor client');
         this.m_socket.setTimeout(3000);
         this.m_socket.setEncoding('utf8');
         this.m_socket.on('timeout', () => {
             logger.error(
+                'lkt',
                 `Got timeout while connecting to localhost:${this.m_port}`
             );
             this.m_socket.end();
         });
 
         this.m_socket.on('ready', () => {
-            logger.debug(`Ready to use socker with localhost:${this.m_port}`);
+            logger.debug(
+                'lkt',
+                `Ready to use socker with localhost:${this.m_port}`
+            );
             this.m_online = true;
         });
 
         this.m_socket.on('end', () => {
-            logger.info(`Disconnected from server localhost:${this.m_port}`);
+            logger.info(
+                'lkt',
+                `Disconnected from server localhost:${this.m_port}`
+            );
             this.m_online = false;
         });
 
         this.m_socket.on('error', err => {
-            logger.error(`${err}`);
+            logger.error('lkt', `${err}`);
             if (this.m_online) {
                 this.m_socket.destroy();
                 this.m_online = false;
@@ -56,12 +63,12 @@ class LktClient {
         });
 
         this.m_socket.on('close', () => {
-            logger.info(`Socket localhost:${this.m_port} closed`);
+            logger.info('lkt', `Socket localhost:${this.m_port} closed`);
             this.m_online = false;
         });
 
         this.m_socket.connect(sockopt, () => {
-            logger.info(`Socket connected to localhost:${this.m_port}`);
+            logger.info('lkt', `Socket connected to localhost:${this.m_port}`);
             this.m_online = true;
         });
 
@@ -72,10 +79,10 @@ class LktClient {
      * Note: Prefere using the static methods. */
     close() {
         if (this.m_online) {
-            logger.debug('Requesting socket shutdown');
+            logger.debug('lkt', 'Requesting socket shutdown');
             this.m_socket.destroy();
         } else {
-            logger.debug('Socket already closed');
+            logger.debug('lkt', 'Socket already closed');
         }
         this.m_closed = true;
     }
diff --git a/common/logger.js b/common/logger.js
index 995a80717855bdf7ddd642d78b58a6449830e3cb..29a747676f1022f00291c433e5eb94401d206772 100644
--- a/common/logger.js
+++ b/common/logger.js
@@ -18,7 +18,6 @@ const __loggerCustomLevels = {
     levels: {
         debug: 3,
         info: 2,
-        warn: 1,
         warning: 1,
         error: 0,
     },
@@ -31,7 +30,7 @@ const __loggerCustomLevels = {
     },
 };
 
-var logger = winston.createLogger({
+var __logger = winston.createLogger({
     transports: [
         new winston.transports.File({
             eol: '\n',
@@ -55,6 +54,23 @@ var logger = winston.createLogger({
     ),
 });
 
-Object.assign(logger, { logfile: './lektor-app.log' });
+var logger = {
+    logfile: './lektor-app.log',
+    debug: (cat, lg) => {
+        __logger.debug(`${cat.padEnd(10)} | ${lg}`);
+    },
+    info: (cat, lg) => {
+        __logger.info(`${cat.padEnd(10)} | ${lg}`);
+    },
+    warn: (cat, lg) => {
+        __logger.warning(`${cat.padEnd(10)} | ${lg}`);
+    },
+    warning: (cat, lg) => {
+        __logger.warning(`${cat.padEnd(10)} | ${lg}`);
+    },
+    error: (cat, lg) => {
+        __logger.error(`${cat.padEnd(10)} | ${lg}`);
+    },
+};
 
 module.exports = global.logger = module.exports = logger;
diff --git a/instance/main.js b/instance/main.js
index c70b2e1c487d24d908a0b75f32fc7c874fe7e6fe..38d8b0c61a4fc6c5aecf47a0f6b4298a9d05151a 100644
--- a/instance/main.js
+++ b/instance/main.js
@@ -46,13 +46,14 @@ window.onload = () => {
     addIpcToButton('reloadQueue', ['reload-queue-request']);
     addIpcToButton('reloadDb', ['reload-db-request', 'reload-queue-request']);
 
-    logger.debug('Window loaded');
+    logger.debug('instance', 'Window loaded');
 };
 
 /* Create the button list */
 function createButtonList(list) {
     function action(ipc, argument) {
         logger.error(
+            'instance',
             'The action function builder for control buttons is not implemented'
         );
     }
@@ -65,6 +66,7 @@ function createButtonList(list) {
                               <button id="${btn[2]}" type="button" class="btn btn-primary p-2 bd-highlight"
                                       data-toggle="tooltip" data-placement="bottom" title="${btn[3]}">${btn[1]}</button>`;
             logger.debug(
+                'instance',
                 `Create button for "${btn[1]}" with id "${btn[2]} at the left"`
             );
         } else if (btn[0] == 'right') {
@@ -72,6 +74,7 @@ function createButtonList(list) {
                                <button id="${btn[2]}" type="button" class="btn btn-secondary p-2 bd-highlight"
                                        data-toggle="tooltip" data-placement="bottom" title="${btn[3]}">${btn[1]}</button>`;
             logger.debug(
+                'instance',
                 `Create button for "${btn[1]}" with id "${btn[2]} at the right"`
             );
         } else if (btn[0] == 'sleft') {
@@ -79,26 +82,29 @@ function createButtonList(list) {
                                <button id="${btn[2]}" type="button" class="btn btn-secondary p-2 bd-highlight"
                                        data-toggle="tooltip" data-placement="bottom" title="${btn[3]}">${btn[1]}</button>`;
             logger.debug(
+                'instance',
                 `Create button for "${btn[1]}" with id "${btn[2]} at the right"`
             );
         } else {
-            logger.warn(`Unknown button type ${btn[0]} in top bar builder`);
+            logger.warn(
+                'instance',
+                `Unknown button type ${btn[0]} in top bar builder`
+            );
         }
     });
-    document.getElementById(
-        'buttonPanelListLeft'
-    ).innerHTML = `${renderHtmlLeft}${renderHtmlSLeft}
-            <div class="p-1 bd-highlight mb-1 w-75 mr-auto ml-auto">
-                <input id="filterInput" type="text" class="form-control filterInput"
-                       placeholder="Filter...">
-            </div>
-         ${renderHtmlRight}`;
+    document.getElementById('buttonPanelListLeft').innerHTML = `
+        <div class="btn-group" role="group">${renderHtmlLeft}</div>
+        <div class="btn-group" role="group">${renderHtmlSLeft}</div>
+        <div class="p-1 bd-highlight mb-1 mr-auto ml-auto" style="width: 60%;">
+            <input id="filterInput" type="text" class="form-control filterInput" placeholder="Filter...">
+        </div>
+        <div class="btn-group" role="group">${renderHtmlRight}</div>`;
 }
 
 /* Create the left panel */
 ipcRenderer.on('reload-db-responce', (event, arg) => {
     var karaList = '';
-    logger.debug(`Web page got reload-db`);
+    logger.debug('instance', `Web page got reload-db`);
     arg.forEach(kara => {
         karaList += `<li class="card p-2 bd-highlight shadow-none d-flex flex-row bd-highlight mb-3 karaCard">
             <span class="karaElement text-uppercase p-2 bd-highlight badge badge-light"><b>${kara.language}</b></span>
@@ -119,7 +125,7 @@ ipcRenderer.on('reload-db-responce', (event, arg) => {
 /* Create the right panel: the queue */
 ipcRenderer.on('reload-queue-responce', (event, arg) => {
     var karaList = '';
-    logger.debug(`Web page got reload-queue`);
+    logger.debug('instance', `Web page got reload-queue`);
     arg.forEach(kara => {
         karaList += `<li class="card p-2 bd-highlight shadow-none d-flex flex-row bd-highlight mb-3 karaCard">
             <span class="karaElement text-uppercase p-2 bd-highlight badge badge-light"><b>${kara.language}</b></span>
diff --git a/main.js b/main.js
index 895eb3b9e2779446157a61adc3396315839ab3cc..84439502169ca8b46c5544105ba0f1bbd03594ba 100644
--- a/main.js
+++ b/main.js
@@ -51,7 +51,10 @@ ipcMain.on('close-app', (evt, arg) => {
 });
 
 app.on('quit', () => {
-    logger.info('Send SIGTERM to express process, lektord and tailler process');
+    logger.info(
+        'main',
+        'Send SIGTERM to express process, lektord and tailler process'
+    );
     client.kill('SIGTERM');
     if (!lektor_closed) {
         lektor.kill('SIGTERM');
@@ -63,7 +66,7 @@ app.on('quit', () => {
  *********************************/
 
 app.on('ready', () => {
-    logger.info('Main window is ready');
+    logger.info('main', 'Main window is ready');
     createInstanceWindow();
     client = fork('client/main.js');
     lektor = spawn('lektord', ['-F']);
@@ -73,7 +76,7 @@ app.on('ready', () => {
         if (win === null) {
             return;
         }
-        logger.info('Reloading DB');
+        logger.info('main', 'Reloading DB');
         let contents = win.webContents;
         myDb.all().then(karas => {
             contents.send('reload-db-responce', karas);
@@ -95,25 +98,37 @@ app.on('ready', () => {
                 if (!line) return;
                 switch (line[0]) {
                     case '*':
-                        logger.warn(line.replace(/^\* (.*)$/g, '$1'));
+                        logger.warn(
+                            'lektord',
+                            line.replace(/^\* (.*)$/g, '$1')
+                        );
                         break;
                     case '!':
-                        logger.error(line.replace(/^! (.*)$/g, '$1'));
+                        logger.error(
+                            'lektord',
+                            line.replace(/^! (.*)$/g, '$1')
+                        );
                         break;
                     case '.':
                         if (line.length >= 2 && line[1] != '.') {
-                            logger.info(line.replace(/^\. (.*)$/g, '$1'));
+                            logger.info(
+                                'lektord',
+                                line.replace(/^\. (.*)$/g, '$1')
+                            );
                             break;
                         }
                     /* Fallthrough case */
                     default:
-                        logger.debug(line.replace(/^\.\.\. (.*)$/g, '\t$1'));
+                        logger.debug(
+                            'lektord',
+                            line.replace(/^\.\.\. (.*)$/g, '\t$1')
+                        );
                         break;
                 }
             });
     });
     lektor.on('close', code => {
-        logger.warn(`Lektor exited with code ${code}`);
+        logger.warn('main', `Lektor exited with code ${code}`);
         lektor_closed = true;
         app.quit();
     });
@@ -125,29 +140,29 @@ app.on('ready', () => {
 
 ipcMain.on('cmd-play', (event, arg) => {
     lkt.commandPlay().then(arg => {
-        logger.debug('Returned from cmd-play');
+        logger.debug('main', 'Returned from cmd-play');
     });
 });
 ipcMain.on('cmd-stop', (event, arg) => {
     lkt.commandStop().then(arg => {
-        logger.debug('Returned from cmd-stop');
+        logger.debug('main', 'Returned from cmd-stop');
     });
 });
 ipcMain.on('cmd-clear', (event, arg) => {
     lkt.commandClear().then(arg => {
-        logger.debug('Cleared queue with cmd-clear');
+        logger.debug('main', 'Cleared queue with cmd-clear');
     });
 });
 
 /* Fill the pannel with the content of the DB.
  * The `arg` is the HTML object of the pannel */
 ipcMain.on('reload-db-request', (event, arg) => {
-    logger.info('Reloading the DB content');
+    logger.info('main', 'Reloading the DB content');
     var callback = karas => {
         event.reply('reload-db-responce', karas);
     };
     if (arg) {
-        logger.debug(`Reload DB with search '${arg}'`);
+        logger.debug('main', `Reload DB with search '${arg}'`);
         myDb.search(arg).then(callback);
     } else {
         myDb.all().then(callback);
@@ -156,7 +171,7 @@ ipcMain.on('reload-db-request', (event, arg) => {
 
 /* Send the queue to the webpage when asked to */
 ipcMain.on('reload-queue-request', (event, arg) => {
-    logger.info('Reloading next karas in queue');
+    logger.info('main', 'Reloading next karas in queue');
     myDb.queue(0, 100).then(karas => {
         event.reply('reload-queue-responce', karas);
     });
diff --git a/test/test_db.js b/test/test_db.js
index ba3fad0a1290216ec30266cc0b99f888d3f96976..36094fa67c790738100a9a3a851ae052ae052a41 100644
--- a/test/test_db.js
+++ b/test/test_db.js
@@ -3,5 +3,5 @@ const KaraDatabase = require.main.require('./common/db.js');
 
 var myDb = new KaraDatabase("/home/kara/kara.db");
 
-myDb.search(`kubat`).then( val => logger.log("debug", val) )
+myDb.search(`kubat`).then( val => logger.debug("test", val) )
 myDb.close()