if ( isSame )
     {
 #if TARGET_CARBON
-        // we keep the reference only as a weak ref, to avoid double posting
-        // wakeups, so no problem if it is stale
-        
-        static EventRef s_wakeupEvent = 0 ;
-        if ( s_wakeupEvent )
+        static wxMacCarbonEvent s_wakeupEvent ;
+        OSStatus err = noErr ;
+        if ( !s_wakeupEvent.IsValid() )
         {
-            // is our last wakeup still in the queue
-            if ( IsEventInQueue( GetMainEventQueue() , s_wakeupEvent ) )
-                return ;
-            // has been used already
-            s_wakeupEvent = 0 ;
+           err = s_wakeupEvent.Create( 'WXMC', 'WXMC', GetCurrentEventTime(),
+                        kEventAttributeNone ) ;
         }
-        
-        OSStatus err = MacCreateEvent(nil, 'WXMC', 'WXMC', GetCurrentEventTime(),
-                        kEventAttributeNone, &s_wakeupEvent);
-        if (err == noErr) 
+        if ( err == noErr )
         {
+            if ( IsEventInQueue( GetMainEventQueue() , s_wakeupEvent ) )
+                return ;     
+            s_wakeupEvent.SetTime(0) ;
             err = PostEventToQueue(GetMainEventQueue(), s_wakeupEvent,
                                   kEventPriorityHigh);
-            ReleaseEvent( s_wakeupEvent ) ;
-        } 
+        }
 #else
         PostEvent( nullEvent , 0 ) ;
 #endif