completed version

Combined files together.
Untested.