op: refactor with new (instead of __call)