 				_frameCallbackAdded = true;
 			}
 			
+			if (relevantContext == null)
+				relevantContext = this;
+			
 			var recursionLimit:uint = 0;
 			var triggerEntry:CallbackEntry = _groupedCallbackToTriggerEntryMap[groupedCallback] as CallbackEntry;
 			if (triggerEntry != null)
 			{
 				// add this context to the list of relevant contexts
-				if (relevantContext == null) // null means never remove the callback
-					triggerEntry.context = [null];
-				else if (triggerEntry.context[0] != null)
-					triggerEntry.context.push(relevantContext);
+				triggerEntry.context.push(relevantContext);
 				// use the minimum of the existing limit and the new limit.
 				triggerEntry.recursionLimit = Math.min(triggerEntry.recursionLimit, recursionLimit);
 			}

		public static var debug:Boolean = false;
		internal var _linkableObject:ILinkableObject; // for debugging only... will be set when debug==true
		private var _lastTriggerStackTrace:String; // for debugging only... will be set when debug==true

		/**
		 * If specified, the preCallback function will be called immediately before running each callback.

						entry.context = null;
						entry.callback = null;
						// remove the empty callback reference from the list
						var removed:Array = _callbackEntries.splice(i--, 1); // decrease i because remaining entries have shifted
						if (debug)
							_oldEntries = _oldEntries ? _oldEntries.concat(removed) : removed;
						continue;
					}
					// if _preCallback is specified, we don't want to limit recursion because that would cause a loss of information.
