resolve #27

resolve #28
resolve #29