implementation (using ArrayObject)