Reorganized around a new Runner class.
Make sure that the callback is called only once.