   _updateStorageManagerFromResponse: ->
     throw "Implement in your subclass"
 
+  _calculateAdditionalIncludes: ->
+    @completedIncludesCount = 0
+    @additionalIncludes = []
+
+    for hash in @loadOptions.include 
+      associationName = _.keys(hash)[0]
+      associationIds = @_getIdsForAssociation(associationName)
+      associationInclude = hash[associationName]
+
+      if associationIds.length && associationInclude.length
+        @additionalIncludes.push
+          name: associationName
+          ids: associationIds
+          include: associationInclude
+
   _onLoadSuccess: (data) ->
     @_updateObjects(@internalObject, data)
+    @_calculateAdditionalIncludes()
 
-    if @additionalIncludesCount
+    if @additionalIncludes.length
       @_loadAdditionalIncludes()
     else
       @loadOptions.success()


  setup: (loadOptions) ->
    @_parseLoadOptions(loadOptions)
    @_calculateAdditionalIncludes()
    @_createObjectReferences()
    @_interceptOldSuccess()


    throw "Implement in your subclass"

  _loadAdditionalIncludes: ->
    for association in @additionalIncludes
      collectionName = @_getModel().associationDetails(association.name).collectionName

      loadOptions =
        only: association.ids
        include: association.include
        error: @loadOptions.error
        success: @_onAdditionalIncludeLoadSuccess

      @storageManager.loadCollection(collectionName, loadOptions)

  _onAdditionalIncludeLoadSuccess: =>
    @completedIncludesCount += 1

    if @completedIncludesCount == @additionalIncludes.length
      @loadOptions.success()

  _getModel: ->
