split implementation, interface