   	output-class (apply make-class class-factory output-class-name output-properties)
 	dummy (print "output-class: ")
 	dummy (println output-class)
-   	key-getter (make-proxy-getter output-class key-type key-name)
-   	version-getter (make-proxy-getter output-class version-type version-name)
+   	output-getters (apply
+			conj
+			(array-map)
+			(map
+			 (fn [property]
+			     (let [type (nth property 0)
+				   name (nth property 1)]
+			       [name (make-proxy-getter output-class type name)]))
+			 expanded-properties))
+   	key-getter (output-getters key-name)
+   	version-getter (output-getters version-name)
 	dummy (print "version-getter: ")
 	dummy (println version-getter)
-   	output-getters (map (fn [property] (make-proxy-getter output-class (nth property 0) (nth property 1))) expanded-properties)
 	dummy (print "output-getters: ")
 	dummy (println output-getters)
-	output-metadata (new GetterMetadata output-class output-types output-names output-getters)
+	output-metadata (new GetterMetadata output-class output-types output-names (vals output-getters))
 	dummy (print "output-metadata: ")
 	dummy (println output-metadata)
 	view (new VersionedModelView output-model-name output-metadata key-getter version-getter)

;; 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]
  (let [pmap (apply hash-map pvec)
	tgt-type (or (pmap :type) src-type)
	tgt-name (or (pmap :name) src-name)
	convert (or (pmap :convert) identity)

    [tgt-type tgt-name retriever]
    ))

(defn select [src-model output-class-name output-model-name key-name version-name properties]
  (let [metadata (. src-model getMetadata)
	src-class (. metadata getValueClass)
	src-types (. metadata getAttributeTypes)
	src-names (. metadata getAttributeNames)
	src-map (apply array-map (interleave src-names src-types))
	;; list of [tgt-type tgt-name retriever]
	dummy (print "src-map: ")
	dummy (println src-map)
