add free function overload