use more flexible return type