Can't use an abstract factory here?