protected AbstractMessage waitForProcessingGetReply(AbstractMessage incomingMessage)
      throws InterruptedException {
    // waits for message to be processed
    synchronized (incomingMessage) {
      while (!incomingMessage.isProcessed()) {
        logger.debug("waiting on: " + incomingMessage);
        incomingMessage.wait();
      }
    }
    if (logger.isDebugEnabled()) {
      logger.debug("done waiting on: " + incomingMessage);
    }
    AbstractMessage replyMessage = incomingMessage.getReplyMessage();

    if (logger.isDebugEnabled()) {
      if (replyMessage == null) {
        logger.debug("will reply NULL to " + incomingMessage);
      } else {
        logger.debug("will reply: " + replyMessage + " to " + incomingMessage);
      }
    }
    return replyMessage;
  }