completed version 2
completed v3