code: @Override
  	public synchronized void setFrame(final CEMILData frame)
  	{
  		if (!frame.getDestination().equals(getKey()))
  			throw new KNXIllegalArgumentException("frame key differs from this key");
  		if (!max)
  			ensureCapacity();
  		else if (!overwrite && size == timestamps.length)
  			return;
  		final CEMILData[] c = (CEMILData[]) value;
  		// notify on first time queue fills up
  		final boolean notifyListener = max && size == c.length - 1;
  
  		resetTimestamp();
  		c[next] = frame;
  		timestamps[next] = getTimestamp();
  		++next;
  		next %= c.length;
  		if (size < c.length)
  			++size;
  		if (notifyListener)
  			fireQueueFilled();
  	}
docs: {@inheritDoc}<br>
  If a maximum size is set and the queue already reached maximum size, if
  {@link #isOverwrite()} evaluates to<br> - <code>true</code>, <code>frame</code>
  will replace the oldest inserted frame<br> - <code>false</code>,
  <code>frame</code> is ignored and not queued.