pass by value since other compilers than VC complain about temporary objects passed by reference