functions completed