all function complete!