New version. Work in progress.