private ExpressionNode parseFreeText() throws ParseExpressionException {
    Set<String> ids = miOntologyTree.getIdByName(scanner.getCurrSymbol());

    ExpressionNode rootNode = null;

    if (ids.size() > 0) {
      Object[] idsArr = ids.toArray();
      String tmpExpression = (String) idsArr[0];

      for (int i = 1; i < idsArr.length; ++i) {
        tmpExpression = tmpExpression + " or " + (String) idsArr[i];
      }

      ExpressionTree tmpTree = new ExpressionTree(tmpExpression, miOntologyTree, false);

      rootNode = tmpTree.getRootNode();

    } else {
      // TODO FIXME if I give a tag that doesn't have an MI identifier, we return all services.
      // TODO collect these non matching terms and print a warning message on the resulting HTML
      // page.
      rootNode = new ExpressionTrueNode();
    }

    return rootNode;
  }