expanded generic functions