refactor to use VObject more