better event generation