Index: Source/NSWindowController.m
===================================================================
--- Source/NSWindowController.m	(revision 26954)
+++ Source/NSWindowController.m	(working copy)
@@ -40,6 +40,14 @@
 
 @implementation NSWindowController
 
++ (void) initialize
+{
+  if (self == [NSWindowController class])
+    {
+      [self setVersion: 1];
+    }
+}
+
 - (id) initWithWindowNibName: (NSString *)windowNibName
 {
   return [self initWithWindowNibName: windowNibName  owner: self];
@@ -464,11 +481,27 @@
 
 - (id) initWithCoder: (NSCoder *)coder
 {
-  return [self init];
+  if ([coder allowsKeyedCoding] ||
+      [coder versionForClassName: @"NSWindowController"])
+    {
+      return [super initWithCoder: coder];
+    }
+  else
+    {
+      /* backward compatibility: all NSWindowController instances are not
+	 subclasses of NSResponder, but of NSObject */
+      return [self init];
+    }
 }
 
 - (void) encodeWithCoder: (NSCoder *)coder
 {
+  /* backward compatibility: all NSWindowController instances are not
+     subclasses of NSResponder, but of NSObject = */
+  if ([coder allowsKeyedCoding] || [NSWindowController version])
+    {
+      [super encodeWithCoder: coder];
+    }
   // What are we supposed to encode?  Window nib name?  Or should these
   // be empty, just to conform to NSCoding, so we do an -init on
   // unarchival.  ?
