Made many changes.  Introduced monads.  Want to push.