use the same type as implementation