private Message updateTimeout(int indexOfCurrentFilterStage, Message message) {
    AnyHolder _lifetimeFilterResult = new AnyHolder();
    Message _currentMessage = message;

    try {
      boolean lifetimeMatch =
          _currentMessage.match(
              arrayCurrentFilterStage_[indexOfCurrentFilterStage].getLifetimeFilter(),
              _lifetimeFilterResult);

      if (lifetimeMatch && (_currentMessage == getMessage())) {
        // LifeTime Mapping Filter matched and current Message
        // was not copied yet. This depends on the fact that
        // updatePriority was run before.

        _currentMessage = (Message) getMessage().clone();

        _currentMessage.setTimeout(_lifetimeFilterResult.value.extract_long());
      }

    } catch (UnsupportedFilterableData e) {
      if (logger_.isDebugEnabled()) {
        logger_.debug("unable to evaluate PriorityFilter", e);
      } else if (logger_.isInfoEnabled()) {
        logger_.info("unable to evaluate PriorityFilter");
      }
    }

    return _currentMessage;
  }