diff --git a/meson.build b/meson.build
index 8c4baf1380681c86dc20e945211b0d0402947eb5..42c44388f01a38bc3323bd39443d5160f8c1fa1f 100644
--- a/meson.build
+++ b/meson.build
@@ -39,6 +39,7 @@ test_c_args = [
   '-Wcast-align',
   '-Wdeclaration-after-statement',
   ['-Werror=format-security', '-Werror=format=2'],
+  '-Werror=missing-declarations',
   '-Wformat-nonliteral',
   '-Wformat-security',
   '-Wmaybe-uninitialized',
diff --git a/src/auth.c b/src/auth.c
index d7696d6336df868da9299c83e45052ea5b2b8671..c0e6937a80a21e18ab34e1db3a792c9d4a8b24f0 100644
--- a/src/auth.c
+++ b/src/auth.c
@@ -63,7 +63,7 @@ pam_conversation_cb(int num_msg, const struct pam_message **msg,
 
 
 /* return TRUE if pin is correct, FALSE otherwise */
-gboolean
+static gboolean
 authenticate (PhoshAuth *self, const gchar* number)
 {
   PhoshAuthPrivate *priv = phosh_auth_get_instance_private (self);
diff --git a/src/lockscreen.c b/src/lockscreen.c
index 0e01b2c040da9a4630f2b9eff944cae1057791ad..c4d67cc4840f2f0c68bba11d78b27edbd9246a60 100644
--- a/src/lockscreen.c
+++ b/src/lockscreen.c
@@ -128,7 +128,7 @@ show_unlock_page (PhoshLockscreen *self)
 
 
 /* callback of async auth task */
-void
+static void
 auth_async_cb (PhoshAuth *auth, GAsyncResult *result, PhoshLockscreen *self)
 {
   PhoshLockscreenPrivate *priv;
diff --git a/src/phosh.c b/src/phosh.c
index 9e574579a00b69b93abc300d132f5eafd7a4fb3a..3489a6d32ca60b619b7b00ddcff0777ee03e3791 100644
--- a/src/phosh.c
+++ b/src/phosh.c
@@ -646,7 +646,7 @@ phosh_shell_get_default (void)
 }
 
 
-gboolean
+static gboolean
 sigterm_cb (gpointer unused)
 {
   g_debug ("Cleaning up");
diff --git a/src/settings.c b/src/settings.c
index 1a30a1648994805b72562dd8e25a9a6ddec307a2..d4ed5c156116055c7786a36df06ae7814901b4ed 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -44,12 +44,6 @@ typedef struct _PhoshSettings
 G_DEFINE_TYPE_WITH_PRIVATE (PhoshSettings, phosh_settings, GTK_TYPE_WINDOW)
 
 
-GtkWidget *phosh_settings (const char* name)
-{
-  return g_object_new (PHOSH_TYPE_SETTINGS, "name", name, NULL);
-}
-
-
 static void
 brightness_value_changed_cb (GtkScale *scale_brightness, gpointer *unused)
 {
diff --git a/src/settings/brightness.c b/src/settings/brightness.c
index c61c7c11c5c8a3aed231d0887fee2b0af570f880..a0042cb68b4a1d044724f21205899b18d2e367b9 100644
--- a/src/settings/brightness.c
+++ b/src/settings/brightness.c
@@ -10,11 +10,14 @@
 #include <gio/gio.h>
 #include <gtk/gtk.h>
 
+#include "settings/brightness.h"
+
+
 GDBusProxy *brightness_proxy;
 gboolean setting_brightness;
 
 
-void
+static void
 brightness_changed_cb (GDBusProxy *proxy,
                        GVariant *changed_props,
                        GVariant *invalidated_props,
@@ -85,7 +88,7 @@ brightness_init (GtkScale *scale)
 
 
 
-void
+static void
 brightness_set_cb (GDBusProxy *proxy, GAsyncResult *res, gpointer unused)
 {
   GError *err = NULL;
diff --git a/src/wwan/phosh-wwan-mm.c b/src/wwan/phosh-wwan-mm.c
index af424f6aa8ce32a01f92cfb55d6de9a3756236d9..64464df452abf4d627fedfc226486b93f755c086 100644
--- a/src/wwan/phosh-wwan-mm.c
+++ b/src/wwan/phosh-wwan-mm.c
@@ -104,7 +104,7 @@ phosh_wwan_mm_update_signal_quality (PhoshWWanMM *self)
 }
 
 
-const char *
+static const char *
 user_friendly_access_tec (guint access_tec)
 {
   switch (access_tec) {
diff --git a/tests/phoshstub.c b/tests/phoshstub.c
index 82e548ff5fc9f35f7184b3a431068fda0b264a51..77f1ea7b3d1495e77f1ef1223e17c5543e1ec8ab 100644
--- a/tests/phoshstub.c
+++ b/tests/phoshstub.c
@@ -1,6 +1,8 @@
 /* Stubs so we don't need to run the shell */
 
 #include <glib.h>
+#include "phosh-wayland.h"
+#include "phosh.h"
 
 gpointer
 phosh_shell_get_default (void)