add (non-static) factory method