         flow.position += 1
       updatedFlows = head.concat newPhase, tail
       @setState flows: updatedFlows
+
+    findPhase: (phase_id)->
+      _(@state.flows).find (phase)-> phase.id == phase_id
+
+    updateColumnName: (phase_id)->
+      (e)=>
+        storedPhase = @findPhase(phase_id)
+        if e.target.innerText != storedPhase.name
+          $.ajax
+            url: "/phases"
+            method: 'PUT'
+            data:
+              id: phase_id
+              phase:
+                name: e.target.innerText
+            success: (data)=>
+              newFlows = @state.flows.slice(0)
+              i = newFlows.indexOf storedPhase
+              # data.phase.tasks are being sent from the server in a different
+              # order, so use the same unchanged tasks to preserve order
+              tasks = newFlows[i].tasks.slice(0)
+              newFlows.splice(i, 1, data.phase)
+              newFlows[i].tasks = tasks
+              @setState flows: newFlows
 
     addColumn: (position) ->
       newPosition = position + 1

          for flow, position in @state.flows
            Tahi.manuscriptManager.Column {
              addFunction: @addColumn,
              position: flow.position
              name: flow.name
              tasks: flow.tasks,

        Tahi.manuscriptManager.ColumnAppender {
          addFunction: @props.addFunction,
          position: @props.position}
        (h2 {onBlur: @props.updateName(@props.phase_id), contentEditable: "true"}, @props.name),
        (div {className: 'column-content'},
          (ul {className: 'cards'},
            @manuscriptCards()
