Complete first implementation