if (next.get().isExpired(messageReference)) {
// there are two uses of sendToDeadLetterQueue, we are only interested in valid messages
super.sendToDeadLetterQueue(context, messageReference, subscription);
} else {
try {
final RedeliveryPolicy redeliveryPolicy = redeliveryPolicyMap.getEntryFor(messageReference.getRegionDestination().getActiveMQDestination());
if (redeliveryPolicy != null) {
int redeliveryCount = messageReference.getRedeliveryCounter();
if (redeliveryCount < redeliveryPolicy.getMaximumRedeliveries()) {
long delay = ( redeliveryCount == 0 ?
redeliveryPolicy.getInitialRedeliveryDelay() :
redeliveryPolicy.getNextRedeliveryDelay(getExistingDelay(messageReference)));
scheduleRedelivery(context, messageReference, delay, ++redeliveryCount);
} else if (isSendToDlqIfMaxRetriesExceeded()) {
super.sendToDeadLetterQueue(context, messageReference, subscription);
} else {