docs: public synchronized void add(PmiModule instance) {
          if (instance == null)
              return;
  
          // no need to add instance to instanceList - to be removed.
          /*
           * if(!instanceList.contains(instance)) {
           * instanceList.add(instance);
           * }
           */
  
          // removing add(spddata[]) - customPmi
          //add(instance.listData());
  
          PmiModuleConfig instanceModCfg = null;
          boolean bSameSubMod = true;
          // Check if instance and aggregate are same type
          if (!instance.getModuleID().equals(getModuleID())) {
              bSameSubMod = false;
              addModuleID(instance.getModuleID());
              instanceModCfg = PerfModules.getConfig(instance.getModuleID());
              // can't aggregate data from different modules (different xml files)
              // customPMI limitation - fixed in VELA
              //return;
          } else {
              instanceModCfg = moduleConfig;
          }
  
          SpdData[] dataList = instance.listData();
          if (dataList == null || instanceModCfg == null)
              return;
  
          for (int i = 0; i < dataList.length; i++) {
              int dataId = dataList[i].getId();
  
              // Always creating aggregate data in ModuleAggregate            
              // fg: check if dataId is enabled in the parent before adding           
              //if (bSameSubMod && !isEnabled (dataId))
              //    continue;
  
              // if different sub module then create the sub-module aggregate data
              // in parent even if its not enabled.
  
              PmiDataInfo info = instanceModCfg.getDataInfo(dataId);
              if (info == null) {
                  // wrong data id, ignore it. - This should not happen
                  continue;
              } else if (!info.isAggregatable())
                  continue;
  
              // Check if aggregateData is already available. If not create it.
              SpdGroup aggregateData = (SpdGroup) dataTable.get(new Integer(dataId));
              if (aggregateData == null) {
                  aggregateData = (SpdGroup) createAggregateData(info);
                  if (aggregateData != null)
                      putToTable((SpdData) aggregateData);
  
                  //if (!bSameSubMod)
                  //{
                  // enable of parent level is
                  if (currentLevel == LEVEL_FINEGRAIN) {
                      //if( !isEnabledInConfig (dataId) )             
                      if (!isEnabled(dataId))
                          ((SpdData) aggregateData).disable();
                  } else if (info.getLevel() > currentLevel)
                      ((SpdData) aggregateData).disable();
                  //}
                  // FINE GRAINED
                  /*
                   * if(info.getLevel() > currentLevel)
                   * ((SpdData)aggregateData).disable();
                   */
              }
              aggregateData.add(dataList[i]);
          }
      }