overhaul for the function list