implement for reference, source, wrapper