diff --git a/kwant/_common.py b/kwant/_common.py
index 94a626d0549b0b2452956ea2f8923dddd9cc2560..9a8378eba74817891f6abdcccc5cd53de0215c82 100644
--- a/kwant/_common.py
+++ b/kwant/_common.py
@@ -33,7 +33,8 @@ def get_version_from_git():
     # that were merged-in.
     for opts in [['--first-parent'], []]:
         try:
-            p = subprocess.Popen(['git', 'describe'] + opts, cwd=distr_root,
+            p = subprocess.Popen(['git', 'describe', '--long'] + opts,
+                                 cwd=distr_root,
                                  stdout=subprocess.PIPE, stderr=subprocess.PIPE)
         except OSError:
             return
@@ -41,19 +42,29 @@ def get_version_from_git():
             break
     else:
         return
-    version = p.communicate()[0].rstrip('\n')
+    description = p.communicate()[0].strip('v').rstrip('\n')
 
-    if version[0] == 'v':
-        version = version[1:]
+    release, dev, git = description.rsplit('-', 2)
+    version = [release]
+    labels = []
+    if dev != "0":
+        version.append(".dev{}".format(dev))
+        labels.append(git)
 
     try:
         p = subprocess.Popen(['git', 'diff', '--quiet'], cwd=distr_root)
     except OSError:
-        version += '-confused'  # This should never happen.
+        labels.append('confused') # This should never happen.
     else:
         if p.wait() == 1:
-            version += '-dirty'
-    return version
+            labels.append('dirty')
+
+    if labels:
+        version.append('+')
+        version.append(".".join(labels))
+
+    return "".join(version)
+
 
 
 from _kwant_version import version