diff --git a/src/calls-application.c b/src/calls-application.c
index 41b97b0..8dcbad8 100644
--- a/src/calls-application.c
+++ b/src/calls-application.c
@@ -36,6 +36,7 @@
 #include "calls-main-window.h"
 #include "calls-manager.h"
 #include "calls-application.h"
+#include "version.h"
 
 #include <glib/gi18n.h>
 #include <handy.h>
diff --git a/src/calls-main-window.c b/src/calls-main-window.c
index 3dbe898..d973f46 100644
--- a/src/calls-main-window.c
+++ b/src/calls-main-window.c
@@ -33,6 +33,7 @@
 #include "calls-manager.h"
 #include "config.h"
 #include "util.h"
+#include "version.h"
 
 #include <glib/gi18n.h>
 #include <glib-object.h>
diff --git a/src/meson.build b/src/meson.build
index d6b6f3d..6225b17 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -109,20 +109,21 @@ calls_sources = files(['calls-message-source.c', 'calls-message-source.h',
                       ]) + wayland_sources + calls_generated_sources
 
 calls_config_data = config_data
-calls_config_data.set_quoted('VCS_TAG', '@VCS_TAG@')
 calls_config_data.set10('WL_SCANNER_FOUND', wl_scanner.found())
 
-config_h_in = configure_file(
-  output: 'config.h.in',
+config_h = configure_file(
+  output: 'config.h',
   configuration: calls_config_data
 )
 
-config_h = vcs_tag(
+version_h = vcs_tag(
     fallback: '',
-       input: config_h_in,
-      output: 'config.h',
+       input: 'version.h.in',
+      output: 'version.h',
 )
 
+calls_sources += [ version_h ]
+
 executable (
   'gnome-calls',
   calls_sources, 'main.c',
diff --git a/src/version.h.in b/src/version.h.in
new file mode 100644
index 0000000..5d8985d
--- /dev/null
+++ b/src/version.h.in
@@ -0,0 +1 @@
+#define VCS_TAG "@VCS_TAG@"