solved #29
solved #22
solved #24