Tightening the signatures with Generics