factor out version control