Initial incomplete version.