diff --git a/.gitignore b/.gitignore
index 71b70251..786c706d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,14 +7,15 @@ docs/man/man1/*.1
 docs/man/man7/*.7
 docs/man/man*/*.html
 docs/man/man*/*.xml
+docs/man/man*/docbook-xsl.css
 docs/man/man7/cdist-type__*.text
 docs/man/man7/cdist-reference.text
-docs/man/man*/docbook-xsl.css
 
 # Ignore cdist cache for version control
 /cache/
 
-# Python: cache, distutils
+# Python: cache, distutils, distribution in general
 __pycache__/
 MANIFEST
 dist/
+lib/cdist/version_static.py
diff --git a/.version b/.version
new file mode 100644
index 00000000..3d45b5c6
--- /dev/null
+++ b/.version
@@ -0,0 +1 @@
+2.0.14
diff --git a/build b/build
index 4b5690ef..1dedabba 100755
--- a/build
+++ b/build
@@ -74,7 +74,7 @@ case "$1" in
     ;;
 
     mantype)
-	    for mansrc in conf/type/*/man.text; do
+        for mansrc in conf/type/*/man.text; do
             dst="$(echo $mansrc | sed -e 's;conf/;cdist-;'  -e 's;/;;' -e 's;/man;;' -e 's;^;docs/man/man7/;')"
             ln -sf "../../../$mansrc" "$dst"
         done
@@ -174,12 +174,24 @@ case "$1" in
         echo ''
         echo 'Here are the possible targets:'
         echo ''
-        echo '	clean: Remove build stuff'
-        echo '	man: Build manpages (requires Asciidoc)'
-        echo '	test: Run tests'
+        echo '    clean: Remove build stuff'
+        echo '    man: Build manpages (requires Asciidoc)'
+        echo '    test: Run tests'
         echo ''
         echo ''
         echo "Unknown target, \"$1\"" >&2
         exit 1
     ;;
+
+    version-dynamic)
+        cd lib/cdist/
+        ln -sf version_dynamic.py version.py
+    ;;
+
+    version-dist)
+        version=$(cat .version)
+        cd lib/cdist/
+        echo "VERSION=\"$version\"" > version_static.py
+        ln -sf version_static.py version.py
+    ;;
 esac
diff --git a/cdist/__init__.py b/cdist/__init__.py
index 85bc5f77..02d708b1 100644
--- a/cdist/__init__.py
+++ b/cdist/__init__.py
@@ -22,14 +22,9 @@
 import os
 import subprocess
 
-try:
-    with open(os.devnull, 'w') as devnull:
-        here = os.path.dirname(os.path.realpath(__file__))
-        VERSION = subprocess.check_output(
-                    'cd "%s" && git describe' % here,
-                    stderr=devnull, shell=True).decode('utf-8')
-except:
-    VERSION     = "2.0.14"
+import cdist.version
+
+VERSION = cdist.version.VERSION
 
 BANNER = """
              ..          .       .x+=:.        s
diff --git a/doc/dev/logs/2012-10-25.version-split b/doc/dev/logs/2012-10-25.version-split
new file mode 100644
index 00000000..f381c48f
--- /dev/null
+++ b/doc/dev/logs/2012-10-25.version-split
@@ -0,0 +1,4 @@
+x store version in .version
+x when distributed / packaged, include .version into sourcecode
+    split into two files
+x when in git checkout, use dynamic versioning
diff --git a/lib/cdist/version.py b/lib/cdist/version.py
new file mode 120000
index 00000000..153cf043
--- /dev/null
+++ b/lib/cdist/version.py
@@ -0,0 +1 @@
+version_dynamic.py
\ No newline at end of file
diff --git a/lib/cdist/version_dynamic.py b/lib/cdist/version_dynamic.py
new file mode 100644
index 00000000..5f69f374
--- /dev/null
+++ b/lib/cdist/version_dynamic.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+#
+# 2010-2012 Nico Schottelius (nico-cdist at schottelius.org)
+#
+# This file is part of cdist.
+#
+# cdist is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# cdist is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with cdist. If not, see <http://www.gnu.org/licenses/>.
+#
+#
+
+import os
+import subprocess
+
+here = os.path.dirname(os.path.realpath(__file__))
+VERSION = subprocess.check_output('cd "%s" && git describe' % here,
+    shell=True).decode('utf-8')