because of issues of constructing containers before main - we must in factor::mk method check for null and use default there - and not statically initialize with ptr to right function cuz that may not get filled in before main - less performant - but more portable