avoid unnececssary recusion