First Upload, this code needs to be re-done