 		/** @inheritDoc */
 		public function remove(listener:Function):Function
 		{
-			const index:int = listeners.indexOf(listener);
-			if (index == -1) return listener;
-			if (listenersNeedCloning)
-			{
-				listeners = listeners.slice();
-				listenersNeedCloning = false;
-			}
-			listeners.splice(index, 1);
-			delete onceListeners[listener];
+			if (indexOfListener(listener) == -1) return listener;
+			if (slotsNeedCloning)
+			{
+				slots = slots.slice();
+				slotsNeedCloning = false;
+			}
+			slots.splice(indexOfListener(listener), 1);
 			return listener;
 		}
 		

				return;
			}
			
			if (listenersNeedCloning)
			{
				listeners = listeners.slice();
				listenersNeedCloning = false;
			}
				
			// Faster than push().
			listeners[listeners.length] = listener;
			if (once) onceListeners[listener] = true;
		}
	}
}

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