skip and limit can be written using slice(), limit(n) => slice(0, n) skip(n) => slice(n, Long.MAX_VALUE) so there are not strictly needed. Given that limit() is a known idiom, may be only limit() and skip() should be kept with the default implementation of limit() calling slice(0, limit). cheers, Rémi