use event emitor to prevent callback passing.