Fully Functional, needs comment formatting