add private ctor