Index: kernel/classes/ezcontentobject.php
===================================================================
--- kernel/classes/ezcontentobject.php	(revision 21433)
+++ kernel/classes/ezcontentobject.php	(working copy)
@@ -2025,11 +2025,11 @@
       Fetches the attributes for an array of objects. The objectList parameter
       contains an array of object id's , versions and language to fetch attributes from.
     */
-    static function fillNodeListAttributes( $nodeList, $asObject = true )
+    static function fillNodeListAttributes( $objList, $asObject = true )
     {
         $db = eZDB::instance();
 
-        if ( count( $nodeList ) > 0 )
+        if ( count( $objList ) > 0 )
         {
             $objectArray = array();
             $tmpLanguageObjectList = array();
@@ -2034,11 +2034,16 @@
             $objectArray = array();
             $tmpLanguageObjectList = array();
             $whereSQL = '';
-            $count = count( $nodeList );
+            $count = count( $objList );
             $i = 0;
-            foreach ( $nodeList as $node )
+            foreach ( $objList as $obj )
             {
-                $object = $node->attribute( 'object' );
+                if ( $obj instanceOf eZContentObjectTreeNode )
+                    $object = $obj->attribute( 'object' );
+                else if ( $obj instanceOf eZContentObject )
+                    $object = $obj;
+                else
+                    return false;
 
                 $language = $object->currentLanguage();
                 $tmpLanguageObjectList[$object->attribute( 'id' )] = $language;
@@ -2044,9 +2049,9 @@
                 $tmpLanguageObjectList[$object->attribute( 'id' )] = $language;
                 $objectArray = array( 'id' => $object->attribute( 'id' ),
                                       'language' => $language,
-                                      'version' => $node->attribute( 'contentobject_version' ) );
+                                      'version' => $object->attribute( 'current_version' ) );
 
-                $whereSQL .= "( ezcontentobject_attribute.version = '" . $node->attribute( 'contentobject_version' ) . "' AND
+                $whereSQL .= "( ezcontentobject_attribute.version = '" . $object->attribute( 'current_version' ) . "' AND
                     ezcontentobject_attribute.contentobject_id = '" . $object->attribute( 'id' ) . "' AND
                     ezcontentobject_attribute.language_code = '" . $language . "' ) ";
 
@@ -2076,13 +2081,22 @@
                 $tmpAttributeObjectList[$attr->attribute( 'contentobject_id' )][] = $attr;
             }
 
-            foreach ( $nodeList as $node )
+            foreach ( $objList as $obj )
             {
-                $object = $node->attribute( 'object' );
-                $object->setContentObjectAttributes( $tmpAttributeObjectList[$object->attribute( 'id' )],
-                                                     $node->attribute( 'contentobject_version' ),
-                                                     $tmpLanguageObjectList[$object->attribute( 'id' )] );
-                $node->setContentObject( $object );
+                if ( $obj instanceOf eZContentObjectTreeNode )
+                {
+                    $object = $obj->attribute( 'object' );
+                    $object->setContentObjectAttributes( $tmpAttributeObjectList[$object->attribute( 'id' )],
+                                                         $object->attribute( 'current_version' ),
+                                                         $tmpLanguageObjectList[$object->attribute( 'id' )] );
+                    $obj->setContentObject( $object );
+                }
+                else
+                {
+                    $obj->setContentObjectAttributes( $tmpAttributeObjectList[$obj->attribute( 'id' )],
+                                         $obj->attribute( 'current_version' ),
+                                         $tmpLanguageObjectList[$obj->attribute( 'id' )] );
+                }
             }
         }
     }
@@ -2799,6 +2813,12 @@
         if( !$objectID )
             $objectID = $this->ID;
         $objectID =(int) $objectID;
+        
+        $limit            = ( isset( $params['Limit']  ) && is_numeric( $params['Limit']  ) ) ? $params['Limit']              : false;
+        $offset           = ( isset( $params['Offset'] ) && is_numeric( $params['Offset'] ) ) ? $params['Offset']             : false;
+        $asObject         = ( isset( $params['AsObject']          ) )                         ? $params['AsObject']           : true;
+        $loadDataMap      = ( isset( $params['LoadDataMap'] ) )                               ? $params['LoadDataMap']        : false;
+        
 
         $db = eZDB::instance();
         $sortingString = '';
@@ -2894,13 +2914,31 @@
                         $showInvisibleNodesCond
                         $versionNameJoins
                         $sortingString";
-        $relatedObjects = $db->arrayQuery( $query );
+        if ( !$offset && !$limit )
+        {
+            $relatedObjects = $db->arrayQuery( $query );
+        }
+        else
+        {
+            $relatedObjects = $db->arrayQuery( $query, array( 'offset' => $offset,
+                                                             'limit'  => $limit ) );
+        }
 
         $ret = array();
