added smarter list_of