                                 break
 
                     if needsRecalc
-                        reactiveKey = "#{modelName}.#{JSON.stringify id}.#{reactiveName}"
-                        future = J._reactiveCalcsInProgress[reactiveKey]
-                        if future?
-                            # log "#{J.util.stringify querySpec} Recalc of #{reactiveKey} already in progress."
-                        else
-                            log "#{J.util.stringify querySpec} Fresh recalc of <#{modelName} #{JSON.stringify id}>.#{reactiveName}"
-                            future = J._reactiveCalcsInProgress[reactiveKey] = do (reactiveName, reactiveKey) ->
-                                Future.task ->
-                                    if instance is undefined
-                                        instance = modelClass.fetchOne id
-
-                                    # instance might not exist because the instance might have been
-                                    # deleted while we're still catching up publishing an @added or @changed
-                                    # that includes a reactive.
-                                    if instance?
-                                        ret = J.denorm.recalc instance, reactiveName, ts
-
-                                    delete J._reactiveCalcsInProgress[reactiveKey]
-
-                                    ret
-
-                        futureByReactiveName[reactiveName] = future
+                        # Keep publishing the previous value of reactivesObj[reactiveName]
+                        # until the recalc task gets popped off the queue asynchronously.
+                        J._enqueueReactiveCalc modelName, id, reactiveName
 
                     else
                         reactivesObj[reactiveName] =
                             val: reactiveValue
                             ts: reactiveTs
-
-            SYNC_FLAG = false
-            if SYNC_FLAG
-                if not _.isEmpty futureByReactiveName
-                    # log "#{J.util.stringify querySpec} waiting on futures for: #{_.keys futureByReactiveName}"
-                    Future.wait _.values futureByReactiveName
-
-                    for reactiveName, future of futureByReactiveName
-                        try
-                            reactiveValue = future.get()
-                        catch e
-                            console.error "Exception while getting future for #{reactiveName}
-                                in <#{modelName}.#{JSON.stringify id}>"
-                            console.error e
-                            throw e
-                        reactivesObj[reactiveName] =
-                            val: reactiveValue
-                            ts: ts
-                        # log "#{J.util.stringify querySpec} returning value of #{JSON.stringify id}.#{reactiveName}"
-                        #    #{reactiveValue}"
-
-            # console.log '...returning with _reactives =', JSON.stringify fieldsByModelIdQuery[modelName][id]._reactives[qsString]
 
         else
             fieldsByModelIdQuery[modelName][id][fieldName] ?= {}




# "#{modelName}.#{JSON.stringify id}.#{reactiveName}": future
J._reactiveCalcsInProgress = {}


###
    dataSessionId: J.Dict


            inclusionSet = J.fetching._projectionToInclusionSet modelClass, querySpec.fields ? {}

            for reactiveName, reactiveSpec of modelClass.reactiveSpecs
                included = false

