add "emit" function