add support for multiple levels of list