modified add function