novel add function