Working model.  Not tested.