using internal fireEvent insteadof emit