@Override
    public boolean addAll(final int index,
                          final Collection<? extends F> collection) {
      if (collection == null) {
        throw new NullPointerException("Cannot add a null collection");
      }

      if (index < 0) {
        throw new IndexOutOfBoundsException("Index: " + index + " Size: " + size());
      }

      final int adj = resync(index);
      if (adj == size && index > size()) {
        throw new IndexOutOfBoundsException("Index: " + index + " Size: " + size());
      }

      final int addcnt = collection.size();
      if (addcnt == 0) {
        return false;
      }

      ContentList.this.ensureCapacity(ContentList.this.size() + addcnt);

      final int tmpmodcount = getModCount();
      final int tmpdmc = getDataModCount();
      boolean ok = false;

      int count = 0;

      try {
        for (Content c : collection) {
          if (c == null) {
            throw new NullPointerException(
              "Cannot add null content");
          }
          if (filter.matches(c)) {
            ContentList.this.add(adj + count, c);
            // we can optimise the laziness now by doing a partial
            // reset on
            // the backing list... invalidate everything *after* the
            // added
            // content
            if (backingpos.length <= size) {
              backingpos = Arrays.copyOf(backingpos, backingpos.length + addcnt);
            }
            backingpos[index + count] = adj + count;
            backingsize = index + count + 1;
            xdata = getDataModCount();

            count++;
          }
          else {
            throw new IllegalAddException("Filter won't allow the " +
                                          c.getClass().getName() +
                                          " '" + c + "' to be added to the list");
          }
        }
        ok = true;
      }
      finally {
        if (!ok) {
          // something failed... remove all added content
          while (--count >= 0) {
            ContentList.this.remove(adj + count);
          }
          // restore the mod-counts.
          setModCount(tmpmodcount, tmpdmc);
          // reset the cache... will need to redo some work on another
          // call maybe....
          backingsize = index;
          xdata = tmpmodcount;
        }
      }

      return true;
    }
@Override
    public boolean addAll(final int index,
                          final Collection<? extends F> collection)