docs: public final List<TradingCatalog> lazyRetrieveCatalogs(
      final Map<String, Object> pRqVs) throws Exception {
      if (this.catalogs == null) {
        synchronized (this) {
          if (this.catalogs == null) {
            List<CatalogGs> catalogsGs = getSrvOrm().retrieveListWithConditions(
              pRqVs, CatalogGs.class, " order by ITSINDEX");
            pRqVs.put("CatalogSpecificsitsOwnerdeepLevel", 1); //only ID
            for (CatalogGs cat : catalogsGs) {
              CatalogSpecifics cs = new CatalogSpecifics();
              cs.setItsOwner(cat);
              cat.setUsedSpecifics(getSrvOrm().retrieveListForField(pRqVs,
                cs, "itsOwner"));
            }
            pRqVs.remove("CatalogSpecificsitsOwnerdeepLevel");
            //only ID:
            pRqVs.put("SubcatalogsCatalogsGsitsCatalogdeepLevel", 1);
            pRqVs.put("SubcatalogsCatalogsGssubcatalogdeepLevel", 1);
            List<SubcatalogsCatalogsGs> scList = getSrvOrm().retrieveList(
              pRqVs, SubcatalogsCatalogsGs.class);
            pRqVs.remove("SubcatalogsCatalogsGsitsCatalogdeepLevel");
            pRqVs.remove("SubcatalogsCatalogsGssubcatalogdeepLevel");
            List<TradingCatalog> result = new ArrayList<TradingCatalog>();
            Set<Long> firstLevel = new HashSet<Long>();
            Set<Long> allLevels = new HashSet<Long>();
            for (SubcatalogsCatalogsGs catSubc : scList) {
              firstLevel.add(catSubc.getItsCatalog().getItsId());
              allLevels.add(catSubc.getItsCatalog().getItsId());
              allLevels.add(catSubc.getSubcatalog().getItsId());
            }
            for (SubcatalogsCatalogsGs catSubc : scList) {
              firstLevel.remove(catSubc.getSubcatalog().getItsId());
            }
            //first level is from tree and not (that has no sub-catalogsGs)
            for (Long id : firstLevel) {
              TradingCatalog tc = new TradingCatalog();
              tc.setCatalog(findCatalogGsById(catalogsGs, id));
              result.add(tc);
            }
            for (CatalogGs cat : catalogsGs) {
              boolean inTree = false;
              for (Long id : allLevels) {
                if (cat.getItsId().equals(id)) {
                  inTree = true;
                  break;
                }
              }
              if (!inTree) {
                TradingCatalog tc = new TradingCatalog();
                tc.setCatalog(findCatalogGsById(catalogsGs, cat.getItsId()));
                result.add(tc);
              }
            }
            //2-nd .. levels:
            retrieveSubcatalogs(result, catalogsGs, scList);
            //Sorting all levels recursively:
            sortCatalogs(result);
            refreshCatalogsFilters(pRqVs,  result);
            this.catalogs = result;
          }
        }
      }
      return this.catalogs;
    }