90% complete version