diff --git a/ckanext/odsh/helpers.py b/ckanext/odsh/helpers.py
index 60fccc73dcecfd44049a3db1f37c1421ac51c5b3..9927ec0cb5a6cc01e71388c81cc69d89061e32d9 100644
--- a/ckanext/odsh/helpers.py
+++ b/ckanext/odsh/helpers.py
@@ -14,6 +14,7 @@ import hashlib
 import re
 from ckan.common import request
 from urlparse import urlsplit, urlunsplit
+import subprocess
 
 
 get_action = logic.get_action
@@ -225,3 +226,9 @@ def odsh_public_resource_url(res):
         return urlunsplit((0, 0, f[2], f[3], f[4]))
     else:
         return res['url']
+
+def odsh_get_version_id():
+    try:
+        return subprocess.check_output(["git", "rev-parse", "HEAD"]).strip()
+    except:
+        return 'unknown'
diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py
index d798c61729731a1dd458912f6948ba47c1394830..be9f8f7fa5fd21e37d7e0ad2cb4996db465a51a4 100644
--- a/ckanext/odsh/plugin.py
+++ b/ckanext/odsh/plugin.py
@@ -290,7 +290,8 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
                 'odsh_tracking_url': odsh_helpers.odsh_tracking_url,
                 'odsh_has_more_facets': odsh_helpers.odsh_has_more_facets,
                 'odsh_public_url': odsh_helpers.odsh_public_url,
-                'odsh_public_resource_url': odsh_helpers.odsh_public_resource_url
+                'odsh_public_resource_url': odsh_helpers.odsh_public_resource_url,
+                'odsh_get_version_id': odsh_helpers.odsh_get_version_id
                 }
 
     def after_map(self, map):
diff --git a/ckanext/odsh/templates/qv4yAI2rgotamXGk98gJ.html b/ckanext/odsh/templates/qv4yAI2rgotamXGk98gJ.html
new file mode 100644
index 0000000000000000000000000000000000000000..2ba851cb4e2ed79b62c69633d4e945a3d5b0bce5
--- /dev/null
+++ b/ckanext/odsh/templates/qv4yAI2rgotamXGk98gJ.html
@@ -0,0 +1 @@
+{{ h.odsh_get_version_id()}}
\ No newline at end of file
diff --git a/ckanext/odsh/tests/test_env.py b/ckanext/odsh/tests/test_env.py
index bc4025eb872699f339ae7de12711f52bc3fcd097..47d797c2e58e61d98b74ca30e10c5eeb91da2ffc 100644
--- a/ckanext/odsh/tests/test_env.py
+++ b/ckanext/odsh/tests/test_env.py
@@ -9,6 +9,8 @@ import sys
 import ConfigParser
 from collections import OrderedDict
 
+expected_commit = '5298c6f4b86b1a03fbf177974e3ab4eefb1b1192'
+
 # run with nosetests --ckan --nologcapture --with-pylons=<config to test> ckanext/odsh/tests/test_env.py
 
 
@@ -23,12 +25,16 @@ def checkConfig(key, expected=None, minLength=None):
     return value
 
 
-def checkConfigUrl(key, expectedKey=None, responseContains=None):
-    value = checkConfig(key, expected=expectedKey)
-
+def readUrl(value):
     req = urllib2.Request(value)
     response = urllib2.urlopen(req)
     data = response.read()
+    return data
+
+
+def checkConfigUrl(key, expectedKey=None, responseContains=None):
+    value = checkConfig(key, expected=expectedKey)
+    data = readUrl(value)
     if responseContains:
         assert responseContains in data
 
@@ -45,7 +51,7 @@ def checkConfigFile(key, expectedKey=None, responseContains=None):
 def checkConfigDir(key, expectedKey=None):
     value = checkConfig(key, expected=expectedKey)
     assert os.access(value.replace('file://', ''),
-                     os.W_OK), "expected '{key}={val}' to be writeable (user was '{user}')".format(key=key,val=value, user=os.getlogin())
+                     os.W_OK), "expected '{key}={val}' to be writeable (user was '{user}')".format(key=key, val=value, user=os.getlogin())
 
 
 def checkJsonFile(key, expectedKey=None, expectedLength=None):
@@ -156,3 +162,10 @@ class TestEnv:
         checkConfig('ckanext.odsh.matomo_id', expected='3')
         checkConfigUrl('ckanext.odsh.matomo_url',
                        responseContains='This resource is part of Matomo')
+
+    def test_version(self):
+        url = checkConfig('ckan.site_url')
+        if url[-1] == '/':
+            url = url[:-1]
+        version = readUrl(url+'/qv4yAI2rgotamXGk98gJ').strip()
+        assert version == expected_commit, "wrong version: {was}!={exp}".format(version, expected_commit)