canonical functions