complete first version