       data.push row
     , firstOnly
     data
+
+  ###
+  @locus Server
+  @summary Move cursor to first item and return it
+  @name first
+  @class Neo4jCursor
+  @returns {[Object]} - Array of nodes or undefined if cursor has no items
+  ###
+  first: -> 
+    __wait (fut) => 
+      @_current = 0
+      @hasNext = if @_cursor.length > 1 then true else false
+      @hasPrevious = false
+      fut.return @_cursor[0]
+
+  ###
+  @locus Server
+  @summary Get current nodes on cursor
+  @name current
+  @class Neo4jCursor
+  @returns {[Object]} - Array of nodes
+  ###
+  current: -> __wait (fut) => fut.return @_cursor[@_current]
+
+  ###
+  @locus Server
+  @summary Go to next item on cursor and return it
+  @name next
+  @class Neo4jCursor
+  @returns {[Object]} - Array of nodes, or `undefined` if no next item
+  ###
+  next: -> 
+    if @hasNext
+      __wait (fut) => 
+        if @_current <= @length - 1
+          ++@_current
+          @hasNext = if @_current is @length - 1 then false else true
+          @hasPrevious = true
+          fut.return @_cursor[@_current]
+
+  ###
+  @locus Server
+  @summary Go to previous item on cursor and return it
+  @name previous
+  @class Neo4jCursor
+  @returns {[Object]} - Array of nodes, or `undefined` if no previous item
+  ###
+  previous: -> 
+    if @hasPrevious
+      __wait (fut) => 
+        if @_current >= 1
+          --@_current
+          @hasNext = true
+          @hasPrevious = if @_current is 0 then false else true
+          fut.return @_cursor[@_current]
 
   ###
   @locus Server


  ###
  @locus Server
  @summary Shortcut for `forEach` method, see more info below.
  @name each
  @class Neo4jCursor
  @returns {undefined}
  ###
  each: (callback) -> @forEach callback

  ###
  @locus Server
  @summary Iterates though Neo4j query results. If query was passed with `reactive` option - data will be updated each event loop.
  @name forEach
  @class Neo4jCursor
  @param {Function} callback - Callback function, with `row`, `num` arguments
  @returns {undefined}
  ###
  forEach: (callback, firstOnly) ->

            data[nodeAlias] = node.get()
          else
            data[nodeAlias] = node
      callback data, rowId, @_cursor
      break if firstOnly
    return
