used 'raw' types to reduce allocations