this fixes #4, #5, #6, #7