Rewrite using MOP Class abstraction.