// due to unsigned type nPage is always >= 0
 #define IS_VALID_PAGE(nPage) (((nPage) >= 0) && ((size_t(nPage)) < GetPageCount()))
 #else
-#define IS_VALID_PAGE(nPage) ((size_t(nPage)) < GetPageCount())
+#define IS_VALID_PAGE(nPage) (((size_t)nPage) < GetPageCount())
 #endif
 
 // ----------------------------------------------------------------------------
 
 wxString wxNotebook::GetPageText(size_t nPage) const
 {
-    wxCHECK_MSG( IS_VALID_PAGE(nPage), _T(""), _T("invalid notebook page") );
+    wxCHECK_MSG( IS_VALID_PAGE(nPage), wxEmptyString, _T("invalid notebook page") );
 
     return m_titles[nPage];
 }
         m_imageList->Draw(image, dc, 0, 0, wxIMAGELIST_DRAW_NORMAL, true);
         dc.SelectObject(wxNullBitmap);
 #else
-        bmp = *m_imageList->GetBitmap(image);
+        bmp = m_imageList->GetBitmap(image);
 #endif
     }
 
     const wxSize indent = GetRenderer()->GetTabIndent();
     if ( IsVertical() )
     {
-        rect.x += indent.y;
         rect.y += indent.x;
+        if ( dir == wxLEFT )
+        {
+            rect.x += indent.y;
+            rect.width -= indent.y;
+        }
+        else // wxRIGHT
+        {
+            rect.width -= indent.y;
+        }
     }
     else // horz
     {
     }
     else // all tabs are visible, we don't need spin button
     {
-        if ( m_spinbtn )
+        if ( m_spinbtn && m_spinbtn -> IsShown() )
         {
             m_spinbtn->Hide();
         }
 wxSize wxNotebook::DoGetBestClientSize() const
 {
     // calculate the max page size
-    wxSize size(0, 0);
+    wxSize size;
 
     size_t count = GetPageCount();
     if ( count )
     wxSize old_client_size = GetClientSize();
 
     wxControl::DoSetSize(x, y, width, height, sizeFlags);
-    
+
     wxSize new_client_size = GetClientSize();
-    
+
     if (old_client_size != new_client_size)
         Relayout();
 }