divering functions, type kinds, update