can't allow external entity to determine persistence for application elements, so introduce a stupidly long factory to produce them on demand