add waterfall  function