- Added wxMemoryInputStream(wxInputStream&) ctor (Stas Sergeev)
 - Implemented wxMemoryInputStream::CanRead()
 - Added wxEXEC_BLOCK flag (Hank Schultz)
+- Add support for wxStream-derived classes to wxRTTI (Stas Sergeev)
 
 All (GUI):
 
 
     size_t m_length;
 
     // copy ctor is implemented above: it copies the other stream in this one
+    DECLARE_ABSTRACT_CLASS(wxMemoryInputStream)
     DECLARE_NO_ASSIGN_CLASS(wxMemoryInputStream)
 };
 
     wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode);
     wxFileOffset OnSysTell() const;
 
+    DECLARE_DYNAMIC_CLASS(wxMemoryOutputStream)
     DECLARE_NO_COPY_CLASS(wxMemoryOutputStream)
 };
 
 
 // wxStreamBase: common (but non virtual!) base for all stream classes
 // ---------------------------------------------------------------------------
 
-class WXDLLIMPEXP_BASE wxStreamBase
+class WXDLLIMPEXP_BASE wxStreamBase : public wxObject
 {
 public:
     wxStreamBase();
 
     friend class wxStreamBuffer;
 
+    DECLARE_ABSTRACT_CLASS(wxStreamBase)
     DECLARE_NO_COPY_CLASS(wxStreamBase)
 };
 
 
     friend class wxStreamBuffer;
 
+    DECLARE_ABSTRACT_CLASS(wxInputStream)
     DECLARE_NO_COPY_CLASS(wxInputStream)
 };
 
 
     friend class wxStreamBuffer;
 
+    DECLARE_ABSTRACT_CLASS(wxOutputStream)
     DECLARE_NO_COPY_CLASS(wxOutputStream)
 };
 
 
     size_t m_currentPos;
 
+    DECLARE_DYNAMIC_CLASS(wxCountingOutputStream)
     DECLARE_NO_COPY_CLASS(wxCountingOutputStream)
 };
 
     wxInputStream *m_parent_i_stream;
     bool m_owns;
 
+    DECLARE_ABSTRACT_CLASS(wxFilterInputStream)
     DECLARE_NO_COPY_CLASS(wxFilterInputStream)
 };
 
     wxOutputStream *m_parent_o_stream;
     bool m_owns;
 
+    DECLARE_ABSTRACT_CLASS(wxFilterOutputStream)
     DECLARE_NO_COPY_CLASS(wxFilterOutputStream)
 };
 
 
 // wxMemoryInputStream
 // ----------------------------------------------------------------------------
 
+IMPLEMENT_ABSTRACT_CLASS(wxMemoryInputStream, wxInputStream)
+
 wxMemoryInputStream::wxMemoryInputStream(const void *data, size_t len)
 {
     m_i_streambuf = new wxStreamBuffer(wxStreamBuffer::read);
 // wxMemoryOutputStream
 // ----------------------------------------------------------------------------
 
+IMPLEMENT_DYNAMIC_CLASS(wxMemoryOutputStream, wxOutputStream)
+
 wxMemoryOutputStream::wxMemoryOutputStream(void *data, size_t len)
 {
     m_o_streambuf = new wxStreamBuffer(wxStreamBuffer::write);
 
 // wxStreamBase
 // ----------------------------------------------------------------------------
 
+IMPLEMENT_ABSTRACT_CLASS(wxStreamBase, wxObject)
+
 wxStreamBase::wxStreamBase()
 {
     m_lasterror = wxSTREAM_NO_ERROR;
 // wxInputStream
 // ----------------------------------------------------------------------------
 
+IMPLEMENT_ABSTRACT_CLASS(wxInputStream, wxStreamBase)
+
 wxInputStream::wxInputStream()
 {
     m_wback = NULL;
 // wxOutputStream
 // ----------------------------------------------------------------------------
 
+IMPLEMENT_ABSTRACT_CLASS(wxOutputStream, wxStreamBase)
+
 wxOutputStream::wxOutputStream()
 {
 }
 // wxCountingOutputStream
 // ----------------------------------------------------------------------------
 
+IMPLEMENT_DYNAMIC_CLASS(wxCountingOutputStream, wxOutputStream)
+
 wxCountingOutputStream::wxCountingOutputStream ()
 {
      m_currentPos = 0;
 // wxFilterInputStream
 // ----------------------------------------------------------------------------
 
+IMPLEMENT_ABSTRACT_CLASS(wxFilterInputStream, wxInputStream)
+
 wxFilterInputStream::wxFilterInputStream()
  :  m_parent_i_stream(NULL),
     m_owns(false)
 // wxFilterOutputStream
 // ----------------------------------------------------------------------------
 
+IMPLEMENT_ABSTRACT_CLASS(wxFilterOutputStream, wxOutputStream)
+
 wxFilterOutputStream::wxFilterOutputStream()
  :  m_parent_o_stream(NULL),
     m_owns(false)