public List implementingclasses(ClassDoc cd) {
        List result = get(implementingclasses, cd);
        List subinterfaces = allSubs(cd, false);

        //If class x implements a subinterface of cd, then it follows
        //that class x implements cd.
        Iterator implementingClassesIter, subInterfacesIter = subinterfaces.listIterator();
        ClassDoc c;
        while(subInterfacesIter.hasNext()){
            implementingClassesIter = implementingclasses((ClassDoc)
                    subInterfacesIter.next()).listIterator();
            while(implementingClassesIter.hasNext()){
                c = (ClassDoc)implementingClassesIter.next();
                if(! result.contains(c)){
                    result.add(c);
                }
            }
        }
        Collections.sort(result);
        return result;
    }