improve fireEvent