simplify factory and make error message more clear
update error collection so that is can contain child conditions for each error
add an array iterator