Fixes #10 Fixes #7 Fixes #5 Fixes #3