optimizations

still treat them like stacks, but in a better way since they're vectors