{
          result = true;

          if (hasShadow())
          {
            // Remove from by position in reverse order.
            //
            for (int i = 0; i < count; ++i)
            {
              @SuppressWarnings("unchecked") E object = (E)objects[i];
              notifications = shadowRemove(object, notifications);
            }
          }

          // Remove from by position in reverse order.
          //
          for (int i = count; --i >= 0;)
          {
            doRemove(positions[i]);
          }

          // Compact the results to remove unmatched objects
          //
          if (count != listSize)
          {
            for (int i = listSize; --i >= count; )
            {
              list.remove(i);
            }
            int [] oldPositions = positions;
            positions = new int [count];
            System.arraycopy(oldPositions, 0, positions, 0, count);
          }

          collection = list;
        }