done issues #20, #19, #18, #15