diff --git a/inc/lektor/common.h b/inc/lektor/common.h
index fc797c50e74e5b0a31340008c0b720973df55be9..34e3bd09aaf3691f3eb76ce49d22bce04aedf9a4 100644
--- a/inc/lektor/common.h
+++ b/inc/lektor/common.h
@@ -137,8 +137,7 @@ typedef volatile enum {
 #define not_implemented() __not_implemented(__func__,__FILE__,__LINE__)
 extern void __not_implemented(const char *func, char *file, int line);
 
-#define UNUSED(...) __unused((void *) __VA_ARGS__)
-void __unused(void *, ...);
+#define UNUSED __attribute__((unused))
 
 long get_mtime(const char *path);
 
diff --git a/src/base/commands.c b/src/base/commands.c
index 98c2ca2374204fe5512fee4603d0ccc1b17a6fd8..b52faf6cecab723bee0b64cee8ce016fca5d435a 100644
--- a/src/base/commands.c
+++ b/src/base/commands.c
@@ -19,8 +19,7 @@
 #include <unistd.h>
 
 inline bool
-command_restart(struct lkt_state *srv, size_t c,
-                char __attribute__((unused)) *__argv[LKT_MESSAGE_ARGS_MAX])
+command_restart(struct lkt_state *srv, size_t c, char UNUSED *__argv[LKT_MESSAGE_ARGS_MAX])
 {
     const char *const argv[] = { executable_name, NULL };
     struct lkt_queue_state sta;
@@ -53,9 +52,8 @@ command_restart(struct lkt_state *srv, size_t c,
 }
 
 bool
-command_update(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX])
+command_update(struct lkt_state *srv, size_t c, char UNUSED *argv[LKT_MESSAGE_ARGS_MAX])
 {
-    UNUSED(argv);
     RETURN_UNLESS(lkt_client_auth(srv, c, false), "Failed to authentificate user", false);
     srv->mpd_idle_events |= MPD_IDLE_UPDATE;
     srv->mpd_idle_events |= MPD_IDLE_DATABASE;
@@ -63,10 +61,9 @@ command_update(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]
 }
 
 bool
-command_rescan(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX],
-               int __attribute__((unused)) forced)
+command_rescan(struct lkt_state *srv, size_t c, char UNUSED *argv[LKT_MESSAGE_ARGS_MAX],
+               int UNUSED forced)
 {
-    UNUSED(argv);
     RETURN_UNLESS(lkt_client_auth(srv, c, false), "Failed to authentificate user", false);
     srv->mpd_idle_events |= MPD_IDLE_UPDATE;
     srv->mpd_idle_events |= MPD_IDLE_DATABASE;
@@ -74,8 +71,7 @@ command_rescan(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]
 }
 
 bool
-command_kill(struct lkt_state *srv, size_t c,
-             char __attribute__((unused)) *argv[LKT_MESSAGE_ARGS_MAX])
+command_kill(struct lkt_state *srv, size_t c, char UNUSED *argv[LKT_MESSAGE_ARGS_MAX])
 {
     RETURN_UNLESS(lkt_client_auth(srv, c, false), "Failed to authentificate user", false);
     LOG_INFO("GENERAL",  "Stopping lektord");
@@ -89,8 +85,7 @@ command_kill(struct lkt_state *srv, size_t c,
 }
 
 bool
-command_currentsong(struct lkt_state *srv, size_t c,
-                    char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX])
+command_currentsong(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     struct lkt_message *out;
     struct kara_metadata kara;
@@ -118,8 +113,7 @@ command_currentsong(struct lkt_state *srv, size_t c,
 }
 
 bool
-command_stats(struct lkt_state *srv, size_t c,
-              char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX])
+command_stats(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     struct lkt_message *out = lkt_message_new();
     int is_updating = 0, artists = 0, albums = 0, songs = 0;
@@ -149,8 +143,7 @@ command_stats(struct lkt_state *srv, size_t c,
 }
 
 bool
-command_status(struct lkt_state *srv, size_t c,
-               char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX])
+command_status(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     struct lkt_message *out;
     struct lkt_queue_state queue_state;
@@ -191,7 +184,7 @@ command_status(struct lkt_state *srv, size_t c,
 }
 
 bool
-command_next(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX])
+command_next(struct lkt_state *srv, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     srv->mpd_idle_events |= MPD_IDLE_PLAYER;
     char filepath[PATH_MAX];
@@ -206,7 +199,7 @@ command_next(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSA
 }
 
 bool
-command_pause(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX])
+command_pause(struct lkt_state *srv, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     srv->mpd_idle_events |= MPD_IDLE_PLAYER;
     if (!database_queue_toggle_pause(srv->db))
@@ -215,7 +208,7 @@ command_pause(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESS
 }
 
 bool
-command_previous(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX])
+command_previous(struct lkt_state *srv, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     srv->mpd_idle_events |= MPD_IDLE_PLAYER;
     char filepath[PATH_MAX];
@@ -241,7 +234,7 @@ __play_that_file(struct lkt_state *win, int pos)
 }
 
 bool
