Update, close #18, close #17, close #16