aviod recusion