It might need some work still, but I finally finished this...