fix #1, #2, #3, #4, #5. And workaround for #6