   popUndoStack: (currentSnapshot) ->
     if (checkpointIndex = @getBoundaryCheckpointIndex(@undoStack))?
       pop = @popChanges(@undoStack, @redoStack, checkpointIndex)
-      _.defaults(pop.snapshotBefore, currentSnapshot)
+      _.defaults(pop.snapshotAbove, currentSnapshot)
       {
-        snapshot: pop.snapshotAfter
+        snapshot: pop.snapshotBelow
         changes: (@delegate.invertChange(change) for change in pop.changes)
       }
     else

      checkpointIndex-- while @redoStack[checkpointIndex - 1] instanceof Checkpoint
      checkpointIndex++ if @redoStack[checkpointIndex - 1]?
      pop = @popChanges(@redoStack, @undoStack, checkpointIndex, true)
      _.defaults(pop.snapshotBefore, currentSnapshot)
      {
        snapshot: pop.snapshotAfter
        changes: pop.changes
      }
    else

    if (checkpointIndex = @getCheckpointIndex(checkpointId))?
      pop = @popChanges(@undoStack, null, checkpointIndex)
      {
        snapshot: pop.snapshotBelow
        changes: (@delegate.invertChange(change) for change in pop.changes)
      }
    else
