separated interface and implementation