diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3c2e4f73ac2ca95d4d284997b66b0be88f1d038e..ad65682d34d7f270467c0d889a86c90928f73742 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,9 +1,14 @@
 # 3.8 requirement for CUDA language support.
 cmake_minimum_required(VERSION 3.8)
 
-project(arbor VERSION 0.1)
+file(READ VERSION FULL_VERSION_STRING)
+string(STRIP "${FULL_VERSION_STRING}" FULL_VERSION_STRING)
+string(REGEX MATCH "^[0-9]+(\\.[0-9]+)?(\\.[0-9]+)?(\\.[0-9]+)?" numeric_version "${FULL_VERSION_STRING}")
+
+project(arbor VERSION ${numeric_version})
 enable_language(CXX)
 
+
 #----------------------------------------------------------
 # Configure-time build options for Arbor:
 #----------------------------------------------------------
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..c9927239f6a5336a3915de8709919c3ae895c590
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.1.1-dev
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
index 815a3b6f412a06ae8ab9583805cf5124a4aae718..cbc21783e4bb09f27791dcd78627964dbf972db2 100644
--- a/include/CMakeLists.txt
+++ b/include/CMakeLists.txt
@@ -46,7 +46,7 @@ endif()
 add_custom_command(
     OUTPUT version.hpp-test
     DEPENDS _always_rebuild
-    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/git-source-id ${PROJECT_VERSION} ${arb_features} > version.hpp-test
+    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/git-source-id ${FULL_VERSION_STRING} ${arb_features} > version.hpp-test
 )
 
 set(version_hpp_path arbor/version.hpp)