enhancement: fixed #57, fixed #59, fixed #60