 					"        }",
 					"        return value[JSON_FUNCTION_PREFIX];",
 					"    }",
-					"    if (value === undefined || (typeof value === 'number' && !isFinite(value)))",
+					"    if (typeof value === 'number' && !isFinite(value))",
 					"        return value + JSON_SUFFIX;",
-					"    return Array.isArray(value) && !(value instanceof Array) ? [].concat(value) : value;",
+					"    if (Array.isArray(value) && !(value instanceof Array))",
+					"        return Array.prototype.slice.call(value);",
+					"    return value;",
 					"};",
 					
 					"flash[JSON_REVIVER] = function(key, value) {",

		private static const JSON_LOOKUP:String = "_jsonLookup";
		
		/**
		 * A random String which is highly unlikely to appear in any String value.  Used as a suffix for <code>undefined, NaN, -Infinity, Infinity</code>.
		 */
		private static const JSON_SUFFIX:String = ';' + Math.random() + ';' + new Date();
		

					"var flash = this;",
					"var functionCounter = 0;",
					"var lookup = flash[JSON_LOOKUP] = {};",
					"var symbols = [NaN, Infinity, -Infinity];",
					"for (var i in symbols)",
					"    lookup[symbols[i] + JSON_SUFFIX] = symbols[i];",

