Use tools provided by the shared_ptr itself...
Take a look at http://www.boost.org/doc/libs/1_48_0/libs/smart_ptr/shared_ptr.htm#Synopsis, especially at these functions:
template<class T, class U>
shared_ptr<T> static_pointer_cast(shared_ptr<U> const & r); // never throws
template<class T, class U>
shared_ptr<T> const_pointer_cast(shared_ptr<U> const & r); // never throws
template<class T, class U>
shared_ptr<T> dynamic_pointer_cast(shared_ptr<U> const & r); // never throws
[snip]
Thank you Ovanes and Thomas for your insights!
I appreciate the help. :D