{
    if (extendedMetaDataHolderCache != null)
    {
      EPackageExtendedMetaData result = (EPackageExtendedMetaData)extendedMetaDataHolderCache.get(ePackage);
      if (result == null)
      {
        extendedMetaDataHolderCache.put(ePackage, result = createEPackageExtendedMetaData(ePackage));
      }
      return result;
    }
    else
    {
      EPackageExtendedMetaData.Holder holder = (EPackageExtendedMetaData.Holder)ePackage;
      EPackageExtendedMetaData result = holder.getExtendedMetaData();
      if (result == null)
      {
        holder.setExtendedMetaData(result = createEPackageExtendedMetaData(ePackage));
      }
      return result;
    } 
  }