public void renameClassElements(Hashtable classNameMap, Hashtable memberNameMap) {

    // this & super class
    renameString(classNameMap, (CONSTANT_Index_info) getEntry(this_class));
    renameString(classNameMap, (CONSTANT_Index_info) getEntry(super_class));

    // implemented interfaces
    // handled by Class entries below

    // classes & Strings
    // descriptors
    int size = cptEntries.size();
    for (int i = 1; i < size; i++) {
      ConstantPoolEntry cpe = getEntry(i);

      if (cpe == null) continue;

      switch (cpe.getTag()) {
        case VMDescriptor.CONSTANT_String:
        case VMDescriptor.CONSTANT_Class:
          {
            CONSTANT_Index_info cii = (CONSTANT_Index_info) cpe;
            renameString(classNameMap, cii);
            break;
          }
        case VMDescriptor.CONSTANT_NameAndType:
          {
            CONSTANT_Index_info cii = (CONSTANT_Index_info) cpe;
            String newDescriptor = newDescriptor(classNameMap, nameIndexToString(cii.getI2()));
            if (newDescriptor != null) {
              doRenameString(cii.getI2(), newDescriptor);
            }
            break;
          }

        default:
          continue;
      }
    }

    // System.out.println("Starting Fields");

    // now the methods & fields, only descriptors at this time
    renameMembers(getFields(), classNameMap, memberNameMap);

    renameMembers(getMethods(), classNameMap, memberNameMap);
  }