+ utility functions finished