all functions work properly