+void wxRadioButton::SetLabel( const wxString& rsLabel )
+{
+    wxString                        sLabel = ::wxPMTextToLabel(rsLabel);
+    ::WinSetWindowText((HWND)GetHWND(), (const char *)sLabel.c_str());
+} // end of wxRadioButton::SetLabel
+
+void wxRadioButton::SetValue( bool bValue )
+{
+    ::WinSendMsg((HWND)GetHWND(), BM_SETCHECK, (MPARAM)bValue, (MPARAM)0);
+    if (bValue)
+    {
+        const wxWindowList&         rSiblings = GetParent()->GetChildren();
+        wxWindowList::compatibility_iterator nodeThis = rSiblings.Find(this);
+
+        wxCHECK_RET(nodeThis, wxT("radio button not a child of its parent?"));
+
+        //
+        // If it's not the first item of the group ...
+        //
+        if ( !HasFlag(wxRB_GROUP) )
+        {
+            //
+            // ...turn off all radio buttons before this one
+            //
+            for ( wxWindowList::compatibility_iterator nodeBefore = nodeThis->GetPrevious();
+                  nodeBefore;
+                  nodeBefore = nodeBefore->GetPrevious() )
+            {
+                wxRadioButton*      pBtn = wxDynamicCast( nodeBefore->GetData()
+                                                         ,wxRadioButton
+                                                        );
+                if (!pBtn)
+                {
+                    //
+                    // The radio buttons in a group must be consecutive, so there
+                    // are no more of them
+                    //
+                    break;
+                }
+                pBtn->SetValue(false);
+                if (pBtn->HasFlag(wxRB_GROUP))
+                {
+                    //
+                    // Even if there are other radio buttons before this one,
+                    // they're not in the same group with us
+                    //
+                    break;
+                }
+            }
+        }
+
+        //
+        // ... and all after this one
+        //
+        for (wxWindowList::compatibility_iterator nodeAfter = nodeThis->GetNext();
+             nodeAfter;
+             nodeAfter = nodeAfter->GetNext())
+        {
+            wxRadioButton*          pBtn = wxDynamicCast( nodeAfter->GetData()
+                                                         ,wxRadioButton
+                                                        );
+
+            if (!pBtn || pBtn->HasFlag(wxRB_GROUP) )
+            {
+                //
+                // No more buttons or the first button of the next group
+                //
+                break;
+            }
+            pBtn->SetValue(false);
+        }
+    }
+} // end of wxRadioButton::SetValue
+
+MRESULT wxRadioButton::OS2WindowProc(
+  WXUINT                            uMsg
+, WXWPARAM                          wParam
+, WXLPARAM                          lParam
+)
+{
+    if (uMsg == WM_SETFOCUS)
+    {
+        m_bFocusJustSet = true;
+
+        MRESULT                     mRc = wxControl::OS2WindowProc( uMsg
+                                                                   ,wParam
+                                                                   ,lParam
+                                                                  );