base functions implemented