docs: private void cleanupPersistentStreams(ItemStream containerItemStream, SIBUuid8 clashingRemoteMeId) throws Exception
    {
      if (tc.isEntryEnabled()) SibTr.entry(tc, "cleanupPersistentStreams", new Object[] {containerItemStream, clashingRemoteMeId} );
     
      NonLockingCursor cursor = containerItemStream.newNonLockingItemStreamCursor(null);
      AbstractItem abitem;
      while ((abitem=cursor.next()) != null)
      {
        if (abitem instanceof AOProtocolItemStream)
        {
          AOProtocolItemStream protocolItemStream = (AOProtocolItemStream) abitem;
          SIBUuid8 remoteMEId = protocolItemStream.getRemoteMEId();
          SIBUuid12 streamId = protocolItemStream.getStreamId();
          SIBUuid12 gatheringTargetDestUuid = protocolItemStream.getGatheringTargetDestUuid();
          
          if (remoteMEId.equals(clashingRemoteMeId))
          {
            // Found a itemstream with the clashing remote ME id
            NonLockingCursor protocolCursor = protocolItemStream.newNonLockingItemCursor(null);
            if (protocolCursor.next() == null)
            {
              String key = 
                SIMPUtils.getRemoteGetKey(remoteMEId, gatheringTargetDestUuid);
              //empty itemstream delete it asynchronously
              AsyncUpdate update = new RemovePersistentStream(key, streamId, protocolItemStream, null);
              msUpdateThread.enqueueWork(update);
              // We want to wait for the asyncupdate to finish as we will be obtaining a new
              // cursor on our containeritemstream soon
              msUpdateThread.waitTillAllUpdatesExecuted();
            }
            else
            {
              // We have some Items on this itemstream, leave it for now it should be the only one that
              //  has some items.
            }
            protocolCursor.finished();
          }
        }
      }
      cursor.finished();
      
      if (tc.isEntryEnabled()) SibTr.exit(tc, "cleanupPersistentStreams");
    }