resolved #18 #19 #21 #22