public bool removeDelegate<T>(System.Object aDelegate, utList<T> list) where T : tDelegateEntry
		{
			utNode<T> entry;
			for((entry)=(list.head); (entry !=null ); (entry) = entry.next){
				if(entry.obj.aDelegate == aDelegate){
					list.DL_DELETE(entry);
					return true;
				}
			}
			return false;
		}
		public void removeAllDelegatesFromList(utList<tListEntry> list)
		{
			NSUtils.Assert( ! _locked, "BUG. Open a ticket. Can't call this function when processing events.");
			
			lock(this) {
				utNode<tListEntry> entry, tmp;
				entry = list.head;
				while(entry != null){
					tmp = entry.next;
					list.DL_DELETE(entry);
					entry = tmp;
					tmp = null;
				}
			}
		}
		public void dispatchEvent(CCEventObject e)
		{
			lock(this)
			{
				NSEvent evt = e.evt;
				Action<NSEvent> selector = e.selector;
				
				// Dispatch events
				if( _dispatchEvents ) {
					_locked = true;
					selector(evt);
					_locked = false;
				}

				
				// FIRST: Remove possible delegates
				utNode<tListDeletedEntry> dEntry, tTmp;
				dEntry = _delegatesToBeRemoved.head;
				while(dEntry != null){
					tTmp = dEntry.next;
					removeDelegate(dEntry.obj.aDelegate, dEntry.obj.listToBeDeleted);
					_delegatesToBeRemoved.DL_DELETE(dEntry);
					dEntry = tTmp;
				}

				
				// LATER: Add possible delegates
				utNode<tListAddedEntry> entry, tmp;
				entry = _delegatesToBeAdded.head;
				while(entry != null){
					tmp = entry.next;
					
					addDelegate(entry.obj.aDelegate, entry.obj.priority, entry.obj.listToBeAdded);
					_delegatesToBeAdded.DL_DELETE(entry);

					entry = tmp;
				}
			}
		}
 public void removeTile(Tile tile)
 {
     _tiles.DL_DELETE(tile);
     _meshDirty = true;
 }