finish the first version