avoid unnecessary allocations