First attempt at this. If this is unsatisfactory in some way, let me know.