complete add function