Initial working commit. Things still need to be improved. Forkers welcome!