 				_needsReviving = true;
 				value = value + JSON_SUFFIX;
 			}
-			for each (var extension:Function in _jsonReplacerExtensions)
-				value = extension(key, value);
+			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;
 		}
 		

					value = func as Function;
				}
			}
			for each (var extension:Function in _jsonReviverExtensions)
				value = extension(key, value);
			return value;
		}
		

		private static var _needsReviving:Boolean = false;
		
		/**
		 * Extensions to _jsonReplacer/_jsonReviver.
		 */
		private static const _jsonExtensions:Array = [];
		
		/**
		 * Alias for ExternalInterface.available
