public V checkBaseInterfaces(Class c) {
        Map<Class, V> possibles = new HashMap<Class,V>();
        for (Class base = c; base != Object.class; base = base.getSuperclass()) {
            for (Class itf : base.getInterfaces()) {
                V val = lookup.valAt(itf);
                if (val != null) possibles.put(itf, val);
            }
        }
        switch (possibles.size()) {
            case 0: return null;
            case 1: return possibles.values().iterator().next();
            default: throw new RuntimeException("More thane one match for " + c);
        }
    }