Issues: #21, #20, #19, #18, #17, #16, #15