diff --git a/inc/lektor/database.h b/inc/lektor/database.h
index d5632e3c18bbc0632e7e7c2edaf33a6d706e5af0..e26b78f14089117b8bc4c83e49ecf6e248bbf5a9 100644
--- a/inc/lektor/database.h
+++ b/inc/lektor/database.h
@@ -131,6 +131,8 @@ typedef bool (*database_sticker_callback_t)(void *args, const char *sticker, con
 
 bool database_sticker_create(sqlite3 *db, const char *name);
 bool database_sticker_delete(sqlite3 *db, const char *name);
+bool database_sticker_delete_specify(sqlite3 *sb, const char *type, int uri,
+                                     const char *name /* Can be null */);
 bool database_sticker_list(sqlite3 *db, const char *type, void *args, database_sticker_callback_t call);
 bool database_sticker_set(sqlite3 *db, const char *type, const char *name, int uri, int value);
 bool database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, void *args,
diff --git a/src/database/stickers.c b/src/database/stickers.c
index 1c0a4ab73247b4f9ef95fc3d627c8c08a0f1e020..b0abae8e4e512c925809e5ffa08bd1856796ebf4 100644
--- a/src/database/stickers.c
+++ b/src/database/stickers.c
@@ -150,7 +150,7 @@ database_sticker_set(sqlite3 *db, const char *type, const char *name, int uri, i
             "SELECT ?, 'stickers'.id, ? "
             "FROM 'stickers'"
             "WHERE 'stickers'.id = ?;\n";
-    else if (!strcasecmp(type, "song"))
+    else if (!strcasecmp(type, "plt"))
         SQL =
             "INSERT OR REPLACE INTO 'stickers.plt' (id, sticker, value) "
             "SELECT ?, 'stickers'.id, ? "
@@ -193,12 +193,12 @@ database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, v
             "JOIN 'stickers.song'"
             " ON 'stickers'.id = 'stickers.song'.sticker"
             " AND 'stickers'.name = ?;\n";
-    else if (!strcasecmp(type, "song"))
+    else if (!strcasecmp(type, "plt"))
         SQL =
             "SELECT value "
             "FROM 'stickers' "
-            "JOIN 'stickers.song'"
-            " ON 'stickers'.id = 'stickers.song'.sticker"
+            "JOIN 'stickers.plt'"
+            " ON 'stickers'.id = 'stickers.plt'.sticker"
             " AND 'stickers'.name = ?;\n";
     else {
         fprintf(stderr, " . database_sticker_get: Type '%s' is invalid\n", type);
@@ -230,3 +230,48 @@ error:
     sqlite3_finalize(stmt);
     return ret;
 }
+
+bool
+database_sticker_delete_specify(sqlite3 *db, const char *type, int uri, const char *name)
+{
+    const char *SQL = NULL;
+    sqlite3_stmt *stmt;
+    int ret = false;
+
+    /* Tout pouris, refaire ça (FIXME). */
+    if (!strcasecmp(type, "song")) {
+        if (!name)
+            SQL = "DELETE FROM 'stickers.song' WHERE id = ?;";
+        else
+            SQL =
+                "DELETE FROM 'stickers.song' "
+                "WHERE 'stickers.song'.id = ? "
+                "AND sticker = (SELECT id FROM 'stickers' WHERE name = ? LIMIT 1);";
+    } else if (!strcasecmp(type, "plt")) {
+        if (!name)
+            SQL = "DELETE FROM 'stickers.plt' WHERE id = ?;";
+        else
+            SQL =
+                "DELETE FROM 'stickers.plt' "
+                "WHERE 'stickers.plt'.id = ? "
+                "AND sticker = (SELECT id FROM 'stickers' WHERE name = ? LIMIT 1);";
+    } else {
+        fprintf(stderr, " . database_sticker_get: Type '%s' is invalid\n", type);
+        return false;
+    }
+
+    SQLITE_PREPARE(db, stmt, SQL, error);
+    SQLITE_BIND_INT(db, stmt, 1, uri, error);
+
+    if (name)
+        SQLITE_BIND_TEXT(db, stmt, 2, name, error);
+
+    if (! (ret = (sqlite3_step(stmt) == SQLITE_OK))) {
+        fprintf(stderr, " . database_sticker_delete_specify: Failed to delete sticker\n");
+        goto error;
+    }
+    ret = true;
+error:
+    sqlite3_finalize(stmt);
+    return ret;
+}