protected CycList substituteForBackquote(final CycList messageCycList, Timer timeout)
          throws IOException, CycApiException {
    if (messageCycList.treeContains(CycObjectFactory.backquote)) {
      final CycList substituteCycList = new CycList();
      substituteCycList.add(CycObjectFactory.makeCycSymbol("read-from-string"));
      substituteCycList.add(messageCycList.cyclify());
      final 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;
  }