abstract functions added