implemented initializer