protected CycList substituteForBackquote(CycList messageCycList,
          Timer timeout)
          throws IOException, CycApiException {
    if (messageCycList.treeContains(CycObjectFactory.backquote)) {
      CycList substituteCycList = new CycList();
      substituteCycList.add(CycObjectFactory.makeCycSymbol("read-from-string"));
      String tempString = messageCycList.cyclify();
      tempString = tempString.replaceAll("\\|\\,\\|", ",");
      substituteCycList.add(tempString);
      Object[] response = converseBinary(substituteCycList,
              timeout);
      if ((response[0].equals(Boolean.TRUE)) && (response[1] instanceof CycList)) {
        CycList backquoteExpression = (CycList) response[1];
        return backquoteExpression.subst(CycObjectFactory.makeCycSymbol("api-bq-list"),
                CycObjectFactory.makeCycSymbol("bq-list"));
      }
      throw new CycApiException("Invalid backquote substitution in " + messageCycList +
              "\nstatus" + response[0] + "\nmessage " + response[1]);
    }
    return messageCycList;
  }