More complete version.  Few changes already.