public CycList readCons()
          throws IOException {
    int size = readInt();

    if (trace == API_TRACE_DETAILED) {
      debugNote("readCons.size: " + size);
    }

    CycList cycList = new CycList();

    //for (int i = 0; i < (size - 1); i++) {
    for (int i = 0; i < size; i++) {
      Object consObject = readObject();

      if (trace == API_TRACE_DETAILED) {
        if (consObject instanceof CycFort) {
          debugNote("readCons.consObject: " + ((CycFort) consObject).toString());
        } else {
          debugNote("readCons.consObject: " + consObject);
        }
      }

      cycList.add(consObject);
    }

    Object cdrObject = readObject();

    if (trace == API_TRACE_DETAILED) {
      try {
        // If element understands the safeToString method, then use it.
        final Method safeToString = cdrObject.getClass().getMethod("safeToString");
        debugNote("readCons.cdrObject: " + safeToString.invoke(cdrObject));
      } catch (Exception e) {
        debugNote("readCons.cdrObject: " + cdrObject.toString());
      }
    }
    cycList.setDottedElement(cdrObject);

    if (trace == API_TRACE_DETAILED) {
      debugNote("readCons.readCons: " + cycList.toString());
    }

    return cycList;
  }