work on generic programmmmmmming