Initial Commit. Works with some bugs.