diff --git a/init.sql b/init.sql
index 73fe4ef72962ca6da48cbb540e3e52f329761fc9..2b2f9d39d01daab06a4cec8b3dcaf0a22e7e5d6c 100644
--- a/init.sql
+++ b/init.sql
@@ -27,29 +27,30 @@ CREATE TABLE IF NOT EXISTS kara
   );
 
 CREATE TABLE IF NOT EXISTS kara_type
-  ( id    INTEGER PRIMARY KEY AUTOINCREMENT
+  ( id    INTEGER PRIMARY KEY
   , name  TEXT    NOT NULL
   );
 
-INSERT INTO kara_type (name) VALUES
-  ('vo'), ('va'), ('amv'), ('cdg'), ('autres'), ('vocaloid');
+INSERT INTO kara_type (id, name) VALUES
+  (1, 'vo'), (2, 'va'), (3, 'amv'), (4, 'cdg'), (5, 'autres'), ( 6, 'vocaloid');
 
 CREATE TABLE IF NOT EXISTS kara_category
-  ( id   INTEGER PRIMARY KEY AUTOINCREMENT
+  ( id   INTEGER PRIMARY KEY
   , name TEXT    NOT NULL
   );
 
-INSERT INTO kara_category (name) VALUES
-  ('ED/d*'), ('OP/d*'), ('AMV'), ('IS'), ('VOCA'), ('LIVE'), ('CDG'), ('PV'),
-  ('MV');
+INSERT INTO kara_category (id, name) VALUES
+  (1, 'ED/d*'), (2, 'OP/d*'), (3, 'AMV'), (4, 'IS'), (5, 'VOCA'), (6, 'LIVE'),
+  (7, 'CDG'), (8, 'PV'), (9, 'MV');
 
 CREATE TABLE IF NOT EXISTS language
-  ( id   INTEGER PRIMARY KEY AUTOINCREMENT
+  ( id   INTEGER PRIMARY KEY
   , name TEXT    NOT NULL
   );
 
-INSERT INTO language (name) VALUES
-  ('jp'), ('fr'), ('en'), ('ru'), ('sp'), ('it'), ('ch'), ('latin'), ('multi'), ('undefined');
+INSERT INTO language (id, name) VALUES
+  (1, 'jp'), (2, 'fr'), (3, 'en'), (4, 'ru'), (5, 'sp'), (6, 'it'), (7, 'ch'),
+  (8, 'latin'), (9, 'multi'), (10, 'undefined');
 
 -- Playlists are sets of karas that are meant to be played together, kinda like
 -- M3U except it's stored in a SQL database.
@@ -93,6 +94,31 @@ CREATE TABLE IF NOT EXISTS users
 INSERT INTO users (username, password) VALUES ('sakura', 'hashire');
 
 
+-- The stickers table
+-- Used to implement the stickers MPD functionnality, documentation can be found
+-- here: https://www.musicpd.org/doc/html/protocol.html#stickers. Need to be
+-- authentified to use stickers commands. Support tags for `song` and `plt`.
+
+CREATE TABLE IF NOT EXISTS 'stickers'
+  ( id      INTEGER PRIMARY KEY
+  , name    TEXT    NOT NULL UNIQUE
+  );
+
+CREATE TABLE IF NOT EXISTS 'stickers.song'
+  ( id      INTEGER REFERENCES kara     ON DELETE CASCADE
+  , sticker INTEGER REFERENCES stickers ON DELETE CASCADE
+  , value   INTEGER NOT NULL
+  , PRIMARY KEY (id, sticker)
+  ) WITHOUT ROWID;
+
+CREATE TABLE IF NOT EXISTS 'stickers.plt'
+  ( id      INTEGER REFERENCES playlist ON DELETE CASCADE
+  , sticker INTEGER REFERENCES stickers ON DELETE CASCADE
+  , value   INTEGER NOT NULL
+  , PRIMARY KEY (id, sticker)
+  ) WITHOUT ROWID;
+
+
 -- Some useful values:
 -- last_update is the timestamp of the last time the table of kara has been
 -- updated.  This is so lektor doesn't have to read all kara in the filesystem,