bool                m_saveMode;
     SInt16              m_lastRight;
     SInt16              m_lastBottom;
-    bool                m_firstAdjustRect;
+    bool                m_controlAdded;
 };
 
 OpenUserDataRec::OpenUserDataRec( wxFileDialog* d)
 {
     m_dialog = d;
-    m_firstAdjustRect = true;
+    m_controlAdded = false;
     m_saveMode = m_dialog->HasFdFlag(wxFD_SAVE);
     
     m_defaultLocation = m_dialog->GetDirectory();
     
     if (m_dialog->GetExtraControl())
     {
+        m_controlAdded = true;
         ControlRef ref = m_dialog->GetExtraControl()->GetPeer()->GetControlRef();
         NavCustomControl(ioParams->context, kNavCtlAddControl, ref);
     }
 {
     wxWindow* control = m_dialog->GetExtraControl();
     
-    if ( control )
+    if ( control && m_controlAdded)
     {
-        // workaround because the first time this is called it still seems to be 
-        // in composited coordinates, while later it is not
-        if ( !m_firstAdjustRect )
-        {
-            control->Move(ioParams->customRect.left , ioParams->customRect.top);
-        }
-        m_firstAdjustRect = false;
+        control->SetSize(ioParams->customRect.left , ioParams->customRect.top, 
+                         ioParams->customRect.right - ioParams->customRect.left,
+                         ioParams->customRect.bottom - ioParams->customRect.top);
     }
 }
 
     wxASSERT_MSG( NavServicesAvailable() , wxT("Navigation Services are not running") ) ;
 }
 
+void wxFileDialog::SetupExtraControls(WXWindow nativeWindow)
+{
+    wxNonOwnedWindow::Create( GetParent(), nativeWindow );
+    
+    if (HasExtraControlCreator())
+    {
+        CreateExtraControl();
+    }
+}
+
 int wxFileDialog::ShowModal()
 {
     m_paths.Empty();
             &dialog );
     }
     
-    wxNonOwnedWindow::Create( GetParent(), NavDialogGetWindow(dialog) );
-
-    if (HasExtraControlCreator())
-    {
-        CreateExtraControl();
-    }
+    SetupExtraControls(NavDialogGetWindow(dialog));
     
     if (err == noErr)
         err = ::NavDialogRun(dialog);
 
 
 bool wxFileDialog::SupportsExtraControl() const
 {
-    return false;
+    return true;
 }
 
 NSArray* GetTypesFromFilter( const wxString filter )
     if (HasFlag(wxFD_SAVE))
     {
         NSSavePanel* sPanel = [NSSavePanel savePanel];
+
+        SetupExtraControls(sPanel);
+
         // makes things more convenient:
         [sPanel setCanCreateDirectories:YES];
         [sPanel setMessage:cf.AsNSString()];
     {
         NSArray* types = GetTypesFromFilter( m_wildCard ) ;
         NSOpenPanel* oPanel = [NSOpenPanel openPanel];
+        
+        SetupExtraControls(oPanel);
+
         [oPanel setTreatsFilePackagesAsDirectories:NO];
         [oPanel setCanChooseDirectories:NO];
         [oPanel setResolvesAliases:YES];
     }
 }
 
-int wxFileDialog::ShowModal()
+void wxFileDialog::SetupExtraControls(WXWindow nativeWindow)
 {
-    NSSavePanel *panel = nil;
+    NSSavePanel* panel = (NSSavePanel*) nativeWindow;
+    
+    wxNonOwnedWindow::Create( GetParent(), nativeWindow );
+    
+    if (HasExtraControlCreator())
+    {
+        CreateExtraControl();
+        wxWindow* control = GetExtraControl();
+        if ( control )
+        {
+            NSView* accView = control->GetHandle();
+            [accView removeFromSuperview];
+            [panel setAccessoryView:accView];
+        }
+        else
+        {
+            [panel setAccessoryView:nil];
+        }
+    }
+}
 
+int wxFileDialog::ShowModal()
+{
     wxCFStringRef cf( m_message );
 
     wxCFStringRef dir( m_dir );
     if (HasFlag(wxFD_SAVE))
     {
         NSSavePanel* sPanel = [NSSavePanel savePanel];
+
+        SetupExtraControls(sPanel);
+
         // makes things more convenient:
         [sPanel setCanCreateDirectories:YES];
         [sPanel setMessage:cf.AsNSString()];
 
         returnCode = [sPanel runModalForDirectory:dir.AsNSString() file:file.AsNSString() ];
         ModalFinishedCallback(sPanel, returnCode);
+
+        [sPanel setAccessoryView:nil];
     }
     else
     {
         NSArray* types = GetTypesFromFilter( m_wildCard ) ;
         NSOpenPanel* oPanel = [NSOpenPanel openPanel];
+        
+        SetupExtraControls(oPanel);
+                
         [oPanel setTreatsFilePackagesAsDirectories:NO];
         [oPanel setCanChooseDirectories:NO];
         [oPanel setResolvesAliases:YES];
 
         ModalFinishedCallback(oPanel, returnCode);
         
+        [oPanel setAccessoryView:nil];
+        
         if ( types != nil )
             [types release];
     }
     
     if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL)
         SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED  );
+    
+    [(NSSavePanel*) panel setAccessoryView:nil];
 }
 
 #endif // wxUSE_FILEDLG