fa.usCodePage,
                 fa.lMatch,
                 fn.usWeightClass,
-                fa.szFacename);
+                (char *)fa.szFacename);
     return sStr;
 } // end of wxNativeFontInfo::ToString
 
 //   here, but we may check that font definition is true
 // ----------------------------------------------------------------------------
 
+wxGDIRefData *wxFont::CreateGDIRefData() const
+{
+    return new wxFontRefData();
+}
+
+wxGDIRefData *wxFont::CloneGDIRefData(const wxGDIRefData *data) const
+{
+    return new wxFontRefData(*wx_static_cast(const wxFontRefData *, data));
+}
+
 bool wxFont::RealizeResource()
 {
     if ( GetResourceHandle() )
     return M_FONTDATA && (M_FONTDATA->GetHFONT() == 0);
 } // end of wxFont::IsFree
 
-void wxFont::Unshare()
-{
-    // Don't change shared data
-    if ( !m_refData )
-    {
-        m_refData = new wxFontRefData();
-    }
-    else
-    {
-        wxFontRefData* ref = new wxFontRefData(*M_FONTDATA);
-        UnRef();
-        m_refData = ref;
-    }
-} // end of wxFont::Unshare
-
 // ----------------------------------------------------------------------------
 // change font attribute: we recreate font when doing it
 // ----------------------------------------------------------------------------
   int                               nPointSize
 )
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetPointSize(nPointSize);
 
   int                               nFamily
 )
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetFamily(nFamily);
 
   int                               nStyle
 )
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetStyle(nStyle);
 
   int                               nWeight
 )
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetWeight(nWeight);
 
   const wxString&                   rsFaceName
 )
 {
-    Unshare();
+    AllocExclusive();
 
     bool refdataok = M_FONTDATA->SetFaceName(rsFaceName);
 
   bool                              bUnderlined
 )
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetUnderlined(bUnderlined);
 
   wxFontEncoding                    vEncoding
 )
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetEncoding(vEncoding);
 
   const wxNativeFontInfo&           rInfo
 )
 {
-    Unshare();
+    AllocExclusive();
 
     FreeResource();
 
 
 void wxFont::SetPS( HPS hPS )
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetPS(hPS);