   _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()

    @loadOptions.cacheKey = [@loadOptions.order || "updated_at:desc", filterKeys, @loadOptions.page, @loadOptions.perPage, @loadOptions.limit, @loadOptions.offset].join('|')

    @cachedCollection = @storageManager.storage @_getCollectionName()

  _calculateAdditionalIncludes: ->
    @additionalIncludesCount = 0
    @completedIncludesCount = 0

    if @loadOptions.include
      for elem in @loadOptions.include when _.values(elem)[0].length
        @additionalIncludesCount += 1

  _createObjectReferences: ->
    throw "Implement in your subclass"

    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: ->
