* use a const reference to reduce copy amount