+        $tmp = array();
         foreach ( $relatedObjects as $object )
         {
-            $obj = new eZContentObject( $object );
-            $obj->ClassName = eZContentClass::nameFromSerializedString( $object['class_serialized_name_list'] );
+            if ( $asObject )
+            {
+                $obj = new eZContentObject( $object );
+                $obj->ClassName = eZContentClass::nameFromSerializedString( $object['class_serialized_name_list'] );
+            }
+            else
+            {
+                $obj = $object;
+            }
+            
+            $tmp[] = $obj;
 
             if ( !$groupByAttribute )
             {
@@ -2916,6 +2954,8 @@
                 $ret[$classAttrID][] = $obj;
             }
         }
+        if ( $loadDataMap && $asObject )
+            eZContentObject::fillNodeListAttributes( $tmp );
         return $ret;
     }
 
Index: kernel/content/ezcontentfunctioncollection.php
===================================================================
--- kernel/content/ezcontentfunctioncollection.php	(revision 21433)
+++ kernel/content/ezcontentfunctioncollection.php	(working copy)
@@ -1218,7 +1218,7 @@
     }
 
     // Fetches reverse related objects
-    function fetchRelatedObjects( $objectID, $attributeID, $allRelations, $groupByAttribute, $sortBy )
+    function fetchRelatedObjects( $objectID, $attributeID, $allRelations, $groupByAttribute, $sortBy, $limit = false, $offset = false, $asObject = true, $loadDataMap = false )
     {
         if ( !$objectID )
         {
@@ -1226,6 +1226,11 @@
             return false;
         }
         $params = array();
+        $params['Limit'] = $limit;
+        $params['Offset'] = $offset;
+        $params['AsObject'] = $asObject;
+        $params['LoadDataMap'] = $loadDataMap;
+
         if ( $sortBy )
         {
             if ( is_array( $sortBy ) )
@@ -1325,9 +1330,14 @@
         return array( 'result' => $object->relatedContentObjectCount( false, $attributeID, $params ) );
     }
 
-    function fetchReverseRelatedObjects( $objectID, $attributeID, $allRelations, $groupByAttribute, $sortBy, $ignoreVisibility )
+    function fetchReverseRelatedObjects( $objectID, $attributeID, $allRelations, $groupByAttribute, $sortBy, $ignoreVisibility,  $limit = false, $offset = false, $asObject = true, $loadDataMap = false  )
     {
         $params = array();
+        $params['Limit'] = $limit;
+        $params['Offset'] = $offset;
+        $params['AsObject'] = $asObject;
+        $params['LoadDataMap'] = $loadDataMap;
+
         if ( $sortBy )
         {
             if ( is_array( $sortBy ) )
Index: kernel/content/function_definition.php
===================================================================
--- kernel/content/function_definition.php	(revision 21433)
+++ kernel/content/function_definition.php	(working copy)
@@ -1029,7 +1029,23 @@
                                                         array( 'name' => 'sort_by',
                                                                'type' => 'array',
                                                                'required' => false,
-                                                               'default' => array() ) ) );
+                                                               'default' => array() ),
+                                                        array( 'name' => 'limit',
+                                                               'type' => 'integer',
+                                                               'required' => false,
+                                                               'default' => false ),
+                                                        array( 'name' => 'offset',
+                                                               'type' => 'integer',
+                                                               'required' => false,
+                                                               'default' => false ),
+                                                       array( 'name' => 'as_object',
+                                                               'type' => 'boolean',
+                                                               'required' => false,
+                                                               'default' => true ),
+                                                        array( 'name' => 'load_data_map',
+                                                               'type' => 'boolean',
+                                                               'required' => false,
+                                                               'default' => false ) ) );
 
 $FunctionList['related_objects_count'] = array( 'name' => 'object',
                                  'operation_types' => array( 'read' ),
@@ -1074,7 +1090,23 @@
                                                         array( 'name' => 'ignore_visibility',
                                                                'type' => 'boolean',
                                                                'required' => false,
-                                                               'default' => null ) ) );
+                                                               'default' => null ),
+                                                        array( 'name' => 'limit',
+                                                               'type' => 'integer',
+                                                               'required' => false,
+                                                               'default' => false ),
+                                                        array( 'name' => 'offset',
+                                                               'type' => 'integer',
+                                                               'required' => false,
+                                                               'default' => false ),
+                                                       array( 'name' => 'as_object',
+                                                               'type' => 'boolean',
+                                                               'required' => false,
+                                                               'default' => true ),
+                                                        array( 'name' => 'load_data_map',
+                                                               'type' => 'boolean',
+                                                               'required' => false,
+                                                               'default' => false ) ) );
 
 $FunctionList['reverse_related_objects_count'] = array( 'name' => 'object',
                                  'operation_types' => array( 'read' ),
