=== modified file 'Makefile.in'
--- Makefile.in	2014-06-11 15:08:00 +0000
+++ Makefile.in	2014-06-11 15:10:36 +0000
@@ -14601,7 +14601,7 @@
 	monodll_carbon_frame.o \
 	monodll_carbon_mdi.o \
 	monodll_carbon_metafile.o \
-	monodll_carbon_overlay.o \
+	monodll_osx_cocoa_overlay.o \
 	monodll_carbon_popupwin.o \
 	monodll_carbon_renderer.o \
 	monodll_carbon_settings.o \
@@ -14748,7 +14748,7 @@
 	monolib_carbon_frame.o \
 	monolib_carbon_mdi.o \
 	monolib_carbon_metafile.o \
-	monolib_carbon_overlay.o \
+	monolib_osx_cocoa_overlay.o \
 	monolib_carbon_popupwin.o \
 	monolib_carbon_renderer.o \
 	monolib_carbon_settings.o \
@@ -14895,7 +14895,7 @@
 	coredll_carbon_frame.o \
 	coredll_carbon_mdi.o \
 	coredll_carbon_metafile.o \
-	coredll_carbon_overlay.o \
+	coredll_osx_cocoa_overlay.o \
 	coredll_carbon_popupwin.o \
 	coredll_carbon_renderer.o \
 	coredll_carbon_settings.o \
@@ -15027,7 +15027,7 @@
 	corelib_carbon_frame.o \
 	corelib_carbon_mdi.o \
 	corelib_carbon_metafile.o \
-	corelib_carbon_overlay.o \
+	corelib_osx_cocoa_overlay.o \
 	corelib_carbon_popupwin.o \
 	corelib_carbon_renderer.o \
 	corelib_carbon_settings.o \
