refactored 03 so that it will not change the argument state