fixes #3, #4, #5, #6