public void processConcept(I_GetConceptData concept) throws Exception {
      // get origins
      I_Path architectonicPath =
          termFactory.getPath(ArchitectonicAuxiliary.Concept.ARCHITECTONIC_BRANCH.getUids());

      I_Position latestOnArchitectonicPath =
          termFactory.newPosition(architectonicPath, Integer.MAX_VALUE);

      origins.add(latestOnArchitectonicPath);

      Set<I_Position> branchPositions = new HashSet<I_Position>();

      // TODO replace with passed in config...
      I_ConfigAceFrame config = Terms.get().getActiveAceFrameConfig();

      // get all the concepts/paths/positions for the specified branches
      if (branches == null) {
        branchPositions = null;
      } else {
        for (ConceptDescriptor branch : branches) {
          I_GetConceptData currentConcept = branch.getVerifiedConcept();
          I_Path currentPath = termFactory.getPath(currentConcept.getUids());
          I_Position currentPosition = termFactory.newPosition(currentPath, Integer.MAX_VALUE);
          branchPositions.add(currentPosition);
        }
      }

      // get latest IS-A relationships
      I_IntSet isARel = termFactory.newIntSet();
      isARel.add(
          termFactory.getConcept(ArchitectonicAuxiliary.Concept.IS_A_REL.getUids()).getConceptId());

      List<? extends I_RelTuple> results =
          concept.getDestRelTuples(
              null,
              isARel,
              new PositionSetReadOnly(branchPositions),
              config.getPrecedence(),
              config.getConflictResolutionStrategy());
      if (results.size() > count) {
        String message = "Concept: " + concept + " has > 20 children.";
        getLog().info(message);
        htmlWriter.append(message);
        htmlWriter.append("<br>");
        textWriter.append(concept.getUids().toString());
        textWriter.newLine();
      }

      termFactory.addUncommitted(concept);
    }