 		 * );
 		 * </listing>
 		 */
-		public static function extendJson(replacer:Function, reviver:Function):void
-		{
-			if (replacer != null)
-				_jsonReplacerExtensions.push(replacer);
-			if (reviver != null)
-				_jsonReviverExtensions.push(reviver);
+		public static function extendJson(replacer:Function, reviver:Function, needsReviving:Function):void
+		{
+			var extension:Object = {};
+			extension[JSON_REPLACER] = replacer;
+			extension[JSON_REVIVER] = reviver;
+			extension[NEEDS_REVIVING] = needsReviving;
+			_jsonExtensions.push(extension);
 		}
 		
 		/**

		private static const JSON_REVIVER:String = "_jsonReviver";
		
		/**
		 * The name of the property used to store a lookup from JSON IDs to values.
		 */
		private static const JSON_LOOKUP:String = "_jsonLookup";

				_needsReviving = true;
				value = value + JSON_SUFFIX;
			}
			for each (var extension:Object in _jsonExtensions)
			{
				if (extension[NEEDS_REVIVING] is Function && extension[NEEDS_REVIVING](key, value))
					_needsReviving = true;
				if (extension[JSON_REPLACER] is Function)
					value = extension[JSON_REPLACER](key, value);
			}
			return value;
		}
		
