implementations and tests have been added.