implement many functions