{
      if (positions != null)
      {
        int collectionSize = collection.size();
        NotificationImpl notification =
          (collectionSize == 1 ?
            createNotification(Notification.REMOVE, collection.iterator().next(), null, positions[0], oldIsSet) :
            createNotification(Notification.REMOVE_MANY, collection, positions, positions[0], oldIsSet));

        NotificationChain notifications = createNotificationChain(collectionSize);
        if (hasInverse())
        {
          for (Iterator<?> i = collection.iterator(); i.hasNext(); )
          {
            @SuppressWarnings("unchecked") E object = (E)i.next();
            notifications = inverseRemove(object, notifications);
          }
          if (notifications == null)
          {
            dispatchNotification(notification);
          }
          else
          {
            notifications.add(notification);
            notifications.dispatch();
          }
        }
        else
        {
          if (notifications == null)
          {
            dispatchNotification(notification);
          }
          else
          {
            notifications.add(notification);
            notifications.dispatch();
          }
        }
      }
      else if (hasInverse())
      {
        NotificationChain notifications = createNotificationChain(collection.size());
        for (Iterator<?> i = collection.iterator(); i.hasNext(); )
        {
          @SuppressWarnings("unchecked") E object = (E)i.next();
          notifications = inverseRemove(object, notifications);
        }
        if (notifications != null) notifications.dispatch();
      }
      return true;
    }