@@ -17774,6 +17774,9 @@
 monodll_osx_cocoa_notebook.o: $(srcdir)/src/osx/cocoa/notebook.mm $(MONODLL_ODEP)
 	$(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/notebook.mm
 
+monodll_osx_cocoa_overla.o: $(srcdir)/src/osx/cocoa/overlay.mm $(MONODLL_ODEP)
+	$(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm
+
 monodll_osx_cocoa_radiobut.o: $(srcdir)/src/osx/cocoa/radiobut.mm $(MONODLL_ODEP)
 	$(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/radiobut.mm
 
@@ -21683,8 +21686,8 @@
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@monodll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp
 
-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@monodll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(MONODLL_ODEP)
-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp
+@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@monodll_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(MONODLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm
 
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@monodll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp
@@ -23642,6 +23645,9 @@
 monolib_osx_cocoa_notebook.o: $(srcdir)/src/osx/cocoa/notebook.mm $(MONOLIB_ODEP)
 	$(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/notebook.mm
 
+monolib_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(MONOLIB_ODEP)
+	$(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm
+
 monolib_osx_cocoa_radiobut.o: $(srcdir)/src/osx/cocoa/radiobut.mm $(MONOLIB_ODEP)
 	$(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/radiobut.mm
 
@@ -33584,8 +33590,8 @@
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@coredll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(COREDLL_ODEP)
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp
 
-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@coredll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(COREDLL_ODEP)
-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp
+@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@coredll_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(COREDLL_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm
 
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@coredll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(COREDLL_ODEP)
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp
@@ -37961,8 +37967,8 @@
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@corelib_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(CORELIB_ODEP)
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp
 
-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@corelib_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(CORELIB_ODEP)
-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp
+@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@corelib_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(CORELIB_ODEP)
+@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm
 
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@corelib_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(CORELIB_ODEP)
 @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp

=== modified file 'include/wx/overlay.h'
--- include/wx/overlay.h	2014-06-11 15:08:00 +0000
+++ include/wx/overlay.h	2014-06-11 15:10:36 +0000
@@ -13,7 +13,7 @@
 
 #include "wx/defs.h"
 
-#if defined(__WXMAC__) && wxOSX_USE_CARBON
+#if defined(__WXMAC__) && wxOSX_USE_COCOA_OR_CARBON
     #define wxHAS_NATIVE_OVERLAY 1
 #elif defined(__WXDFB__)
     #define wxHAS_NATIVE_OVERLAY 1

=== modified file 'include/wx/private/overlay.h'
--- include/wx/private/overlay.h	2014-06-11 15:08:00 +0000
+++ include/wx/private/overlay.h	2014-06-11 15:10:36 +0000
@@ -16,7 +16,11 @@
 #ifdef wxHAS_NATIVE_OVERLAY
 
 #if defined(__WXMAC__)
+#if wxOSX_USE_CARBON
     #include "wx/osx/carbon/private/overlay.h"
+#else
+    #include "wx/osx/cocoa/private/overlay.h"
+#endif
 #elif defined(__WXDFB__)
     #include "wx/dfb/private/overlay.h"
 #else

=== modified file 'src/osx/cocoa/overlay.mm'
--- src/osx/cocoa/overlay.mm	2014-06-11 15:08:00 +0000
+++ src/osx/cocoa/overlay.mm	2014-06-11 15:12:45 +0000
@@ -34,6 +34,7 @@
 #include "wx/private/overlay.h"
 
 #ifdef wxHAS_NATIVE_OVERLAY
+#import <Foundation/NSGeometry.h>
 
 // ============================================================================
 // implementation
@@ -58,48 +59,6 @@
 
 void wxOverlayImpl::CreateOverlayWindow()
 {
-    if ( m_window )
-    {
-        m_overlayParentWindow = m_window->MacGetTopLevelWindowRef();
-        [m_overlayParentWindow makeKeyAndOrderFront:nil];
-        
-        NSView* view = m_window->GetHandle();
-
-        NSPoint viewOriginBase, viewOriginScreen;
-        viewOriginBase = [view convertPoint:NSMakePoint(0, 0) toView:nil];
-        viewOriginScreen = [m_overlayParentWindow convertBaseToScreen:viewOriginBase];
-        
-        NSSize viewSize = [view frame].size;
-        if ( [view isFlipped] )
-            viewOriginScreen.y -= viewSize.height;
-        
-        m_overlayWindow=[[NSWindow alloc] initWithContentRect:NSMakeRect(viewOriginScreen.x,viewOriginScreen.y,
-                                                                         viewSize.width,
-                                                                         viewSize.height) 
-                                                    styleMask:NSBorderlessWindowMask 
-                                                      backing:NSBackingStoreBuffered 
-                                                        defer:YES];
-        
-        [m_overlayParentWindow addChildWindow:m_overlayWindow ordered:NSWindowAbove];
-    }
-    else
-    {
-        m_overlayParentWindow = NULL ;
-        CGRect cgbounds ;
-        cgbounds = CGDisplayBounds(CGMainDisplayID());
- 
-        m_overlayWindow=[[NSWindow alloc] initWithContentRect:NSMakeRect(cgbounds.origin.x,cgbounds.origin.y,
-                                                                       cgbounds.size.width,
-                                                                       cgbounds.size.height) 
-                                                  styleMask:NSBorderlessWindowMask 
-                                                    backing:NSBackingStoreBuffered 
-                                                      defer:YES];
-    }
-    [m_overlayWindow setOpaque:NO];
-    [m_overlayWindow setIgnoresMouseEvents:YES];
-    [m_overlayWindow setAlphaValue:1.0];
-    
-    [m_overlayWindow orderFront:nil];
 }
 
 void wxOverlayImpl::Init( wxDC* dc, int x , int y , int width , int height )
@@ -107,84 +66,54 @@
     wxASSERT_MSG( !IsOk() , _("You cannot Init an overlay twice") );
 
     m_window = dc->GetWindow();
-    m_x = x ;
-    m_y = y ;
-    if ( dc->IsKindOf( CLASSINFO( wxClientDC ) ))
-    {
-        wxPoint origin = m_window->GetClientAreaOrigin();
-        m_x += origin.x;
-        m_y += origin.y;
-    }
-    m_width = width ;
-    m_height = height ;
-
-    CreateOverlayWindow();
-    wxASSERT_MSG(  m_overlayWindow != NULL , _("Couldn't create the overlay window") );
-    m_overlayContext = (CGContextRef) [[m_overlayWindow graphicsContext] graphicsPort];
-    wxASSERT_MSG(  m_overlayContext != NULL , _("Couldn't init the context on the overlay window") );
-
-    int ySize = 0;
-    if ( m_window )
-    {
-        NSView* view = m_window->GetHandle();    
-        NSSize viewSize = [view frame].size;
-        ySize = viewSize.height;
-    }
-    else
-    {
-        CGRect cgbounds ;
-        cgbounds = CGDisplayBounds(CGMainDisplayID());
-        ySize = cgbounds.size.height;
-        
-        
-        
-    }
-    CGContextTranslateCTM( m_overlayContext, 0, ySize );
-    CGContextScaleCTM( m_overlayContext, 1, -1 );
-    CGContextTranslateCTM( m_overlayContext, -m_x , -m_y );
+	m_overlayWindow = m_window->MacGetTopLevelWindowRef();
+	
+	NSRect box = [m_overlayWindow frame];
+	box.origin.x = 0;
+	box.origin.y = 0;
+	
+	if( [m_overlayWindow isVisible] ) 	
+	{
+		[m_overlayWindow discardCachedImage];
+		[m_overlayWindow cacheImageInRect:box];
+	}
 }
 
 void wxOverlayImpl::BeginDrawing( wxDC* dc)
 {
-    wxDCImpl *impl = dc->GetImpl();
-    wxGCDCImpl *win_impl = wxDynamicCast(impl,wxGCDCImpl);
-    if (win_impl)
-    {
-        win_impl->SetGraphicsContext( wxGraphicsContext::CreateFromNative( m_overlayContext ) );
-        dc->SetClippingRegion( m_x , m_y , m_width , m_height ) ;
-    }
+
 }
 
 void wxOverlayImpl::EndDrawing( wxDC* dc)
 {
-    wxDCImpl *impl = dc->GetImpl();
-    wxGCDCImpl *win_impl = wxDynamicCast(impl,wxGCDCImpl);
-    if (win_impl)
-        win_impl->SetGraphicsContext(NULL);
-
-    CGContextFlush( m_overlayContext );
 }
 
 void wxOverlayImpl::Clear(wxDC* WXUNUSED(dc))
 {
     wxASSERT_MSG( IsOk() , _("You cannot Clear an overlay that is not inited") );
-    CGRect box  = CGRectMake( m_x - 1, m_y - 1 , m_width + 2 , m_height + 2 );
-    CGContextClearRect( m_overlayContext, box );
+	if( [m_overlayWindow isVisible] ) 
+	{
+		[m_overlayWindow restoreCachedImage];
+//		[m_overlayWindow flushWindow]; 
+	}
 }
 
 void wxOverlayImpl::Reset()
 {
-    if ( m_overlayContext )
+    if ( m_overlayContext)
     {
         m_overlayContext = NULL ;
     }
 
     // todo : don't dispose, only hide and reposition on next run
-    if (m_overlayWindow)
+    if (m_overlayWindow &&  [m_overlayWindow isVisible])
     {
-        [m_overlayParentWindow removeChildWindow:m_overlayWindow];
-        [m_overlayWindow release];
-        m_overlayWindow = NULL ;
+		NSRect box = [m_overlayWindow frame];
+		box.origin.x = 0;
+		box.origin.y = 0;
+		
+		[m_overlayWindow discardCachedImage];
+		[m_overlayWindow cacheImageInRect:box];
     }
 }
 

