Basics done.  More work needed but good enough for now.