On the fly reset in my BFM

i wrote a bfm which supports on the fly reset. that is whenever reset occur, the bfm agent clears all variables , queues and stop all tasks. then it starts working again from the first step.
my question is if there is a way to make this reset support using ovm phases or another method?
my solution was to have a fork… join any which stops every forked thread in the bfm.
is there a better solution for that?