TCollection with TCollectionItem contianing a different TCollection

Please help. I am working on a program. I am tryign to make a TCollection whos TCollectionItems contain another TCollection
desendant (Think of a TreeView to better undertand). See below the code for an explaination of the problem.

Here is some  code to illustrate what I am doing (abiet a more simplified version)
--- Code: Header (
class TType1 : public TCollection {
   private:
      TType1Item* __fastcall GetItem(int Index){
         return (TType1Item*)TCollection::GetItem(Index);
      }
      void __fastcall SetItem(int Index, Type1Item *Value) {
         TCollection::SetItem(Index, (TCollectionItem*)Value);
      }
   public:
      __fastcall TType1(); // see cpp file
      TType1Item* __fastcall Add() { return (TType1Item*)TCollection::Add(); }
      TType1Item* __fastcall Insert(int Index) {
         return (TType1Item*)TCollection::Insert(Index);
      }
      __property TType1Item* Items[int Index] = {read=GetItem, write=SetItem};

Quote
};

// ---------------

class TType1Item : public TCollectionItem {
   private:
      TType2 *FType2;
      // some more variables.....
   public:
      __fastcall TType1Item(TCollection* Owner); // see cpp file
      __fastcall ~TType1Item(); // see cpp file
      __property TType2* Type2 = {read=FType2, write=FType2};
-----------------------------------------------------------------------

class TType2 : public TCollection {
   private:
      TType1Item *FOwner;
      TType2Item* __fastcall GetItem(int Index){
         return (TType2Item*)TCollection::GetItem(Index);
      }
      void __fastcall SetItem(int Index, TType2Item *Value) {
         TCollection::SetItem(Index, (TCollectionItem*)Value);
      }
   public:
      __fastcall THoFMembers(TType1Item *AOwner);
      __property TType1Item *Owner = {read=FOwner};
      TType2Item* __fastcall Add() { return (TType2Item*)TCollection::Add(); }
      TType2Item* __fastcall Insert(int Index) {
         return (TType2Item*)TCollection::Insert(Index);
      }
      __property TType2Item* Items[int Index] = {read=GetItem, write=SetItem};

Quote
};

// ---------------

class TTType2Item : public TCollectionItem {
   private:
      // some varaibles....
   public:
      __fastcall TType2Item(TCollection* Owner);

Quote
};

// ---------------------------------------------------------------------------

-----
cpp file
-----

// ---------------------------------------------------------------------------

__fastcall TType1::TType1() : TCollection(__classid(TType1Item)) {

Quote
}

// ---------------------------------------------------------------------------

__fastcall TType1Item::TType1Item(TCollection* Owner) : TCollectionItem(Owner) {
   FType2 = new TType2(this);

Quote
}

__fastcall TType1Item::~TType1Item() {
   delete FType2;
   FType2 = NULL;
Quote
}

// ---------------------------------------------------------------------------

__fastcall TType2::TType2(TType1Item *AOwner)
   : TCollection(__classid(TType2Item)) {
   FOwner = AOwner;

Quote
}

// ---------------------------------------------------------------------------

__fastcall TType2Item::TType2Item(TCollection *Owner) : TCollectionItem(Owner) {

Quote
}

-------------------------END CODE---------------------------

All seems to be ok. I can add items (TType1Item)  to an instance of TType1, and they do add to the list, the Count property
gets increamented. the FType2 gets created, but for some reason I cannot add any items to it. I can call the Add() function
of the Type2 property of any TType1Item but the Type2's Count never gets increments, and it sems the TType2Item never
actually creates. I went tripple checked everything and to the best of my knowlege it should be working. If anyone can help
with this I would really appreicate this.

Thanks, Stan