@Override
	public void act()
	{
		// Cleans unnecessary handleds
		removeDeadHandleds();
		
		// Informs all listeners of the last changes
		for (int i = 0; i < getHandledNumber(); i++)
		{
			AdvancedKeyListener listener = getListener(i);
			
			if (listener == null)
				continue;
			
			// Informs if a key was pressed
			for (int ik = 0; ik < this.keysPressed.size(); ik++)
			{
				listener.onKeyPressed(this.keysPressed.get(ik), 0, false);
			}
			
			// Informs if a coded key was pressed
			for (int ik = 0; ik < this.codesPressed.size(); ik++)
			{
				listener.onKeyPressed((char) 0, this.codesPressed.get(ik), true);
			}
			
			// Informs if a key was released
			for (int ik = 0; ik < this.keysReleased.size(); ik++)
			{
				listener.onKeyReleased(this.keysReleased.get(ik), 0, false);
			}
			
			// Informs if a coded key was released
			for (int ik = 0; ik < this.codesReleased.size(); ik++)
			{
				listener.onKeyReleased((char) 0, this.codesReleased.get(ik), true);
			}
			
			// Informs if a key is down
			for (int ikd = 0; ikd < this.keysDown.size(); ikd++)
			{
				listener.onKeyDown(this.keysDown.get(ikd), 0, false);
			}
			
			// Informs if a coded key is down
			for (int icd = 0; icd < this.codesDown.size(); icd++)
			{
				// For some reason, this check is needed...?
				if (icd < this.codesDown.size())
					listener.onKeyDown((char) 0, this.codesDown.get(icd), true);
			}
		}
		
		// Negates some of the changes (pressed & released)
		this.keysPressed.clear();
		this.keysReleased.clear();
		this.codesPressed.clear();
		this.codesReleased.clear();
	}