It's been a while since 2.0, and batteries has had a bunch of improvements that should be shared with a wider audience. More features, more bugfixes, more batteries. Thanks to the *many* contributors in this release; batteries exists because of you. E. Changelog: Added: Array.{avg,favg,singleton}, Bigarray.of_enum, Hashtbl.{modify,modify_def,modify_opt,map_inplace,filter_inplace,filter_opt_inplace}, IMap.{modify,modify_def,modify_opt}, LazyList.lazy_fold_right, List.{singleton,unfold,min_max,modify,modify_dep,modify_opt, span, nsplit, group_consecutive}, Map.modify_opt (*3), MultiMap.modify_opt (*3), MultiPMap.modify_opt (*3), Option.{default_delayed , map_default_delayed}, Set.find, Set.Incubator.op_map, String.rev, Substring.{equal,contains,iteri,enum} Fixed: Compilation with Ocaml 4.01 Speedup in LazyList.append More organized magic for fast list snoc Speedup in String.{replace,nreplace} Cleanup int32.[un]pack exceptions Fix last bit access in BatBitSet Float.round corner case on predecessor of 0.5 fixed Fix Enum.concat's clone implementation Fix List.n_cartesian_product to allow empty input Fix BatText.rfind's index calculation Improve Pervasives.undefined to be curry-able Array.backwards doesn't clone array anymore Remove useless allocation in Splay.cfind More unit tests, benchmarks