 
           awaitProjectRoles = apiClient.type('project_roles').get(project.links.project_roles).catch((error) => console.error(error))
 
-          awaitPreferences = if user?
-            user.get 'project_preferences', project_id: project.id
-              .then ([preferences]) =>
-                preferences ? newPreferences = apiClient.type('project_preferences').create({
-                  links: {
-                    project: project.id
-                  },
-                  preferences: {}
-                }).save()
-          else
-            Promise.resolve apiClient.type('project_preferences').create
-              id: 'GUEST_PREFERENCES_DO_NOT_SAVE'
-              links:
-                project: project.id
-              preferences: {}
-
-          awaitPreferences = awaitPreferences.then (preferences) =>
-            @listenToPreferences preferences
+          awaitPreferences = @getUserProjectPreferences(project, user)
 
           Promise.all([
             awaitBackground,

        @setState loading: false

  canFetchWorkflowByQuery: (project, user) ->
    'allow workflow query' in project.experimental_tools or @checkUserRoles(project, user)

  getSelectedWorkflow: (project = @state.project, preferences = @state.preferences) ->
    @setState({ loadingSelectedWorkflow: true })

    userChanged = nextContext.initialLoadComplete and nextProps.user isnt @props.user

    # Wait until we know if there's a user
    if pathChanged or nextContext.initialLoadComplete
      @fetchProjectData owner, name, nextProps.user unless @state.loading
      @setupSplits nextProps

    if userChanged and nextProps.project?
      @getUserProjectPreferences(nextProps.project, nextProps.user)
      @setupSplits nextProps

  componentWillUpdate: (nextProps, nextState) ->
