public void frameReceived(final FrameEvent e)
		{
			try {
				final CEMI frame = e.getFrame();

				final CEMIBusMon mon;
				if (frame == null)
					mon = (CEMIBusMon) CEMIFactory.fromEmiBusmon(e.getFrameBytes());
				else if (frame instanceof CEMIBusMon)
					mon = (CEMIBusMon) frame;
				else {
					logger.warn("received unsupported frame type with msg code 0x"
							+ Integer.toHexString(frame.getMessageCode()));
					return;
				}
				logger.trace("received monitor indication");
				final AbstractMonitor netmon = (AbstractMonitor) source;
				MonitorFrameEvent mfe = new MonitorFrameEvent(netmon, mon);
				if (decode) {
					try {
						final RawFrame rf = RawFrameFactory.create(netmon.medium.getMedium(),
								mon.getPayload(), 0, extBusmon);
						mfe = new MonitorFrameEvent(netmon, mon, rf);
					}
					catch (final KNXFormatException ex) {
						logger.error("decoding raw frame", ex);
						mfe = new MonitorFrameEvent(netmon, mon, ex);
						// workaround for PL, BCU might not have switched to ext. busmonitor
						if (extBusmon) {
							extBusmon = false;
							logger.warn("disable extended busmonitor mode, maybe this helps");
						}
					}
				}
				addEvent(new Indication(mfe));
			}
			catch (final KNXFormatException kfe) {
				logger.warn("unspecified frame event - ignored", kfe);
			}
			catch (final RuntimeException rte) {
				logger.warn("unspecified frame event - ignored", rte);
			}
		}