Add 2 implementations and tests