simple interface and dynamic implementation