// set the margins around the image
     void SetBitmapMargins(wxCoord x, wxCoord y) { DoSetBitmapMargins(x, y); }
     void SetBitmapMargins(const wxSize& sz) { DoSetBitmapMargins(sz.x, sz.y); }
-
+    wxSize GetBitmapMargins() { return DoGetBitmapMargins(); }
+    
     // set the image position relative to the text, i.e. wxLEFT means that the
     // image is to the left of the text (this is the default)
     void SetBitmapPosition(wxDirection dir);
 
     {
         m_marginX = x;
         m_marginY = y;
+        InvalidateBestSize();
     }
     
     // the margins around the bitmap
 
         }
 
         gtk_button_set_image_position(GTK_BUTTON(m_widget), gtkpos);
+        InvalidateBestSize();
     }
 #endif // GTK+ 2.10+
 }
 
     wxCHECK_RET( m_imageData, "SetBitmap() must be called first" );
 
     m_imageData->SetBitmapMargins(x, y);
+    InvalidateBestSize();
 }
 
 void wxButton::DoSetBitmapPosition(wxDirection dir)
     wxCHECK_RET( m_imageData, "SetBitmap() must be called first" );
 
     m_imageData->SetBitmapPosition(dir);
+    InvalidateBestSize();
 }
 
 // ----------------------------------------------------------------------------
 
         if ( bi )
             bi->SetPressedBitmap(bitmap);
     }
+    InvalidateBestSize();
 }
 
 void wxButton::DoSetBitmapPosition(wxDirection dir)
 {
     m_peer->SetBitmapPosition(dir);
+    InvalidateBestSize();
 }
 
 wxWindow *wxButton::SetDefault()