diff --git a/src/Makefile.am b/src/Makefile.am
index beb71cdf..cc512b1c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2,9 +2,12 @@
 
 sbin_PROGRAMS = tincd tinc sptps_test sptps_keypair
 
-## Make sure version.c is always rebuilt
-.PHONY: version.c
-version.c:
+## Make sure version.c is always rebuilt with the latest git information
+.PHONY: version.c version_git.h
+version_git.h:
+	echo >$@
+	-GIT_DESCRIPTION="`cd $(@D) && git describe`" && echo "#define GIT_DESCRIPTION \"$$GIT_DESCRIPTION\"" >$@
+version.c: version_git.h
 
 if LINUX
 sbin_PROGRAMS += sptps_speed
@@ -91,7 +94,7 @@ tincd_SOURCES = \
 	tincd.c \
 	utils.c utils.h \
 	xalloc.h \
-	version.c version.h \
+	version.c version.h version_git.h \
 	ed25519/ecdh.c \
 	ed25519/ecdsa.c \
 	$(ed25519_SOURCES) \
@@ -113,7 +116,7 @@ tinc_SOURCES = \
 	tincctl.c tincctl.h \
 	top.c top.h \
 	utils.c utils.h \
-	version.c version.h \
+	version.c version.h version_git.h \
 	ed25519/ecdh.c \
 	ed25519/ecdsa.c \
 	ed25519/ecdsagen.c \
diff --git a/src/process.c b/src/process.c
index 51bd902f..cbc816be 100644
--- a/src/process.c
+++ b/src/process.c
@@ -223,7 +223,7 @@ bool detach(void) {
 	openlogger(identname, logmode);
 
 	logger(DEBUG_ALWAYS, LOG_NOTICE, "tincd %s (%s %s) starting, debug level %d",
-			   VERSION, BUILD_DATE, BUILD_TIME, debug_level);
+			   BUILD_VERSION, BUILD_DATE, BUILD_TIME, debug_level);
 
 	return true;
 }
diff --git a/src/tincctl.c b/src/tincctl.c
index 91f63eff..047aab4f 100644
--- a/src/tincctl.c
+++ b/src/tincctl.c
@@ -88,7 +88,7 @@ static struct option const long_options[] = {
 
 static void version(void) {
 	printf("%s version %s (built %s %s, protocol %d.%d)\n", PACKAGE,
-		   VERSION, BUILD_DATE, BUILD_TIME, PROT_MAJOR, PROT_MINOR);
+		   BUILD_VERSION, BUILD_DATE, BUILD_TIME, PROT_MAJOR, PROT_MINOR);
 	printf("Copyright (C) 1998-2014 Ivo Timmermans, Guus Sliepen and others.\n"
 			"See the AUTHORS file for a complete list.\n\n"
 			"tinc comes with ABSOLUTELY NO WARRANTY.  This is free software,\n"
diff --git a/src/tincd.c b/src/tincd.c
index d497bccc..226f4f5e 100644
--- a/src/tincd.c
+++ b/src/tincd.c
@@ -343,7 +343,7 @@ int main(int argc, char **argv) {
 
 	if(show_version) {
 		printf("%s version %s (built %s %s, protocol %d.%d)\n", PACKAGE,
-			   VERSION, BUILD_DATE, BUILD_TIME, PROT_MAJOR, PROT_MINOR);
+			   BUILD_VERSION, BUILD_DATE, BUILD_TIME, PROT_MAJOR, PROT_MINOR);
 		printf("Copyright (C) 1998-2014 Ivo Timmermans, Guus Sliepen and others.\n"
 				"See the AUTHORS file for a complete list.\n\n"
 				"tinc comes with ABSOLUTELY NO WARRANTY.  This is free software,\n"
diff --git a/src/version.c b/src/version.c
index fc62c8a3..325a6f09 100644
--- a/src/version.c
+++ b/src/version.c
@@ -18,7 +18,14 @@
 */
 
 #include "version.h"
+#include "version_git.h"
+#include "../config.h"
 
 /* This file is always rebuilt (even if there are no changes) so that the following is updated */
 const char* const BUILD_DATE = __DATE__;
 const char* const BUILD_TIME = __TIME__;
+#ifdef GIT_DESCRIPTION
+const char* const BUILD_VERSION = GIT_DESCRIPTION;
+#else
+const char* const BUILD_VERSION = VERSION;
+#endif
diff --git a/src/version.h b/src/version.h
index d3e4a1f2..9cbecb6e 100644
--- a/src/version.h
+++ b/src/version.h
@@ -22,5 +22,6 @@
 
 extern const char* const BUILD_DATE;
 extern const char* const BUILD_TIME;
+extern const char* const BUILD_VERSION;
 
 #endif /* __TINC_VERSION_H__ */