Rewrote #7 and #8.