Updated and totally working, but not finished.