more robust and efficient code
auto versioning in Makefile