fixed #96
(cherry picked from commit 19f0621)
reFixed #94
(cherry picked from commit 30ae4c9)
fixed #99
(cherry picked from commit b91c963)
fix #97
(cherry picked from commit 4d449e7)
update #94, #96, #97, #99