See code in post 10.