Updated and almost finished