Updated and finished