refactored ImmutableArray