diff -uNr fpc/rtl/objpas/classes/classes.inc fpc.new/rtl/objpas/classes/classes.inc
--- fpc/rtl/objpas/classes/classes.inc	2005-01-02 21:32:48.000000000 +0000
+++ fpc.new/rtl/objpas/classes/classes.inc	2005-01-22 17:06:11.256645934 +0000
@@ -322,6 +322,10 @@
 
 begin
   I:=0;
+  if not Assigned(InitHandlerList) then begin
+    Result := True;
+    Exit;
+  end;
   Result:=False;
   With InitHandlerList do
     begin
@@ -1138,14 +1142,15 @@
 
   procedure ProcessObject;
   var
-    IsInherited: Boolean;
+    Flags: Byte;
     ObjectName, ObjectType: String;
+    ChildPos: Integer;
   begin
     if parser.TokenSymbolIs('OBJECT') then
-      IsInherited := False
+      Flags :=0  { IsInherited := False }
     else begin
       parser.CheckTokenSymbol('INHERITED');
-      IsInherited := True;
+      Flags := 1; { IsInherited := True; }
     end;
     parser.NextToken;
     parser.CheckToken(toSymbol);
@@ -1158,6 +1163,19 @@
       ObjectName := ObjectType;
       ObjectType := parser.TokenString;
       parser.NextToken;
+      if parser.Token = '[' then begin
+        parser.NextToken;
+        ChildPos := parser.TokenInt;
+        parser.NextToken;
+        parser.CheckToken(']');
+        parser.NextToken;
+        Flags := Flags or 2;
+      end;
+    end;
+    if Flags <> 0 then begin
+      Output.WriteByte($f0 or Flags);
+      if (Flags and 2) <> 0 then
+        WriteInteger(ChildPos);
     end;
     WriteString(ObjectType);
     WriteString(ObjectName);
diff -uNr fpc/rtl/objpas/classes/reader.inc fpc.new/rtl/objpas/classes/reader.inc
--- fpc/rtl/objpas/classes/reader.inc	2005-01-21 23:06:39.000000000 +0000
+++ fpc.new/rtl/objpas/classes/reader.inc	2005-01-22 17:06:11.257645638 +0000
@@ -73,7 +73,7 @@
     Flags := TFilerFlags(longint(Prefix and $0f));
     if ffChildPos in Flags then
     begin
-      ValueType := NextValue;
+      ValueType := ReadValue;
       case ValueType of
         vaInt8:
           AChildPos := ReadInt8;
