add descriptions
handles recursively