-command_play(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX])
+command_play(struct lkt_state *srv, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     char *endptr, err;
     long pos = 1;
@@ -311,7 +304,7 @@ command_playid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 
 
 bool
-command_stop(struct lkt_state *srv, char __attribute__((unused))  *args[LKT_MESSAGE_ARGS_MAX])
+command_stop(struct lkt_state *srv, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     RETURN_UNLESS(database_queue_stop(srv->db), "DB error on stop", false);
     MOD_PROC(srv->window_mod, "close");
@@ -348,7 +341,7 @@ command_addid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 }
 
 inline bool
-command_clear(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX])
+command_clear(struct lkt_state *srv, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     srv->mpd_idle_events |= MPD_IDLE_PLAYER;
     return command_stop(srv, args) &&
@@ -356,7 +349,7 @@ command_clear(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESS
 }
 
 inline bool
-command_crop(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX])
+command_crop(struct lkt_state *srv, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     srv->mpd_idle_events |= MPD_IDLE_PLAYER;
     return database_queue_crop(srv->db);
@@ -414,8 +407,7 @@ command_move(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 }
 
 bool
-command_help(struct lkt_state *srv, size_t c,
-             char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX])
+command_help(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     struct lkt_message *out;
     out = lkt_message_new();
@@ -593,8 +585,7 @@ command_find(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX],
 }
 
 bool
-command_plt_list(struct lkt_state *srv, size_t c,
-                 char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX],
+command_plt_list(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ARGS_MAX],
                  int cont)
 {
     struct lkt_search search = {
@@ -628,11 +619,10 @@ command_plt_ctx(struct lkt_state *srv, size_t c,
 }
 
 bool
-command_set_playback_option(struct lkt_state *srv, size_t c, enum lkt_playback_option opt,
+command_set_playback_option(struct lkt_state *srv, size_t UNUSED c, enum lkt_playback_option opt,
                             char *args[LKT_MESSAGE_MAX])
 {
     RETURN_UNLESS(srv, "Invalid argument", false);
-    UNUSED(c);
     long val;
     char *endptr, ret = false;
 
@@ -798,7 +788,7 @@ command_plt_add_uri(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 }
 
 bool
-command_shuffle(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX])
+command_shuffle(struct lkt_state *srv, char UNUSED *args[LKT_MESSAGE_ARGS_MAX])
 {
     RETURN_UNLESS(database_queue_shuffle(srv->db), "Failed to shuffle", false);
     srv->mpd_idle_events |= MPD_IDLE_PLAYER;
@@ -888,9 +878,9 @@ command_user_add(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MA
 /* Stickers */
 
 static bool
-sticker_send(struct lkt_state *srv, size_t c, char *name, char *type, int id, int value)
+sticker_send(struct lkt_state *srv, size_t c, char *name, char UNUSED *type,
+             int id, int value)
 {
-    UNUSED(type);
     struct lkt_message *msg = lkt_message_new();
     msg->data_len = safe_snprintf(msg->data, LKT_MESSAGE_ARGS_MAX, "%d: %s -> %d\n", id, name, value);
     lkt_state_send(srv, c, msg);
diff --git a/src/main/lkt.c b/src/main/lkt.c
index ade01eadd79185d9367f69b4c35b7467a26e1155..f6c0987ca2c0b8398f4edb2abee19296cb914196 100644
--- a/src/main/lkt.c
+++ b/src/main/lkt.c
@@ -947,7 +947,7 @@ search_get__(struct cmd_args *args)
             exit(EXIT_SUCCESS);
         else if (STR_NMATCH(buff, "ACK", 3))
             exit(EXIT_FAILURE);
-        UNUSED(write(1, buff, strlen(buff)));
+        (void) write(1, buff, strlen(buff));
     }
 }
 
diff --git a/src/module/module_sdl2.c b/src/module/module_sdl2.c
index 8825ee294c37f988e19ed897809e69ca7bfe34e9..ff9d752a98775409ca5d747b30941ab368f35654 100644
--- a/src/module/module_sdl2.c
+++ b/src/module/module_sdl2.c
@@ -62,24 +62,21 @@ static bool module_sdl2_new(struct module_sdl2_window **, struct queue *, volati
  *********************/
 
 static inline void *
-get_proc_address_mpv(void *fn_ctx, const char *name)
+get_proc_address_mpv(void UNUSED *fn_ctx, const char *name)
 {
-    UNUSED(fn_ctx);
     return SDL_GL_GetProcAddress(name);
 }
 
 static inline void
-on_mpv_events(void *ctx)
+on_mpv_events(void UNUSED *ctx)
 {
-    UNUSED(ctx);
     SDL_Event event = { .type = wakeup_on_mpv_events };
     SDL_PushEvent(&event);
 }
 
 static inline void
-on_mpv_render_update(void *ctx)
+on_mpv_render_update(void UNUSED *ctx)
 {
-    UNUSED(ctx);
     SDL_Event event = { .type = wakeup_on_mpv_render_update };
     SDL_PushEvent(&event);
 }
diff --git a/src/net/listen.c b/src/net/listen.c
index 0a227239af1257c790507f9183500eeb51a39323..efd2435b0af5cd5c9304b0683c977b1f2e74e208 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -9,6 +9,7 @@
 
 #include <sqlite3.h>
 
+#include <signal.h>
 #include <strings.h>
 #include <sched.h>
 #include <arpa/inet.h>