Really really rough initial design - but it works.