docs: public void moveMessage(boolean discard)
      throws SIMPControllableNotFoundException,
             SIMPRuntimeOperationFailedException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "moveMessage", new Object[] { Boolean.valueOf(discard) });
  
      assertValidControllable();
  
      LocalTransaction tran = _txManager.createLocalTransaction(false);
      SIMPMessage msg = null;
      try
      {
        msg = getSIMPMessage();
      }
      catch (SIResourceException e)
      {
        // No FFDC code needed    
        SIMPRuntimeOperationFailedException finalE =
          new SIMPRuntimeOperationFailedException(
            nls.getFormattedMessage(
              "INTERNAL_MESSAGING_ERROR_CWSIP0003",
              new Object[] {"QueuedMessage.moveMessage",
                            "1:473:1.66",
                            e,
                            Long.toString(_messageID)},
              null), e,
              "INTERNAL_MESSAGING_ERROR_CWSIP0003", new Object[] {Long.toString(_messageID)});
    
        SibTr.exception(tc, finalE);
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) 
          SibTr.exit(tc, "moveMessage", finalE);
        throw finalE;
      } 
      if(!discard)
      { 
        try
        {
          copyMessageToExceptionDestination(tran);  
        }
        catch (Exception e)
        {
          // No FFDC code needed 
          SIMPRuntimeOperationFailedException finalE =
            new SIMPRuntimeOperationFailedException(e);
          
          SibTr.exception(tc, finalE);
          
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) 
            SibTr.exit(tc, "moveMessage", finalE);
          throw finalE; 
        }
  
        discard = true;
      }
      
      if (discard)
      {      
        try
        {
          if(msg.isInStore())
          {
            if(msg.getLockID()==AbstractItem.NO_LOCK_ID)
            {
              //lock the message
              // Cache a lock ID to lock the items with          
              long lockID = _messageProcessor.getMessageStore().getUniqueLockID(AbstractItem.STORE_NEVER);
              msg.lockItemIfAvailable(lockID);
            }
            Transaction msTran = _messageProcessor.resolveAndEnlistMsgStoreTransaction(tran);
            msg.remove(msTran, msg.getLockID());  
          }
        }
        catch (Exception e)
        {
          // No FFDC code needed
          
          SIMPRuntimeOperationFailedException finalE = null;
          
          boolean adding = false;
          boolean removing = false;      
          
          if (msg instanceof MessageItem)
          {
            adding = ((MessageItem)msg).isAdding();
            removing = ((MessageItem)msg).isRemoving();
          }
          else
          {
            adding = ((MessageItemReference)msg).isAdding();
            removing = ((MessageItemReference)msg).isRemoving();          
          }
          
          if (adding)
          {
            // If the message is adding it probably means that 
            // we have an indoubt transaction which hasn't been committed
            finalE =
              new SIMPRuntimeOperationFailedException(
                nls.getFormattedMessage(
                  "MESSAGE_INDOUBT_WARNING_CWSIP0361",
                  new Object[] {Long.toString(_messageID),
                                _destinationHandler.getName()},
                  null), 
                e,
                "MESSAGE_INDOUBT_WARNING_CWSIP0361", new Object[] {Long.toString(_messageID),
                  _destinationHandler.getName() });          
          }         
          else if (removing)
          {
            // If the message is deleting it probably means that 
            // we have delivered the message to a consumer
            finalE =
              new SIMPRuntimeOperationFailedException(
                nls.getFormattedMessage(
                  "MESSAGE_INDOUBT_WARNING_CWSIP0362",
                  new Object[] {Long.toString(_messageID),
                                _destinationHandler.getName()},
                  null), 
                e,
                "MESSAGE_INDOUBT_WARNING_CWSIP0362", new Object[] { Long.toString(_messageID),
                    _destinationHandler.getName() });          
          }         
          else
          {
            // Unexpected exception
            FFDCFilter.processException(
              e,
              "com.ibm.ws.sib.processor.runtime.QueuedMessage.moveMessage",
              "1:579:1.66",
              this);
      
            finalE =
              new SIMPRuntimeOperationFailedException(
                nls.getFormattedMessage(
                  "INTERNAL_MESSAGING_ERROR_CWSIP0003",
                  new Object[] {"QueuedMessage.removeMessage",
                                "1:587:1.66",
                                e,
                                Long.toString(_messageID)},
                  null), e,
                  "INTERNAL_MESSAGING_ERROR_CWSIP0003", new Object[] { Long.toString(_messageID)});
          }
          
          try
          {
            tran.rollback();
          }
          catch (SIException ee)
          {
            FFDCFilter.processException(
              ee,
              "com.ibm.ws.sib.processor.runtime.QueuedMessage.moveMessage",
              "1:603:1.66",
              this);
            
            SibTr.exception(tc, ee);
          }
          
  
          SibTr.exception(tc, finalE);
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) 
            SibTr.exit(tc, "moveMessage", finalE);
          throw finalE;             
        }
      }
      try
      {
        tran.commit();
      }
      catch (SIException e)
      {
        FFDCFilter.processException(
          e,
          "com.ibm.ws.sib.processor.runtime.QueuedMessage.moveMessage",
          "1:625:1.66",
          this);
  
        SIMPRuntimeOperationFailedException finalE =
          new SIMPRuntimeOperationFailedException(
            nls.getFormattedMessage(
              "INTERNAL_MESSAGING_ERROR_CWSIP0003",
              new Object[] {"QueuedMessage.removeMessage",
                            "1:633:1.66",
                            e,
                            Long.toString(_messageID)},
              null), e,
              "INTERNAL_MESSAGING_ERROR_CWSIP0003", new Object[] {Long.toString(_messageID)});
  
        SibTr.exception(tc, finalE);
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "moveMessage", finalE);
        throw finalE;
      }   
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "moveMessage"); 
    }