Hmmm - this method is going to cause problems! The non-unicode engine has the semantics that if an external does a fetch of array elements and keys, then it can happily assume the pointers are fine until the array is touched again in some fashion... This worked okay before because (a) all strings were native (b) values were MCVariableValue which were number+string and thus could be converted in place and retain the value. Now we have the issue that the values and keys in the array might be transient copies. At the moment I'm not sure of an appropriate solution to this :S