         event = new AjaxServer.Event form, activable.id, null, "DOMActivate"
         AjaxServer.fireEvents [event]
 
+    # Before we process a response from the server, move trigger move out of harm's way
+    AjaxServer.ajaxResponseReceived.add ->
+        tidyTriggerGroups(lastTriggerGroups)
     # Reposition triggers after an Ajax request
     Events.ajaxResponseProcessedEvent.subscribe ->
         lastPositionTriggers() if lastPositionTriggers?
+

    tidyTriggerGroups = (triggerGroups) ->
        $(triggerGroups).hide()
        $('.fb-cell-editor').append(triggerGroups)
        lastPositionTriggers = null

    Builder.mouseEntersGridTdEvent.subscribe ({triggers, triggerGroups, gridTd}) ->
        gridTdId = gridTd.id
        lastPositionTriggers = ->
            # Move cell editor controls under this td
            gridTd = YD.get gridTdId

    # See: https://github.com/orbeon/orbeon-forms/issues/44
    Builder.mouseExitsGridTdEvent.subscribe ({triggerGroups, gridTd}) ->
        tidyTriggerGroups(triggerGroups)
        lastPositionTriggers = null

    # Change current cell on click on trigger
    Builder.triggerClickEvent.subscribe ({trigger}) ->
