refactored to require VS2012 the least possible