complete first version!