Generalised the UDC into a base class