close #59, #58, #57, #56