nice use of generics !