refactored observableCollectionFactory