Incomplete, but works
works, just clean up code and submit