 ;; [name & options :name string :type class :convert fn :default val/fn] - TODO: :key, :version
 ;; TODO :default not a good idea - would replace nulls
 ;; TODO what about type hints on lambdas ?
-(defn expand-property [src-class src-type src-name & pvec]
+(defn expand-property [src-class src-type src-getter src-name & pvec]
   (let [pmap (apply array-map pvec)
 	tgt-type (or (pmap :type) src-type)
 	tgt-name (or (pmap :name) src-name)
 	convert (or (pmap :convert) identity)
 	default (or (pmap :default) ())
 	defaulter (if (fn? default) default (fn [value] default))
-	getter (make-proxy-getter src-class src-type src-name)
-	retriever (fn [value] (convert (. getter get value)))]
+	retriever (fn [value] (convert (. src-getter get value)))]
     [tgt-type tgt-name retriever]
     ))
 

   	tgt-version-getter (tgt-getter-map version-name)
	tgt-metadata (new GetterMetadata tgt-class tgt-types tgt-names tgt-getters)
	view (VersionedModelView. tgt-model-name tgt-metadata tgt-key-getter tgt-version-getter)
	transformer (transform src-model src-class src-map sel-getters tgt-names view tgt-class)]
    view)
  )


	  [name (make-proxy-getter tgt-class type name)]))
    fields)))

(defn make-fields [src-class src-type-map src-getter-map props]
  (map (fn [prop]
	   (let [src-name (first prop)
		 src-type (src-type-map src-name)
		 src-getter (src-getter-map src-name)]
	     (apply expand-property src-class src-type src-getter prop)))
       props))

(defn select [src-model key-name version-name props & pvec]
