interface is changed to be parameterized