diff --git a/lib/Controller/Data.php b/lib/Controller/Data.php
index <HASH>..<HASH> 100644
--- a/lib/Controller/Data.php
+++ b/lib/Controller/Data.php
@@ -87,10 +87,10 @@ abstract class Controller_Data extends AbstractController {
     // abstract function loadByConditions($model);
     // abstract function deleteAll($model);
 
-    /** Create a new cursor and load model with the first entry */
+    /** Create a new cursor and load model with the first entry. Returns cursor */
     abstract function prefetchAll($model);
 
-    /** Provided that rewind was called before, load next data entry */
-    abstract function loadCurrent($model);
+    /** Load next data row from cursor */
+    abstract function loadCurrent($model,&$cursor);
 }
 
diff --git a/lib/Model.php b/lib/Model.php
index <HASH>..<HASH> 100644
--- a/lib/Model.php
+++ b/lib/Model.php
@@ -766,14 +766,15 @@ class Model extends AbstractModel implements ArrayAccess,Iterator,Countable {
     // }}}
 
     // {{{ Iterator support 
+    public $_cursor=null;
     function rewind() {
         $this->unload();
-        $this->controller->prefetchAll($this);
+        $this->_cursor = $this->controller->prefetchAll($this);
         $this->next();
     }
     function next() {
         $this->hook('beforeLoad', array('iterating'));
-        $this->controller->loadCurrent($this);
+        $this->controller->loadCurrent($this,$this->_cursor);
         if($this->loaded()) {
             $this->hook('afterLoad');
         }
Store "cursor" inside model instead of controller, when iterating through adta.