Is there a good reason these are pointers and not references?  I'm uneasy with all these exposed pointers and dynamic casts.