collapse() now has an optional argument and detach() is a no-op