introduce a 'Generic' language to avoid some duplication