added interfaces and tests