passing implementation