use java7 generic if possible