a major update (not finished yet)