Initial version. Work in progress.