Add metaclasses to simplify usage