implement interface + tests