complete the first version