using COWAL + backward compatible + SynchronizedRunListener