making return type more extensible