    {} res))
 
 (defmacro defentity
-  [name rdf-type props]
-  (let [name       name
-        type       rdf-type
-        ->sym      (comp symbol clojure.core/name)
-        props      (assoc props :type {:prop "rdf:type"})
+  [name type props]
+  (let [->sym      (comp symbol clojure.core/name)
+        props      (merge {:type {:prop "rdf:type"}} props)
         fields     (cons 'id (map ->sym (keys props)))
         ctor-name  (utils/->kebab-case name)
         ctor       (symbol (str 'make- ctor-name))
         dctor      (symbol (str 'describe- ctor-name))
         dctor-as   (symbol (str 'describe-as- ctor-name))
         mctor      (symbol (str 'map-> name))]
-    `(let [;;validators# (extract-key ~props :validate)
-           validators# (build-validators ~props)
+    `(let [validators# (build-validators ~props)
            defaults#   (extract-key ~props :default)
            inits#      (extract-key ~props :init)]
        ;;(prn "-------- " ~type)

                   (inject-defaults defaults#)
                   (v/validate validators#))]
           (if (nil? err#) (~mctor opts#) (throw+ err#))))
       (defn ~dctor
         [g# id#]
         (q/query
          {:describe '~'?id
           :from g#
           :query [{:where [['~'?id "rdf:type" ~type]]}]
           :values {'~'?id #{id#}}}))
       (defn ~dctor-as
         [g# id#]
         (->> ~props
              (build-describe-spec g# id#)

         trio/PTripleSeq
         (~'triple-seq
           [_#] (filtered-triple-seq {~'id (triple-map ~props _#)})))

       (defn ~ctor
         {:doc ~(str "Constructs a new `" (namespace-munge *ns*) "." `~name "` entity from given map.\n"
                     "  Applies entity's property intializers, defaults & validation.\n"
                     "  In case of validation errors, throws map of errors using `slingshot/throw+`.")
          :arglists '([~'props])}
         [opts#]
         (let [[opts# err#]
               (-> opts#
