Almost finished version.