extracted to interface