added interface, sorted implementations and test