add some implementations and test