Fixed #22 Fixed #17 Fixed #20