before anyone comments here - this is something to discuss and refactor, however it's pretty useful during development to have factories defined together in one file