wxDateTime *date = NULL,
                                             wxDateTime::WeekDay *wd = NULL);
 
+    virtual void SetWindowStyleFlag(long style);
+
 protected:
     virtual wxSize wxCalendarCtrl::DoGetBestSize() const;
 
 private:
     void Init() { m_marks = 0; }
 
+    // bring the control in sync with m_marks
     void UpdateMarks();
 
+    // set first day of week in the control to correspond to our
+    // wxCAL_MONDAY_FIRST flag
+    void UpdateFirstDayOfWeek();
+
 
     // current date, we need to store it instead of simply retrieving it from
     // the control as needed in order to be able to generate the correct events
 
 
     @beginStyleTable
     @style{wxCAL_SUNDAY_FIRST}:
-           Show Sunday as the first day in the week (only generic)
+           Show Sunday as the first day in the week (not in wxGTK)
     @style{wxCAL_MONDAY_FIRST}:
-           Show Monday as the first day in the week (only generic)
+           Show Monday as the first day in the week (not in wxGTK)
     @style{wxCAL_SHOW_HOLIDAYS}:
            Highlight holidays in the calendar (only generic)
     @style{wxCAL_NO_YEAR_CHANGE}:
            Disable the month (and, implicitly, the year) changing
     @style{wxCAL_SHOW_SURROUNDING_WEEKS}:
            Show the neighbouring weeks in the previous and next months
-           (only generic)
+           (only generic, always on for the native controls)
     @style{wxCAL_SEQUENTIAL_MONTH_SELECTION}:
            Use alternative, more compact, style for the month and year
            selection controls. (only generic)
     /**
         Returns one of wxCalendarHitTestResult constants and fills either
         @a date or @a wd pointer with the corresponding value depending on the
-        hit test code. Only in generic wxCalendarCtrl.
+        hit test code.
+        
+        Not implemented in wxGTK currently.
     */
     wxCalendarHitTestResult HitTest(const wxPoint& pos,
                                     wxDateTime* date = NULL,
 
     /**
         Sets the current date.
+
+        The @a date parameter must be valid.
     */
     void SetDate(const wxDateTime& date);
 
 
 
 
     EVT_UPDATE_UI(Calendar_Cal_SeqMonth, MyFrame::OnUpdateUIGenericOnly)
+#ifdef __WXGTK20__
     EVT_UPDATE_UI(Calendar_Cal_Monday, MyFrame::OnUpdateUIGenericOnly)
+#endif
     EVT_UPDATE_UI(Calendar_Cal_Holidays, MyFrame::OnUpdateUIGenericOnly)
     EVT_UPDATE_UI(Calendar_Cal_Special, MyFrame::OnUpdateUIGenericOnly)
     EVT_UPDATE_UI(Calendar_Cal_SurroundWeeks, MyFrame::OnUpdateUIGenericOnly)
 
     if ( !MSWCreateControl(clsname, wxEmptyString, pos, size) )
         return false;
 
+    // initialize the control 
+    UpdateFirstDayOfWeek();
+
     SetDate(dt.IsValid() ? dt : wxDateTime::Today());
 
     UpdateMarks();
     return styleMSW;
 }
 
-// TODO: handle WM_WININICHANGE
+void wxCalendarCtrl::SetWindowStyleFlag(long style)
+{
+    const bool hadMondayFirst = HasFlag(wxCAL_MONDAY_FIRST);
+
+    wxCalendarCtrlBase::SetWindowStyleFlag(style);
+
+    if ( HasFlag(wxCAL_MONDAY_FIRST) != hadMondayFirst )
+        UpdateFirstDayOfWeek();
+}
 
 // ----------------------------------------------------------------------------
 // wxCalendarCtrl geometry
 // ----------------------------------------------------------------------------
 
+// TODO: handle WM_WININICHANGE
 wxSize wxCalendarCtrl::DoGetBestSize() const
 {
     RECT rc;
     }
 }
 
+void wxCalendarCtrl::UpdateFirstDayOfWeek()
+{
+    MonthCal_SetFirstDayOfWeek(GetHwnd(), HasFlag(wxCAL_MONDAY_FIRST) ? 0 : 6);
+}
+
 // ----------------------------------------------------------------------------
 // wxCalendarCtrl events
 // ----------------------------------------------------------------------------