pipeline uses shared pointers