anchor.diff:  
   procedure TConfigManager.SetDefaults;
   begin
  -
  +  SetObjectPropsDefaults(FConfigData);
  +end;
  +
  +procedure TConfigManager.SetObjectPropsDefaults(const Instance : TObject);
  +  var
  +    Ctx : TRttiContext;
  +    InstanceType : TRttiInstanceType;
  +    Prop : TRttiProperty;
  +begin
  +  Ctx := TRttiContext.Create;
  +  try
  +    InstanceType := Ctx.GetType(Instance.ClassType) as TRttiInstanceType;
  +
  +    for Prop in InstanceType.GetProperties do
  +      if Prop.PropertyType.IsInstance then
  +        SetObjectPropsDefaults(Prop.GetValue(Instance).AsObject)
  +      else
  +        Prop.SetValue(Instance, GetPropDefaultValue<TValue>(Prop));
  +  finally
  +    Ctx.Free;
  +  end;
   end;
   
   procedure TConfigManager.WriteObjectToConfig(const Instance : TObject; Filter : TFilterPropPredicate);
  
positive.code:         TFilterPropPredicate = reference to function (const Instance : TObject; const Prop : TRttiProperty) : Boolean;
      private
        function  FilterConfigProp(const Instance : TObject; const Prop : TRttiProperty) : Boolean;
        procedure GenerateDefaultConfig;
        procedure ReadObjectFromConfig(const Instance : TObject; Filter : TFilterPropPredicate);
        procedure WriteObjectToConfig(const Instance : TObject; Filter : TFilterPropPredicate);
      protected
        procedure FillDataFromFile;
        procedure FillFileFromData;
        procedure SetDefaults;
      public
        constructor Create(const ConfigFileName : TFileName; GenerateConfig, Validate : Boolean);
  
negative.code:   FillFileFromData;
  end;
  
  function TConfigManager.GetPropDefaultValue<T>(const Prop : TRttiProperty) : T;
    var
      Attr : TCustomAttribute;
      V : TValue;
  begin
    Result := Default(T);
  
    for Attr in Prop.GetAttributes do
      if Attr is TDefaultValueAttribute then
      begin
        V := TDefaultValueAttribute(Attr).Value;
  
        if not V.IsEmpty then
        begin
          Result := V.AsType<T>;
          Break;
        end;
      end;
  end;
  
  procedure TConfigManager.ReadObjectFromConfig(const Instance : TObject; Filter : TFilterPropPredicate);
    var
      Ctx : TRttiContext;
  