Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors