closed #16, closed #17, closed #18