slightly closer to having some built in functions