use unboxed return type