optional arg for block
block should be put at the last position