docs: public OutputHandler choosePtoPOutputHandler(
      SIBUuid8 fixedMEUuid,
      SIBUuid8 preferredME,
      boolean localMessage,
      boolean forcePut,
      boolean singleServer,
      HashSet<SIBUuid8> scopedMEs) 
        throws 
          SIRollbackException, 
          SIConnectionLostException, 
          SIResourceException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(
          tc,
          "choosePtoPOutputHandler",
          new Object[] { fixedMEUuid,
                         preferredME,
                         localMessage,
                         forcePut,
                         singleServer,
                         scopedMEs});
  
      
      OutputHandler result = null;
  
      // If we have a suitable local message point (depending on whether we need mediating or not)
      // then we can only check it if any ME restictions include this local ME.
      boolean checkLocal = false;
      if(_localisationManager.hasLocal())
      {
        if(fixedMEUuid == null)
        {
          if((scopedMEs == null) || scopedMEs.contains(_messageProcessor.getMessagingEngineUuid())) 
            checkLocal = true;
        }
        else if (fixedMEUuid.equals(_messageProcessor.getMessagingEngineUuid()))
        {
          if((scopedMEs == null) || scopedMEs.contains(_messageProcessor.getMessagingEngineUuid())) 
            checkLocal = true;
        }
      }
  
      // If the scoped set of MEs does not contain the preferred ME, or we're fixed
      // to any ME ignore any preference
      if((fixedMEUuid != null) ||
         ((scopedMEs != null) && !scopedMEs.contains(preferredME)))
        preferredME = null;
  
      // If we have a local message point and it's the preferred one (or the only possible one) then
      // check to see if it's available
      if(checkLocal &&
         (singleServer || // Only possible one
          ((preferredME != null) && (preferredME.equals(_messageProcessor.getMessagingEngineUuid()))) || // Preferred one
          (fixedMEUuid != null))) // Already fixed to the local one
      {
      	
          result = getLocalPostMedPtoPOH(localMessage, 
                  forcePut,
                  singleServer);
  
      }
      
      // If we haven't already found a local message point (or didn't try as we don't prefer it)
      // then ask WLM to pick one
      if((result == null) &&  // nothing found yet
         !singleServer && // Not a single server (otherwise the local check was enough
         !(checkLocal && (fixedMEUuid != null))) // We're not fixed to the local ME
      {
        HashSet<SIBUuid8> localScopedMEs = scopedMEs;
        
        // If we've been mandated a message point on another ME then that's the
        // only one we want to consider
        if(fixedMEUuid != null)
        {
          localScopedMEs = new HashSet<SIBUuid8>();
          localScopedMEs.add(fixedMEUuid);
          
          preferredME = fixedMEUuid;
        }
          
        result = _localisationManager.searchForOutputHandler(preferredME,
            localMessage,
            _remoteSupport,
            localScopedMEs);
      }
   
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "choosePtoPOutputHandler", result);
  
      return result;
    }