Fixes #16 Fixes #17 Fixes #19 Fixes #20