add top-down method