Making the class interfaces more consistent. Using helper macros to reduce boilerplate.