make callback is optional. close #29