updated add function