First Commit. Didn't test everything. Might still have some bugs