The end user tool we use does all this very well. However from time to time we have a requirement to do something a little more intricate e.g. if a product or brand is selected from a list in say question 1 then omit it from a subsequent list on a latter list. e.g. 2 only include list items on say question 2 if they're selected on Question 1.