too many functions so i cut cut cut it