pure virtual methods