Version II complete. refactor