         url: url,
         dataType: 'json'
       })
-      .done (data, status, jqXHR) ->
-        updateInteractiveRunStateAndLoad runStateUrl, runState, data
+      .done (createResponse, status, jqXHR) =>
+
+        processCreateResponse createResponse
+        if haveCollaborators
+          docStore.collaborator = 'leader'
+
+        providerData = _.merge({}, docStore, { url: runStateUrl })
+        updateFinished = -> loadProviderFile providerData, callback
+
+        # update the owners interactive run state
+        updateInteractiveRunStates [runStateUrl], docStore, (err) =>
+          if err
+            callback err
+          else if haveCollaborators
+            docStore.collaborator = 'follower'
+            updateInteractiveRunStates @collaboratorUrls, docStore, (err) ->
+              if err
+                callback err
+              else
+                updateFinished()
+          else
+            updateFinished()
+
       .fail (jqXHR, status, error) ->
         callback "Could not open the specified document because an error occurred [createCopy]"
-
-    #
-    # Utility function used when opening an unshared copy of a shared document.
-    # Updates the run state and then loads the newly created copy.
-    #
-    updateInteractiveRunStateAndLoad = (runStateUrl, runState, createResponse) =>
-      if runState? and createResponse.id? and
-          (createResponse.readAccessKey? or createResponse.readWriteAccessKey?)
-
-        # metadata for loading the file
-        docStoreMetadata =
-          recordid: createResponse.id
-          accessKeys:
-            readOnly: createResponse.readAccessKey
-            readWrite: createResponse.readWriteAccessKey
-        metadata.providerData = _.merge({}, docStoreMetadata, { url: runStateUrl })
-
-        # build the reporting_url
-        codapUrl = if window.location.origin \
-                    then "#{window.location.origin}#{window.location.pathname}" \
-                    else "#{window.location.protocol}//#{window.location.host}#{window.location.pathname}"
-        reportUrlLaraParams =
-          recordid: createResponse.id
-          accessKeys:
-            readOnly: createResponse.readAccessKey
-        encodedLaraParams = @encodeParams reportUrlLaraParams
-
-        # (3) update the interactive run state
-        rawData = @extractRawDataFromRunState runState
-        rawData.docStore = docStoreMetadata
-        rawData.lara_options ?= {}
-        rawData.lara_options.reporting_url = "#{codapUrl}?launchFromLara=#{encodedLaraParams}"
-        rawData = JSON.stringify(rawData)
-        learnerUrl = if runState.learner_url? and typeof runState.learner_url is "string" \
-                      then runState.learner_url \
-                      else null
-
-        putUrl = "#{openSavedParams.url}" +
-                    "?raw_data=#{encodeURIComponent(rawData)}" +
-                    if learnerUrl then "&learner_url=#{encodeURIComponent(learnerUrl)}" else ""
-        $.ajax({
-          type: 'PUT'
-          url: putUrl
-          dataType: 'json'
-          xhrFields:
-            withCredentials: true
-        })
-        # (4) success - load the document
-        .done (data, status, jqXHR) =>
-          @load metadata, (err, content) =>
-            @client.removeQueryParams @removableQueryParams
-            callback err, content, metadata
-        # failure - report back to user
-        .fail (jqXHR, status, error) ->
-          callback "Could not open the specified document because an error occurred [updateState]"
 
     #
     # We have a run state URL and a source document. We must copy the source


    @laraParams = if @urlParams.launchFromLara then @decodeParams(@urlParams.launchFromLara) else null
    @openSavedParams = null

    @docStoreUrl = new DocumentStoreUrl @urlParams.documentServer


      })
      .done (data, status, jqXHR) ->
        processInitialRunState openSavedParams.url, openSavedParams.source, openSavedParams.readOnlyKey, data
      .fail (jqXHR, status, error) ->
        callback "Could not open the specified document because an error occurred [getState]"

