Finish re-write. -- TESTED