 		(add-specialization :test-frame-4 :spec-frame-2)
 		(add-abstraction :test-frame-4 :abs-frame-2)
 
-		(println "testing get-feature with this frame:" )
+		(println "testing get-feature with this frame")
 		(print-frame :test-frame-4)
-		;(println "test get-feature:"  (get-feature :test-frame-4 :test-slot-1))
+		;(println "test get-feature"  (get-feature :test-frame-4 :test-slot-1))
 		;(assert (=  (get-feature :test-frame-4 :test-slot-1) "a"))
 		;(assert (=  (get-feature :test-frame-4 :test-slot-2) "b"))
 

							nil)]
					(cond 
						(<= (count (difference  new-ancestor-set visited-set)) 0)
						ancestor-set  
						:t 
						(recur 
							(first (difference ancestor-set visited-set) )
							new-ancestor-set
							(conj visited-set loop-frame) )))))


(defn get-feature
	"looks first in the native frame, then abstractions, then specializations, returning the first found
	this is disgusting. It climbs the hierarchy and recurses down making an infinite loop: FIXME TODO"
	{:test #(do
		(create-frame :test-frame-4 (list :test-slot-1 :test-slot-2) (list "a" "b") (list) (list))
		(create-frame :spec-frame-2 (list :spec-slot-1 :spec-slot-2) (list "x" "z") (list) (list))

		(create-frame :test-frame-4 (list :test-slot-1 :test-slot-2) (list "a" "b") (list :spec-frame-2) (list :abs-frame-2) )
		(create-frame :spec-frame-2 (list :spec-slot-1 :spec-slot-2) (list "x" "z") (list)               (list :test-frame-4) )
		(println "ANCESTORS abs " (find-ancestors :abs-frame-2))
		(println "ANCESTORS test" (find-ancestors :test-frame-4))
		(println "ANCESTORS spec" (find-ancestors :spec-frame-2))
		(assert (= (find-ancestors :abs-frame-2), #{:abs-frame-2}))
		(assert (= (find-ancestors :test-frame-4), #{ :abs-frame-2 :test-frame-4}))
		(assert (= (find-ancestors :spec-frame-2), #{ :spec-frame-2 :abs-frame-2 :test-frame-4 }))
	)}
	[frame-name ]
		(loop [	loop-frame frame-name 
