Re-rolled patch #9. Attached interdiff for #9-10.
Please review.