        
        (defn ~dctor-as
          {:doc ~(str "Constructs a new `" (namespace-munge *ns*) "." `~name "` entity based on a graph query\n"
-                     "  for given entity ID and its specified props/rels. If returned query results\n"
-                     "  conflict with entity validation, throws map of errors using `slingshot/throw+`.")
+                     "  for given entity ID and its specified props/rels (any additional rels will be included\n"
+                     "  too, but are not validated during construction). If returned query results conflict\n"
+                     "  with entity validation, throws map of errors using `slingshot/throw+`.")
           :arglists '([~'graph ~'id])}
          [g# id#]
-         (->> ~props
-              (build-describe-spec g# id#)
-              (q/query)
-              (q/accumulate-result-vars)
-              ;;((fn [x#] (prn x#) x#))
-              (prepare-describe-results ~props)
-              (~ctor))))))
+         (-> (~dctor g# id#)
+             (entity-map-from-triples ~props id#)
+             (~ctor))))))
 
 (defentity User (:User imago)
   {:user-name {:prop (:nick foaf)

           (if-let [ser (:values f)]
             (ser (k rec))
             (k rec))]))
       (into {})))

(defn extract-key
  [props key]

    (let [k (id x)]
      (if (map? (first k)) (mapv :id k) (vec k)))))

(defn entity-map-from-triples
  [triples props id]
  (let [iprop (reduce-kv (fn [acc k v] (assoc acc (:prop v) k)) {} props)
        conj* (fnil conj [])]
    (->> triples
         (filter #(= id (:s %)))
         (reduce
          (fn [acc [_ p o]]
            (let [p' (iprop p p)
                  op (props p')]
              (if (and op (-> op :card (not= :*)))
                (assoc acc p' o)
                (update-in acc [p'] conj* o))))
          {:id id}))))

(defmacro defentity
  [name type props]
