I dislike super-generic kernels. I think it's necessary to have different generic kernels for ```C2```, ```C3```, ```C4```