why are the 2 implementations different?