finish the first working version