added virtual callbacks + fixed protected visibility