handler now uses keyword arguments