do not copy this ode it sucks