     (cond
       (is-scalar-field-type? field-type) result
       (is-enum-field-type? field-type) result
-      (is-object-field-type? field-type) (log/spy (execute-fields context type-meta-fn field-type result sub-selection-set fragments))
-      (is-list-field-type? field-type) (log/spy (map #(execute-fields context type-meta-fn (type-meta-fn (:innerType field-type)) % sub-selection-set fragments) result))
-      (is-not-null-type? field-type) (log/spy (let [not-null-result (complete-value context type-meta-fn (type-meta-fn (:innerType field-type)) result sub-selection-set fragments)]
+      (is-object-field-type? field-type) (log/spy (execute-fields context schema resolver-fn field-type result sub-selection-set fragments))
+      (is-list-field-type? field-type) (log/spy (map #(execute-fields context schema resolver-fn (type/get-type-in-schema schema (:innerType field-type)) % sub-selection-set fragments) result))
+      (is-not-null-type? field-type) (log/spy (let [not-null-result (complete-value context schema resolver-fn (type/get-type-in-schema schema (:innerType field-type)) result sub-selection-set fragments)]
                                                 (if not-null-result
                                                   not-null-result
                                                   (throw (ex-info (format "NOT_NULL type %s returns null." field-type {:field-type field-type}))))))
       :else (throw (ex-info (format "Unhandled field type %s." field-type) {:field-type field-type})))))
 
-(defn get-field-entry [context type-meta-fn parent-type parent-object field fragments]
+(defn get-field-entry [context schema resolver-fn parent-type parent-object field fragments]
   (log/debug "*** get-field-entry: " field)
   (log/debug "get-field-entry: fragments: " fragments)
   (log/debug "get-field-entry: parent-object: " parent-object)
   (let [first-field-selection field
         response-key (get-selection-name first-field-selection)
-        field-type (get-field-type-from-object-type type-meta-fn parent-type first-field-selection)
+        field-type (get-field-type-from-object-type schema resolver-fn parent-type first-field-selection)
         inner-type (:innerType field-type)
-        inner-field-type (when inner-type (type-meta-fn inner-type))
+        inner-field-type (when inner-type (type/get-type-in-schema schema inner-type))
         field-entry first-field-selection]
     (log/debug "field-type" field-type)
     (if (not (nil? field-type))
-      (let [resolved-object (resolve-field-on-object context parent-object field-type inner-field-type field-entry)
+      (let [resolved-object (resolve-field-on-object context schema resolver-fn parent-object field-type inner-field-type field-entry)
             field-selection-set (get-field-selection-set field)
             fields (collect-fields field-type field-selection-set fragments)]
         (log/debug "get-field-entry: fields: " fields)

                             ; that an entry exists in the result map
                             ; whose value is null.
          (let [;; sub-selection-set (merge-selection-sets field-selection-set)
                response-value (complete-value context type-meta-fn field-type resolved-object fields fragments)]
            [response-key (log/spy response-value)])))
      (log/debug "WARNING: field-type is nil!"))))

(defn execute-fields
  [context type-meta-fn parent-type root-value fields fragments]
  (log/debug "*** execute-fields")
  (log/debug "execute-fields: parent-type: " parent-type)
  (log/debug "execute-fields: root-value: " root-value)

(declare execute-fields)

(defn complete-value
  [context schema resolver-fn field-type result sub-selection-set fragments]
  (log/debug "*** complete-value: context: " context)
  (log/debug "field-type: " field-type)
  (log/debug "result: " result)
