implement custom CAT