all functions... complete