I believe I finished implementation but um... I may not have done it
properly...