     (log/debug "field-type" field-type)
     (if (not (nil? field-type))
       (let [resolved-object (resolve-field-on-object parent-object field-type field-entry)
-            field-selection-set (get-field-selection-set field)]
-        (log/debug "get-field-entry: field-selection-set: " field-selection-set)
+            field-selection-set (get-field-selection-set field)
+            fields (collect-fields field-type field-selection-set fragments)]
+        (log/debug "get-field-entry: fields: " fields)
+        (log/debug "get-field-entry: resolved-object: " resolved-object)
         (if (nil? resolved-object)
           [response-key nil] ; If resolvedObject is null, return
                              ; tuple(responseKey, null), indicating
                              ; 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 type-meta-fn field-type resolved-object field-selection-set)]
+                response-value (complete-value 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
-  [type-meta-fn parent-type root-value fields]
+  [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)

(defn collect-selection-fn
  [fragments]
  (fn [col selection]
    (log/debug "collect-selection: " selection)
    (let [selection-type (get-selection-type selection)
          response-key (get-selection-name selection)]
      (case selection-type
        :field (conj col selection)
        ;; (throw (ex-info "TODO: add suport for selection type :fragment-spread") {})

    (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 type-meta-fn field-type result sub-selection-set fragments))
      (is-list-field-type? field-type) (log/spy (map #(execute-fields type-meta-fn (type-meta-fn (:innerType field-type)) % sub-selection-set fragments) result))
      :else (throw (ex-info (format "Unhandled field type %s." field-type) {:field-type field-type})))))

(defn get-field-entry [type-meta-fn parent-type parent-object field fragments]
  (log/debug "*** get-field-entry: " field)
  (let [first-field-selection field
        response-key (get-selection-name first-field-selection)
