fixed object projection as well as much refactoring