Fix opaque array handling; add tests