docs: protected void removeNeighbour(
      SIBUuid8 meUUID,
      String busId,
      Transaction transaction) throws SIConnectionLostException, SIResourceException, SIErrorException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(
          tc,
          "removeNeighbour",
          new Object[] { busId, transaction });
          
      boolean recoveredNeighbour = false;
      
      Neighbour neighbour = null;
      synchronized(_neighbours)
      {
        neighbour = (Neighbour) _neighbours.get(meUUID);
      }
      
      if (neighbour == null)
      {
        recoveredNeighbour = true;
        
        synchronized(_recoveredNeighbours)
        {
          neighbour = (Neighbour) _recoveredNeighbours.get(meUUID);
        }
      }
         
      // Does this Neighbour exist already.
      if (neighbour != null)
      {
        // Get the bus that the Neighbour belonged to.
        final BusGroup group = neighbour.getBus();
  
        if (group != null)
        {
          group.removeNeighbour(neighbour);
  
          if (group.getMembers().length == 0)
            deleteBus(group);
        }
          
        // Remove all the proxies for this Neighbour
        removeRegisteredProxies(neighbour, transaction, !recoveredNeighbour);
        
        // Remove Neighbour from the item stream.   
        try
        {
          neighbour.remove(transaction, neighbour.getLockID());
        }
        catch (MessageStoreException e)
        {
          // If the MessageStoreException is caught, then this is bad, log a FFDC
          FFDCFilter.processException(
            e,
            "com.ibm.ws.sib.processor.proxyhandler.Neighbours.removeRegisteredProxies",
            "1:879:1.113",
            this);
          
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) 
            SibTr.exit(tc, "removeRegisteredProxies", "SIResourceException");
          
          SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0003",
            new Object[] {
              "com.ibm.ws.sib.processor.proxyhandler.Neighbours",
              "1:888:1.113",
              e,
              neighbour.getUUID()});
                    
          throw new SIResourceException(            
            nls.getFormattedMessage(
              "INTERNAL_MESSAGING_ERROR_CWSIP0003",
              new Object[] {
                "com.ibm.ws.sib.processor.proxyhandler.Neighbours",
                "1:897:1.113",
                e,
                neighbour.getUUID()},
              null), 
            e);
        }
          
        // Remove the given neighbour object from the list of Neighbours
        if (!recoveredNeighbour)
        {
          synchronized(_neighbours)
          {
            _neighbours.remove(meUUID);
          }
        }
        else
        {
          synchronized(_recoveredNeighbours)
          {
            _recoveredNeighbours.remove(meUUID);
          }
        }
        
        // Ask the Neighbour to delete its destination.
        neighbour.deleteDestination();
        
      }
      else
      {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
          SibTr.exit(tc, "removeNeighbour", "Neighbour Unknown");
          
        SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0005",
          new Object[] {
            "com.ibm.ws.sib.processor.proxyhandler.Neighbours",
            "1:932:1.113",
            meUUID});
  
        throw new SIErrorException(
          nls.getFormattedMessage(
            "INTERNAL_MESSAGING_ERROR_CWSIP0005",
            new Object[] {
              "com.ibm.ws.sib.processor.proxyhandler.Neighbours",
              "1:940:1.113",
              meUUID},
            null));
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "removeNeighbour");
    }