Yes, this really looks like a factory... (instantiation logic in here)