allow pass NULL as block