base interface and functionality