{
                     throw new IllegalStateException("Cannot find queue with id " + encoding.queueID);
                  }
                  // TODO - this involves a scan - we should find a quicker way of doing it
                  MessageReference removed = queue.removeReferenceWithID(messageID);
                  referencesToAck.add(removed);
                  if (removed == null)
                  {
                     log.warn("Failed to remove reference for " + messageID);
                  }
                  break;
               }
               case PAGE_TRANSACTION:
               {
                  PageTransactionInfo pageTransactionInfo = new PageTransactionInfoImpl();
                  pageTransactionInfo.decode(buff);
                  if (record.isUpdate)
                  {
                     PageTransactionInfo pgTX = pagingManager.getTransaction(pageTransactionInfo.getTransactionID());
                     pgTX.reloadUpdate(this, pagingManager, tx, pageTransactionInfo.getNumberOfMessages());
                  }
                  else
                  {
                     pageTransactionInfo.setCommitted(false);
                     tx.putProperty(TransactionPropertyIndexes.PAGE_TRANSACTION, pageTransactionInfo);
                     pagingManager.addTransaction(pageTransactionInfo);
                     tx.addOperation(new FinishPageMessageOperation());
                  }
                  break;
               }
               case SET_SCHEDULED_DELIVERY_TIME:
               {
                  // Do nothing - for prepared txs, the set scheduled delivery time will only occur in a send in which
                  // case the message will already have the header for the scheduled delivery time, so no need to do
                  // anything.
                  break;
               }
               case DUPLICATE_ID:
               {
                  // We need load the duplicate ids at prepare time too
                  DuplicateIDEncoding encoding = new DuplicateIDEncoding();
                  encoding.decode(buff);
                  DuplicateIDCache cache = postOffice.getDuplicateIDCache(encoding.address);
                  cache.load(tx, encoding.duplID);
                  break;
               }
               case ACKNOWLEDGE_CURSOR:
               {
                  CursorAckRecordEncoding encoding = new CursorAckRecordEncoding();
                  encoding.decode(buff);
                  encoding.position.setRecordID(record.id);
                  PageSubscription sub = locateSubscription(encoding.queueID,
                                                            pageSubscriptions,
                                                            queueInfos,
                                                            pagingManager);
                  if (sub != null)
                  {
                     sub.reloadPreparedACK(tx, encoding.position);
                     referencesToAck.add(new PagedReferenceImpl(encoding.position, null, sub));
                  }
                  else
                  {
                     log.warn("Can't find queue " + encoding.queueID + " while reloading ACKNOWLEDGE_CURSOR");
                  }
                  break;
               }
               case PAGE_CURSOR_COUNTER_VALUE:
               {
                  log.warn("PAGE_CURSOR_COUNTER_VALUE record used on a prepared statement, what shouldn't happen");
                  break;
               }
               case PAGE_CURSOR_COUNTER_INC:
               {
                  PageCountRecordInc encoding = new PageCountRecordInc();
                  encoding.decode(buff);
                  PageSubscription sub = locateSubscription(encoding.queueID,
                                                            pageSubscriptions,
                                                            queueInfos,
                                                            pagingManager);
                  if (sub != null)
                  {
                     sub.getCounter().applyIncrement(tx, record.id, encoding.value);
                  }
                  else
                  {
                     log.warn("Can't find queue " + encoding.queueID + " while reloading ACKNOWLEDGE_CURSOR");
                  }
                  break;
               }
               default:
               {
                  JournalStorageManager.log.warn("InternalError: Record type " + recordType +
                                                 " not recognized. Maybe you're using journal files created on a different version");
               }
            }
         }
         for (RecordInfo record : preparedTransaction.recordsToDelete)
         {
            byte[] data = record.data;
            HornetQBuffer buff = HornetQBuffers.wrappedBuffer(data);
            long messageID = record.id;
            DeleteEncoding encoding = new DeleteEncoding();
            encoding.decode(buff);
            Queue queue = queues.get(encoding.queueID);
            if (queue == null)
            {
               throw new IllegalStateException("Cannot find queue with id " + encoding.queueID);
            }
            MessageReference removed = queue.removeReferenceWithID(messageID);
            if (removed != null)
            {
               referencesToAck.add(removed);
            }