facet descriptors now follow the curiously recurring template pattern, removing some of the unecessary repeated methods