   [?aspect ?ancestor]
   (all
     (aspect-declaredsuper+ ?aspect ?ancestor)
-    (succeeds (.isClass  ?ancestor))))
+    (class  ?ancestor)))
 
 
 ;todo: wantgenerics is true, check whether this is compatible with the types returned by the other predicates
 ;(i.e., test with a parameterized aspec)
+
+
+(defn
+  type-super+
+  "Relation between a type and one of its direct or indirect
+   super types (classes, aspects as well as interfaces),
+   including those that stem from an intertype declaration."
+  [?type ?super]
+  (all
+    (!= ?super ?type)
+    (type ?type)
+    (contains (iterator-seq (.getHierarchy ?type true true)) ?super)))
+
+
 (defn
   aspect-super+
   "Relation between an aspect and one of its direct or indirect

  [?aspect ?super]
  (all
    (aspect-declaredsuper ?aspect ?super)
    (succeeds (.isClass  ?super))))


(defn
  aspect-declaredsuper+
  "Relation between an aspect and one of the ancestors in its declared super hierarchy."
  [?aspect ?ancestor]
  (conde
    [(aspect-declaredsuper ?aspect ?ancestor) ]
    [(fresh [?inbetween]
              (aspect-declaredsuper ?aspect ?inbetween)
              (aspect-declaredsuper+ ?inbetween ?ancestor))]))

(defn
  aspect-declaredsuperaspect+
  "Relation between an aspect and one of the ancestor aspects in its declared super hierarchy."

  [?aspect ?type]
  (all
    (aspect-super+ ?aspect ?type)
    (interface ?type)))

(defn
  aspect-superclass+
