now using shared_ptrs instead of reference_wrapper, cleans up some mess
with defaultsuppliers