added EventHandler interface for flexibility, added WithString wrapper