make base controller abstract