diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js b/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js
index c9ef672c744d68c6b070d882db9b4f4676d09c8a..9f45a6e305a13cc78e52be814334a75bd796b2f4 100644
--- a/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js
+++ b/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js
@@ -1,5 +1,5 @@
 import { AnnotationComponent, createAnnotation, deleteNode } from 'substance'
-
+import {pickBy, clone, map, sortBy, findIndex} from 'lodash'
 class TrackChangeComponent extends AnnotationComponent {
   render ($$) {
     const user = this.context.controller.props.user
@@ -41,7 +41,6 @@ class TrackChangeComponent extends AnnotationComponent {
 
     const className = 'sc-track-change-' + status
     el.addClass(className)
-
     return el
   }
 
@@ -56,7 +55,7 @@ class TrackChangeComponent extends AnnotationComponent {
   toggleTrackChangeView () {
     const self = this
     const surface = self.getSurface()
-
+    if (!surface) return
     return surface._owner.state.trackChangesView
   }
 
@@ -65,15 +64,16 @@ class TrackChangeComponent extends AnnotationComponent {
     const status = this.props.node.status
     const ds = this.getDocumentSession()
     const doc = ds.getDocument()
-    const nodeData = this.buildNodeData()
-
+    const nodeData = this.buildNodeData(nodeId)
+    const nextNodeId = this.findNextTrackNode(nodeId)
     var self = this
-
     ds.transaction(function (tx, args) {
       if (status === 'add') createAnnotation(doc, nodeData)
       deleteNode(tx, { nodeId: nodeId })
       if (status === 'delete') self.context.surface.delete(tx, nodeData)
     })
+    const nextNodeData = self.buildNodeData(nextNodeId)
+    self.context.surface.setSelection(nextNodeData.selection)
   }
 
   rejectTrackChange () {
@@ -81,19 +81,19 @@ class TrackChangeComponent extends AnnotationComponent {
     const status = this.props.node.status
     const ds = this.getDocumentSession()
     const doc = ds.getDocument()
-    const nodeData = this.buildNodeData()
-
+    const nodeData = this.buildNodeData(nodeId)
+    const nextNodeId = this.findNextTrackNode(nodeId)
     var self = this
-
     ds.transaction(function (tx, args) {
       if (status === 'delete') createAnnotation(doc, nodeData)
       deleteNode(tx, { nodeId: nodeId })
       if (status === 'add') self.context.surface.delete(tx, nodeData)
     })
+    const nextNodeData = self.buildNodeData(nextNodeId)
+    self.context.surface.setSelection(nextNodeData.selection)
   }
 
-  buildNodeData () {
-    const nodeId = this.props.node.id
+  buildNodeData (nodeId) {
     const ds = this.getDocumentSession()
     const doc = ds.getDocument()
     const trackChangeNode = doc.get(nodeId)
@@ -110,6 +110,55 @@ class TrackChangeComponent extends AnnotationComponent {
     }
   }
 
+  findNextTrackNode (currentNodeId) {
+    const ds = this.getDocumentSession()
+    let doc = ds.getDocument()
+    let documentNodes = doc.getNodes()
+    const trackChanges = pickBy(documentNodes, function (value, key) {
+      return value.type === 'track-change'
+    })
+
+    // return entries sorted in document
+    const entries = this.sortNodes(trackChanges)
+
+    // find index in Array of resolved track Change
+    const index = findIndex(entries, function (entry) {
+      return entry.id === currentNodeId
+    })
+
+    const nextIndex = index + 1
+
+    // If next index exist move to that else move to first
+    if (entries[nextIndex]) {
+      return entries[nextIndex].id
+    } else if (entries.length > 0) {
+      return entries[0].id
+    }
+    return
+  }
+
+  sortNodes (nodes) {
+    let trackChanges = clone(nodes)
+    const ds = this.getDocumentSession()
+    let doc = ds.getDocument()
+    const container = doc.get('body')
+
+    trackChanges = map(trackChanges, function (trackChange) {
+      const blockId = trackChange.path[0]
+      const blockPosition = container.getPosition(blockId)
+      const nodePosition = trackChange.startOffset
+
+      return {
+        id: trackChange.id,
+        blockPosition: blockPosition,
+        nodePosition: nodePosition,
+        node: trackChange
+      }
+    })
+
+    return sortBy(trackChanges, ['blockPosition', 'nodePosition'])
+  }
+
   getDocumentSession () {
     return this.context.documentSession
   }