step #1: interfaces and signatures