polished version of poolexp, a bit more complicated ,but  can pool from expression, need test