it works now, but I need to clean it up
Finished product for now, it is missing a lot of error throwing that
would help with end-user interaction but it is more than is worth
putting into this simple project.