docs: public OutputHandler choosePtoPOutputHandler(SIBUuid12 linkUuid) 
      throws SIResourceException 
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "choosePtoPOutputHandler", linkUuid);      
        
      OutputHandler result = null;
      LinkSelection s = null;
      
      if (isLocalMsgsItemStream())
      {
        result = (OutputHandler) getLocalPtoPConsumerManager();
        result.setWLMGuess(false);
      }
      else
      {
        // Pick an ME to send the message to.
        s = _localisationManager.getTRMFacade().chooseLink(linkUuid);      
        
        //If the link is not available in WLM, we either continue putting the
        //messages to where we think the bridge is, but marking them as 
        //guesses, or if we dont know where the bridge is, we put them
        //to the uuid SIMPConstants.UNKNOWN_UUID
        if (s == null)
        {
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
            SibTr.debug(tc, "Link not available in WLM");
  
          //lastKnownMEOutputHandler should only ever be null if no outputhandlers exist
          //for the link.  In this case, one should be created.  As TRM/WLM cannot 
          //provide one, a temporary localisation is set up to hold the messages 
          //until TRM can provide a proper response.
          if (_lastKnownMEOutputHandler == null)
          {
            SIBUuid8 localisingME = new SIBUuid8(SIMPConstants.UNKNOWN_UUID);
               
            updateLocalisationSet(localisingME, localisingME);
          }
          
          result = _lastKnownMEOutputHandler;
          result.setWLMGuess(true);
        }
        else
        {
          SIBUuid8 choiceUuid = s.getInboundMeUuid();
          SIBUuid8 routingUuid = s.getOutboundMeUuid();
   
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
            SibTr.debug(tc, "InboundMeUuid is " + choiceUuid + " OutboundMeUuid is  " + routingUuid);
          
          if (choiceUuid == null)
          {
            //In the MQLink case there is no inboundMeUuid, so send the message
            //to the outboundMeUuid
            choiceUuid = s.getOutboundMeUuid();
          }
  
          result = getQueuePointOutputHandler(choiceUuid);
          
    
          if (result == null)
          {        
            updateLocalisationSet(choiceUuid, routingUuid);
    
            result = getQueuePointOutputHandler(choiceUuid);
          }
          result.setWLMGuess(false);
          
          if (routingUuid != null)
          {
            // If this is the ME hosting the link then send to 
            // the foreign ME of the link (choiceUuid) 
            // Otherwise send to the ME hosting the link in this bus
            if(routingUuid.equals( _messageProcessor.getMessagingEngineUuid() ))
            {
              routingUuid = choiceUuid;
            }
            // Currently Links only have one queue point so preferLocal is always true.
            // When multiple links are introduced it will be possible for the result here
            // to be a ConsumerDispatcher and therefore this cast will fail.
            ((PtoPOutputHandler)result).updateRoutingCellule(routingUuid);
          }
        }
      }
      
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "choosePtoPOutputHandler", result);
  
      return result;   
    }