add top-down and bottom-up approaches