use program map instead of list