One rather glaring defect (IMHO) in the OpenGL API is that materials are not dealt with as objects. Lights are. Display lists are. If you look into it, you will find that “textures” are. In GLUT, menus and windows are. But materials are handled as simply the current settings of a bunch of states.
So fix this. Write a C++ class that encapsulates the idea of a material. So we can say this material should have these properties (remember to have reasonable defaults!) and now I want this to be the current material.
By the way, I do not think this would be very difficult.