Separated utilities, adding event support