Index: Headers/AppKit/NSAlert.h
===================================================================
--- Headers/AppKit/NSAlert.h	(revision 26980)
+++ Headers/AppKit/NSAlert.h	(working copy)
@@ -66,6 +66,8 @@
   id _delegate;
   NSAlertStyle _style;
   BOOL _shows_help;
+  id _modalDelegate;
+  SEL _didEndSelector;
   int	_result;
 }
 
Index: Source/NSAlert.m
===================================================================
--- Source/NSAlert.m	(revision 26980)
+++ Source/NSAlert.m	(working copy)
@@ -431,12 +431,9 @@
   [defButton setImagePosition: NSImageRight];
   [defButton setImage: [NSImage imageNamed: @"common_ret"]];
   [defButton setAlternateImage: [NSImage imageNamed: @"common_retH"]];
-  [defButton setRefusesFirstResponder: YES];
   
   altButton = [self _makeButtonWithRect: rect];
-  [altButton setRefusesFirstResponder: YES];
   othButton = [self _makeButtonWithRect: rect];
-  [othButton setRefusesFirstResponder: YES];
   
   rect.size.height = 80.0;
   scroll = makeScrollViewWithRect(rect);
@@ -1510,11 +1507,11 @@
   else
     {
       [button setTag: NSAlertFirstButtonReturn + count];
-      if ([aTitle isEqualToString: @"Cancel"])
+      if ([aTitle isEqualToString: _(@"Cancel")])
         {
 	  [button setKeyEquivalent: @"\e"];
 	}
-      else if ([aTitle isEqualToString: @"Don't Save"])
+      else if ([aTitle isEqualToString: _(@"Don't Save")])
         {
 	  [button setKeyEquivalent: @"D"];
 	  [button setKeyEquivalentModifierMask: NSCommandKeyMask];
@@ -1603,8 +1600,8 @@
         }
       [panel setTitleBar: title
              icon: _icon
-             title: _informative_text
-             message: _message_text
+             title: _message_text != nil ? _message_text : _(@"Alert")
+             message: _informative_text
              def: (nbut > 0) ? [[_buttons objectAtIndex: 0] title] : (NSString*)nil
              alt: (nbut > 1) ? [[_buttons objectAtIndex: 1] title] : (NSString*)nil
              other: (nbut > 2) ? [[_buttons objectAtIndex: 2] title] : (NSString*)nil];
@@ -1645,15 +1642,30 @@
     }
   else
     {
+      _modalDelegate = delegate;
+      _didEndSelector = didEndSelector;
       [NSApp beginSheet: _window
 	 modalForWindow: window
-	  modalDelegate: delegate
-	 didEndSelector: didEndSelector
+	  modalDelegate: self
+         didEndSelector: @selector(_alertDidEnd:returnCode:contextInfo:)
 	    contextInfo: contextInfo];
       DESTROY(_window);
     }
 }
 
+- (void) _alertDidEnd: (NSWindow *)sheet
+           returnCode: (int)returnCode
+	  contextInfo: (void *)contextInfo
+{
+  if ([_modalDelegate respondsToSelector: _didEndSelector])
+    {
+      void (*didEnd)(id, SEL, id, int, void *);
+      didEnd = (void (*)(id, SEL, id, int, void *))[_modalDelegate
+	methodForSelector: _didEndSelector];
+      didEnd(_modalDelegate, _didEndSelector, self, returnCode, contextInfo);
+    }
+}
+
 - (id) window
 {
   return _window;
