diff --git a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php
index 4b1c21c6f..cd30a37c0 100644
--- a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php
+++ b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php
@@ -174,26 +174,24 @@ class ArrayHydrator extends AbstractHydrator
                 // Check for an existing element
                 if ($this->_isSimpleQuery || ! isset($this->_identifierMap[$dqlAlias][$id[$dqlAlias]])) {
                     $element = $rowData[$dqlAlias];
+                    if ($this->_rsm->isMixed) {
+                        $element = array(0 => $element);
+                    }
+
                     if (isset($this->_rsm->indexByMap[$dqlAlias])) {
                         $field = $this->_rsm->indexByMap[$dqlAlias];
-                        if ($this->_rsm->isMixed) {
-                            $result[] = array($element[$field] => $element);
-                            ++$this->_resultCounter;
-                        } else {
-                            $result[$element[$field]] = $element;
-                        }
+                        $resultKey = $rowData[$dqlAlias][$field];
+                        $result[$resultKey] = $element;
                     } else {
-                        if ($this->_rsm->isMixed) {
-                            $result[] = array($element);
-                            ++$this->_resultCounter;
-                        } else {
-                            $result[] = $element;
-                        }
+                        $resultKey = $this->_resultCounter;
+                        $result[] = $element;
+                        ++$this->_resultCounter;
                     }
-                    end($result);
-                    $this->_identifierMap[$dqlAlias][$id[$dqlAlias]] = key($result);
+
+                    $this->_identifierMap[$dqlAlias][$id[$dqlAlias]] = $resultKey;
                 } else {
                     $index = $this->_identifierMap[$dqlAlias][$id[$dqlAlias]];
+                    $resultKey = $index;
                     /*if ($this->_rsm->isMixed) {
                         $result[] =& $result[$index];
                         ++$this->_resultCounter;
@@ -205,8 +203,12 @@ class ArrayHydrator extends AbstractHydrator
 
         // Append scalar values to mixed result sets
         if (isset($scalars)) {
+            if ( ! isset($resultKey) ) {
+                $resultKey = $this->_resultCounter - 1;
+            }
+
             foreach ($scalars as $name => $value) {
-                $result[$this->_resultCounter - 1][$name] = $value;
+                $result[$resultKey][$name] = $value;
             }
         }
     }
diff --git a/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php
index a318f78af..616f19146 100644
--- a/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php
+++ b/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php
@@ -256,20 +256,20 @@ class ArrayHydratorTest extends HydrationTestCase
 
         $this->assertEquals(2, count($result));
         $this->assertTrue(is_array($result));
-        $this->assertTrue(is_array($result[0]));
         $this->assertTrue(is_array($result[1]));
+        $this->assertTrue(is_array($result[2]));
 
         // test the scalar values
-        $this->assertEquals('ROMANB', $result[0]['nameUpper']);
-        $this->assertEquals('JWAGE', $result[1]['nameUpper']);
+        $this->assertEquals('ROMANB', $result[1]['nameUpper']);
+        $this->assertEquals('JWAGE', $result[2]['nameUpper']);
         // first user => 2 phonenumbers. notice the custom indexing by user id
-        $this->assertEquals(2, count($result[0]['1']['phonenumbers']));
+        $this->assertEquals(2, count($result[1][0]['phonenumbers']));
         // second user => 1 phonenumber. notice the custom indexing by user id
-        $this->assertEquals(1, count($result[1]['2']['phonenumbers']));
+        $this->assertEquals(1, count($result[2][0]['phonenumbers']));
         // test the custom indexing of the phonenumbers
-        $this->assertTrue(isset($result[0]['1']['phonenumbers']['42']));
-        $this->assertTrue(isset($result[0]['1']['phonenumbers']['43']));
-        $this->assertTrue(isset($result[1]['2']['phonenumbers']['91']));
+        $this->assertTrue(isset($result[1][0]['phonenumbers']['42']));
+        $this->assertTrue(isset($result[1][0]['phonenumbers']['43']));
+        $this->assertTrue(isset($result[2][0]['phonenumbers']['91']));
     }
 
     /**
@@ -817,4 +817,43 @@ class ArrayHydratorTest extends HydrationTestCase
         $this->assertEquals(array('id' => 2, 'status' => 'developer'), $result[2][0]);
         $this->assertNull($result[3][0]);
     }
+
+    /**
+     * @group DDC-1385
+     */
+    public function testIndexByAndMixedResult()
+    {
+        $rsm = new ResultSetMapping;
+        $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
+        $rsm->addFieldResult('u', 'u__id', 'id');
+        $rsm->addFieldResult('u', 'u__status', 'status');
+        $rsm->addScalarResult('sclr0', 'nameUpper');
+        $rsm->addIndexBy('u', 'id');
+
+        // Faked result set
+        $resultSet = array(
+            //row1
+            array(
+                'u__id' => '1',
+                'u__status' => 'developer',
+                'sclr0' => 'ROMANB',
+                ),
+            array(
+                'u__id' => '2',
+                'u__status' => 'developer',
+                'sclr0' => 'JWAGE',
+                ),
+            );
+
+        $stmt = new HydratorMockStatement($resultSet);
+        $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em);
+
+        $result = $hydrator->hydrateAll($stmt, $rsm);
+
+        $this->assertEquals(2, count($result));
+        $this->assertTrue(isset($result[1]));
+        $this->assertEquals(1, $result[1][0]['id']);
+        $this->assertTrue(isset($result[2]));
+        $this->assertEquals(2, $result[2][0]['id']);
+    }
 }
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php
index 68a76cc80..d2d6f24ce 100644
--- a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php
+++ b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php
@@ -1208,12 +1208,4 @@ class ObjectHydratorTest extends HydrationTestCase
         $this->assertTrue(isset($result[2]));
         $this->assertEquals(2, $result[2][0]->id);
     }
-
-    /**
-     * @group DDC-1385
-     */
-    public function testIndexByAndScalarResult()
-    {
-        $rsm = new ResultSetMapping;
-    }
 }