gurrantee not to modify first argument