public void indication(final FrameEvent e)
		{
			final CEMILData f = (CEMILData) e.getFrame();
			final byte[] apdu = f.getPayload();
			// can't be a process communication indication if too short
			if (apdu.length < 2)
				return;
			final int svc = DataUnitBuilder.getAPDUService(apdu);
			// Note: even if this is a read response we have waited for,
			// we nevertheless notify the listeners about it (we do *not* discard it)
			if (svc == GROUP_RESPONSE && wait) {
				synchronized (indications) {
					indications.add(e);
					indications.notify();
				}
			}
			try {
				// notify listeners
				if (svc == GROUP_READ)
					fireGroupReadWrite(f, new byte[0], svc, false);
				else if (svc == GROUP_RESPONSE || svc == GROUP_WRITE)
					fireGroupReadWrite(f, DataUnitBuilder.extractASDU(apdu), svc, apdu.length <= 2);
			}
			catch (final RuntimeException rte) {
				logger.error("on group indication", rte);
			}
		}