@Override
  public AbstractMessage handleIncomingMessage(AbstractMessage incomingMessage) {

    this.receivedMessagesAverage.inputValue(1);

    logger.info("in handleIncomingMessage(" + incomingMessage.toString() + ")");

    // adds them to a list to see later which got stuck here
    incomingMessage.setReceiveTimeMillis(Clock.getMainClock().getTimeInMillis(false));
    synchronized (receivedMessages) {
      this.receivedMessages.add(incomingMessage);
    }

    // handles the message
    AbstractMessage replyMessage = null;
    try {
      replyMessage = this.handleMessage(incomingMessage);
    } catch (InterruptedException e) {
      logger.debug("interrupted");
      e.printStackTrace();
    }

    synchronized (receivedMessages) {
      this.receivedMessages.remove(incomingMessage);
    }

    return replyMessage;
  }