diff --git a/build.gradle b/build.gradle
index 763ebefa234f19eafccfcfc8bdeea22177155a51..d705e2ebf584482f693317c312108bd48a8d895b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -110,6 +110,47 @@ jastadd {
     jastaddOptions = ["--lineColumnNumbers", "--safeLazy", "--visitCheck=true", "--rewrite=cnta", "--cache=all"]
 }
 
+def versionFile = 'src/main/resources/RelASTVersion.properties'
+task updateVersion {
+    /* version string handling adapted from https://bitbucket.org/extendj/extendj/src/master/build.gradle
+       written by Jesper Öqvist <jesper.oqvist@cs.lth.se> */
+    group 'build'
+    description 'Updates the version file for RelAST'
+
+    doLast {
+        def oldProps = new Properties()
+        String oldFullVersion, fullVersion
+
+        try {
+            file(versionFile).withInputStream { stream -> oldProps.load(stream) }
+            oldFullVersion = oldProps['version']
+        } catch (ignored) {
+            oldFullVersion = "???"
+        }
+        try {
+            def proc = 'git describe'.execute(null, rootDir)
+            if  (proc.waitFor() == 0) {
+                fullVersion = proc.text.trim()
+                if (hasProperty('withNewVersion')) {
+                    // Trim to get latest tag:
+                    version = (fullVersion =~ /-\d+\-g.+$/).replaceAll('')
+                }
+                if (oldFullVersion != fullVersion) {
+                    def props = new Properties()
+                    props['version'] = fullVersion
+                    props.store(file(versionFile).newWriter(), null)
+                }
+            } else {
+                logger.warn('No git tags found.')
+            }
+        } catch (IOException e) {
+            logger.warn("Failded to run git describe (${e.getMessage()}).")
+        }
+    }
+}
+
+processResources.dependsOn updateVersion
+
 task preprocessRelationTest(type: JavaExec, group: 'verification') {
 
     doFirst {
diff --git a/src/main/java/org/jastadd/relast/compiler/Compiler.java b/src/main/java/org/jastadd/relast/compiler/Compiler.java
index ea8de0ce29021cd75f25c66d296120ad191d9235..2f6ef2572c7e6ad4fda1f7e6abaf78eb577e3669 100644
--- a/src/main/java/org/jastadd/relast/compiler/Compiler.java
+++ b/src/main/java/org/jastadd/relast/compiler/Compiler.java
@@ -8,14 +8,11 @@ import org.jastadd.relast.parser.RelAstParser;
 import org.jastadd.relast.scanner.RelAstScanner;
 
 import java.io.*;
-import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.*;
 import java.util.List;
 
 public class Compiler {
 
-  private static final String VERSION = "0.2.4";
-
   private ArrayList<Option<?>> options;
   private FlagOption optionWriteToFile;
   private FlagOption optionPrintAST;
@@ -35,7 +32,7 @@ public class Compiler {
     commandLine = new CommandLine(options);
     commandLine.parse(args);
 
-    printMessage("Running RelAST " + VERSION);
+    printMessage("Running RelAST " + readVersion());
 
     if (commandLine.getArguments().size() < 1) {
       error("specify at least one input file");
@@ -126,6 +123,26 @@ public class Compiler {
     }
   }
 
+  /**
+   * Reads the version string.
+   *
+   * The version string is read from the property file
+   * src/main/resources/Version.properties. This
+   * file should be generated during the build process. If it is missing
+   * then there is some problem in the build script.
+   *
+   * @author Jesper Öqvist <jesper.oqvist@cs.lth.se>
+   * @return the read version string, or <code>version ?</code>
+   */
+  private String readVersion() {
+    try {
+      ResourceBundle resources = ResourceBundle.getBundle("Version");
+      return resources.getString("version");
+    } catch (MissingResourceException e) {
+      return "version ?";
+    }
+  }
+
   public static void main(String[] args) {
     try {
       new Compiler(args);
diff --git a/src/main/resources/.gitignore b/src/main/resources/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e4a21f4a3975000dd59369f1430ec3e931b4e3e3
--- /dev/null
+++ b/src/main/resources/.gitignore
@@ -0,0 +1 @@
+RelASTVersion.properties