void _ModulesManager_Delete( void* modulesManager ) {
   ModulesManager*        self = (ModulesManager*)modulesManager;
   LiveComponentRegister* lcRegister = NULL;

   /* 
    * Note: We have to delete the codelets here rather than let the 
    * component factory do it as they refer to static data inside the
    * loaded module dlls, which are no longer available once we delete
    * all in self->modules. -- Main.PatrickSunter 18 May 2006 
    */
   if( ( lcRegister = LiveComponentRegister_GetLiveComponentRegister() ) ) {
      /* sweep through codelets list and delete each from the lcRegister */
      Index codelet_I;
      
      for( codelet_I = 0; codelet_I < self->codelets->count; ++codelet_I ) {
         LiveComponentRegister_RemoveOneComponentsEntry( lcRegister,
            ((Stg_Object*)self->codelets->data[codelet_I])->name );
      }
   }
   Stg_ObjectList_DeleteAllObjects( self->codelets );
   Stg_Class_Delete( self->codelets );
   ModulesManager_Unload( self ); 
   Stg_Class_Delete( self->modules );
   
   /* Delete parent */
   _Stg_Class_Delete( self );
}
void LiveComponentRegister_DeleteAll( void* liveComponentRegister ) {
   LiveComponentRegister* self = (LiveComponentRegister*)liveComponentRegister;
   Stg_Component*         component;

   while (LiveComponentRegister_GetCount( self ) > 0){
      /* delete from back of list forward */
      component = LiveComponentRegister_At( self, LiveComponentRegister_GetCount( self ) - 1 );
      LiveComponentRegister_RemoveOneComponentsEntry( self, component->name );
      Stg_Class_Delete( component );
   }
}