This is quite a bit of work.