add generic type to handle change