issue #2, #3, #4 enhance