function implementations complete