finalized versions with argument support