This is slightly clumsy. I think it can be improved through the use of an Abstract Factory, as described above for a similar situation.