 		public function removeAll():void
 		{
 			// Looping backwards is more efficient when removing array items.
-			for (var i:uint = listeners.length; i--; )
-			{
-				remove(listeners[i] as Function);
+			for (var i:uint = slots.length; i--; )
+			{
+				// This is the "proper" type-safe way, but perhaps not the fastest.
+				// TODO: Test for speed.
+				remove(Slot(slots[i]).listener);
 			}
 		}
 		

		}
		
		/** @inheritDoc */
		public function get numListeners():uint { return listeners.length; }
		
		/** @inheritDoc */
		//TODO: @throws

		/** @inheritDoc */
		public function remove(listener:Function):Function
		{
			if (indexOfListener(listener) == -1) return listener;
			if (slotsNeedCloning)
			{
				slots = slots.slice();
				slotsNeedCloning = false;
			}
			slots.splice(indexOfListener(listener), 1);
			return listener;
		}
		
