fix #83, fix #82, fixn #75, fix #64, fix #88