a simple event library