implemented ctor