cleaner update()
nicer collapse(), i think