second refactored version