use handlers instead of channels