     collection.removeLink('subjects', [@props.subject.id.toString()])
 
   createFavorites: ->
-    display_name = getFavoritesName(@props.project)
-    project = @props.project?.id
-    subjects = [@props.subject.id]
-    favorite = true
+    new Promise (resolve, reject) =>
+      @findFavoriteCollection()
+        .catch (err) ->
+          reject err
+        .then (favorites) =>
+          if favorites?
+            @setState {favorites}
+            resolve favorites
+          else
+            display_name = getFavoritesName(@props.project)
+            project = @props.project?.id
+            subjects = []
+            favorite = true
 
-    links = {subjects}
-    links.projects = [ project ] if project?
-    collection = {favorite, display_name, links}
-
-    @setState favorited: true
-    apiClient.type('collections').create(collection).save()
+            links = {subjects}
+            links.projects = [ project ] if project?
+            collection = {favorite, display_name, links}
+            apiClient.type('collections')
+              .create(collection)
+              .save()
+              .catch (err) ->
+                reject err
+              .then (favorites) =>
+                @setState {favorites}
+                resolve favorites
 
   toggleFavorite: ->
     if @props.user?
       if not @state.favorites?
+        @setState favorited: true
         @createFavorites()
+        .then (favorites) =>
+          @addSubjectTo(favorites)
         @logSubjLike 'favorite'
       else if @state.favorited
         @removeSubjectFrom(@state.favorites)

      Promise.resolve false

  componentWillMount: ->
    @findFavoriteCollection()
      .then (favorites) =>
        @setState {favorites}
        @findSubjectInCollection()
        .then (favorited) =>
          @setState {favorited}


  componentDidUpdate: (prevProps) ->
    if prevProps.subject isnt @props.subject
      @findSubjectInCollection()
      .then (favorited) =>
        @setState {favorited}

  addSubjectTo: (collection) ->
    @setState favorited: true

    subject: React.PropTypes.object # a subject response from panoptes
    project: React.PropTypes.object # a project response from panoptes
    user: React.PropTypes.object
    isFavorite: React.PropTypes.bool

  getDefaultProps: ->
    subject: null
    project: null
    user: null
    isFavorite: false

  getInitialState: ->
    favorites: null
