fix recusion bug