Refactoring again to try and handle collections elegantly, very tough